Menu

API guides

Everything an integrator needs beyond the endpoint reference.

Everything an integrator needs beyond the endpoint reference. These pages cover the cross-cutting behaviour that sits behind every endpoint. Start with the Quickstart; building with an AI agent, start with Agents.

Written for the person building a client. If three people implement an SDK independently and each invents their own answer to something, that something belongs here.

Guide What it settles
Quickstart A key, a contact, an event and a first email, in five requests
Transactional messages Receipts, resets and alerts by email and push: templates, fallback, batches, secrets
Push notifications Setting up iOS, Android and web apps, registering devices from your server, reporting taps, iPhone web apps
Agents Connecting Claude, Cursor or any MCP client, and what an agent key cannot do
Authentication Obtaining a key, the scope catalogue, and why an agent key returns 403s that look like bugs
Pagination Cursor-only, opaque, meta.pagination.nextCursor — and why there is no page parameter
Errors The envelope, every public code, and which are worth retrying
Rate limits Per-key and per-org limits, Retry-After, and correct backoff
Idempotency Which operations are safe to retry, and the two different mechanisms
Webhooks Event catalogue, signature verification, delivery and retry behaviour
E-commerce events The standard commerce event names and properties, and payments from a connected provider
Versioning What /v1 guarantees, how additive changes are signalled
Staging Running your integration from staging: a second workspace, not a test mode
SDK conformance The checklist every server library must satisfy

The shape of every response

Success bodies carry the payload under data, with optional meta:

{ "data": { "id": "018f…", "name": "Weekly digest" } }

List responses add pagination to meta:

{
  "data": [ … ],
  "meta": { "pagination": { "limit": 20, "nextCursor": "eyJpZCI6…" } }
}

Errors replace data with error, and never mix the two:

{ "error": { "code": "CONFLICT", "message": "…", "details": { … } } }

204 No Content responses have no body at all.

Base URL

The base URL is https://api.kirora.io. Every SDK uses it by default and lets you override it, so tests can point at a mock server. The version is in each path (/v1/…), not in the base URL.