Skip to main content
A schema defines the structured output fields a request returns and which inputs are required to submit one. Pass its schemaId on POST /v1/requests to invoke it. These endpoints make integration self-service. Read the schemas your account is provisioned for. Read the fields a schema returns. Read the input keys a schema needs. Every endpoint here uses the same bearer-token authentication as the rest of the API. All non-2xx responses use the uniform {error, message, [details]} envelope (see Errors).

List your schemas

Response

Schemas that are no longer accessible for your account are filtered out of this list.

Look up the fields a schema returns

GET /v1/schemas/{schemaId} returns one schema’s detail. The part you build against is resultsFields: every field the schema can produce in results on GET /v1/requests/{requestId}. Read it to build your ingest mapping and your destination table before you run a request.

Response

name and requestType are the same values GET /v1/schemas returns for this schema. Inputs are not included here; use the required-inputs endpoint for what to send. Each entry in resultsFields carries: An optional key is omitted, never null. Entries are sorted by name. The list is never empty: a schema with no readable fields returns 500. name matches the top-level missingFields exactly. Do not join it against callSteps[].missingFields: that list falls back to raw question text for a skipped question that carries no alias. The endpoint does not report whether a field is required. Even a field the schema always asks for goes missing when the payer will not give it up, so requiredness is not a property you can build a NOT NULL column on. Read missingFields on a completed request to see what that run did not capture.
Every column you build from this inventory must be nullable. For this schema the inventory is a superset of any one response. Most fields on a large schema are gated on another field’s answer, so they are absent on any given request. An unanswered field is absent from results; it is never null. Map on name, treat every field as optional, and ignore keys you do not map. The endpoint does not report which fields are gated.

Value types

Those eleven are the full vocabulary. A schema can still declare a type outside the list. That type is returned as-is, so treat an unrecognised type as an opaque string.
allowedValues is not a closed set. The value CANNOT ANSWER - <reason> passes through verbatim as a string on any type, including boolean and multiple. A strict enum parse or boolean parse fails on it. Detect it by string prefix. It does not appear in missingFields: an explicit non-answer counts as answered.
A chained request can return keys beyond this schema. A request can open a follow-up leg: a second call against a different schema, listed as an extra entry in callSteps. That leg’s captured values merge into the same top-level results, under the leg schema’s own field names. resultsFields covers one schema and does not list them. Read callSteps[].schemaId on a completed request, then call this endpoint again for that ID.
resultsFields describes the schema’s current latest version. A request that already ran was pinned to the version that was latest at run time. So an older request’s results can carry keys this endpoint no longer lists, or omit keys it now lists. Read the endpoint again and diff the field list to find a change.

Look up required and optional inputs

Once you have a schemaId, fetch the input keys it accepts. The response carries two sorted, disjoint lists: requiredInputs.fields (must be supplied or you get INVALID_INPUTS) and optionalInputs.fields (accepted but not required, useful for “build a request” forms that want to show every key the schema declares). Both lists describe what this schema declares; neither is a limit on what inputs accepts.

Response

Field-name keys are returned verbatim: spell them in inputs on POST /v1/requests exactly as they come back here. If SuperDial updates the schema, call this endpoint again (or refresh your cache) before relying on a fixed list in code.
If your account is enabled for payer phone number lookup, phoneNumber moves out of requiredInputs.fields and into optionalInputs.fields for this endpoint, because you can omit it and let SuperDial fill it in from payerName. With lookup off (the default), phoneNumber stays required.
If your account is enabled for per-payer required inputs, some payers require additional inputs that aren’t listed here. Treat this list as the baseline; a request for one of those payers may need more.
This endpoint reports what the schema declares, not everything POST /v1/requests will take. You can send extra keys that appear in neither list, to give the call context the schema never asked to collect.

End-to-end discovery flow

After this you have both sides of the schema. To submit, pass the schemaId and populate every key in required inside the inputs object. You can add the optional keys, and extra keys of your own, on top of that. To ingest, map those field names onto your own columns, every one of them nullable. The requestType is server-derived; you’ll see it on the response.

Errors

Every non-2xx response uses the uniform envelope:

Example error responses

For the full response and parameter schemas, see the API Reference → Schemas.