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.
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 aschemaId, 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
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
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.