Documentation

Mount Emporium Docs

Learn how the platform works, how to onboard as a dropshipper, our transparent pricing, and how to integrate with our public APIs.

Public API

Mount Emporium exposes a small set of public, read-only JSON endpoints designed for AI answer engines, SEO tools, and third-party integrators. All endpoints are cross-origin (Access-Control-Allow-Origin: *), respect ETag / If-None-Match with 304 Not Modified, and return no PII.

Base URL

https://www.mountemporium.com

OpenAPI specification

A full OpenAPI 3.1 document describing every endpoint below — parameters, schemas, headers, and error responses — is available as static JSON. Point Swagger UI, Redoc, Postman, Insomnia, or your codegen at:

https://www.mountemporium.com/api/public/seo/openapi.json

Common response headers

  • Content-Type: application/json; charset=utf-8
  • Cache-Control: public, max-age=1800, s-maxage=3600
  • ETag: "<hash>" — echo in If-None-Match next call to get a 304
  • Last-Modified: <RFC 1123 date>
  • Access-Control-Allow-Origin: *

Endpoints

GET/api/public/seo/index.jsonTry it →

Discovery manifest listing every public SEO/AEO endpoint. Start here to enumerate what's available.

Request

curl -sS \
  -H "Accept: application/json" \
  -H "If-None-Match: \"<etag-from-previous-response>\"" \
  "https://www.mountemporium.com/api/public/seo/index.json"

Response — 200 OK, application/json

{
  "site": "https://www.mountemporium.com",
  "generated_at": "2026-07-20T12:00:00.000Z",
  "endpoints": [
    {
      "id": "structured-data",
      "url": "https://www.mountemporium.com/api/public/seo/structured-data.json",
      "description": "schema.org @graph for the whole site",
      "params": ["kind"]
    },
    {
      "id": "sitemap",
      "url": "https://www.mountemporium.com/api/public/seo/sitemap.json",
      "description": "Machine-readable sitemap with lastmod + priority",
      "params": ["kind"]
    },
    {
      "id": "entities",
      "url": "https://www.mountemporium.com/api/public/seo/entities.json",
      "description": "AEO entity export (articles, FAQs, breadcrumbs)",
      "params": ["kind"]
    },
    {
      "id": "crawler-config",
      "url": "https://www.mountemporium.com/api/public/seo/crawler-config.json",
      "description": "robots + sitemaps + llms.txt hubs as JSON",
      "params": []
    }
  ],
  "xml_feeds": {
    "sitemap": "https://www.mountemporium.com/sitemap.xml",
    "robots": "https://www.mountemporium.com/robots.txt",
    "llms": "https://www.mountemporium.com/llms.txt"
  }
}
GET/api/public/seo/structured-data.jsonTry it →

Aggregated schema.org @graph for the entire site — Organization, WebSite, page ItemList, and per-article/product JSON-LD.

Query parameters

NameValuesDefaultNotes
kindall | organization | website | pages | articles | productsallFilter which node types are returned.

Request

curl -sS \
  -H "Accept: application/json" \
  -H "If-None-Match: \"<etag-from-previous-response>\"" \
  "https://www.mountemporium.com/api/public/seo/structured-data.json?kind=articles"

Response — 200 OK, application/json

{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://www.mountemporium.com/#organization",
      "name": "Mount Emporium",
      "url": "https://www.mountemporium.com",
      "logo": "https://www.mountemporium.com/logo.png",
      "sameAs": [
        "https://www.instagram.com/mountemporium",
        "https://www.linkedin.com/company/mountemporium"
      ]
    },
    {
      "@type": "Article",
      "@id": "https://www.mountemporium.com/blog/rto-playbook#article",
      "headline": "The RTO Playbook for Indian dropshippers",
      "datePublished": "2026-05-14",
      "author": { "@type": "Organization", "name": "Mount Emporium" },
      "image": "https://www.mountemporium.com/blog/rto-playbook/cover.jpg"
    }
  ]
}
GET/api/public/seo/sitemap.jsonTry it →

Machine-readable sitemap: URLs with lastmod, priority, changefreq, page summaries, breadcrumb trails, and images.

Query parameters

NameValuesDefaultNotes
kindall | pages | products | articles | faqs | breadcrumbsall

Request

curl -sS \
  -H "Accept: application/json" \
  -H "If-None-Match: \"<etag-from-previous-response>\"" \
  "https://www.mountemporium.com/api/public/seo/sitemap.json?kind=products"

Response — 200 OK, application/json

