Add Calls
Submit a call recording and/or transcript for analysis.
At least one of recording_url or transcript is required.
By default the call is scored on every metric enabled for the agent.
Pass metric_ids to score it on only those metrics.
The response returns immediately with analysis_status: "pending".
Poll GET /calls/{id} until it is completed, failed, or skipped.
Authentication
API key from RubricHQ Settings → API Keys. Send it as: Authorization: Bearer <YOUR_API_KEY>.
Request
Optional. RubricHQ client (workspace) ID. Defaults to the workspace your API key belongs to.
Publicly accessible URL to the audio recording (WAV, MP3, or M4A).
Required if no transcript is provided.
RubricHQ will download and store this securely. Needed for audio-based metrics (latency, interruptions, silence, WPM).
Omit it for text-only calls — the call is then stored with
observation_type: "text" and audio metrics are not evaluated.
For the most accurate per-speaker audio metrics, send a stereo
recording with the agent on the left channel and the caller on the right.
The conversation as an ordered list of turns. Required if no recording_url is provided.
Each turn is an object:
Optional — you rarely need to send it. voice (default) is a
spoken call; text is a chat or other text-only conversation. A
call sent with a transcript and no recording_url is stored as
text automatically.
Optional. Short tag for grouping/filtering calls.
Optional (defaults to inbound). Whether the call was initiated by the agent (outbound) or the customer (inbound).
Optional. How the call ended (e.g. Completed, Dropped, Transferred).
Optional. Customer phone number. e.g. 978-987-9876
Optional. When the call occurred (ISO 8601) in your system. Defaults to the time the call was added in our system if omitted.
Optional. Free-text label for this call (visible in the dashboard).
Optional. Score this call on only these metrics (IDs from
GET /metrics — built-in or your own). Leave it out to score the
call on every metric enabled for the agent.
An ID that can’t be scored on this call — it doesn’t exist in your
workspace, isn’t enabled for the agent, or is an audio metric and
there is no recording_url — is skipped, and the response lists it
in ignored_metric_ids so you can spot a stale ID. The call is
always ingested. If none of the IDs can be scored, the call is
scored as if metric_ids had been left out (every metric enabled
for the agent), and all of them appear in ignored_metric_ids.
Every metric that runs consumes credits from your workspace balance.
Optional. Arbitrary key-value pairs stored with the call (visible in the dashboard).
Response
voice when the call has a recording; text for a transcript-only call.
pending— analysis queuedprocessing— analysis in progresscomputed— the audio pass is done; transcript and custom metrics may still be scoring. Not final — keep polling.completed— every metric has a result (final)failed— analysis encountered an error (final)skipped— not analyzed, e.g. the workspace is out of credits (final)
Stop polling on completed, failed, or skipped.
pending— the recording has not been transcribed yetprocessing— transcription in progresscompleted— a transcript is available (generated from the recording, or the one you provided on a transcript-only call)failed— transcription failed
Presigned URL to the stored recording (valid for a limited time —
fetch the call again for a fresh one). null until RubricHQ has
finished storing the recording, and always null for
transcript-only calls.
Only on the POST /calls response, and only when it is not empty:
the IDs from your metric_ids that could not be scored on this
call and were skipped.