The public API lives under /v1. Three other surfaces are supported, each defined by
its own guide and not by this one:
/segment/v1/*, the endpoints a Segment library or destination posts to. See Sending data from Segment./mcp, the MCP server for AI assistants. See Agents.- The push
trackingUrl, the signed address a device reports a tap to. See Push notifications.
Anything else outside /v1 is internal — the dashboard’s own routes,
hosted pages, other tracking redirects — and is not a contract. It is left out of the
reference so it cannot be mistaken for one.
What /v1 guarantees
The guarantees below apply from general availability. Until then the contract can still change.
From general availability, while /v1 exists, none of the following will change:
- A path or HTTP method is not removed or repurposed.
- A field is not removed from a response, nor its type narrowed.
- A request field that was optional does not become required.
- An
operationIddoes not change. These are the stable identifiers for issues, changelogs and reference pages, so renaming one breaks inbound links. - An error
codedoes not change meaning, and a code is not removed. - The response envelope (
data/meta/error) does not change shape. - Pagination stays cursor-based.
What can change without notice
These are additive and a client must tolerate them:
- New endpoints and new tags.
- New fields in responses. Do not use strict deserialisation that fails on unknown fields — this is the single most common way an SDK breaks on a routine release.
- New optional request fields.
- New values in an enum, including new error codes. Handle an unrecognised
codeby falling back to a generic error carrying the raw string rather than throwing. - New webhook event types, which a
*subscription will begin receiving. - Wording of
messagefields and documentation prose. Branch oncode, never onmessage.
Rate limits, and the exact numbers behind them, are deployment configuration rather than
contract. Read Retry-After.
Explicitly not contract
- The cursor format. Opaque; see Pagination.
- The key format beyond the
kirora_prefix. - Field ordering in JSON objects.
- Anything reachable only outside
/v1.
How a breaking change would happen
By introducing /v2 alongside /v1, not by changing /v1 underneath its users. Both
would run during a migration window announced in advance: the old surface stops taking
new users rather than changing behaviour for existing ones.
Treat every published operation as stable.
Building a client that survives releases
- Deserialise permissively. Ignore unknown fields; never fail on them.
- Treat enums as open. A future
statusorcodevalue must not crash a client. - Take API changes deliberately. Read the changelog before upgrading a client, so a contract change is something you review.
- Do not depend on field order, cursor contents, or message wording.
- Make the base URL configurable, so tests can point at a mock server.