Skip to main content
Definitions for the terms used throughout the API.

Request

A single data-extraction job against a payer. A request consists of a schemaId that defines the output fields and inputs that supply the values the schema requires. SuperDial fills the schema’s fields from one or more channels and returns the structured results object on GET /v1/requests/{requestId} — for example:
{ "claimStatus": "PAID", "paidAmount": "150.00" }
A request has a state lifecycle and emits a webhook when it reaches a terminal state.

Schema

A definition of the output fields a request should produce, along with which fields are required. Each requestType is backed by a schema. Schemas are configured by SuperDial and identified by schemaId. When a request runs, SuperDial fills the schema’s fields from one or more sources and merges them into the request’s results. A request reaches the SUCCESS state when every required field has been filled; a request that runs to completion but is missing one or more required fields ends in PARTIAL (when some required fields were captured) or FAILURE (when nothing usable was captured), with missingFields populated. You can discover the schemas provisioned for your account at any time with GET /v1/schemas, and look up the required input keys for a given schema with GET /v1/schemas/{schemaId}/required-inputs.

Request Type

The kind of extraction a schema performs — for example, claim-status or vob (verification of benefits). Each schema is configured for one requestType, and the value is server-derived: you don’t pass it on POST /v1/requests, but it surfaces on RequestResponse.requestType and on each row of GET /v1/schemas. Discover the request types your account is provisioned for via GET /v1/schemas.

Request Batch

A scheduling grouping. Every request belongs to a batch, identified by requestBatchId:
  • Submit POST /v1/requests with a single request → a batch of size 1 is created automatically with its own requestBatchId.
  • Submit POST /v1/requests with { "requests": [...] } → within that single submission, entries scheduled for the same business day share one requestBatchId; entries scheduled for different days each get a distinct requestBatchId. Whether the submission lands on one day or spills across several depends on your account’s daily call capacity and any work already pending on those days.
A batch affects when a request is scheduled to run and how progress is tracked across that day’s slice, but every request still has its own requestId and gets its own webhook regardless of which batch it belongs to. You can list all requests under a given requestBatchId with GET /v1/requests?requestBatchId=.... For multi-day submissions, iterate over the unique IDs returned in the create response.

State

A request moves through four states. Values are uppercase on the response (SUCCESS, not success):
StateTerminal?Meaning
PROCESSINGNoStill running. Wait for the webhook.
SUCCESSYesCompleted with every required field populated. results is full, error is null.
PARTIALYesSome required fields were captured but not all. results is partially populated, missingFields lists what’s missing, and error describes why the gap.
FAILUREYesNo required fields were captured. results is empty and error describes the cause.
A webhook fires when the request transitions to SUCCESS, PARTIAL, or FAILURE.

error object

When state is PARTIAL or FAILURE, the response carries a structured error object describing what went wrong. On PROCESSING and SUCCESS, error is null.
FieldTypeDescription
errorCategoryenumTwo-bucket category — see below.
errorCodeenumMachine-readable failure code within the category — see errorCode for the full list.
errorMessagestringHuman-readable sentence describing what went wrong. See the note below on wording stability.
The wording of errorMessage may change between releases — use errorCode for programmatic dispatch.
errorCategory is one of:
CategoryMeaning
NOT_FOUNDThe payer couldn’t find what you asked about.
SYSTEM_ERRORAny other failure — IVR navigation, payer refusal, unreachable, etc.

errorCode

Machine-readable failure code within error.errorCategory. Match on this for parsing and analytics; errorMessage carries the human-readable detail. The taxonomy has four groups: a small set of SYSTEM_ERROR codes, a handful of NOT_FOUND entity codes, and two field-specific NOT_FOUND families (*_MISSING and *_INCORRECT).

SYSTEM_ERROR codes

CodeTriggers
IVR_FAILURECouldn’t navigate the payer’s phone system to reach a representative (no rep-routing option, dead-end menus).
PAYER_REFUSALRepresentative refused to provide the information — declined to interact with an automated agent, declined to speak with a third party, or refused the specific query.
UNABLE_TO_REACH_HUMAN_IN_TIMECouldn’t connect to a representative within the per-request retry budget — voicemail-only line, hold time exceeded, repeated long-wait attempts.
REQUIRES_OTHER_CHANNELPayer requires the request through portal, fax, email, or another channel SuperDial doesn’t currently support.
OTHERA SYSTEM_ERROR that didn’t fit a more specific code. Inspect errorMessage for detail.

NOT_FOUND codes — entity

The payer couldn’t locate the entity the request asked about.
CodeTriggers
MEMBER_NOT_FOUNDMember couldn’t be located from the supplied identifiers.
PROVIDER_NOT_FOUNDProvider couldn’t be located.
CLAIM_NOT_FOUNDClaim couldn’t be located.
PRIOR_AUTH_NOT_FOUNDPrior authorization couldn’t be located.
APPEAL_NOT_FOUNDAppeal couldn’t be located.

NOT_FOUND codes — missing required input

