Complete reference of every top level payment status and every sub status. Verified against the production codebase and canonical Yuno spec.
Yuno uses a two level model for every payment.
status is the top level value. Branch on this in your business logic.
sub_status is an optional refinement that adds detail. Useful for support, debugging, and granular UI states.
There are 14 top level statuses and a defined set of sub statuses per top level. The list below is the canonical taxonomy as enforced by payment-rx-orc and surfaced through POST /v1/payments.
AUTHORIZED is not a top level status. It is a sub status of PENDING. Auth only flows return status: PENDING, sub_status: AUTHORIZED until you call Capture. The same is true for PARTIALLY_CAPTURED, PARTIALLY_REFUNDED, and CAPTURED, which are sub statuses of SUCCEEDED, not separate top level values.
Yuno rejected the request for validation or risk reasons (failed before reaching a provider).
Yes
EXPIRED
Payment or authorization window expired before completion. Common for unpaid Boleto, OXXO, Pix QR codes that timed out.
Yes
CANCELED
Cancellation succeeded. Single L spelling, matches the API.
Yes
REFUNDED
Captured funds were returned to the customer.
Yes
IN_DISPUTE
Chargeback or inquiry received from the issuer. Awaiting evidence or response.
No
CHARGEBACK
Predispute deflected. Funds lost.
Yes
ERROR
System error such as timeout or upstream failure. The sub_status indicates the failure mode.
No
FRAUD
Transaction verified by the fraud provider during stand alone fraud verification.
Yes
Non terminal statuses can transition. Terminal statuses do not. Async methods typically surface PENDING first and settle to a terminal status through a webhook.
Each top level status has a defined set of allowed sub statuses. Use them for UI detail and support workflows. The code is the canonical Yuno value you will see on the payment object and on webhook payloads.
Pix, Boleto, OXXO, PSE, SPEI, SEPA, ACH and other async methods
CREATED -> PENDING (PENDING_PROVIDER_CONFIRMATION) -> SUCCEEDED (APPROVED) or EXPIRED
The synchronous response returns PENDING with the QR code, voucher reference, or redirect URL. The final status arrives via webhook when the customer completes the off platform action (or the window expires).
Synchronous response from POST /v1/payments carries the initial status. For sync methods this is final. For async methods it is PENDING.
Webhook events carry every subsequent transition. Webhooks are the source of truth.
Polling with GET /v1/payments/{payment_id} is a fallback for missed webhooks. Do not poll as a primary mechanism.
Never rely on client side status checks. Many transitions (3DS settlement, async APM confirmation, dispute updates, capture retries) happen entirely server side and only ever surface through webhooks.
Show “preparing payment” UI. Surface the redirect or QR code if present.
PENDING
Show “processing” UI. For 3DS, redirect to require_action.redirect_url. For async APMs, render the QR code, voucher, or redirect. Set a timeout matched to the method.
VERIFIED
Card was successfully verified. Store the token if your flow vaults the instrument.
SUCCEEDED
Confirm the order. Fulfill. Store payment_id for refunds.
DECLINED
Show a generic decline message. Do not expose raw provider codes to customers. See Provider errors.
REJECTED
Inspect the error response. Fix the request and retry. See Error codes.
EXPIRED
Notify the customer the window closed. Offer to create a new payment.
CANCELED
Confirm the cancellation. Release reserved inventory.
REFUNDED
Notify the customer. Update your order record.
IN_DISPUTE
Pull the dispute, gather evidence, respond before the deadline.
CHARGEBACK
Funds are gone. Update internal accounting.
ERROR
Inspect messages and x-trace-id. Retry transient errors with backoff. Open a support ticket for persistent ones.
FRAUD
Fraud verification completed. Treat per your risk policy.