Request somewhere to upload a recording
Returns a short-lived presigned `PUT` URL and an opaque `ticket`. Send the audio bytes straight to `upload.url` — they never pass through Call Lens — then submit the call with `POST /calls`, `mode: "upload"` and the ticket. The `upload.headers` map must be applied to the `PUT` verbatim; it is empty against some storage backends and required by others, so a client that ignores it will fail with a signature mismatch in production only.
Returns a short-lived presigned PUT URL and an opaque ticket. Send the audio bytes straight to upload.url — they never pass through Call Lens — then submit the call with POST /calls, mode: "upload" and the ticket. The upload.headers map must be applied to the PUT verbatim; it is empty against some storage backends and required by others, so a client that ignores it will fail with a signature mismatch in production only.
Authorization
ApiKey ingestAuthorization: Bearer clk_{tenant_id}_{secret}. The header X-Api-Key carrying the same value is also accepted, for integration platforms that cannot set an Authorization header. Keys are minted in the Call Lens dashboard.
In: header
Scope: ingest
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
application/json
application/json
curl -X POST "https://example.com/uploads" \ -H "Content-Type: application/json" \ -d '{ "content_type": "audio/mpeg", "bytes": 1 }'{ "success": true, "message": "Upload authorised.", "data": { "upload": { "method": "PUT", "url": "http://example.com", "headers": { "property1": "string", "property2": "string" }, "expires_at": "2019-08-24T14:15:22Z" }, "ticket": "string", "allowance": { "limit": 0, "used": 0, "remaining": 0, "resets_at": "2019-08-24T14:15:22Z" } }}