A required input wasn’t supplied with the request. Pattern: {FIELD}_MISSING.
  • CLAIM_NUMBER_MISSING
  • CLAIM_AUTHORIZATION_NUMBER_MISSING
  • CLAIM_CPT_PROCEDURE_CODE_MISSING
  • CLAIM_DATE_OF_SERVICE_MISSING
  • CLAIM_DIAGNOSIS_MISSING
  • CLAIM_EFT_CHECK_NUMBER_MISSING
  • MEMBER_GROUP_MISSING
  • MEMBER_PATIENT_LOCATION_MISSING
  • MEMBER_PATIENT_PHONE_MISSING
  • MEMBER_PAYER_SPECIFIC_PATIENT_ID_MISSING
  • MEMBER_POLICY_NUMBER_MISSING
  • MEMBER_SSN_MISSING
  • PROVIDER_CALLBACK_NUMBER_MISSING
  • PROVIDER_FACILITY_INFO_MISSING
  • PROVIDER_FACILITY_LOCATION_MISSING
  • PROVIDER_FAX_MISSING
  • PROVIDER_OTHER_LICENSING_MISSING
  • PROVIDER_PTAN_MISSING
  • PROVIDER_SPECIALTY_MISSING

NOT_FOUND codes — incorrect input value

An input was supplied but didn’t match the payer’s records. Pattern: {FIELD}_INCORRECT.
  • APPLICATION_ID_INCORRECT
  • APPLICATION_SUBMISSION_METHOD_INCORRECT
  • APPLICATION_SUBMITTED_DATE_INCORRECT
  • APPLICATION_SUBMITTED_TO_INCORRECT
  • BEGINNING_DATE_OF_SERVICE_INCORRECT
  • BILLING_PROVIDER_ADDRESS_INCORRECT
  • BILLING_PROVIDER_NAME_INCORRECT
  • BILLING_PROVIDER_NPI_INCORRECT
  • BILLING_PROVIDER_TAX_ID_INCORRECT
  • CALLBACK_NUMBER_INCORRECT
  • CLAIM_CHARGE_AMOUNT_INCORRECT
  • CLAIM_SUBMITTED_DATE_INCORRECT
  • CLEARINGHOUSE_CLAIM_ID_INCORRECT
  • CLEARINGHOUSE_NAME_INCORRECT
  • END_DATE_OF_SERVICE_INCORRECT
  • FACILITY_NPI_INCORRECT
  • FAX_NUMBER_INCORRECT
  • GROUP_NUMBER_INCORRECT
  • INTERNAL_CLAIM_ID_INCORRECT
  • INTERNAL_ID_INCORRECT
  • INTERNAL_PROVIDER_ID_INCORRECT
  • INTERNAL_TAG_INCORRECT
  • IS_PRIMARY_POLICY_INCORRECT
  • MEDICATION_NAME_INCORRECT
  • MEMBER_ADDRESS_INCORRECT
  • MEMBER_DATE_OF_BIRTH_INCORRECT
  • MEMBER_FIRST_NAME_INCORRECT
  • MEMBER_ID_INCORRECT
  • MEMBER_LAST_NAME_INCORRECT
  • OFFICE_NPI_INCORRECT
  • PATIENT_ADDRESS_INCORRECT
  • PATIENT_DATE_OF_BIRTH_INCORRECT
  • PATIENT_FIRST_NAME_INCORRECT
  • PATIENT_LAST_NAME_INCORRECT
  • PATIENT_PHONE_NUMBER_INCORRECT
  • PATIENT_RELATIONSHIP_TO_MEMBER_INCORRECT
  • PAYER_CLAIM_ID_INCORRECT
  • PAYER_NAME_INCORRECT
  • PHARMACY_NAME_INCORRECT
  • PHONE_NUMBER_INCORRECT
  • PRACTICE_NPI_INCORRECT
  • PRIOR_AUTH_ID_INCORRECT
  • PROVIDER_SPECIALTY_INCORRECT
  • PROVIDER_TYPE_INCORRECT
  • PTAN_INCORRECT
  • RENDERING_PROVIDER_ADDRESS_INCORRECT
  • RENDERING_PROVIDER_FIRST_NAME_INCORRECT
  • RENDERING_PROVIDER_LAST_NAME_INCORRECT
  • RENDERING_PROVIDER_NPI_INCORRECT
  • RENDERING_PROVIDER_PHONE_NUMBER_INCORRECT
  • RENDERING_PROVIDER_SPECIALTY_INCORRECT
  • SERVICE_STATE_INCORRECT
  • TAX_ID_INCORRECT

OTHER under NOT_FOUND

When the failure category is NOT_FOUND but no specific entity / *_MISSING / *_INCORRECT code fits. Stability. Existing codes won’t be renamed. New codes may be introduced — new *_MISSING or *_INCORRECT codes appear when new schemas reference new fields. When bucketing for analytics, default unknown values to OTHER rather than dropping the row.

Payer

