Skip to main content
When you submit POST /v1/requests, every value in inputs is validated synchronously, before the request is created. If anything fails, the request is rejected with HTTP 400 and the uniform INVALID_INPUTS envelope. Nothing is queued and no call is placed. Fix the inputs and resubmit. This page documents exactly which rules run. For the request body shape and the broader error taxonomy, see Creating a Request; to discover which keys a schema needs, see Schemas.

The error shape

All input failures collapse into a single response:
Validation produces two independent buckets, and a single request can populate both:
A field only lands in missingInputs if it’s required for your schema and you didn’t supply a usable value. A field lands in invalidInputs only when you did supply a non-empty value that broke a rule. Optional fields you leave out are never flagged; optional fields you do send are format-checked just like required ones.

Required vs. empty

A required input is considered missing when its value is null, absent, or a string that is empty or only whitespace after trimming. Which keys are required is schema-specific. Fetch them from GET /v1/schemas/{schemaId}/required-inputs. Two account features (below) can add more required keys at request time.

Universal value rules

These two checks run on every non-empty input value, regardless of the field’s type:
Scientific-notation failures almost always come from Excel/CSV exports that auto-convert long numeric member IDs or claim amounts. Format the offending column as text before exporting.

Per-field type rules

Each input key has a type configured by SuperDial. When a value is supplied, it’s checked against the rule for its type. Fields whose key contains phonenumber (case-insensitive, e.g. phoneNumber) get the phone check on top of their type.
Dates: any value the parser can read unambiguously is accepted, but to be safe and explicit, send ISO YYYY-MM-DD. Ambiguous values (e.g. 01/02/03) may resolve to a date you didn’t intend.
Some string fields carry a custom regex and a tailored error message configured by SuperDial. When present, the value must match the pattern, and the failure reason is the field’s custom message rather than the generic {field} is invalid. The rules currently configured:
A few fields (e.g. billingProviderNpi, memberId) don’t carry a custom message, so their failures fall back to the generic {field} is invalid. The memberId character rule above always runs on a supplied value; the richer, payer-aware Member ID validation below is a separate, feature-gated layer.

Member ID validation

Off by default. These memberId rules run only when your account has enforceMemberIdValidation enabled. Ask your account team. With the feature off, memberId is treated as an ordinary string and only the universal rules apply.
When enabled, memberId is checked against one of two rule sets, chosen by the payerName you send. Failures surface as invalidInputs.memberId. The validator picks the BCBS rules when payerName (spaces removed, lowercased) contains bcbs, bluecross, or blueshield; otherwise it applies the generic rules. Only the first failing rule is reported.

BCBS payers

Non-BCBS payers

Per-payer required inputs

Off by default. This runs only when your account has enforcePayerRequiredInputs enabled, and it ramps independently of member-ID validation.
When enabled and the payer is matched (see Payer Phone Number Lookup), the matched payer can require additional input keys beyond your schema’s base set for that request type. Any such keys you don’t supply are added to details.missingInputs, exactly like schema-required fields. The set is payer- and request-type-specific; the cleanest way to avoid surprises is to send every field returned by the schema’s required-inputs endpoint plus any payer-specific fields your account team has called out.

Worked example

A request that gets several things wrong at once:
dateOfService passed and providerNpi was simply absent (and required), so it shows up under missingInputs while the rest are format failures under invalidInputs. Read both buckets. A single resubmission should fix everything at once.