Overview
All validation failures on the Applications API are returned synchronously. Business logic errors are returned as422 responses with an invalid_parameters array that identifies which fields failed and why, so you can correct the request before retrying.
POST /v0/applications — Required Fields
| Parameter | Validation Rule | Error Reason |
|---|---|---|
status | Required; must be approved, declined, or canceled | Status must be one of: approved, declined, canceled |
entities.account_holders | Required; minimum 1 element | Application is missing required account_holders field |
details | Required object | property "details" is missing |
documents | Required array | Application is missing required documents field |
decision | Required object | property "decision" is missing |
Idempotency-Key header | Required on POST | 400 operation_not_allowed: value is required but missing |
POST /v0/applications — Entity Validations (approved only)
Entity ID resolution and role validation are enforced only whenstatus is approved.
| Parameter | Validation Rule | Error Reason |
|---|---|---|
entities.account_holders | All entity IDs must resolve to existing entities | expected N account holder entities but only M resolved successfully; one or more entity IDs were not found |
entities.authorized_signers | All entity IDs must resolve to existing entities | expected N authorized signer entities but only M resolved successfully; one or more entity IDs were not found |
entities.account_holders | Cannot mix Individual and Business/Sole Prop entity types | account holders contain mixed entity types; all must be individuals (consumer) or all must be businesses/sole proprietors (commercial) |
entities.authorized_signers | Required (min 1) when account holders are Business or Sole Prop entities | Commercial application must have at least one authorized signer |
entities.authorized_signers | Entities must have the authorized_signer role | One or more authorized signer entities have incorrect role assignments |
POST /v0/applications — Field Validations
| Parameter | Validation Rule | Error Reason |
|---|---|---|
details.credit.currency | Must be a valid ISO 4217 currency code | Application is missing required currency field |
details.credit.limit | Cannot exceed details.credit.max_limit for approved applications | CreditLimit must not exceed MaxCreditLimit for approved credit products |
details.credit.report.score | If report object is provided, score is required; maximum value is 999 | CreditScore is required with credit_pulled_at and credit_report_source, maximum value is 999 |
details.credit.report.pulled_at | Required when report object is provided | CreditPulledAt is required with credit_score and credit_report_source, must be valid ISO8601 datetime |
details.credit.report.source | Required when report object is provided; must be equifax, experian, or transunion | CreditReportSource is required with credit_score and credit_pulled_at, must be one of: equifax, experian, transunion |
details.adverse_action_notice.delivered_at | Required when status is declined | AANDeliveredAt must be valid ISO8601 datetime when status is declined |
details.adverse_action_notice.reason | Required when status is declined | AANReason is required when status is declined |
details.adverse_action_notice.delivery_method | Required when status is declined; must be email, text, or other | AANDeliveryMethod must be one of: email, text, other when status is declined |
GET /v0/applications/id and GET /v0/applications/id/entity_relationships
| Validation | Error |
|---|---|
id must match the pattern ^application_\w+$ | 422 validation_error: string doesn't match the regular expression "^application_\w+$" |
| Application must exist | 404 not_found: The requested application was not found |
| In-progress (non-terminal) applications are not retrievable via API | 404 url_invalid: The requested application was not found |
Authentication
| Scenario | Error |
|---|---|
Using an application/read token to call POST /v0/applications | 403 insufficient_scope |
Using an unrelated scope token (e.g., account_number/read) | 403 insufficient_scope |
| Using an invalid or expired token | 403 token_invalid |

