Reason codes

A reason code is a member of the closed list the Prokura gate returns with every decision.

last updated 2026-11-11

Key facts

Definition

A reason code is a member of the closed list on the Prokura gate. The decision is derived from the codes. The list is not extended by this website.

OK
Every check passed. The decision is allow.
MANDATE_EXPIRED
The gate's clock is on or after the credential validUntil.
MANDATE_REVOKED
The credential's status-list revocation bit is set.
MANDATE_NOT_YET_VALID
The gate's clock is before the credential validFrom.
AGENT_MISMATCH
The intent's agent is not the credential subject, or the intent names a different mandate.
SIGNATURE_INVALID
The intent signature does not verify, createdAt is outside the five-minute window, the nonce was already used, or the credential proof did not verify.
PAYEE_NOT_ALLOWED
An IBAN must match exactly. A domain must be an allowed domain or a subdomain of one.
RAIL_NOT_ALLOWED
The intent's rail is not in the credential scope.
PURPOSE_NOT_ALLOWED
The intent's purpose is not in the credential scope.
CAP_PER_TX_EXCEEDED
The amount is above capPerTx for that currency.
CAP_PERIOD_EXCEEDED
Spend in the current period plus this amount is above capPeriod.
FOUR_EYES_REQUIRED
The amount is above fourEyesAbove and no passkey approval is attached. This is the only step-up reason. Any other reason forces deny.
PO_MISSING
The credential requires a purchase order and the intent has none.
INVOICE_HASH_MISSING
The credential requires an invoice hash and the intent has none.
DUPLICATE_INVOICE
That invoice hash was already seen for this mandate.
VOP_MISMATCH
Reserved in the closed list. The current gate has no verification-of-payee input and does not emit this code.
MCC_NOT_ALLOWED
The intent carries an MCC, the credential lists MCCs, and this code is not in the list.