For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
SupportDashboard
GuidesAPI Reference
GuidesAPI Reference
  • Getting Started
    • Introduction
    • Authentication
    • Quickstart
  • Core Concepts
    • Prefixed IDs
    • Pagination
    • Error Handling
    • Rate Limits
    • Webhooks
  • Use Cases
    • ELP Tests
LogoLogo
SupportDashboard
On this page
  • What gets scored
  • Lifecycle
  • Step 1: Create a test
  • Step 2: Receive the score via webhook
  • Step 3: Read the scored test
  • Field reference
  • Failure modes
  • Reading the data
  • Next steps
Use Cases

ELP Tests

Administer English Language Proficiency tests over the phone, then receive structured scores via webhook.
Was this page helpful?
Previous
Built with

An ELP test is a phone-based English Language Proficiency assessment for commercial motor vehicle drivers. Our voice agent calls the driver, asks five scripted questions across four communication areas, and reports a per-area score after the call.

What gets scored

AreaQuestion(s)What the question asks
Conversational CommunicationQ1, Q3Driver identifies themselves and answers a three-part open question
Instruction ComprehensionQ2Driver responds to a multi-step spoken instruction
Sign & Signal RecognitionQ4Driver reads a road sign and states the required action
Verbal ReportingQ5Driver dictates a record-entry value out loud

Each area is scored 1–10. Q1 and Q3 are averaged into a single Conversational Communication score.

Lifecycle

An ELP test moves through two parallel statuses. status tracks the call. scoring_status tracks the post-call analysis.

Call status:

Scoring status:

The two statuses combine as follows:

statusscoring_statusMeaning
REQUESTEDnullTest created. Call not yet completed.
COMPLETEDPENDINGCall finished. Scoring queued.
COMPLETEDSCOREDScores available. elp_test.scored fired. Compare valid_answers to total_questions to spot partial tests.
COMPLETEDFAILEDCall finished but post-call analysis could not be completed. elp_test.failed fired.
FAILEDFAILEDCall never connected (busy, no answer, telephony error, or voicemail). elp_test.failed fired.

Scoring is fully automated and typically completes within a minute of call end.

Step 1: Create a test

Call POST /v1/elp/tests with the driver’s phone number (E.164). See the Create ELP test reference for the full request and response schema.

The response returns the test row in the REQUESTED state with its id and a call_id. The voice agent dials the number immediately, so hand the driver the phone before you create the test, or expect a missed-call follow-up.

Step 2: Receive the score via webhook

The recommended pattern is to subscribe to two webhook events:

  • elp_test.scored fires when scoring completes successfully.
  • elp_test.failed fires when the test reaches a terminal failure state (the call never connected, the call ended without scoring, or scoring exhausted its retries).

Each event fires exactly once per test, and its data field carries the same body as GET /v1/elp/tests/{test_id}. Inspect the payload’s status and scoring_status fields to disambiguate the outcome; notes carries the human-readable failure reason on the failed event.

To subscribe, register a webhook endpoint with elp_test.scored and elp_test.failed in event_types. You can do this from the dashboard at Organization → Webhooks. See the Webhooks guide for the full setup: signature verification, retries, idempotency.

Polling GET /v1/elp/tests/{test_id} (reference) also works for one-off cases.

Webhook delivery log showing elp_test.scored deliveries. Same endpoint detail page covered in the Webhooks guide.

Step 3: Read the scored test

The full response shape lives in the Get ELP test API reference, including an example payload. The fields below are the ones worth understanding when interpreting a SCORED test.

Field reference

FieldMeaning
conversational_communication1–10. Average of Q1 and Q3 scores.
instruction_comprehension1–10. Score on Q2.
sign_recognition1–10. Score on Q4.
verbal_reporting1–10. Score on Q5.
total_scoreSum of the four competency scores, scaled to 100.
questions_answeredCount of questions the driver produced any audible response to (0–5).
valid_answersSubset of questions_answered where the response was in English and on-topic enough to assess (0–5).
notesObservational summary of the call.
driver_name / carrier_nameExtracted from the driver’s Q1 answer. Either may be null if not clearly stated.

Failure modes

Scenariostatusscoring_statusWhat it meansWhat to do
Call never connectedFAILEDFAILEDBusy, no answer, voicemail, or telephony error before the agent could engageCreate a new test (reference) once the driver is reachable
Driver hung up mid-testCOMPLETEDSCOREDCall still ended cleanly; the scorer marks the unanswered questions as not-responded and the answered ones get their normal 1–10 scoreCompare valid_answers to total_questions — a low ratio is the signal that a retake may be warranted
Scoring failedCOMPLETEDFAILEDCall succeeded but post-call analysis could not be completed (no transcript, retries exhausted)notes carries the reason; contact support for a manual rescore

elp_test.scored fires on SCORED outcomes; elp_test.failed fires on every terminal failure (call never connected, call ended without scoring, or scoring exhausted retries). Subscribe to both event types to get full lifecycle coverage. The failure reason is on the notes field of the payload.

Reading the data

  • valid_answers vs. questions_answered. If valid_answers < questions_answered, the driver responded but the response was off-topic, non-English, or otherwise unscorable. The competency score reflects that.
  • STT mishear disclosure. When the scorer extends leniency for a probable speech-to-text artifact (heavy accent on a short or jargon-heavy phrase), it discloses this in notes along with what it inferred the driver actually said. For example: “Q3 contained ‘Holly Mayo’ where the cargo word would go; treated as a probable STT mishear of ‘hauling mail’.”
  • Anomaly notes. Edge cases (a substantive answer scoring 1, an empty segmenter window) are flagged in notes for review.

Next steps

  • Set up webhook delivery: see Webhooks.
  • Create an ELP test. Full API reference.
  • Get an ELP test. Full API reference.