Issue an opaque upload_id and a short-lived presigned PUT URL for direct audio upload.
API key for authentication.
Request body for POST /v1/audio:upload. All fields are optional;
an empty body issues a WAV upload URL.
MIME type of the audio that will be uploaded. MUST match the
Content-Type header on your subsequent PUT request, otherwise
the upload will be rejected.
audio/wav, audio/mp3 "audio/wav"
Optional client-declared size hint in bytes. The presigned URL always enforces the 100 MB hard cap regardless of this value.
1 <= x <= 10485760012582912
Presigned upload URL issued
Response for POST /v1/audio:upload.
Opaque upload identifier. Pass this as upload_id on
POST /v1/conversations:submit after you've uploaded bytes to
upload_url.
^upl_[0-9A-HJKMNP-TV-Z]{26}$"upl_01HRAB8N9G7Q4Y3K2J5W6X1ZTC"
Short-lived presigned PUT URL. PUT the audio bytes here with
the matching Content-Type header from content_type.
"https://uploads.coval.dev/8fce4e70/upl_01HRAB8N9G7Q4Y3K2J5W6X1ZTC?signature=..."
Absolute UTC timestamp at which the presigned URL stops being
valid. The upload_id itself remains resolvable for 7 days from
issuance, but you cannot upload bytes after this timestamp.
"2025-11-03T15:32:00Z"
Hard upper bound on the uploaded payload size, in bytes.
104857600
Content-Type the client must send on the PUT request. Equal to
the content_type requested (or default audio/wav).
audio/wav, audio/mp3 "audio/wav"