The insurance company a request asks about. Identify the payer with inputs.payerName. When the schema also requires inputs.phoneNumber, that’s the number SuperDial will dial. If your account is enabled for payer-phone resolution (an opt-in capability — ask your account team), phoneNumber becomes optional: supply inputs.payerName alone and SuperDial will look up the dialing number for you. See the Payer Resolution guide for what the resolver matches, what inputs shape the result (especially memberId for BCBS-family payers), and the failure modes (PAYER_NOT_FOUND, PAYER_LOOKUP_FAILURE). When resolution runs and succeeds, the POST /v1/requests response — and the GET /v1/requests reads — carry a payerLookup sub-object echoing inputPayerName and the matched matchedPayerName. The resolved phone number is not returned: dialing happens server-side and is never echoed to clients. If your account is enabled for per-payer required inputs (a separate opt-in capability — ask your account team), some payers require additional inputs beyond the schema’s fields, so what you must supply can depend on payerName. See the Per-Payer Required Inputs guide.

Modality

The modality field on a RequestResponse records how the result was obtained, for billing audit and routing. SuperDial picks the modalities; you don’t address them directly.
ValueMeaning
digital_onlyOnly electronic channels (clearinghouses, eligibility APIs) were attempted. No phone call placed.
phone_onlyOnly a phone call was placed (no electronic attempt).
digital_plus_phoneBoth — electronic was attempted first, then a phone call.
nullNo modality has been dispatched yet — typical on a PROCESSING request that hasn’t started running.
The phone_only and digital_plus_phone values both mean a phone call was placed and is billable at the phone-call rate. digital_only means no phone call was placed.

data_completeness

A coarse completeness tier for digital-only results. Currently the only non-null value is "minimum", which appears when state is SUCCESS and modality is digital_only — a hint that a phone-call attempt could have yielded richer data than what the electronic source returned. null in every other case. Reserved for future richer tiers (enhanced, complete).

Webhook

An outbound HTTP POST that SuperDial sends to your endpoint when a request reaches a terminal state. See the Webhooks guide for payload, signature verification, and retry behavior.

dueDate

The date a request is scheduled to run, as an ISO-8601 timestamp on the RequestResponse shape. Set at submission time based on your account’s daily call capacity and any work already pending. Use it to give end users a “ready by” estimate when you submit a batch — particularly when a batch overflows your daily capacity and lands across multiple business days. null when not set.

Timestamps

dateCreated, completedAt, and dueDate on a request response are ISO-8601 strings with an explicit UTC offset — for example, "2026-04-24T15:32:18.123456+00:00". They are emitted in UTC by the server. Webhook payloads do not include any timestamps — they only carry requestId, requestBatchId, state, and the optional internalId/internalTag. To get timing data after a webhook fires, fetch the request via GET /v1/requests/{requestId} and read dateCreated/completedAt from the response. dateFrom and dateTo query parameters on the list endpoint accept YYYY-MM-DD and are interpreted as UTC midnight. When omitted, they default to today’s UTC window. Pass explicit values if you need a deterministic range.

internalId

An optional correlation ID you supply when creating a request. SuperDial echoes it back on reads and webhooks so you can match requests to your own records. Also serves as an idempotency key — see Idempotency.

internalTag

An optional opaque string you supply when creating a request. Echoed back on reads and webhooks. Useful for tagging requests (e.g., "march-batch", "high-priority") without polluting your own correlation IDs.

Optional response fields

A couple of fields on GET /v1/requests/{requestId} are per-account additions that aren’t surfaced by default. If one of these doesn’t appear in your responses, the capability isn’t turned on for your account. Contact your account team if you’d like either enabled.
FieldWhat it gives you
transcriptPostCallThe post-call transcript (separate from the live transcript).
callFromNumberThe outbound caller number (E.164) the call originated from.
These fields are additive — a response that omits them has the same shape as one without them enabled. Your parser doesn’t need to branch on whether your account has them.

Single-request vs list response shapes

GET /v1/requests/{requestId} and GET /v1/requests (list) return the same RequestResponse schema, but the list endpoint omits three enrichment fields that can be large:
FieldSingle GETList GET
transcript
transcriptPostCall✓ (when enabled)
recordingDownloadUrl
Other phone-enrichment fields (to, callDuration, callFromNumber, callSummary, callAuditSummary) are included in both endpoints when applicable. If you need any of the three list-omitted fields, fetch the single-request endpoint after locating the requestId.

Production vs Sandbox

Accounts can be provisioned with production and/or sandbox API key/secret pairs. Authenticating with a sandbox pair routes the request through SuperDial’s sandbox path: validation, idempotency, scheduling, and webhook delivery run identically to production, but phone-backed requests don’t dial a real number — results are LLM-generated against your schema instead. See the Sandbox guide for the complete picture, including a recommended test plan.
Webhooks are always signed with your production-side signing secret (your webhook secret if set, otherwise your production API key) — even for sandbox requests. See Webhooks → Signature verification.