Two distinct failures return HTTP 400. Inspect errorCode first: when present, the failure is a normalized transport error; when absent, the failure is a voucher-level rejection.Normalized transport error. Flexepin rejected the request at the protocol level (for example, the HMAC terminal ID or secret is wrong, mapped from Flexepin HTTP 404/401/403). Use errorCode for programmatic handling.
{"status":"error","isSuccess":false,"errorCode":"INVALID_PSP_CREDENTIALS","message":"Payment could not be processed due to invalid PSP credentials.","transactionId":"64a1f2b3c4d5e6f7a8b9c0d1","errors":[]}
Voucher-level rejection. The voucher itself is not redeemable: invalid PIN, mismatched currency, mismatched amount, or an already-redeemed voucher. These carry no errorCode; the reason is in message, with the raw Flexepin response in data when available.
An unexpected server-side failure. The transaction is marked failed. Retry the request; if the failure persists, contact support with the transactionId.
{"status":"error","message":"Internal server error","isSuccess":false,"data":"Something went wrong"}
A transport error that Flexepin could not classify is normalized to UNKNOWN_PSP_ERROR and also returns HTTP 500, using the normalized error shape.
{"status":"error","isSuccess":false,"errorCode":"UNKNOWN_PSP_ERROR","message":"An unexpected error occurred. Contact support if it continues.","transactionId":"64a1f2b3c4d5e6f7a8b9c0d1","errors":[]}
Flexepin does not support webhooks. The API response is the final result for this transaction.
Flexepin transport failures are mapped to normalized Mozarto errorCode values. Use errorCode for programmatic handling rather than parsing raw voucher response fields.
Mozarto errorCode
PSP raw signal
When
INVALID_PSP_CREDENTIALS
HTTP 404 / 401 / 403
HMAC key or terminal ID is missing or rejected by Flexepin
PSP_TIMEOUT
HTTP 408 or response body contains "timeout"
Flexepin did not respond in time - safe to retry
PSP_UNAVAILABLE
HTTP 5xx
Flexepin service error - safe to retry with backoff
PSP_RATE_LIMITED
HTTP 429
Too many requests - retry after a delay
UNKNOWN_PSP_ERROR
Any other response
Unrecognised transport error - check the raw response and contact support if it persists
Voucher-level rejections (invalid PIN, mismatched currency/amount, already-redeemed voucher) arrive with HTTP 200 and are returned in the standard data field with the raw result_description; these are distinct from transport errors and do not produce an errorCode.For the full list of errorCode values and retryability guidance, see Errors.