Corgi BankDocumentation
OpenAPI

Errors

Every error is an RFC 9457 problem document. The HTTP status says what class of thing went wrong; the code says exactly what, and never changes.

The problem document

codestringAlways

The stable identifier to branch on. Codes shared by every route are bare (not_found); a service's own are prefixed (ledger.insufficient_available).

retryablebooleanAlways

Whether sending the same request again can succeed. With an idempotency key, retrying is always safe.

statusintegerAlways

The HTTP status, repeated in the body.

titlestringAlways

A sentence for a person. Do not parse it.

typestring · uriAlways

The problem type, as RFC 9457 defines it.

detailstringSometimes

What was wrong with this request in particular.

errorsarray of objectsSometimes

On a validation failure, each field and the reason it was refused.

instancestringSometimes

The request id. Quote it when asking about a failed request.

Every code

This list is read from the catalogue in the code, so it is complete.

Shared by every route

CodeStatusMeaningRetry
validation_failed400The request is invalidNo
malformed_request400The request body could not be parsedNo
unauthenticated401Authentication is requiredNo
forbidden403The caller may not perform this actionNo
not_found404The resource does not existNo
conflict409The request conflicts with the current stateNo
idempotency_key_reused422Idempotency key was used with a different requestNo
idempotency_in_progress409A request with this idempotency key is still being processedYes
step_up_required403A fresh authentication is required for this actionNo
rate_limited429Too many requestsYes
request_too_large413Request body too largeNo
precondition_failed412Resource version changedNo
internal500An internal error occurredYes
unavailable503The service is temporarily unavailableYes
dependency_failed424A dependency of this request failedYes

Ledger

CodeStatusMeaningRetry
ledger.journal_unbalanced422Journal debits do not equal creditsNo
ledger.currency_mismatch422Entries are not all in the account's currencyNo
ledger.account_closed422The ledger account is closedNo
ledger.account_unknown422The ledger account does not existNo
ledger.insufficient_available422Available balance is insufficientNo
ledger.business_date_closed422The business date is closedNo
ledger.hold_not_active422The hold is not activeNo
ledger.journal_already_reversed422The journal has already been reversedNo
ledger.maker_checker_required422A manual posting needs a maker and a distinct checkerNo
ledger.serialization_retry_exhausted409The posting could not be serialized; retryYes
ledger.balance_definition_unknown422The balance definition does not existNo
ledger.period_not_ready422Every banking day of the period must be closed firstNo
ledger.period_closed422The accounting period is closedNo
ledger.account_not_empty422The ledger account still has a balance or active holdsNo
ledger.currency_unsupported422The currency is not one the ledger is configured to holdNo
ledger.cross_currency_requires_fx_position422A movement between currencies must pass through the FX position accounts with a recorded rate and USD equivalentNo
ledger.fx_rate_unavailable409No independently approved rate covers this currency nowNo
ledger.fx_quote_expired409The FX quote is no longer validNo
ledger.fx_limit_exceeded422The conversion exceeds an approved FX limitNo
ledger.reconciliation_required409Earlier ledger state must be reconciled before this can proceedNo
ledger.backdate_reason_required422A backdated journal needs a reasonNo
ledger.backdate_too_old422The effective date is further back than backdating allowsNo
ledger.vostro_unsupported422The bank keeps no correspondent accounts for other banksNo
ledger.correspondent_route_unavailable409No reviewed, open nostro account settles the currencyNo
ledger.statement_refused422The cash management message cannot be acceptedNo

Accounts

CodeStatusMeaningRetry
accounts.reconciliation_required409Earlier account state must be reconciled before this can proceedNo
accounts.export_not_configured409The filing export is not configured for this environmentNo
accounts.account_not_empty422The account still has a balance or pending activityNo
accounts.cycle_not_ready422The statement cycle cannot run yetNo
accounts.product_not_live422The product version is not liveNo
accounts.account_not_open422The account is not openNo
accounts.currency_unsupported422This workflow does not support the account's currencyNo
accounts.fx_quote_expired409The exchange rate quoted is no longer validNo
accounts.debit_blocked422An active bank restriction prevents new debitsNo
accounts.withdrawal_restricted422The account does not permit this withdrawalNo
accounts.customer_not_eligible422The customer is not eligible for this productNo
accounts.deposit_screening_declined422Deposit-account screening declined or referred the consumerNo
accounts.not_escheatable422The account does not meet the state's abandonment period or the notice requirementNo
accounts.garnishment_not_open422The garnishment is not openNo
accounts.certificate_locked422The certificate is inside its term; withdraw early through the accounts service and pay the penaltyNo
accounts.transfer_limit_reached422The account has used the product's convenient transfers for the statement cycleNo
accounts.not_a_certificate422The account is not a certificateNo
accounts.rule_set_incomplete422The product has an event without an accounting ruleNo

Payments

