Skip to content
DubaiSetup Index

HTTP API

Every guide as markdown or JSON over plain GET requests. Free, with no key, no account and no quota.

Endpoints

The machine-readable description is https://dubaisetupindex.com/openapi.json (OpenAPI 3.1).

RequestReturnsCache
GET /{page} with Accept: text/markdownAny page as markdown. Every content page answers in markdown at its own canonical URL when the request prefers `text/markdown`. Same sections, figures and caveats as the HTML, plus a citation footer. Use this to read a page; use the JSON records to compute with one.Not cached (varies on Accept)
GET /md/{page}Any page as markdown, at its own URL. The same markdown, addressable without an Accept header. Marked noindex; cite the canonical page URL, not this one.Cached 1 hour, 1 day at the edge
GET /data/free-zones.jsonEvery UAE free zone, one summary row each. Name, emirate, regulator, the no-visa starting price and the lowest published price for each zone, with a link to its full record. Start here to shortlist. The record is the same object the page at `url` renders: unknown facts keep `{ "kind": "unknown", "detail" }` and are never filled in. Quote with `attribution.citation`.Prerendered; cached 1 hour, 1 day at the edge
GET /data/free-zones/{file}One free zone. Packages and prices by visa count and term, setup steps and timing, documents, licence and facility types, visa options, renewal, nationality rules, sources and known gaps. The record is the same object the page at `url` renders: unknown facts keep `{ "kind": "unknown", "detail" }` and are never filled in. Quote with `attribution.citation`.Prerendered; cached 1 hour, 1 day at the edge
GET /data/mainland.jsonThe Dubai mainland (DET) route. The official Invest in Dubai licence estimate examples and activity scopes, the preparation process, dated provider research and the editorial guide. The licence estimate is licence fees only, never a full setup total. The record is the same object the page at `url` renders: unknown facts keep `{ "kind": "unknown", "detail" }` and are never filled in. Quote with `attribution.citation`.Prerendered; cached 1 hour, 1 day at the edge
GET /data/activities/{file}One business activity. Which setup lanes (IFZA, Ajman Free Zone, Dubai mainland) list the activity, with codes, facility and approval requirements, documents and regulation level; and where else it is catalogued. The record is the same object the page at `url` renders: unknown facts keep `{ "kind": "unknown", "detail" }` and are never filled in. Quote with `attribution.citation`.Prerendered; cached 1 hour, 1 day at the edge
GET /activities/search-index.jsonThe activity search index. Every activity with its name, lanes and facets, for matching a business description to activity slugs. Fetch the full record for anything you will quote.Prerendered; cached 1 hour
GET /data/comparisons/{file}A side-by-side route comparison. Rows of facts (prices by visa count, timelines, renewal, licence and facility types) with one cell per subject, in subject order. The record is the same object the page at `url` renders: unknown facts keep `{ "kind": "unknown", "detail" }` and are never filled in. Quote with `attribution.citation`.Prerendered; cached 1 hour, 1 day at the edge
GET /data/countries/{file}Setup notes for founders from one country. Common motivations, documents to prepare and travel notes for founders from that country. The record is the same object the page at `url` renders: unknown facts keep `{ "kind": "unknown", "detail" }` and are never filled in. Quote with `attribution.citation`.Prerendered; cached 1 hour, 1 day at the edge
GET /llms.txtWhat this site covers and how to use it. The agent index: coverage, when to use and not use this site, every surface and the quoting rules.Cached 1 hour
GET /skill.mdThe agent skill. When to reach for this site, how to call it and how to quote from it, as a skill file with front matter.Cached 1 hour

Markdown

Ask any page for markdown and it answers at its own URL, with the same figures and a citation block:

curl -H "Accept: text/markdown" https://dubaisetupindex.com/free-zones/ifza

Responses vary on Accept. A header that admits neither HTML nor markdown gets 406.

Records

curl https://dubaisetupindex.com/data/free-zones/ifza.json

A record carries the page's facts under data, its canonical url, its updatedOn date, its publication status and a prebuilt attribution. Facts are FactCells: a known value with its unit, or { kind: "unknown", detail } — an unknown is not a zero.

Errors

JSON surfaces answer failures as RFC 9457 problem details (application/problem+json) with a machine code and a hint saying what to do next. Codes: not_found, bad_request, unauthorized, rate_limited, not_acceptable, server_error. Markdown surfaces answer a 404 in markdown with links to where to look instead.