Docs

Quickstart

Send the transcript of a call your voice agent handled, and read back a QA result in which every potential violation quotes the transcript line it is based on. Results are QA signals for human review.

What this is, and is not

  • This is post-call Voice QA: it evaluates calls that have already happened. It is not a pre-deployment simulation or test harness for your agent.
  • Three allowances are counted separately each month: QA calls, minutes of audio sent to speech-to-text, and optional AI assessments. A call that arrives as a transcript uses no audio minutes.
  • Speaker labels decide what can be established. Without them, checks that depend on who spoke can only be a review, never a pass or a violation.
  • “Review recommended” is not a proven violation: it means a person should look, usually because something could not be confirmed.
  • A potential violation always carries the quote it is based on, with its timestamp when your transcript has times; some reviews (for example a call that looks incomplete) have none.

1. Create an organization and an API key

Sign up, then open Settings & API → API keys (organization owners and admins). The key is shown once; only a one-way hash is stored. Keep it on your server. Export it for the examples below:

export GOLDNOVA_API_KEY="gnk_…"

2. Send a call

externalCallId is your own identifier for the call. Sending the same call again is safe: it is stored once and answered with "duplicate": true.

Request
curl -X POST https://goldnovaai.com/api/v1/calls \
  -H "Authorization: Bearer $GOLDNOVA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "externalCallId": "call-1042",
    "agent": { "id": "support-bot-1", "name": "Support bot" },
    "transcript": [
      { "speaker": "agent", "text": "Hello, this call is recorded for quality purposes.", "startTime": 0, "endTime": 4 },
      { "speaker": "customer", "text": "Okay.", "startTime": 4, "endTime": 5 },
      { "speaker": "agent", "text": "We guarantee a full refund.", "startTime": 41.2, "endTime": 44.0 }
    ]
  }'
Response (201; 200 with duplicate: true when the identical call was already stored)
{ "id": "6f1c0a52-8d1e-4c43-9a7b-2f6a3d9e1b10", "externalCallId": "call-1042", "status": "ready", "duplicate": false }

3. Read the result

Evaluation runs after the response, usually within seconds. status moves received → ready → evaluating → evaluated (or failed). Poll the call until it is evaluated.

Request
curl https://goldnovaai.com/api/v1/calls/6f1c0a52-8d1e-4c43-9a7b-2f6a3d9e1b10 \
  -H "Authorization: Bearer $GOLDNOVA_API_KEY"
Response
{
  "id": "6f1c0a52-8d1e-4c43-9a7b-2f6a3d9e1b10",
  "externalCallId": "call-1042",
  "status": "evaluated",
  "transcriptSource": "provided",
  "transcriptQuality": null,
  "failureReason": null,
  "evaluation": {
    "result": "violation",
    "resultLabel": "Potential violation",
    "qaScore": 62.5,
    "policyVersion": 3,
    "evaluatedAt": "2026-10-01T09:31:02.114Z"
  },
  "findings": [
    {
      "rule": "Prohibited claims",
      "ruleType": "prohibited_claim",
      "severity": "high",
      "status": "violation",
      "explanation": "The agent used a prohibited phrase.",
      "evidence": [{ "quote": "We guarantee a full refund.", "startTime": 41.2, "endTime": 44.0 }]
    }
  ],
  "notice": "QA signal for human review. Findings are automated indications, not legal or compliance determinations."
}

How to read a result explains the three result values, the score, severities and why a finding can only be shown with a verbatim quote.

Limits at a glance

Request body1.5 MB
Segments per call5,000, each up to 4,000 characters
transcriptTextup to 400,000 characters
Metadataup to 50 keys and 16 KB
Call durationup to 24 hours
Rate limit120 requests per minute per key (429 with Retry-After)
AllowancesQA calls, audio transcription minutes and AI assessments are separate monthly allowances (see pricing); 402 quota_exceeded when the call allowance is used up

Next

Docs: quickstart · GoldNovaAI