You are reading v0, which is retired on 2026-06-30. It is kept online for existing integrations only. Read the v1 version.

REST API reference

Every endpoint, the scope it needs, its cursor pagination contract and a runnable curl and TypeScript sample.

Version v0 · updated 2026-02-01

On this page (4 sections)

The reference below is generated from the same route table the gateway dispatches on. If an endpoint is served, it is documented; if it is documented, it is served. There is no hand-maintained second copy to drift.

Base URL and versioning#

https://api.framique.com/api/public/v1

The version lives in the path. Additive changes (a new field, a new endpoint) ship inside v1; anything that could break a client gets a new version and a sunset date announced at least 90 days ahead.

Pagination#

  • `limit` is clamped server-side to 100; asking for more is not an error, it is silently capped.
  • `cursor` is opaque and signed positionally by (timestamp, id). Do not parse it.
  • A tampered cursor is treated as no cursor — you get page one, not a 500.
  • `next_cursor` is null on the last page. That is the only end-of-stream signal.

Idempotency#

Every non-GET request must carry an `Idempotency-Key`. Replaying the same key with the same body returns the original response; replaying it with a different body is a 409. Keys are retained for 24 hours.

curl -s -X POST "https://api.framique.com/api/public/v1/products" \
  -H "Authorization: Bearer $FRAMIQUE_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"title":"Jamdani saree","price_minor":450000,"currency":"BDT"}'

Endpoints#

GETproducts.read

/me

Identity of the calling credential

GETorders.read

/orders

List orders (cursor paginated)

GETorders.read

/orders/{id}

Fetch one order

POSTorders.write

/orders/{id}/notes

Append an order note

GETproducts.read

/products

List products (cursor paginated)

GETproducts.read

/products/{id}

Fetch one product

POSTproducts.write

/products

Create a draft product

GETcustomers.read

/customers

List customers (cursor paginated)

GETexports.read

/exports

List export jobs

POSTexports.write

/exports

Start an export job

GETexports.read

/exports/{id}

Export job detail + signed URL

GETwebhooks.read

/webhooks

List webhook endpoints

POSTwebhooks.write

/webhooks

Register a webhook endpoint

DELETEwebhooks.write

/webhooks/{id}

Delete a webhook endpoint

GETthemes.read

/themes

List installed themes

GETthemes.read

/themes/{id}

Fetch one installed theme

GETthemes.read

/themes/{id}/assets

List a theme's CSS, font and image assets

POSTthemes.write

/themes/{id}/activate

Activate a theme on the storefront

GETthemes.read

/marketplace/themes

List published marketplace themes

GET/products

Read-only, against a demo store. Requires products.read on a real credential.

Same call as curl
curl -s -X GET "https://api.framique.com/api/public/v1/products" \
  -H "Authorization: Bearer $FRAMIQUE_API_KEY"