Skip to content

API reference

Every v1 endpoint, its scope and how pagination works, plus the OpenAPI document.

The Kabaido API is REST over HTTPS, scoped to your organisation by the API key. All money fields are integer minor units with a currency code. The machine-readable specification lives at /api/v1/openapi.json.

Quotes API
Request
curl "/api/v1/quotes?limit=2" -H "Authorization: Bearer kbd_..."
Response
  • Q-26-00026£528.96inc VATvalid until 11 JulDraft
  • Q-26-00025£202.08inc VATvalid until 10 JulDraft

Money in minor units. 600 requests per minute per key.

Live preview: the API, webhook and MCP surfaces side by side with real request and response shapes.

Endpoints

EndpointMethodScopePurpose
/api/v1/productsGETproducts:readList and search products
/api/v1/products/bulkPOSTproducts:writeUpsert up to 10000 products by SKU
/api/v1/quotesGETquotes:readList quotes, filter by status
/api/v1/quotes/{id}GETquotes:readOne quote with lines
/api/v1/ordersGETorders:readList orders, filter by status
/api/v1/orders/{id}GETorders:readOne order with lines
/api/v1/customersGETcustomers:readList and search customers
/api/v1/customersPOSTcustomers:writeUpsert up to 500 customers
/api/v1/customers/{id}GETcustomers:readOne customer with contacts
/api/v1/requestsGETrequests:readList request threads
/api/v1/requestsPOSTrequests:writeOpen a request from RFQ text
/api/v1/requests/{id}GETrequests:readOne request with messages

Pagination

List endpoints return newest first with an opaque next_cursor when more results exist. Pass it back as the cursor query parameter for the next page; a null next_cursor means you have everything. Limits cap at 200 rows for commercial lists and 500 for products and customers.

Errors

Errors are JSON with a single error message. 401 means a missing or revoked key, 403 a missing scope, 404 a record outside your organisation, 422 a request that cannot be processed, 429 the per-key throttle and 5xx a fault on our side. Retry 429 and 5xx with a backoff; never retry 4xx unchanged.

Opening a request

bash
curl -X POST https://kabaido.ai/api/v1/requests \
 -H "Authorization: Bearer kbd_your_key_here" \
 -H "Content-Type: application/json" \
 -d '{ "text": "Please quote 50x DIN 933 M8x40 A2" }'

Money, everywhere

Every money field is an integer in minor units with a currency code beside it: total_minor 58200 with currency GBP is £582.00. There are no floating point figures in the API and there are none in the platform either, because a penny lost to binary rounding on a quote line is a penny somebody has to find later.

Divide by 100 at the point you display, not before, and round half-up if you are doing arithmetic of your own.

Idempotency and retries

The write endpoints are upserts keyed on your own identifiers: products by SKU, customers by external id then email domain. Sending the same batch twice updates the same rows rather than creating duplicates, which is what makes a retry after a timeout safe.

Retry 429 and 5xx with a backoff. Never retry a 4xx unchanged: it will fail the same way, and 422 in particular means the body itself is the problem.

Creating a request costs nothing. Usage meters the AEI when it resolves lines, exactly as in the app.