Partner API error catalog
Every Partner API error returns an error.code field. Use this catalog for alerting, runbooks, and support triage.
| Code | HTTP | Cause | Details |
|---|---|---|---|
invalid_request | 400 | Request failed validation — wrong query, path, or body parameter. | View runbook |
invalid_json_body | 400 | Request body is not valid JSON. | View runbook |
missing_api_key | 401 | Authorization header is missing or does not contain a gando_pk_ API key. | View runbook |
invalid_api_key | 401 | API key is unknown or malformed. | View runbook |
api_key_revoked | 401 | API key exists but has been revoked. | View runbook |
account_not_linked | 403 | Rental operator account is not linked to this partner. | View runbook |
account_revoked | 403 | The link between this partner and the rental operator account has been revoked. | View runbook |
deposit_not_found | 404 | No deposit exists with the given id, or it belongs to another partner context. | View runbook |
deposit_access_denied | 403 | Deposit exists but this partner cannot access it (wrong account link). | View runbook |
client_not_found | 404 | No client exists with the given id in this account context. | View runbook |
client_access_denied | 403 | Client exists but this partner cannot access it. | View runbook |
webhook_not_found | 404 | No webhook endpoint exists with the given id for this partner. | View runbook |
webhook_access_denied | 403 | Webhook exists but belongs to another partner. | View runbook |
capture_not_found | 404 | No successful capture exists for this deposit. | View runbook |
deposit_already_captured | 409 | Deposit has already been fully or partially captured. | View runbook |
deposit_invalid_status | 422 | Deposit is not in a valid state for this operation. | View runbook |
deposit_missing_payment_method | 422 | Deposit has no payment method attached — customer has not completed the card imprint. | View runbook |
deposit_missing_payment_intent | 422 | Deposit has no payment intent — PSP side was not initialized. | View runbook |
invalid_capture_amount | 400 | Capture amount is missing, zero, or not a positive number. | View runbook |
capture_amount_too_low | 400 | Capture amount is below the minimum allowed threshold. | View runbook |
capture_amount_exceeds_deposit | 400 | Capture amount exceeds the remaining deposit total. | View runbook |
account_not_capture_ready | 422 | Rental operator account is not ready for captures — onboarding or PSP setup incomplete. | View runbook |
operator_billing_incomplete | 400 | Rental operator billing identity/address (name, street, postal code, city, country, SIREN) is incomplete — required before an Inflow capture can be initiated. | View runbook |
payment_processor_unavailable | 503 | Payment processor (PSP) is temporarily unavailable. | View runbook |
payment_processor_error | 502 | Payment processor returned an error during capture or cancel, or refused the customer refund when cancelling a booking deposit session. | View runbook |
psp_unavailable | 503 | Payment service provider (Inflow) is temporarily unavailable for a Payment API call (e.g. wallet-balance). | View runbook |
invalid_iban | 400 | IBAN failed validation (format, checksum, or country rules). | View runbook |
bank_account_not_found | 404 | No beneficiary bank account exists with the given id for this rental operator account. | View runbook |
bank_account_disabled | 400 | The beneficiary bank account exists but has been disabled. | View runbook |
payment_not_found | 404 | No payment exists with the given id for this rental operator account. | View runbook |
payment_not_refundable | 400 | Payment status does not allow a refund (must be succeeded or partially_refunded with remaining refundable amount). | View runbook |
payment_not_cancellable | 409 | Payment status does not allow cancellation (must be pending or draft) — it may have already succeeded, failed, or been cancelled. | View runbook |
beneficiary_payout_not_found | 404 | No beneficiary payout matches the given id for this account. | View runbook |
insufficient_balance | 400 | Sub-merchant available balance is lower than the requested payout amount. | View runbook |
payout_exceeds_withdrawable | 400 | The payout exceeds the balance left after the cancellation reserve is held back, on operator Stripe Connect payouts and operator Inflow payouts. The partner API reports the same rejection as insufficient_balance, with withdrawableCents and reserveCents in details. | View runbook |
booking_deposit_session_not_found | 404 | No booking deposit session exists with the given id for this partner context. | View runbook |
booking_deposit_session_expired | 400 | Booking deposit session link has passed its expiresAt deadline without completion. | View runbook |
booking_deposit_session_not_cancellable | 409 | The booking deposit session is not paid (status other than completed), is already cancelled, or one of its deposits is no longer active (captured, closed, cancelled or expired). | View runbook |
account_kyb_not_active | 403 | Rental operator KYB (Know Your Business) is not active — payment resources are blocked. | View runbook |
external_reference_conflict | 409 | externalReference is already used by another resource for this rental operator account. | View runbook |
refund_insufficient_balance | 409 | The rental operator's available Inflow balance is lower than the requested refund amount. | View runbook |
billing_address_required | 409 | Rental operator's Account has no complete billing address (street/postalCode/city/country) — required before accepting payments and before creating or paying a combined booking deposit session (the booking VAT rate follows the rental operator's address). | View runbook |
combined_booking_unsupported_country | 409 | The rental operator's billing address is outside metropolitan France (incl. Corsica), Monaco and the 5 French overseas departments (Guadeloupe, Martinique, Réunion, Guyane, Mayotte). Combined booking payment is not available there, including in the overseas collectivities (Saint-Barthélemy, Saint-Martin, Saint-Pierre-et-Miquelon, Wallis-et-Futuna, French Polynesia, New Caledonia). | View runbook |
payout_account_not_ready | 409 | The rental operator has no connected payout account yet, or its KYB is not verified. The booking share of a combined booking payment is paid out to that account, so a combined booking deposit session cannot be created. | View runbook |
invalid_client_id | 400 | clientId in the request does not belong to the linked rental operator account. | View runbook |
client_not_linked_to_deposit | 422 | The client on the deposit does not match the client requested for scoring. | View runbook |
scoring_not_found | 404 | No open-banking scoring data exists for this client. | View runbook |
scoring_not_applicable | 409 | The deposit's securingMode is no_scoring (Swift offer, or Custom without scoring) — there is no open-banking scoring step for this deposit. | View runbook |
scoring_retry_required | 409 | The latest scoring attempt for this deposit could not be computed from the customer's bank data. details.reason says why: bridge_error, bridge_sync_failed, transactions_fetch_failed, bridge_timeout, data_access_disabled (current accounts excluded by the customer), no_eur_account, no_balance, history_maybe_incomplete (bank still synchronising), no_bank_connection. details.retryRequestedAt is when it happened. No rating is given and no older scoring is returned. | View runbook |
bank_disconnect_failed | 502 | The customer asked to disconnect their bank from the deposit flow (POST /api/public/bank-identity/disconnect) and the open banking provider did not remove access. Nothing was disconnected. | View runbook |
offer_switch_not_allowed | 403 | The requested offer transition is not allowed in self-service (only swift → flex is). | View runbook |
card_expires_too_soon | 400 | The customer's card expires before the deposit's securing window end (plus the validity margin) — it cannot be used to secure this deposit. | View runbook |
invalid_idempotency_key | 400 | Idempotency-Key header is not a valid UUID v4. | View runbook |
idempotency_key_conflict | 409 | Same Idempotency-Key was reused with a different request body. | View runbook |
redis_unavailable | 503 | Redis is unavailable — Idempotency-Key cannot be processed. | View runbook |
rate_limited | 429 | Too many requests in the rate-limit window. | View runbook |
internal_error | 500 | Unexpected server error. | View runbook |
bad_gateway | 502 | Upstream service returned an invalid or unreachable response. | View runbook |
invalid_params | 400 | Connect URL is missing required parameters or ts is not a valid Unix timestamp. | View runbook |
partner_not_found | 404 | Partner slug in the connect URL does not match any registered partner. | View runbook |
missing_connect_secret | 500 | Partner exists but connect_secret is not configured in Gando admin. | View runbook |
invalid_signature | 401 | HMAC signature does not match the expected payload. | View runbook |
expired | 401 | ts timestamp is outside the 5-minute tolerance window. | View runbook |