Composites
Credits, outcomes and units billed together as one thing. Nothing is deleted — archive instead.
Lists your composites. Pass active=true for active ones only.
Authorization
apiKey Organisation-scoped key from Settings → API Keys.
In: header
Query Parameters
true returns only active composites.
Response Body
application/json
application/json
application/json
curl -X GET "https://example.com/composites?active=true"{ "statusCode": 200, "statusDetail": { "status": "SUCCESS", "message": "OK" }, "result": { "composites": [ { "id": "cmp_7d1x9", "name": "Voice AI call", "refId": "voice_ai", "description": "string", "price": 2.5, "isActive": true, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "entitlements": { "credits": [ { "id": "string", "name": "string", "agentKey": "string" } ], "outcomes": [ { "id": "string", "name": "string", "agentKey": "string" } ], "units": [ { "id": "string", "name": "string", "agentKey": "string" } ] } } ] }}{ "statusCode": 401, "statusDetail": { "status": "ERROR", "message": "Invalid API key." }, "result": {}}{ "statusCode": 500, "statusDetail": { "status": "ERROR", "message": "Could not complete the request." }, "result": {}}Creates a composite. It bills only once a plan sells it.
Authorization
apiKey Organisation-scoped key from Settings → API Keys.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/composites" \ -H "Content-Type: application/json" \ -d '{ "name": "Voice AI call", "refId": "voice_ai", "price": 2.5, "entitlements": { "creditIds": [ "cr_8f2k1" ], "unitIds": [ "un_flat01" ] } }'{ "statusCode": 200, "statusDetail": { "status": "SUCCESS", "message": "OK" }, "result": { "created": true, "composite": { "id": "cmp_7d1x9", "name": "Voice AI call", "refId": "voice_ai", "description": "string", "price": 2.5, "isActive": true, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "entitlements": { "credits": [ { "id": "string", "name": "string", "agentKey": "string" } ], "outcomes": [ { "id": "string", "name": "string", "agentKey": "string" } ], "units": [ { "id": "string", "name": "string", "agentKey": "string" } ] } } }}{ "statusCode": 400, "statusDetail": { "status": "ERROR", "message": "Request body must be valid JSON." }, "result": {}}{ "statusCode": 401, "statusDetail": { "status": "ERROR", "message": "Invalid API key." }, "result": {}}{ "statusCode": 409, "statusDetail": { "status": "ERROR", "message": "Customer \"cus_abc123\" is archived." }, "result": {}}{ "statusCode": 500, "statusDetail": { "status": "ERROR", "message": "Could not complete the request." }, "result": {}}Updates only the fields you send.
Authorization
apiKey Organisation-scoped key from Settings → API Keys.
In: header
Path Parameters
Composite id.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Any create fields.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PATCH "https://example.com/composites/cmp_7d1x9" \ -H "Content-Type: application/json" \ -d '{ "price": 3 }'{ "statusCode": 200, "statusDetail": { "status": "SUCCESS", "message": "OK" }, "result": { "updated": true, "composite": { "id": "cmp_7d1x9", "name": "Voice AI call", "refId": "voice_ai", "description": "string", "price": 2.5, "isActive": true, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "entitlements": { "credits": [ { "id": "string", "name": "string", "agentKey": "string" } ], "outcomes": [ { "id": "string", "name": "string", "agentKey": "string" } ], "units": [ { "id": "string", "name": "string", "agentKey": "string" } ] } } }}{ "statusCode": 400, "statusDetail": { "status": "ERROR", "message": "Request body must be valid JSON." }, "result": {}}{ "statusCode": 401, "statusDetail": { "status": "ERROR", "message": "Invalid API key." }, "result": {}}{ "statusCode": 404, "statusDetail": { "status": "ERROR", "message": "No customer with id \"cus_abc123\"." }, "result": {}}{ "statusCode": 409, "statusDetail": { "status": "ERROR", "message": "Customer \"cus_abc123\" is archived." }, "result": {}}{ "statusCode": 500, "statusDetail": { "status": "ERROR", "message": "Could not complete the request." }, "result": {}}Gets one composite.
Authorization
apiKey Organisation-scoped key from Settings → API Keys.
In: header
Path Parameters
Composite id.
Response Body
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/composites/cmp_7d1x9"{ "statusCode": 200, "statusDetail": { "status": "SUCCESS", "message": "OK" }, "result": { "composite": { "id": "cmp_7d1x9", "name": "Voice AI call", "refId": "voice_ai", "description": "string", "price": 2.5, "isActive": true, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "entitlements": { "credits": [ { "id": "string", "name": "string", "agentKey": "string" } ], "outcomes": [ { "id": "string", "name": "string", "agentKey": "string" } ], "units": [ { "id": "string", "name": "string", "agentKey": "string" } ] } } }}{ "statusCode": 401, "statusDetail": { "status": "ERROR", "message": "Invalid API key." }, "result": {}}{ "statusCode": 404, "statusDetail": { "status": "ERROR", "message": "No customer with id \"cus_abc123\"." }, "result": {}}{ "statusCode": 500, "statusDetail": { "status": "ERROR", "message": "Could not complete the request." }, "result": {}}Archives a composite. Nothing is deleted.
Authorization
apiKey Organisation-scoped key from Settings → API Keys.
In: header
Path Parameters
Composite id.
Response Body
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/composites/cmp_7d1x9/archive"{ "statusCode": 200, "statusDetail": { "status": "SUCCESS", "message": "OK" }, "result": { "archived": true, "composite": { "id": "cmp_7d1x9", "name": "Voice AI call", "refId": "voice_ai", "description": "string", "price": 2.5, "isActive": true, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "entitlements": { "credits": [ { "id": "string", "name": "string", "agentKey": "string" } ], "outcomes": [ { "id": "string", "name": "string", "agentKey": "string" } ], "units": [ { "id": "string", "name": "string", "agentKey": "string" } ] } } }}{ "statusCode": 401, "statusDetail": { "status": "ERROR", "message": "Invalid API key." }, "result": {}}{ "statusCode": 404, "statusDetail": { "status": "ERROR", "message": "No customer with id \"cus_abc123\"." }, "result": {}}{ "statusCode": 500, "statusDetail": { "status": "ERROR", "message": "Could not complete the request." }, "result": {}}Restores an archived composite.
Authorization
apiKey Organisation-scoped key from Settings → API Keys.
In: header
Path Parameters
Composite id.
Response Body
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/composites/cmp_7d1x9/unarchive"{ "statusCode": 200, "statusDetail": { "status": "SUCCESS", "message": "OK" }, "result": { "unarchived": true, "composite": { "id": "cmp_7d1x9", "name": "Voice AI call", "refId": "voice_ai", "description": "string", "price": 2.5, "isActive": true, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "entitlements": { "credits": [ { "id": "string", "name": "string", "agentKey": "string" } ], "outcomes": [ { "id": "string", "name": "string", "agentKey": "string" } ], "units": [ { "id": "string", "name": "string", "agentKey": "string" } ] } } }}{ "statusCode": 401, "statusDetail": { "status": "ERROR", "message": "Invalid API key." }, "result": {}}{ "statusCode": 404, "statusDetail": { "status": "ERROR", "message": "No customer with id \"cus_abc123\"." }, "result": {}}{ "statusCode": 500, "statusDetail": { "status": "ERROR", "message": "Could not complete the request." }, "result": {}}