Misar Docs
MisarMailMisar.BlogMisarReachMisarPostMisar.DevMisar PlatformMisar IdentityMisar Posts API
Api Reference

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:

CategoryDescription
templatePre-designed email templates (drag-and-drop and HTML)
integrationConnectors to third-party services (CRMs, analytics, payment processors)
addonFunctional 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

GET/mail/v1/marketplace

Browse all available items with optional filtering and search. Items with price_cents: 0 are free.

Query parameters

categorystringquery

Filter by template, integration, or addon.

searchstringquery

Full-text search across title, description, and tags.

pageintegerquerydefault: 1

Page number.

limitintegerquerydefault: 20

Items 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.

paginationobject

Pagination 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

GET/mail/v1/marketplace/:id

Fetches full details for a single item, including extended description and full-size preview.

Path parameters

idstringpathrequired

ID of the marketplace item.

Response fields

idstring

Item 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

GET/mail/v1/marketplace/my

Returns 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

POST/mail/v1/marketplace/:id/purchase

Purchase 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

idstringpathrequired

ID of the item to purchase.

Response fields

successboolean

true when the purchase completed.

download_urlstring

Signed download URL for the purchased asset.

expirystring

Expiry 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:

  1. Your MisarMail wallet balance is checked first
  2. If wallet covers the full amount — it is deducted immediately, no charge to your card
  3. If wallet is insufficient — the shortfall is charged to your saved payment method
  4. If no payment method is saved and wallet is insufficient — the request returns 402 Payment Required

Error cases:

ErrorHTTPMeaning
item_not_found404No item with that ID
already_purchased409You already own this item
payment_required402Insufficient wallet balance and no payment method

Download a Purchased Item

POST/mail/v1/marketplace/:id/download

Re-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

idstringpathrequired

ID of the purchased item.

Response fields

successboolean

true when the download URL was generated.

download_urlstring

Fresh signed download URL.

expirystring

Expiry 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

POST/mail/v1/marketplace/:id/review

Submit 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

idstringpathrequired

ID of the item to review.

Request body

ratingintegerbodyrequired

1–5.

reviewstringbodyrequired

Max 1000 characters.

Response fields

successboolean

true when the review was submitted.

review_idstring

ID 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:

ErrorHTTPMeaning
not_purchased403You must purchase the item before reviewing
already_reviewed409You have already submitted a review for this item

Submit a New Item

POST/mail/v1/marketplace/submit

Submit 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

titlestringbodyrequired

Item title, max 100 characters.

descriptionstringbodyrequired

Short description, max 500 characters.

categorystringbodyrequired

template, integration, or addon.

price_centsintegerbodyrequired

Set to 0 for free items.

preview_urlstringbodyrequired

HTTPS URL to a preview image (min 800×600px).

download_urlstringbodyrequired

HTTPS URL to the downloadable asset (zip).

tagsstring[]body

Up to 10 tags.

Response fields

successboolean

true when the submission was accepted.

submission_idstring

ID of the submission.

statusstring

Submission status — pending_review.

messagestring

Human-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

GET/mail/v1/marketplace/connect

Returns 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

refreshintegerquery

Pass 1 to re-sync the latest status from Stripe.

Response fields

successboolean

true when the request succeeded.

connectedboolean

Whether 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

POST/mail/v1/marketplace/connect

Creates 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

successboolean

true when the request succeeded.

urlstring

Stripe-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

GET/mail/v1/marketplace/earnings

Returns 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

formatstringquery

Pass csv to download the sales ledger as CSV.

Response fields

successboolean

true when the request succeeded.

summaryobject

Lifetime totals: lifetime_gross_cents, lifetime_fees_cents, lifetime_net_cents, available_cents, total_sales, and min_withdrawal_cents.

connectobject

Connect 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)

POST/mail/v1/marketplace/payouts

Withdraws 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

successboolean

true when the payout was created.

payout_idstring

ID of the created payout.

amount_centsinteger

Amount 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:

ErrorHTTPMeaning
Connect a payout account before withdrawing400No active Stripe Connect account
Minimum withdrawal is $10.00400Available balance below the minimum
Withdrawal failed — your balance is unchanged502Stripe 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

GET/mail/v1/marketplace/payouts

Returns 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

GET/mail/v1/marketplace/payouts/settings

Returns your scheduled automatic payout settings. Session required (an active payout account must exist).

Response fields

auto_payout_enabledboolean

Whether 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

PATCH/mail/v1/marketplace/payouts/settings

Configure scheduled automatic payouts of your balance. Session required (an active payout account must exist).

Request body

auto_payout_enabledbooleanbody

Enable/disable scheduled payouts.

threshold_centsintegerbody

Minimum balance to trigger a payout ($10–$1,000,000).

frequencystringbody

weekly, 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" }'