Marketplace
Browse, purchase, and submit email templates and add-ons in the MisarMail marketplace
The MisarMail Marketplace is a catalog of community and officially-created assets that extend your email workflows:
| Category | Description |
|---|---|
template | Pre-designed email templates (drag-and-drop and HTML) |
integration | Connectors to third-party services (CRMs, analytics, payment processors) |
addon | Functional add-ons such as countdown timers, poll blocks, and referral widgets |
Public browsing (list and detail endpoints) requires no authentication. Purchasing, downloading, reviewing, and submitting require a session.
List Marketplace Items
/mail/v1/marketplaceBrowse all available items with optional filtering and search. Items with price_cents: 0 are free.
Query parameters
categorystringqueryFilter by template, integration, or addon.
searchstringqueryFull-text search across title, description, and tags.
pageintegerquerydefault: 1Page number.
limitintegerquerydefault: 20Items per page (max 100).
Response fields
itemsArray<Item>Marketplace items. Each includes id, title, description, category, price_cents, author, preview_url, rating, review_count, and tags.
paginationobjectPagination metadata: page, limit, total, and pages.
curl "https://api.misar.io/mail/v1/marketplace?category=template&page=1&limit=20"{
"items": [
{
"id": "mkt_01jabcdef",
"title": "Minimal Weekly Digest",
"description": "A clean, single-column digest template with section separators and a CTA block.",
"category": "template",
"price_cents": 0,
"author": "MisarMail Team",
"preview_url": "https://cdn.misarmail.com/marketplace/mkt_01jabcdef/preview.png",
"rating": 4.8,
"review_count": 132,
"tags": ["minimal", "digest", "weekly", "newsletter"]
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 87,
"pages": 5
}
}Get Item Details
/mail/v1/marketplace/:idFetches full details for a single item, including extended description and full-size preview.
Path parameters
idstringpathrequiredID of the marketplace item.
Response fields
idstringItem ID. The full object also includes title, description, long_description, category, price_cents, author, preview_url, full_preview_url, rating, review_count, tags, created_at, and updated_at.
curl https://api.misar.io/mail/v1/marketplace/mkt_01jabcdef{
"id": "mkt_01jabcdef",
"title": "Minimal Weekly Digest",
"description": "A clean, single-column digest template...",
"long_description": "Full HTML description with usage guide...",
"category": "template",
"price_cents": 0,
"author": "MisarMail Team",
"preview_url": "https://cdn.misarmail.com/marketplace/mkt_01jabcdef/preview.png",
"full_preview_url": "https://cdn.misarmail.com/marketplace/mkt_01jabcdef/full.png",
"rating": 4.8,
"review_count": 132,
"tags": ["minimal", "digest", "weekly"],
"created_at": "2025-09-01T00:00:00Z",
"updated_at": "2025-10-15T00:00:00Z"
}My Purchased Items
/mail/v1/marketplace/myReturns all marketplace items purchased by the authenticated user. Session required.
Response fields
itemsArray<PurchasedItem>Purchased items. Each includes id, title, category, purchased_at, download_url, and expiry.
curl https://api.misar.io/mail/v1/marketplace/my \
-H "Cookie: session=..."[
{
"id": "mkt_01jabcdef",
"title": "Minimal Weekly Digest",
"category": "template",
"purchased_at": "2025-11-10T12:00:00Z",
"download_url": "https://cdn.misarmail.com/marketplace/downloads/mkt_01jabcdef?token=...",
"expiry": "2025-12-10T12:00:00Z"
}
]Purchase an Item
/mail/v1/marketplace/:id/purchasePurchase a marketplace item. Payment is deducted from your wallet balance first; if insufficient, your billing method on file is charged for the remainder. Session required.
Path parameters
idstringpathrequiredID of the item to purchase.
Response fields
successbooleantrue when the purchase completed.
download_urlstringSigned download URL for the purchased asset.
expirystringExpiry time of the download URL.
curl -X POST https://api.misar.io/mail/v1/marketplace/mkt_01jabcdef/purchase \
-H "Cookie: session=..."{
"success": true,
"download_url": "https://cdn.misarmail.com/marketplace/downloads/mkt_01jabcdef?token=abc",
"expiry": "2026-05-27T12:00:00Z"
}Download URLs are signed and expire after 30 days. Re-download anytime within that window using the /download endpoint, or re-purchase to extend access. Free items never expire.
How payment works:
- Your MisarMail wallet balance is checked first
- If wallet covers the full amount — it is deducted immediately, no charge to your card
- If wallet is insufficient — the shortfall is charged to your saved payment method
- If no payment method is saved and wallet is insufficient — the request returns
402 Payment Required
Error cases:
| Error | HTTP | Meaning |
|---|---|---|
item_not_found | 404 | No item with that ID |
already_purchased | 409 | You already own this item |
payment_required | 402 | Insufficient wallet balance and no payment method |
Download a Purchased Item
/mail/v1/marketplace/:id/downloadRe-download a previously purchased item. Generates a fresh signed URL valid for 24 hours. Returns 403 Forbidden if you have not purchased the item. Session required.
Path parameters
idstringpathrequiredID of the purchased item.
Response fields
successbooleantrue when the download URL was generated.
download_urlstringFresh signed download URL.
expirystringExpiry time of the download URL (24 hours).
curl -X POST https://api.misar.io/mail/v1/marketplace/mkt_01jabcdef/download \
-H "Cookie: session=..."{
"success": true,
"download_url": "https://cdn.misarmail.com/marketplace/downloads/mkt_01jabcdef?token=xyz",
"expiry": "2026-05-28T12:00:00Z"
}Submit a Review
/mail/v1/marketplace/:id/reviewSubmit a rating and written review for a purchased item. One review per user per item. You must have purchased the item before you can review it. Session required.
Path parameters
idstringpathrequiredID of the item to review.
Request body
ratingintegerbodyrequired1–5.
reviewstringbodyrequiredMax 1000 characters.
Response fields
successbooleantrue when the review was submitted.
review_idstringID of the created review.
{
"rating": 5,
"review": "Excellent template — saved me hours of design work. Renders perfectly in Gmail and Apple Mail."
}{
"success": true,
"review_id": "rev_01jabcxyz"
}Error cases:
| Error | HTTP | Meaning |
|---|---|---|
not_purchased | 403 | You must purchase the item before reviewing |
already_reviewed | 409 | You have already submitted a review for this item |
Submit a New Item
/mail/v1/marketplace/submitSubmit your own template, integration, or add-on to the marketplace. All submissions enter a review queue and are manually evaluated by the MisarMail team before going live. Session required.
Request body
titlestringbodyrequiredItem title, max 100 characters.
descriptionstringbodyrequiredShort description, max 500 characters.
categorystringbodyrequiredtemplate, integration, or addon.
price_centsintegerbodyrequiredSet to 0 for free items.
preview_urlstringbodyrequiredHTTPS URL to a preview image (min 800×600px).
download_urlstringbodyrequiredHTTPS URL to the downloadable asset (zip).
tagsstring[]bodyUp to 10 tags.
Response fields
successbooleantrue when the submission was accepted.
submission_idstringID of the submission.
statusstringSubmission status — pending_review.
messagestringHuman-readable status message.
{
"title": "Dark Mode Digest",
"description": "A sleek dark-mode newsletter template optimised for Apple Mail dark mode.",
"category": "template",
"price_cents": 499,
"preview_url": "https://your-cdn.example.com/preview.png",
"download_url": "https://your-cdn.example.com/dark-mode-digest.zip",
"tags": ["dark-mode", "digest", "premium"]
}{
"success": true,
"submission_id": "sub_01jabcdef",
"status": "pending_review",
"message": "Your submission is under review. You'll receive an email once it's approved or if we need more information."
}Submissions typically take 3–5 business days to review. Items are rejected if they contain external tracking scripts, malicious code, or assets you do not own. Repeated violations result in account suspension from the marketplace.
Review outcomes are emailed to your account address. Approved items go live immediately and you receive 70% of each sale.
Seller Payouts
When you sell paid templates you keep 70% of every sale; MisarMail retains 30%. The platform collects the full payment at checkout and your share accrues as an available balance. To receive your money you connect a Stripe Connect Express account — Stripe securely handles your bank details, identity verification, and tax information. You then withdraw your balance on demand, or enable automatic payouts.
A paid template only goes live once you have an active payout account (so the 70% always has a destination). Free templates publish immediately. A paid listing auto-publishes the moment your Stripe Connect account becomes active.
Connect / Onboarding Status
/mail/v1/marketplace/connectReturns your Stripe Connect onboarding status. Session required. Pass ?refresh=1 to re-sync the latest status from Stripe (used on return from the onboarding flow).
Query parameters
refreshintegerqueryPass 1 to re-sync the latest status from Stripe.
Response fields
successbooleantrue when the request succeeded.
connectedbooleanWhether a Stripe Connect account exists. Response also includes charges_enabled, payouts_enabled, details_submitted, and country.
curl https://api.misar.io/mail/v1/marketplace/connect \
-H "Cookie: session=..."{
"success": true,
"connected": true,
"charges_enabled": true,
"payouts_enabled": true,
"details_submitted": true,
"country": "US"
}Start / Resume Onboarding
/mail/v1/marketplace/connectCreates a Stripe Connect Express account on first use and returns a Stripe-hosted onboarding URL. Once fully onboarded, returns an Express dashboard login link instead. Session required.
Response fields
successbooleantrue when the request succeeded.
urlstringStripe-hosted onboarding or dashboard URL.
typestring"onboarding" while setup is incomplete, or "dashboard" once the account is active.
curl -X POST https://api.misar.io/mail/v1/marketplace/connect \
-H "Cookie: session=..."{
"success": true,
"url": "https://connect.stripe.com/setup/e/acct_123/...",
"type": "onboarding"
}Earnings Summary
/mail/v1/marketplace/earningsReturns lifetime totals, available balance, connect status, recent sales, and payout history. Session required. Pass ?format=csv to download the sales ledger as CSV.
Query parameters
formatstringqueryPass csv to download the sales ledger as CSV.
Response fields
successbooleantrue when the request succeeded.
summaryobjectLifetime totals: lifetime_gross_cents, lifetime_fees_cents, lifetime_net_cents, available_cents, total_sales, and min_withdrawal_cents.
connectobjectConnect status, including connected, payouts_enabled, details_submitted, auto_payout_enabled, auto_payout_threshold_cents, and auto_payout_frequency.
salesArray<Sale>Recent sales records.
payoutsArray<Payout>Payout history.
curl https://api.misar.io/mail/v1/marketplace/earnings \
-H "Cookie: session=..."{
"success": true,
"summary": {
"lifetime_gross_cents": 12000,
"lifetime_fees_cents": 3600,
"lifetime_net_cents": 8400,
"available_cents": 4200,
"total_sales": 12,
"min_withdrawal_cents": 1000
},
"connect": {
"connected": true,
"payouts_enabled": true,
"details_submitted": true,
"auto_payout_enabled": false,
"auto_payout_threshold_cents": 5000,
"auto_payout_frequency": "monthly"
},
"sales": [
{
"id": "pur_01jabc",
"created_at": "2026-06-01T10:00:00Z",
"title": "Dark Mode Digest",
"price_cents": 1000,
"platform_fee_cents": 300,
"seller_payout_cents": 700,
"paid_out": false
}
],
"payouts": []
}Withdraw (Create Payout)
/mail/v1/marketplace/payoutsWithdraws your full available balance to your connected account via a Stripe Transfer. The minimum withdrawal is $10.00 (min_withdrawal_cents). Session required.
Response fields
successbooleantrue when the payout was created.
payout_idstringID of the created payout.
amount_centsintegerAmount withdrawn, in cents.
curl -X POST https://api.misar.io/mail/v1/marketplace/payouts \
-H "Cookie: session=..."{
"success": true,
"payout_id": "pyt_01jabc",
"amount_cents": 4200
}Error cases:
| Error | HTTP | Meaning |
|---|---|---|
Connect a payout account before withdrawing | 400 | No active Stripe Connect account |
Minimum withdrawal is $10.00 | 400 | Available balance below the minimum |
Withdrawal failed — your balance is unchanged | 502 | Stripe transfer error; claimed earnings are released back to your balance |
Withdrawals are atomic: your earnings are claimed before the transfer and, if the transfer fails, automatically released back to your available balance so nothing is ever lost.
Payout History
/mail/v1/marketplace/payoutsReturns up to 200 payout records. Session required.
Response fields
payoutsArray<Payout>Payout records, each with amount_cents, status, stripe_transfer_id, line_item_count, trigger, created_at, and paid_at.
curl https://api.misar.io/mail/v1/marketplace/payouts \
-H "Cookie: session=..."Get Automatic Payout Settings
/mail/v1/marketplace/payouts/settingsReturns your scheduled automatic payout settings. Session required (an active payout account must exist).
Response fields
auto_payout_enabledbooleanWhether scheduled payouts are enabled. Response also includes the configured threshold_cents and frequency.
curl https://api.misar.io/mail/v1/marketplace/payouts/settings \
-H "Cookie: session=..."Update Automatic Payout Settings
/mail/v1/marketplace/payouts/settingsConfigure scheduled automatic payouts of your balance. Session required (an active payout account must exist).
Request body
auto_payout_enabledbooleanbodyEnable/disable scheduled payouts.
threshold_centsintegerbodyMinimum balance to trigger a payout ($10–$1,000,000).
frequencystringbodyweekly, biweekly, or monthly.
curl -X PATCH https://api.misar.io/mail/v1/marketplace/payouts/settings \
-H "Cookie: session=..." \
-H "Content-Type: application/json" \
-d '{ "auto_payout_enabled": true, "threshold_cents": 5000, "frequency": "monthly" }'