Skip to content
CorekChat Help Customer guides ES

Help · Integrations and API

How to create an API key and make your first request

The API lets another system read your orders, your menu, your reservations and the status of your tables. To get in, that system uses a key: a long secret that you create, with just the permissions it needs, and that you can revoke whenever you want. The first part of this guide is for whoever manages the account; the second, for whoever programs the connection.

#Step 1: open the API tab

Open «Configuraciones» (Settings) and choose «API», in the «Desarrolladores» (Developers) group. There you see the keys that already exist, with their permissions and the last time each one was used.

System screenshot, customers onlySettings → API. Each key shows its permissions and when it was last usedSee it in your account

#Step 2: create one key per system

Press «Nueva llave» (New key), give it a name that says who's going to use it ("Accounting", "Online store") and check only the permissions that system needs:

Permission What it can read
Read orders Orders with their products, status and total
Read products and menu Products, prices, availability and categories
Read reservations Reservations with their date, party size and status
Read tables and dining room status Tables, which floor and zone they're on, and whether they're free or occupied (requires the POS module)

It's best to have one key per system: if you ever have to revoke one, the other integrations keep working.

System screenshot, customers onlyNew key: the name and only the permissions that system needsSee it in your account

#Step 3: copy the key right then

When you press «Crear llave» (Create key), the full key appears only once. Copy it and hand it to whoever programs the connection through a secure channel. We only store a fingerprint of the key, so not even the CorekChat team can show it to you again: if it's lost, you revoke it and create another one.

System screenshot, customers onlyThe full key is shown only once. After that, only its beginningSee it in your account

Treat it like a password: don't paste it into a group chat, a forwarded email or a code repository.

#Revoking a key

«Revocar» (Revoke) makes it useless instantly: the next request with that key gets rejected. Do it when you change providers, when someone who knew it leaves the team or if you suspect it leaked. You can have up to ten active keys at a time.

#For whoever programs it: how to make requests

All requests go to this base address, with the key in the Authorization header:

https://corekchat.com/api/v1
Authorization: Bearer ck_live_...

A first test request, which returns the five most recent orders:

curl -H "Authorization: Bearer ck_live_YOUR_KEY" \
  "https://corekchat.com/api/v1/orders?limit=5"

#What you can query

Request Permission Filters
GET /orders Read orders status, from, to (creation date), limit, cursor
GET /orders/{id} Read orders —
GET /products Read products and menu available=true or false, limit, cursor
GET /products/{id} Read products and menu —
GET /reservations Read reservations status, from, to (reservation date), limit, cursor
GET /reservations/{id} Read reservations —
GET /tables Read tables branch_id, active=true or false, limit, cursor
GET /tables/{id} Read tables —

Dates use ISO 8601 format (2026-09-27T00:00:00-05:00). Amounts are in Colombian pesos, without decimals.

#What responses look like

A list returns the results in data and says whether there are more:

{
  "data": [
    {
      "id": "8f1c…",
      "status": "delivered",
      "channel": "whatsapp",
      "branch_id": "3a2e…",
      "customer_name": "Julián Pardo",
      "total": 42000,
      "currency": "COP",
      "items": [
        {
          "product_id": "b71d…",
          "name": "Hamburguesa La Esquina",
          "quantity": 2,
          "subtotal": 38000
        }
      ],
      "cancellation_reason": null,
      "created_at": "2026-09-27T13:05:12.000Z",
      "updated_at": "2026-09-27T13:40:02.000Z"
    }
  ],
  "has_more": true,
  "next_cursor": "8f1c…"
}

For the next page, repeat the request with cursor= set to the next_cursor you received. Pagination is by cursor and not by page number on purpose: if orders come in while you go through the list, rows are neither repeated nor skipped. Each page returns 25 results by default and 100 at most (limit).

A table also includes its status — available (free), occupied or bill_requested (asked for the bill) — and, if it's open, the session with the time it was opened.

#Errors

Errors always have the same shape, with a stable code you can program against:

{ "error": { "code": "insufficient_scope", "message": "…" } }
Status code What happened
401 unauthorized The key is missing, mistyped, expired or revoked
402 — The plan no longer includes the API, or the POS module is missing for tables (module_not_purchased)
403 insufficient_scope The key doesn't have permission for that request
404 not_found That order, product, reservation or table doesn't exist in your account
429 rate_limited You went over the request limit; wait as long as the Retry-After header says

#Request limit

Each key can make up to 120 requests per minute. Responses include the x-ratelimit-limit, x-ratelimit-remaining and x-ratelimit-reset headers so the system knows how much it has left. If you need to know about each order instantly, don't query the API every few seconds: use webhooks, which notify you on their own.