FinaDOCS

Error Handling

Checkout and order endpoints signal business failures inside the response body, not through HTTP status codes.

Error envelope

Branch on error_code, not HTTP status

Business failures return HTTP 200 with a non-zero error_code — a numeric code serialized as a JSON string ("0" is success). HTTP 4xx/5xx appears only for malformed requests or infrastructure problems.

Error response
{
  "error_code": "801",
  "errors": [
    "an order with this order_reference_id already exists"
  ],
  "message": "Order already exists",
  "data": null
}

Two endpoints use different envelopes: Check Eligibility returns HTTP 400 with { is_error: true, message } for business failures, and Get Customer Invoices signals failures with success: false and a message, with no numeric code. Each endpoint page documents its own envelope.

Error code reference

CodeNameDescriptionResolution
400INVALID_PARAMSA required field is missing or a value failed validation (e.g. totals don't reconcile, invalid phone format, unknown field value).Check errors[] for the failing field. Ensure order.total_amount equals the sum of items[].total_amount plus shipping_amount minus discount_amount.
500INTERNAL_ERRORAn unexpected failure occurred on FINA's side.Retry with backoff; contact FINA support if it persists.
801ORDER_ALREADY_EXISTSAn order with the same order_reference_id already exists. order_reference_id is the idempotency anchor.Use a fresh order_reference_id for new orders; reuse the existing order for retries.
802SELLER_NOT_VALIDThe merchant resolved from the bearer token is not recognised for this operation.Verify the bearer token belongs to the correct merchant account.
803SELLER_INACTIVEThe merchant account exists but is not active.Contact the FINA team to activate the merchant account.
804ANOTHER_CHECKOUT_IN_PROGRESSA concurrent checkout for the same buyer is already in flight.Wait for the in-flight checkout to finish, then retry.
805CUSTOMER_NOT_ONBOARDEDThe buyer has not completed FINA onboarding.Run Check Eligibility and take the buyer through the signup_url onboarding flow.
806CUSTOMER_CREDIT_LIMIT_EXCEEDEDThe buyer's available credit does not cover this order.Offer a plan with a down payment, reduce the order amount, or hide FINA for this purchase.
808INVALID_ORDERNo order was found for the given order_id / order_number.Use the order_id returned by Initiate Checkout.
809OTP_VERIFICATION_FAILEDThe OTP is wrong or has expired. Buyers get 3 verification attempts.Ask the buyer to re-enter the code, or call Resend OTP and retry Authorise Checkout.
810ANOTHER_ACTION_IN_PROGRESSA concurrent action on the same order is already in flight.Wait for the in-flight action to finish, then retry.
811INVALID_ORDER_STATEThe order is not in a state that allows this operation (e.g. authorising an expired order, confirming delivery on an unauthorised order).Check the order lifecycle; only perform operations valid for the order's current status.
812NOTIFICATION_FAILEDThe OTP SMS could not be sent to the buyer.Retry Resend OTP; verify the buyer's phone number.
813INVALID_FILEThe invoice file could not be downloaded or is not a valid PDF.Ensure invoice_url is publicly reachable and points to a valid PDF.
876MISSING_PLAN_SELECTIONNo repayment plan could be resolved for the order.Pass a repayment_config_id returned by Repayment Plan Options.
877INVALID_PLAN_SELECTIONThe repayment_config_id is invalid, or commission_config.tenure_in_days / merchant_share do not match the selected plan.Send a repayment_config_id from Repayment Plan Options and keep commission_config consistent with that plan.
878PLAN_NOT_CONFIGUREDNo repayment plan is configured for the requested tenure_in_days / channel.Only offer plans returned by Repayment Plan Options; contact FINA to configure more.
881BG_DOC_EXPIREDThe buyer's credit agreement document has expired.Send the buyer through onboarding again via Check Eligibility's signup_url.