SuperDial Schemas API

Discover the schemas provisioned for your account and the required input keys for each. All non-2xx responses use the uniform `{error, message, [details]}` envelope (see the `ApiError` schema).

Operations 3

GET /v1/schemas List schemas #
GET /v1/schemas/{schemaId}/required-inputs Required inputs for a schema #
POST /v1/schemas/{schemaId}/required-payer-inputs Resolve payer names against a schema's required inputs #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/superdial-schemas-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

superdial-schemas-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: SuperDial REST API Reference
  version: 1.0.0
  title: SuperDial Schemas API
servers:
- url: https://robodialer-service-api-9nc4t1p9.uc.gateway.dev
  description: Production
tags:
- name: Schemas
  description: Discover the schemas provisioned for your account and the required input keys for each. All non-2xx responses use the uniform `{error, message, [details]}` envelope (see the `ApiError` schema).
paths:
  /v1/schemas:
    get:
      tags:
      - Schemas
      summary: List schemas
      description: Returns the schemas provisioned for your account. Each row carries a `requestType` (e.g. `claim-status`, `vob`) that identifies the kind of extraction the schema performs. Schemas that are no longer accessible for your account are filtered out.
      security:
      - bearerAuth: []
      responses:
        '200':
          description: List of schemas the caller's account is provisioned for.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListSchemasResponse'
              example:
                schemas:
                - schemaId: fWxzG4nqtpHsJxS5Lm3q
                  name: Claim Status (Commercial)
                  requestType: claim-status
                - schemaId: qP2bN8rT6mK1xC3vW9aL
                  name: Verification of Benefits
                  requestType: vob
        '401':
          description: 'Unauthorized: enforced by the API gateway. Returned when the `Authorization: Bearer <token>` header is missing, malformed, or the token is invalid/expired.'
          headers:
            WWW-Authenticate:
              description: Bearer realm and (when applicable) error code per RFC 6750.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayErrorResponse'
              examples:
                missingAuth:
                  summary: No Authorization header
                  value:
                    code: 401
                    message: Jwt is missing
                malformedJwt:
                  summary: Authorization header value isn't a valid JWT
                  value:
                    code: 401
                    message: Jwt is not in the form of Header.Payload.Signature with two dots and 3 sections
        '404':
          description: 'Account not found: the API key does not resolve to a provisioned account.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              example:
                error: ACCOUNT_NOT_FOUND
                message: No account is associated with this API key. Contact support if you believe this is an error.
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              example:
                error: INTERNAL_ERROR
                message: An internal error occurred. Please try again or contact support if the problem persists.
      operationId: getV1Schemas
      x-operation-id-source: derived
  /v1/schemas/{schemaId}/required-inputs:
    get:
      tags:
      - Schemas
      summary: Required inputs for a schema
      description: 'Returns the input keys required and optionally accepted to submit a request against this schema. Field names are returned verbatim. Use them as the keys of the `inputs` object on `POST /v1/requests`. Lists are sorted. This is the baseline: if your account is enabled for per-payer required inputs, some payers require additional fields not listed here, reported as `INVALID_INPUTS` on `POST /v1/requests`.'
      security:
      - bearerAuth: []
      parameters:
      - name: schemaId
        in: path
        required: true
        schema:
          type: string
        description: The schema ID (from `GET /v1/schemas`). Must be non-blank, ≤1500 characters, contain no `/`, and must not start with `_` or `.`.
      responses:
        '200':
          description: Sorted list of required input field names for this schema.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequiredInputsResponse'
              example:
                schemaId: fWxzG4nqtpHsJxS5Lm3q
                requiredInputs:
                  fields:
                  - beginningDateOfService
                  - billingProviderName
                  - billingProviderTaxId
                  - claimChargeAmount
                  - memberId
                  - patientDateOfBirth
                  - patientFirstName
                  - patientLastName
                  - payerName
                  - phoneNumber
                  - renderingProviderName
                  - renderingProviderNpi
                optionalInputs:
                  fields:
                  - memberId2
        '400':
          description: Invalid `schemaId` path parameter (empty, contains `/`, starts with `_` or `.`, or exceeds 1500 characters).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              example:
                error: INVALID_REQUEST
                message: The provided schemaId is invalid.
        '401':
          description: 'Unauthorized: enforced by the API gateway. Returned when the `Authorization: Bearer <token>` header is missing, malformed, or the token is invalid/expired.'
          headers:
            WWW-Authenticate:
              description: Bearer realm and (when applicable) error code per RFC 6750.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayErrorResponse'
              examples:
                missingAuth:
                  summary: No Authorization header
                  value:
                    code: 401
                    message: Jwt is missing
        '404':
          description: Schema not found, or account not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              examples:
                schemaNotFound:
                  summary: Schema not found, or has been retired and is no longer available for new requests
                  value:
                    error: SCHEMA_NOT_FOUND
                    message: No schema with that ID exists for your account.
                accountNotFound:
                  summary: 'The API key resolves to an account that no longer exists. Rare: wrong-API-key cases hit `INVALID_API_KEY` at `/v1/auth` first.'
                  value:
                    error: ACCOUNT_NOT_FOUND
                    message: No account is associated with this API key. Contact support if you believe this is an error.
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              example:
                error: INTERNAL_ERROR
                message: An internal error occurred. Please try again or contact support if the problem persists.
      operationId: getV1SchemasBySchemaIdRequiredInputs
      x-operation-id-source: derived
  /v1/schemas/{schemaId}/required-payer-inputs:
    post:
      tags:
      - Schemas
      summary: Resolve payer names against a schema's required inputs
      description: 'Given a schema and a batch of payer names, returns the schema''s own required/optional inputs **plus** the per-payer required inputs for each name, so you can assemble the complete input set for a specific payer *before* calling `POST /v1/requests`, instead of discovering a payer-specific field from an `INVALID_INPUTS` rejection. The schema-level `requiredInputs`/`optionalInputs` are identical in shape and meaning to `GET /v1/schemas/{schemaId}/required-inputs`; `payers` adds the per-payer detail.


        The response carries one `payers` entry per `payerNames` entry, in input order, with no de-duplication (positionally aligned 1:1 with the request array). Each entry is either **matched** (`inputPayerName`, `matchedPayerName`, `payerRequiredInputs.fields`) or a per-payer **error** (`inputPayerName`, `errorCode`, `message`). Discriminate on the presence of `errorCode`. A per-payer failure never fails the whole request; whole-request failures use the uniform `{error, message}` envelope.


        **Opt-in.** Gated on the `enforcePayerRequiredInputs` account feature. When it is off the endpoint returns 403 `PAYER_REQUIRED_INPUTS_DISABLED`. This is the schema-keyed twin of `POST /v1/scripts/{scriptId}/required-payer-inputs`. See the Per-Payer Required Inputs guide.'
      security:
      - bearerAuth: []
      parameters:
      - name: schemaId
        in: path
        required: true
        schema:
          type: string
        description: The schema ID (from `GET /v1/schemas`). Must be non-blank, ≤1500 characters, contain no `/`, and must not start with `_` or `.`.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequiredPayerInputsRequest'
            example:
              payerNames:
              - Sample Insurance Co
              - Unknown Payer
      responses:
        '200':
          description: Schema required/optional inputs plus one `payers` entry per requested name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequiredPayerInputsResponse'
              example:
                schemaId: fWxzG4nqtpHsJxS5Lm3q
                requiredInputs:
                  fields:
                  - beginningDateOfService
                  - billingProviderName
                  - billingProviderTaxId
                  - claimChargeAmount
                  - memberId
                  - patientDateOfBirth
                  - patientFirstName
                  - patientLastName
                  - payerName
                  - phoneNumber
                  - renderingProviderName
                  - renderingProviderNpi
                optionalInputs:
                  fields:
                  - memberId2
                payers:
                - inputPayerName: Sample Insurance Co
                  matchedPayerName: Sample Insurance Company, Inc.
                  payerRequiredInputs:
                    fields:
                    - claimNumber
                - inputPayerName: Unknown Payer
                  errorCode: PAYER_NOT_FOUND
                  message: No canonical payer matched 'Unknown Payer'.
        '400':
          description: 'Invalid `schemaId` path parameter, or a malformed request body. Whole-request only: a bad *individual* payer name comes back inline as a `payers[]` error entry, not a 400.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              examples:
                invalidSchemaId:
                  summary: schemaId is empty, contains `/`, starts with `_` or `.`, or exceeds 1500 characters
                  value:
                    error: INVALID_REQUEST
                    message: The provided schemaId is invalid.
                bodyNotObject:
                  summary: Body is missing or not a JSON object
                  value:
                    error: INVALID_REQUEST
                    message: Request body must be a JSON object.
                payerNamesNotArray:
                  summary: '`payerNames` is absent or not an array'
                  value:
                    error: INVALID_REQUEST
                    message: '`payerNames` must be a JSON array of strings.'
                payerNamesEmpty:
                  summary: '`payerNames` is an empty array'
                  value:
                    error: INVALID_REQUEST
                    message: '`payerNames` must contain at least one entry.'
                payerNamesTooMany:
                  summary: '`payerNames` exceeds the 50-entry cap (no truncation: the whole request is rejected)'
                  value:
                    error: INVALID_REQUEST
                    message: '`payerNames` may not exceed 50 entries.'
        '401':
          description: 'Unauthorized: enforced by the API gateway. Returned when the `Authorization: Bearer <token>` header is missing, malformed, or the token is invalid/expired.'
          headers:
            WWW-Authenticate:
              description: Bearer realm and (when applicable) error code per RFC 6750.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayErrorResponse'
              examples:
                missingAuth:
                  summary: No Authorization header
                  value:
                    code: 401
                    message: Jwt is missing
        '403':
          description: 'Per-payer required inputs is not enabled for your account. Opt-in feature: contact your account manager.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              example:
                error: PAYER_REQUIRED_INPUTS_DISABLED
                message: Payer-required inputs are available as an opt-in feature but are not currently enabled for your account. Reach out to your account manager to request access.
        '404':
          description: Schema not found, or account not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              examples:
                schemaNotFound:
                  summary: Schema not found, or has been retired and is no longer available for new requests
                  value:
                    error: SCHEMA_NOT_FOUND
                    message: No schema with that ID exists for your account.
                accountNotFound:
                  summary: 'The API key resolves to an account that no longer exists. Rare: wrong-API-key cases hit `INVALID_API_KEY` at `/v1/auth` first.'
                  value:
                    error: ACCOUNT_NOT_FOUND
                    message: No account is associated with this API key. Contact support if you believe this is an error.
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
              example:
                error: INTERNAL_ERROR
                message: An internal error occurred. Please try again or contact support if the problem persists.
      operationId: postV1SchemasBySchemaIdRequiredPayerInputs
      x-operation-id-source: derived
