Errors
Read an error response and decide whether to correct, retry, or contact support.
FincheckEngine uses standard HTTP status codes. A 2xx status means the request succeeded, 4xx means something in the request needs to change, and 5xx means something went wrong on Fincheck's side. Every error body carries a stable code and a human-readable message: branch on code, because a message may be reworded.
Status codes
Error responses
{
"code": "lead_already_accepted",
"message": "This lead has already been accepted."
}
A message is a sentence for people to read or log. It may be reworded, so never match on it. Field messages inside errors (see Field validation) are short phrases that read with the field name, such as is required.
Some errors add a field: missing_fields on intent_schema_validation_failed, row_errors on batch_rows_invalid. A batch row's problems use their own, simpler shape; see Batch Import.
Every error
Errors without a code
A few errors are sent before your API key is identified, so FincheckEngine does not yet know which contract you are on. Their body has only an error field and no code, so branch on the HTTP status. See Authentication.
Field validation
{
"code": "validation_failed",
"message": "Validation failed.",
"errors": {
"id_number": [{ "code": "invalid_format", "message": "must be a valid RSA ID number" }],
"payment_frequency": [{ "code": "not_in_enum", "message": "must be one of: weekly, fortnightly, monthly, other" }]
}
}
Each key in errors is a JSON field you sent, listing the first problem found with it: a stable code to branch on and a message to show or log. Every field with a problem is reported at once. Read the keys as they are: they match your request fields exactly.
Intent problems are separate. A missing intent, or an intent and intent_id that disagree, are field problems on intent. An unknown, inactive or unavailable intent is a request-level error (intent_not_found, intent_inactive, intent_unavailable) listed above, and is returned without field problems. See Intent Fields.
Each field's type and allowed values are in the field tables, for example Sending a Lead. An intent can require more fields and narrow the limits; see Intent Fields. These rules apply to POST /lead, POST /offer and every POST /lead/batch row.
Retrying safely
- Correct
400,401,403,404, and422responses before sending again. Retrying them unchanged gives the same result. - Retry
500and503with exponential backoff, for example after 1, 2, 4, and 8 seconds, and then stop. - Resending a
POST /leadorPOST /offerfor the same applicant does not send them to a partner twice. Checkresult:duplicatereturns the lead you already have. See Duplicate Submissions. - Never repeat
POST /acceptafter a timeout. Check the lead withGET /lead/{hashid}first. - For batches, poll the existing
batch_idinstead of uploading the file again.
Contacting support
Email support@finch-technologies.com with:
- the environment and endpoint;
- the HTTP status and response body;
- the lead id or batch id; and
- the time of the request.
Never send your full API key or unredacted applicant data.