Skip to main content
A twin is the synthetic copy of one trace. Create one per trace, or many at once with a batch. Each twin draws its own synthetic values: consistent within the twin, unlinked across twins.

The twin object

Statuses

A twin reaches completed unless its input causes a failure. Errors on our side are retried automatically. Failed twins are not charged, and a twin is not charged while paused. A batch’s twins do not pause; their batch does.

Create a twin

POST /v1/kennet/twins Uploads one trace and creates its twin. Send multipart/form-data with an Idempotency-Key header.
Returns 202 with a twin object, status: queued, and a Location header. If what the organization can spend (balance plus credit limit, less twins in progress) does not cover the twin, the request still succeeds: the twin moves to paused, sends kennet.twin.paused, and starts by itself when credit is added or other twins finish, sending kennet.twin.resumed.

Retrieve a twin

GET /v1/kennet/twins/{id} Retrieves a twin. Returns a twin object, or 404 resource_missing if this key’s organization and mode have no twin with that ID.

List twins

GET /v1/kennet/twins Lists twins, newest first, including twins created by batches. Returns {object: "list", data, has_more, url}, with twin objects in data. If has_more is true, pass the last id as starting_after for the next page.

Download a twin’s content

GET /v1/kennet/twins/{id}/content Downloads the twinned file of a completed twin. Returns 200 with the file as an attachment, under the uploaded file’s name, in its format: