Upload a greeting audio file (mp3/wav) for voicemail playback
Streams the uploaded file to Sautikit's object storage and returns a
signed storage.sautikit.com playback URL — the same branded-CDN
mechanism GET /v1/calls/{call_id}/recording uses for captured call
recordings. Intended for the dashboard's voicemail "Play a recording"
upload; the returned url is what you pass as
voicemail.greeting_play_url on PUT /v1/numbers/{id}/routing.
Accepts multipart/form-data with a single file field. Only
audio/mpeg (mp3) and audio/wav (audio/wav, audio/wave,
audio/x-wav) are accepted — anything else is rejected with
uploads.unsupported_media. Max size 10 MiB
(uploads.too_large above that).
The returned URL is presigned for 7 days (SigV4's maximum) — re-POST the same file to mint a fresh URL once it expires.
Authorization
bearerAuth Long-lived ES256 JWT minted from the dashboard (https://app.sautikit.com/developers/api-keys). Signed by the
platform keyring. Carries workspace_id and scopes claims;
revoked via the platform deny-list.
In: header
Request Body
multipart/form-data
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/uploads/audio" \ -F file="string"{ "url": "http://example.com", "mime_type": "audio/mpeg", "size_bytes": 0}{ "error": { "code": "validation.bad_request", "message": "string", "request_id": "string", "details": [ "string" ] }}{ "error": { "code": "validation.bad_request", "message": "string", "request_id": "string", "details": [ "string" ] }}{ "error": { "code": "validation.bad_request", "message": "string", "request_id": "string", "details": [ "string" ] }}Revoke a SIP credential DELETE
Deletes the credential row. The associated SIP user-agent can no longer register with this username. Caller must have writer access to the workspace.
List call detail records for the active workspace GET
Returns the workspace's call detail records, most-recent first. Cursor pagination via `cursor` (opaque, returned as `next_cursor` when more results exist). Filters: `status` (CSV), `direction`, `q` (substring on `remote_e164` or `session_id`), `from` / `to` (RFC3339 or unix seconds), `session_id` (exact match), `limit` (1–100, default 25).