KintsugiKintsugi

Authenticating Your Requests

The Tenanted API authenticates a request with one header: Api-Key carries the key you created in the app. A key created in the app belongs to one organization, so it already knows which organization you are acting for. There is no /v1 prefix in the path, and an optional Api-Version header pins the release.

Before You Start

You need one value:

You do not need an organization ID to get started. A key created in the app is issued against one organization, and a request that names no organization runs against that one.

The Headers

Every request goes to https://api.trykintsugi.com, with no version prefix in the path:

HeaderWhat it isWhen to send it
Api-KeyThe key you created in the app. Identifies the caller.On every request to an endpoint that takes an API key.
Api-VersionThe release to run against, as YYYY-MM-DD.Optional. Without it, the request runs against 2026-07-21.
Organization-IdThe organization the request acts on.Optional. Only needed when your credential reaches more than one organization.
Connection-IdA connection ID. Resolves to that connection's organization.Optional selector, an alternative to Organization-Id.
Entity-IdA platform entity ID. Resolves to a connection's organization.Optional selector. Add Entity-Source to disambiguate it.

The default release never moves. A request without Api-Version runs against 2026-07-21, the launch release, today and after newer releases ship, so leaving the header out can never change an integration underneath you. Sending it anyway makes the release you built against explicit in your own code.

HTTP header names are case-insensitive, so Api-Key and api-key are the same header. The API Reference and the examples here use Api-Key; either is fine, and it is worth picking one and staying with it.

Choosing an Organization

If you send a selector, it has to name an organization your key can reach. Naming one it cannot reach returns 404 not_found, the same response as an organization that does not exist, so a key can never be used to probe which organizations exist.

When a credential reaches more than one organization, the selector is how you pick one:

  • A write with no selector returns 400 missing_target_selector, because a create cannot mean "all of them".
  • Selectors that point at different organizations return 400 conflicting_target_selectors.
  • An Entity-Id that matches more than one connection returns 409 entity_resolution_ambiguous. Add Entity-Source or Connection-Id to settle it.

List organizations returns every organization your credential can access, which is where to read the ID from when you need one.

Your API key belongs on your server, never in a browser or a mobile app. Anything shipped to a client is readable by whoever holds it, and a leaked key can act on your whole organization. Call Kintsugi from your backend and let your own frontend talk to that.

Endpoints That Take a Session Token

A small set of endpoints manage people and credentials rather than data, and they do not accept an organization API key:

  • Users, such as List organization users and Invite a user to an organization, accept only a signed-in user's session token, sent as Authorization: Bearer <token>. An API key is rejected.
  • API Keys, such as Create an API key, take a session token from an Owner or Admin. An organization API key gets 401 unauthorized, exactly as if no credential had been sent, and sending both an Api-Key and a bearer token returns 400 multiple_credentials.

A few public endpoints take no credential at all. The API Reference shows the credential each endpoint accepts.

Your First Request

Start with a read. GET /products/categories returns Kintsugi's product category catalog. It takes no parameters and no selector, and the catalog is the same for every caller, which makes it a clean way to prove your key works without creating anything:

curl https://api.trykintsugi.com/products/categories \
  -H "Api-Key: $KINTSUGI_API_KEY" \
  -H "Api-Version: 2026-07-21"

A 200 with a JSON body means your key is good and you are ready to build.

Read the key from the environment, as above, rather than pasting it into the command. That keeps it out of your shell history as well as out of your source. See List the product category catalog for the response shape.

Once that works, every other data endpoint takes the same Api-Key header. The API Reference carries a ready-made request for each one, and the API Lab runs whole workflows interactively so you can see the sequence before you write it.

When a Request Is Rejected

Every error comes back in the same envelope, and the code tells you where to look:

{
  "code": "unauthorized",
  "message": "Invalid API key.",
  "requestId": "req_8f3k2mNpQr7Ls",
  "errors": []
}
Status and codeWhat went wrongWhere to look
401 unauthorizedNo credential was sent, or the key did not validate.Check the header is named Api-Key, then the EXPIRES column on the API Keys tab. On Users and API Keys endpoints, this is also what an API key gets: send a session token instead.
403 forbiddenThe credential is valid but not permitted to perform this operation.On Users and API Keys endpoints, the signed-in user needs the Owner or Admin role.
404 not_foundThe resource does not exist, or belongs to an organization your credential cannot reach.Check the ID, and check any Organization-Id, Connection-Id, or Entity-Id you sent.
405 method_not_allowedYour credential was fine; the method was wrong.Check the method in the reference. POST /tax-estimations, for example, rejects a GET. The response carries an Allow header naming the methods the path accepts.

Branch on code, not on message: the message is written for people and can change. Quote the requestId when you contact support.

Error Handling covers the full set of status codes and error codes, field-level validation errors, and retry behavior.

Using an SDK Instead

The official SDKs and the Kintsugi MCP server use the v1 API, with its x-api-key and x-organization-id headers and /v1 paths. They do not cover the Tenanted API yet, so call the Tenanted API over HTTP as shown on this page.

Next Steps