MisarMisar Docs
MisarMailMisar.BlogMisarReachMisarPostMisar.DevMisarSEOMisar PlatformMisar SSO
API Reference

Landing Pages

Create and manage hosted landing pages with drag-and-drop blocks for lead capture and campaign promotions

Landing pages are hosted by MisarMail and published at https://mail.misar.io/p/:slug. Build them from composable blocks — no external hosting required.

Authentication

All landing-page endpoints use session (cookie-based) authentication. They are intended for dashboard use and do not accept API keys. Base URL: https://api.misar.io/mail.

Block types

Pages are composed from an ordered array of blocks. Each block has an id, type, content (a record), and optional style object.

TypeDescription
heroFull-width header with heading and CTA button
textRich text body section
imageFull-width or contained image
formEmbedded MisarMail signup form
ctaCall-to-action banner with button
featuresFeature grid with icons and descriptions
testimonialQuote block with attribution
countdownLive countdown timer to a target date
dividerHorizontal rule / spacer
videoEmbedded video (YouTube, Vimeo, or direct URL)

List landing pages

GET/mail/api/landing-pages

List landing pages for the authenticated account, newest first.

Query parameters

statusall | draft | publishedquerydefault: all

Filter by publish status.

limitintegerquerydefault: 50

Maximum rows to return (max 100).

offsetintegerquerydefault: 0

Pagination offset.

Response fields

successboolean

true when the request succeeded.

dataArray<LandingPage>

Flat array of landing pages. Each includes id, title, slug, description, status, blocks, visits, conversions, conversion_rate, published_at, form_id, campaign_id, created_at, and updated_at.

curl "https://api.misar.io/mail/api/landing-pages?status=published&limit=10" \
  -H "Cookie: session=..."
{
  "success": true,
  "data": [
    {
      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "title": "Summer Sale 2026",
      "slug": "summer-sale-2026",
      "description": null,
      "status": "published",
      "blocks": [],
      "visits": 4210,
      "conversions": 389,
      "conversion_rate": 9.24,
      "published_at": "2026-05-20T14:30:00Z",
      "form_id": null,
      "campaign_id": null,
      "created_at": "2026-05-01T09:00:00Z",
      "updated_at": "2026-05-20T14:30:00Z"
    }
  ]
}

Create a landing page

POST/mail/api/landing-pages

Create a landing page. New pages are created as draft. If slug is omitted it is auto-generated from the title. Subject to your plan's landing-page quota.

Request body

titlestringbodyrequired

Page title, 1–200 characters (also used to auto-generate slug if omitted).

slugstringbody

URL slug — lowercase alphanumeric and hyphens only (^[a-z0-9-]+$). Auto-generated from title when omitted; must be unique.

descriptionstringbody

Internal description (max 500 chars).

blocksarraybody

Ordered array of block objects. Defaults to an empty array.

settingsobjectbody

Page-level settings object.

meta_titlestringbody

SEO <title> tag (max 200 chars).

meta_descriptionstringbody

SEO <meta name="description"> (max 500 chars).

og_image_urlstringbody

Open Graph image URL.

custom_cssstringbody

Raw CSS injected into the page (max 50,000 chars).

form_idstringbody

UUID of a MisarMail form to embed on the page.

campaign_idstringbody

UUID of a campaign to link this page to for attribution.

Response fields

successboolean

true when the page was created.

dataobject

The created landing page, including id, slug, status, blocks, SEO fields, and analytics counters.

curl -X POST https://api.misar.io/mail/api/landing-pages \
  -H "Cookie: session=..." \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Summer Sale 2026",
    "slug": "summer-sale-2026",
    "meta_title": "Summer Sale 2026 — Up to 40% off",
    "meta_description": "Shop our biggest sale of the year.",
    "og_image_url": "https://cdn.example.com/summer-sale-og.jpg",
    "form_id": "b2c3d4e5-f6a7-8901-bcde-f23456789012",
    "blocks": [
      {
        "id": "hero-1",
        "type": "hero",
        "content": {
          "heading": "Summer Sale is here",
          "subheading": "Up to 40% off — limited time only",
          "cta": "Shop now",
          "cta_url": "https://yoursite.com/sale"
        },
        "style": { "background": "#f0fdf4", "textAlign": "center" }
      },
      {
        "id": "form-1",
        "type": "form",
        "content": { "heading": "Get early access deals" },
        "style": {}
      }
    ]
  }'
{
  "success": true,
  "data": {
    "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "title": "Summer Sale 2026",
    "slug": "summer-sale-2026",
    "status": "draft",
    "blocks": [],
    "meta_title": "Summer Sale 2026 — Up to 40% off",
    "meta_description": "Shop our biggest sale of the year.",
    "og_image_url": "https://cdn.example.com/summer-sale-og.jpg",
    "form_id": "b2c3d4e5-f6a7-8901-bcde-f23456789012",
    "campaign_id": null,
    "visits": 0,
    "conversions": 0,
    "conversion_rate": 0,
    "published_at": null,
    "created_at": "2026-05-27T10:00:00Z",
    "updated_at": "2026-05-27T10:00:00Z"
  }
}

Get a landing page

GET/mail/api/landing-pages/:id

Returns the full page object including all blocks, SEO fields, and live analytics (visits, conversions, conversion_rate).

Path parameters

idstringpathrequired

UUID of the landing page.

curl https://api.misar.io/mail/api/landing-pages/a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  -H "Cookie: session=..."

Update a landing page

PATCH/mail/api/landing-pages/:id

Send only the fields to change. Updating blocks replaces the full blocks array. Setting status to published sets published_at and makes the page live; updating slug changes the published URL immediately.

Path parameters

idstringpathrequired

UUID of the landing page to update.

Request body

statusdraft | publishedbody

Publish status. Setting published sets published_at.

All create fields (title, slug, description, blocks, settings, meta_title, meta_description, og_image_url, custom_css, form_id, campaign_id) may also be sent; each is optional.

curl -X PATCH https://api.misar.io/mail/api/landing-pages/a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  -H "Cookie: session=..." \
  -H "Content-Type: application/json" \
  -d '{ "status": "published" }'

Delete a landing page

DELETE/mail/api/landing-pages/:id

Delete a landing page. The published URL becomes a 404 immediately.

Path parameters

idstringpathrequired

UUID of the landing page to delete.

Response fields

successboolean

true when the page was deleted.

curl -X DELETE https://api.misar.io/mail/api/landing-pages/a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  -H "Cookie: session=..."
{ "success": true }

Published URL

Pages are live at:

https://mail.misar.io/p/:slug

New pages are created as draft and are not publicly accessible until published via the dashboard or a PATCH setting "status": "published".

slug must be unique across your account, lowercase, and contain only alphanumeric characters and hyphens. Attempting to create or update a page with a duplicate slug returns HTTP 409; an invalid slug format returns 400.

Your plan includes a limit on the number of landing pages. Attempting to create a page beyond your plan limit returns HTTP 402. Check your current usage on the billing page.

Status codes

CodeMeaning
200Request succeeded (list / get / update / delete)
201Landing page created
400Validation failed or invalid slug/ID
401Not authenticated
402Landing-page quota reached for your plan
404Landing page not found
409Slug already taken