{
  "site": "https://www.mountemporium.com",
  "generated_at": "2026-07-20T12:00:00.000Z",
  "count": 240,
  "entries": [
    {
      "kind": "product",
      "url": "https://www.mountemporium.com/shop/neck-fan-portable",
      "path": "/shop/neck-fan-portable",
      "lastmod": "2026-07-18",
      "changefreq": "weekly",
      "priority": "0.8",
      "title": "Neck Fan (Portable)",
      "summary": "Rechargeable neck-hanging fan with 3 speeds.",
      "images": [
        "https://www.mountemporium.com/cdn/products/neck-fan-1.jpg"
      ],
      "breadcrumbs": [
        { "name": "Home", "url": "https://www.mountemporium.com/" },
        { "name": "Shop", "url": "https://www.mountemporium.com/shop" },
        { "name": "Neck Fan (Portable)", "url": "https://www.mountemporium.com/shop/neck-fan-portable" }
      ]
    }
  ],
  "xml": "https://www.mountemporium.com/sitemap.xml"
}
GET/api/public/seo/entities.jsonTry it →

AEO-focused entity export — long-form knowledge articles, FAQ hubs, and pages carrying breadcrumb trails for AI answer engines.

Query parameters

NameValuesDefaultNotes
kindall | articles | faqs | breadcrumbsall

Request

curl -sS \
  -H "Accept: application/json" \
  -H "If-None-Match: \"<etag-from-previous-response>\"" \
  "https://www.mountemporium.com/api/public/seo/entities.json?kind=faqs"

Response — 200 OK, application/json

{
  "site": "https://www.mountemporium.com",
  "generated_at": "2026-07-20T12:00:00.000Z",
  "entities": [
    {
      "kind": "faq",
      "url": "https://www.mountemporium.com/faq#wallet-minimum",
      "question": "What is the minimum wallet balance to place an order?",
      "answer": "You need at least ₹100 operating balance to place a new order. Minimum recharge per transaction is ₹500.",
      "hub": "https://www.mountemporium.com/faq"
    },
    {
      "kind": "article",
      "url": "https://www.mountemporium.com/kb/how-rto-settlement-works",
      "title": "How RTO settlement works",
      "excerpt": "QC-approved RTOs reverse the product cost (not packaging) back to your wallet.",
      "updated_at": "2026-07-10"
    }
  ]
}
GET/api/public/seo/crawler-config.jsonTry it →

Effective robots.txt rules, sitemap URLs, and llms.txt content hubs exposed as structured JSON — useful for AI crawlers that prefer JSON to text.

Request

curl -sS \
  -H "Accept: application/json" \
  -H "If-None-Match: \"<etag-from-previous-response>\"" \
  "https://www.mountemporium.com/api/public/seo/crawler-config.json"

Response — 200 OK, application/json

{
  "site": "https://www.mountemporium.com",
  "robots": {
    "rules": [
      { "user_agent": "*", "allow": ["/"], "disallow": ["/admin", "/app", "/auth", "/cart", "/checkout"] },
      { "user_agent": "GPTBot", "allow": ["/"] },
      { "user_agent": "PerplexityBot", "allow": ["/"] }
    ],
    "sitemaps": [
      "https://www.mountemporium.com/sitemap.xml"
    ]
  },
  "llms_txt": {
    "url": "https://www.mountemporium.com/llms.txt",
    "hubs": [
      { "name": "Docs", "url": "https://www.mountemporium.com/docs" },
      { "name": "Knowledge Base", "url": "https://www.mountemporium.com/kb" },
      { "name": "FAQ", "url": "https://www.mountemporium.com/faq" },
      { "name": "Blog", "url": "https://www.mountemporium.com/blog" },
      { "name": "Case Studies", "url": "https://www.mountemporium.com/case-studies" }
    ]
  }
}

Truncated for brevity; the live response reflects the current admin-editable rules.

Conditional requests (304 flow)

Cache the ETag from a successful 200 response, then send it back on the next request via If-None-Match. When nothing has changed you get an empty 304 Not Modified — cheap for both sides.

# First call — cache the ETag
curl -sD - "https://www.mountemporium.com/api/public/seo/sitemap.json" | grep -i etag
# ETag: "d41d8cd98f00b204e9800998ecf8427e"

# Follow-up call with If-None-Match
curl -sI \
  -H 'If-None-Match: "d41d8cd98f00b204e9800998ecf8427e"' \
  "https://www.mountemporium.com/api/public/seo/sitemap.json"
# HTTP/2 304

Error responses

StatusMeaning
304Not modified — your cached copy is still valid.
400Invalid kind query value.
500Upstream error building the payload. Safe to retry.

XML feeds

  • https://www.mountemporium.com/sitemap.xml — sitemap index
  • https://www.mountemporium.com/robots.txt — crawl rules
  • https://www.mountemporium.com/llms.txt — AI-crawler brief