Skip to content

API keys and scopes

Create scoped API keys to read and write your data over the REST API.

API access is available on plans that include integrations. Create a key in Settings, then Integrations. The key is shown once on creation, so store it safely. Keys begin with kbd_.

Authentication

Send the key as a Bearer token in the Authorization header on every request.

bash
curl https://kabaido.ai/api/v1/products/bulk \
  -H "Authorization: Bearer kbd_live_..." \
  -H "Content-Type: application/json" \
  -d '{ "products": [ { "sku": "EM-1204", "name": "End mill 12mm" } ] }'

Scopes

Each key carries scopes that limit what it can do. A request that needs a scope the key does not hold is rejected with 403. Grant only the scopes a given integration needs.

ScopeAllows
products:readList and search products
products:writeBulk upsert products
quotes:readList quotes and read one with lines
quotes:writeReserved for quote writes
orders:readList orders and read one with lines
customers:readList customers and read one with contacts
customers:writeUpsert customers
requests:readList request threads and read messages
requests:writeOpen requests from text

Key security

Keys are stored as salted hashes, so Kabaido itself cannot recover a lost key; create a new one instead. The list in Settings shows each key's prefix and when it was last used, and revoking takes effect immediately.

Rate limits

Requests are throttled per key at 600 requests per minute. A request over the limit receives a 429 response; retry after a short pause.

Reading a quote

GET /api/v1/quotes/{id} returns a quote with its lines. The key must hold the quotes:read scope, or the request is rejected with 403. A quote that does not exist in your organisation returns 404. Money fields are integer minor units, so a total_minor of 58200 in GBP is £582.00. Lines are ordered by position and carry a line_type of product, configured, service or manual.

bash
curl https://kabaido.ai/api/v1/quotes/7f0c0000-0000-0000-0000-000000000000 \
 -H "Authorization: Bearer kbd_your_key_here"
json
{
 "id": "7f0c0000-0000-0000-0000-000000000000",
 "number": "Q-1024",
 "status": "accepted",
 "currency": "GBP",
 "subtotal_minor": 48500,
 "discount_minor": 0,
 "vat_minor": 9700,
 "total_minor": 58200,
 "valid_until": "2026-07-01",
 "customer_id": "...",
 "sent_at": "2026-06-02T10:30:00Z",
 "decided_at": "2026-06-04T08:12:00Z",
 "created_at": "2026-06-01T15:00:00Z",
 "updated_at": "2026-06-04T08:12:00Z",
 "lines": [
 {
 "id": "...",
 "position": 0,
 "line_type": "product",
 "description": "12mm 4 flute end mill",
 "qty": 10,
 "uom": "EA",
 "unit_price_minor": 4850,
 "discount_pct": 0,
 "vat_exempt": false,
 "lead_time_days": 5
 }
 ]
}

Listing and writing products over the API is covered on the products API page in the Catalog section. The full endpoint reference is on the API reference page.