components:
  schemas:
    SchemaSummary:
      type: object
      description: One row in the `GET /v1/schemas` response.
      required:
      - schemaId
      - name
      - requestType
      properties:
        schemaId:
          type: string
          description: Stable identifier for the schema. Pass to `POST /v1/requests` as `schemaId`.
        name:
          type: string
          description: Human-readable schema name. Falls back to the `schemaId` if no name was set.
        requestType:
          type: string
          description: The kind of extraction this schema produces (e.g. `vob`, `claim-status`). Server-derived; surfaces on `RequestResponse.requestType` after the request runs. You don't need to pass it on `POST /v1/requests`.
    RequiredInputsResponse:
      type: object
      description: 'Success response from `GET /v1/schemas/{schemaId}/required-inputs`. Carries both required and optional input field lists; the two are disjoint: if a name is required by any source, it appears only in `requiredInputs.fields`.'
      required:
      - schemaId
      - requiredInputs
      - optionalInputs
      properties:
        schemaId:
          type: string
          description: Echoes the path parameter.
        requiredInputs:
          type: object
          required:
          - fields
          properties:
            fields:
              type: array
              items:
                type: string
              description: 'Sorted list of required input field names. Use these as the keys of the `inputs` object on `POST /v1/requests`. Returned verbatim: the names are exactly what the request validator expects. This is the baseline; with per-payer required inputs enabled, some payers require additional fields not listed here.'
        optionalInputs:
          type: object
          required:
          - fields
          properties:
            fields:
              type: array
              items:
                type: string
              description: Sorted list of optional input field names, accepted but not required by `POST /v1/requests`. Disjoint from `requiredInputs.fields`.
    MatchedPayerEntry:
      type: object
      description: 'A `payers[]` entry for a name that resolved to a canonical payer. The resolved phone number is intentionally omitted: dialing happens server-side and is never echoed back.'
      required:
      - inputPayerName
      - matchedPayerName
      - payerRequiredInputs
      properties:
        inputPayerName:
          type: string
          description: Echoes the requested name (trimmed of surrounding whitespace), verbatim.
        matchedPayerName:
          type: string
          description: Canonical payer name SuperDial matched. Compare against `inputPayerName` to confirm the match landed where you expected.
        payerRequiredInputs:
          type: object
          required:
          - fields
          properties:
            fields:
              type: array
              items:
                type: string
              description: Sorted list of the **additional** required-input field names this payer needs, beyond the schema-level `requiredInputs.fields`, not the full set (it may be empty when the payer adds nothing). Union it with `requiredInputs.fields` to get everything a request for this payer must supply to avoid an `INVALID_INPUTS` rejection.
    ListSchemasResponse:
      type: object
      description: Success response from `GET /v1/schemas`.
      required:
      - schemas
      properties:
        schemas:
          type: array
          items:
            $ref: '#/components/schemas/SchemaSummary'
          description: Schemas that have been retired or hidden for your account are filtered out of this list.
    RequiredPayerInputsRequest:
      type: object
      description: Request body for `POST /v1/schemas/{schemaId}/required-payer-inputs`.
      required:
      - payerNames
      properties:
        payerNames:
          type: array
          minItems: 1
          maxItems: 50
          items:
            type: string
          description: Payer names to resolve, 1–50 per request. Resolved independently, in order, with no de-duplication. The response's `payers` array is positionally aligned 1:1 with this array. More than 50 entries returns 400 `INVALID_REQUEST` (no truncation). A blank/whitespace-only entry is not a whole-request error. It comes back as a per-payer `INVALID_PAYER_NAME` entry in `payers`.
      example:
        payerNames:
        - Sample Insurance Co
        - Unknown Payer
    RequiredPayerInputsResponse:
      type: object
      description: Success body from `POST /v1/schemas/{schemaId}/required-payer-inputs`. Carries the schema's own `requiredInputs`/`optionalInputs` (identical shape and semantics to `GET /v1/schemas/{schemaId}/required-inputs`) plus a `payers` array with one entry per requested name.
      required:
      - schemaId
      - requiredInputs
      - optionalInputs
      - payers
      properties:
        schemaId:
          type: string
          description: Echoes the path parameter.
        requiredInputs:
          type: object
          required:
          - fields
          properties:
            fields:
              type: array
              items:
                type: string
              description: 'Sorted schema-level required input field names: the baseline every request against this schema needs, independent of payer.'
        optionalInputs:
          type: object
          required:
          - fields
          properties:
            fields:
              type: array
              items:
                type: string
              description: Sorted schema-level optional input field names. Disjoint from `requiredInputs.fields`.
        payers:
          type: array
          description: One entry per `payerNames` entry, in input order, with no de-duplication (positionally aligned 1:1 with the request). Each item is either a `MatchedPayerEntry` or a `PayerInputError`. Discriminate on the presence of `errorCode`.
          items:
            oneOf:
            - $ref: '#/components/schemas/MatchedPayerEntry'
            - $ref: '#/components/schemas/PayerInputError'
    ApiError:
      type: object
      description: Uniform error envelope returned by every non-2xx response from `/v1/requests` and `/v1/schemas`. The `error` field is a stable machine-readable code; the `message` field is a human-readable description safe to surface to end users; `details` (optional) carries the structured `missingInputs` / `invalidInputs` block on the `INVALID_INPUTS` path. Unmatched paths and unsupported HTTP methods fall back to the framework's default response (typically HTML); use a documented endpoint and method to receive this envelope.
      required:
      - error
      - message
      properties:
        error:
          type: string
          enum:
          - INVALID_REQUEST
          - INVALID_INPUTS
          - PAYER_NOT_FOUND
          - ACCOUNT_NOT_FOUND
          - SCHEMA_NOT_FOUND
          - REQUEST_NOT_FOUND
          - INTERNAL_ERROR
          - PAYER_LOOKUP_FAILURE
          - PAYER_REQUIRED_INPUTS_DISABLED
          description: Machine-readable error code for the HTTP envelope. See [Creating a Request → Error handling](/guides/creating-a-request#error-handling) for what each code means, when it fires, and how to handle it.
        message:
          type: string
          description: Human-readable error description. Never contains stack traces or internal identifiers.
        details:
          type: object
          description: '**Optional.** Currently set only for `INVALID_INPUTS`, where it contains `missingInputs` (array of field names) and/or `invalidInputs` (object mapping field name to reason). See the [Input Validation](/guides/input-validation) guide for the full set of rules behind these reasons.'
          properties:
            missingInputs:
              type: array
              description: Field names that were required but absent, null, or empty/whitespace-only.
              items:
                type: string
            invalidInputs:
              type: object
              description: Maps each rejected field name to a human-readable reason (e.g. `phoneNumber is not a valid U.S. phone number`, `claimChargeAmount is scientific notation`, `memberId contains invalid characters (curly braces)`, or a member-ID structure message).
              additionalProperties:
                type: string
    GatewayErrorResponse:
      type: object
      description: 'Error envelope returned by the API Gateway for auth failures and routing errors. Distinct from the service''s own `ApiError` envelope: gateway responses use `{code, message}` because they''re produced before the request reaches the service.'
      properties:
        code:
          type: integer
          description: HTTP status code, repeated in the body.
          example: 401
        message:
          type: string
          description: Human-readable error message from the gateway.
          example: Jwt is missing
      required:
      - code
      - message
    PayerInputError:
      type: object
      description: 'A `payers[]` entry for a name that could not be resolved. This is an inline, per-payer error: it does not fail the whole request. Distinguished from `MatchedPayerEntry` by the presence of `errorCode`.'
      required:
      - inputPayerName
      - errorCode
      - message
      properties:
        inputPayerName:
          type: string
          description: Echoes the requested name, verbatim (empty string when the input was blank/whitespace-only).
        errorCode:
          type: string
          enum:
          - INVALID_PAYER_NAME
          - PAYER_NOT_FOUND
          - PAYER_LOOKUP_FAILURE
          description: '`INVALID_PAYER_NAME`: the entry was blank/whitespace-only, so no lookup ran. `PAYER_NOT_FOUND`: no canonical payer matched the name. `PAYER_LOOKUP_FAILURE`: the lookup errored transiently; retry that name. These codes are scoped to this array and are distinct from the whole-request `{error, message}` envelope.'
        message:
          type: string
          description: Human-readable description of the per-payer failure.
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: Robodialer-API-Key
      description: Your SuperDial API key
    apiSecret:
      type: apiKey
      in: header
      name: Robodialer-API-Secret
      description: Your SuperDial API secret
    bearerAuth:
      type: http
      scheme: bearer
      description: Bearer token obtained from the /v1/auth endpoint