CodeStatusMeaningRetry
payments.reconciliation_required409Earlier payment state must be reconciled before this can proceedNo
payments.duplicate_item409The same item was already deposited and has not been returnedNo
payments.limit_exceeded422The payment exceeds a limitNo
payments.originator_limit_exceeded422The originator's exposure limit would be exceededNo
payments.screening_hit422The payment is held for screening reviewNo
payments.cutoff_passed422The requested window has closedNo
payments.invalid_routing_number422The routing number is invalidNo
payments.rail_unavailable503The payment rail is unavailableYes
payments.duplicate_trace409An entry with this trace number already existsNo
payments.no_pending_transfers422There are no pending transfers to sendNo
payments.file_not_sent422The file has not been sent to the railNo
payments.transfer_not_settled422Only a settled transfer can be returnedNo
payments.unsupported_sec_code422The SEC code is not supportedNo
payments.exposure_limit_exceeded422The originator's exposure limit would be exceededNo
payments.originator_suspended422The originator is suspendedNo
payments.prenote_required422The counterparty account has not been verified by a prenotificationNo
payments.check_not_returnable422The item cannot be returned in its stateNo
payments.stop_payment_matched422A stop payment order covers the checkNo
payments.not_reviewable422The payment is not waiting for reviewNo
payments.unsupported_country422The bank does not send an international entry to that destinationNo
payments.not_cancellable422The transfer has left for its file window and cannot be cancelledNo
payments.already_cancelled409The transfer was already cancelledNo
payments.same_account422A transfer needs two different accountsNo
payments.wire_not_returnable422Only a settled or unapplied wire can be returnedNo
payments.imad_exhausted422The rail's message identifiers for the cycle date are spentYes
payments.return_window_closed422The entry settled too long ago to be returnedNo
payments.wire_not_applicable422Only an unapplied wire can be applied to an accountNo
payments.return_request_not_open422The return request is not waiting for a decisionNo
payments.payment_not_returnable422Only a received payment can be returnedNo
payments.request_not_open422The payment request is not waiting for thatNo
payments.unknown_gl_code422The GL code is not in the chart of accountsNo
payments.approval_required422The account's policy requires approval before this payment leavesNo
payments.approval_not_pending422The approval request is not waiting for a decisionNo
payments.self_approval422The approver may not decide this requestNo
payments.schedule_not_active422The schedule is not in a state that allows thisNo
payments.counterparty_deleted422The counterparty was deletedNo
payments.same_customer422Both accounts belong to the same customerNo
payments.not_in_group422The entities do not share an active multi-entity groupNo
payments.group_policy422The group's transfer policy does not let this entity move the moneyNo
payments.screening_review_required409A party screened as a potential match; the instrument is not issued until sanctions review clears itNo
payments.fraud_review_open409The payment is held by an open fraud review; only that review releases or rejects itNo
payments.callback_required409A verified call-back to the number on the customer record is required before releaseNo
payments.unsupported_deposit_channel422The bank does not take deposits through that channelNo
payments.control_approval_required409Loosening a payment control is recorded as a change and applied only when a second operator approves itNo
payments.swift_unroutable422The bank has no SWIFT route for the payment's currency or creditor agentNo
payments.swift_originator_incomplete422The originator's name, structured address or account is missing for a SWIFT transferNo
payments.swift_possible_duplicate409A payment with the same account, creditor and amount was sent recently; confirm the duplicate to send itNo
payments.swift_not_cancellable422The SWIFT payment is not in a state that can be cancelled or recalledNo
payments.swift_repair_not_open422The SWIFT repair is not waiting for a proposalNo
payments.swift_repair_not_proposed422The SWIFT repair has no proposal waiting for a decisionNo
payments.destination_not_supported422The bank does not send international wires to that countryNo
payments.destination_currency_not_supported422The bank does not send that currency to that countryNo
payments.fx_quotes_unavailable422The bank cannot book a foreign exchange quote on an international wireNo
payments.retirement_receipt_claimed409A retirement command in the accounts service holds or has applied this receiptNo
payments.retirement_receipt_applied409The receipt was applied to a protected retirement account and is returned only through a reviewed retirement commandNo
payments.retirement_receipt_not_claimable422The receipt is not parked on transit for a protected retirement accountNo

Lending

CodeStatusMeaningRetry
lending.reconciliation_required409Earlier lending state must be reconciled before this can proceedNo
lending.not_current422The loan has past-due instalmentsNo
lending.not_nonaccrual422The loan is not on nonaccrualNo

Operations

CodeStatusMeaningRetry
operations.reconciliation_required409Earlier operation state must be reconciled before this can proceedNo
operations.close_blocked409Bank close has unresolved prerequisitesNo
operations.same_person422The checker must be a different person from the makerNo
operations.not_pending422The request has already been decidedNo

Customers

CodeStatusMeaningRetry
customers.not_a_business422Only businesses belong to a multi-entity groupNo
customers.already_in_group409The customer belongs to a group alreadyNo
customers.group_parent422The parent stays in its groupNo
customers.group_closed422The group or the customer is closedNo

Reporting

CodeStatusMeaningRetry
reporting.time_deposit_evidence_required409Deposit participation evidence is requiredNo
reporting.statement_missing422No statement is held for the source and dateNo

Cards

CodeStatusMeaningRetry
cards.card_not_active422The card is not activeNo
cards.control_declined422A card control declined the authorizationNo
cards.hsm_refused422The hardware security module refused the command with the keys and inputs givenNo
cards.dual_control422The key ceremony step would break dual control or split knowledgeNo
cards.pin_tries_exceeded422The card's PIN tries are used up; the PIN is locked until an unlock is approvedNo
cards.pin_incorrect422The current PIN did not verifyNo
cards.hsm_not_configured409No HSM adapter is configured for card securityNo

Identity

CodeStatusMeaningRetry
identity.credential_invalid401The credential is invalidNo
identity.device_not_enrolled403The device is not enrolledNo
identity.token_expired401The token has expiredNo
identity.account_locked401The account is locked after too many failed attemptsNo
identity.passkey_invalid401The passkey assertion did not verifyNo

to move to open esc to close