validation_error | 400 | Submitted payload failed contract validation. Inspect validationErrors[]. |
invalid_request | 400 | Request was syntactically invalid (missing required header, malformed JSON, etc.). |
invalid_token | 401 | Bearer token missing, malformed, or expired. Mint a fresh access token. |
forbidden | 403 | Token is valid but the partner application is not provisioned for this resource. |
not_found | 404 | Resource does not exist or is not visible to the caller. |
conflict | 409 | Idempotency-Key conflict, terminal-state mutation, or strict-order violation. |
kyc_documents_incomplete | 409 | Subscription refused because the investor is missing required KYC documents. The detail lists the missing types. Upload them with POST /v1/investors/{zestPersonId}/kyc-documents. |
payload_too_large | 413 | File exceeded the 10 MB upload cap. |
unsupported_media_type | 415 | Upload content-type not in the allow list (PDF, JPEG, PNG, WEBP). |
internal_error | 500 | Something broke on Zest’s side. Retry with backoff; cite errorId if persistent. |
service_unavailable | 503 | Transient downstream outage. Retry with exponential backoff. |