Common Errors
Validation failures on the Applications API are returned synchronously as422 responses with an invalid_parameters array naming the fields that failed. The patterns below are the ones partners hit most often. For the complete rule set, see Validation Rules and Errors.
422 on a declined application: missing adverse action notice
422 on a declined application: missing adverse action notice
Symptom:
POST /v0/applications with status: declined returns 422.Cause: details.adverse_action_notice is required when the status is declined, and the object is all-or-nothing — delivered_at, reason, and delivery_method must all be present.Fix: deliver the notice per your Reg B process, then submit the application with the completed object. Declines and cancels must be reported even though no account is created for them — skipping them is a fair lending compliance gap, not a shortcut.422 on an approved application: missing or inconsistent credit fields
422 on an approved application: missing or inconsistent credit fields
Symptom: 422 on
status: approved, often with an error message mentioning “credit products” even though your product is not a credit product.Causes:details.credit.limit,details.credit.max_limit, anddetails.credit.underwriting_gradeare required on approval.underwriting_gradeis also required on declines.- The
details.creditobject itself is required on every application, andis_secured,is_mla, andcurrencyare required within it — whatever the status. - None of these rules inspect product type, despite what the error text says. A non-credit product still needs them.
limitcannot exceedmax_limit.- If
details.credit.reportis included,pulled_atandsourceare always required, and you must supply exactly one ofscore(300–850) ornon_score_value(unestablishedorfrozen). Supplying both, or neither, fails.
422 on documents: wrong timestamp for the document type
422 on documents: wrong timestamp for the document type
Symptom: 422 on
documents with the reason Documents do not conform to schema specification, on a payload that looks complete. The error names the array, not the entry that failed, so you have to check every entry.Cause: every document type is either a consent or a disclosure, and that determines which timestamp is required. Consent types — esign_agreement, credit_pull_consent, consent_to_link_account, consent_to_link_hsa, negative_option_consent — require consented_at. Every other type is a disclosure and requires displayed_at. document_id and type are always required.Fix: match the timestamp to the type. If you’re mapping from an internal document model, check that the mapping does not send displayed_at for consents by default.422 referencing entities
422 referencing entities
Symptom: 422 naming a field under
entities.Likely causes:- An
entity_iddoes not resolve to an existing entity. - The entity exists but does not meet the data requirements for the role it is being used in.
account_holdersmixes an individual with a business or sole proprietor. That combination is not permitted; business and sole proprietor entities may be combined with each other.- A commercial application is missing
authorized_signers, which are required when account holders are businesses or sole proprietors.
status is approved. A declined or canceled application does not surface those errors, so an entity problem can stay hidden until your first approval. The duplicate-entity checks are the exception and run on every status.How to confirm: GET the entity and inspect the role_details array — an inactive role’s criteria_details names the exact failed checks. See Entity Troubleshooting for how to read them, including the “Understand Indirect Failures” section on roles that fail because a related child entity failed its own checks.Fix: correct the entity data or the account holder composition, then retry. Using intended_roles on entity creation surfaces these problems before you ever call the Applications API.Reported the wrong terminal status
Reported the wrong terminal status
Symptom: an application was submitted as
approved when the correct outcome was declined, or vice versa.Fix: correct it with PATCH /v0/applications/{id}, supplying the corrected status. Because updates run the same validations as creation, the correction must also carry whatever the new status requires — a correction to declined needs a complete details.adverse_action_notice object.Cannot find an application by your own ID
Cannot find an application by your own ID
Symptom: lookups by your own identifier return an error or 404.Cause:
GET /v0/applications/{id} takes the server-generated application_* ID only. Your identifier is queried as GET /v0/applications?client_application_id=…, the filtered form of the collection.Fix: use the query-parameter form for client-assigned IDs, and store the application_* ID from the create response for direct retrieval. Note that client_application_id is present only on applications created via file upload — applications created through the API are identified solely by their server-generated ID.application_id (or client_application_id), the full request payload, and the 422 response body.
