> ## Documentation Index
> Fetch the complete documentation index at: https://docs.y.uno/llms.txt
> Use this file to discover all available pages before exploring further.

# Payment Status and Response Codes

export const StatusBadge = ({type = 'secondary', text}) => {
  return <span className={`status-badge status-${type.toLowerCase().trim()}`}>{text}</span>;
};

export const HTMLBlock = ({children}) => <div dangerouslySetInnerHTML={{
  __html: children
}} />;

Payments have all the essential information about the order, including customer information, amount, currency, items, shipping info, etc. You can always refer to the transaction details for more details about the order and the payment interactions.

## Workflow

In the following workflow, you can find the different payment statuses and how they can be updated.

<Frame>
  <img src="https://mintcdn.com/yuno-3979e326/MTlogjS0_SlxtlJG/images/reference/payment/image1.png?fit=max&auto=format&n=MTlogjS0_SlxtlJG&q=85&s=ce5c7b804a23b9511ad5f3f4e7d266bc" width="3600" height="2784" data-path="images/reference/payment/image1.png" />
</Frame>

For every implementation, we recommend taking the payment <code>status</code> and <code>sub\_status</code> as the main reference for the payment's state. A payment could have different [transactions](/reference/transaction) associated with it. By focusing on the payment <code>status</code> / <code>sub\_status</code>, you can have the latest state regardless of how many transactions were made, giving you clear inputs for decision-making.

## Payments status

The payments can have the following status and sub status.

<table class="payment-status-table">
  <thead>
    <tr>
      <th>Status</th>
      <th>Substatus</th>
      <th>Transaction type</th>
      <th>Transaction status</th>
      <th>Description</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td class="status">
        <StatusBadge type="info" text="CREATED" />
      </td>

      <td class="substatus">
        <StatusBadge type="info" text="CREATED" />
      </td>

      <td />

      <td />

      <td>Initial state at the time of creating a payment.</td>
    </tr>

    <tr>
      <td class="status">
        <StatusBadge type="info" text="READY_TO_PAY" />
      </td>

      <td class="substatus">
        <StatusBadge type="info" text="CREATED" />
      </td>

      <td>Purchase</td>
      <td>Created</td>
      <td>Initial state at the time of creating a payment. Waiting for customer action</td>
    </tr>

    <tr>
      <td class="status" rowspan="7">
        <StatusBadge type="warning" text="PENDING" />
      </td>

      <td class="substatus">
        <StatusBadge type="warning" text="AUTHORIZED" />
      </td>

      <td>Authorize</td>
      <td>Succeeded</td>
      <td>Card authorizations</td>
    </tr>

    <tr>
      <td class="substatus">
        <StatusBadge type="warning" text="IN_PROCESS" />
      </td>

      <td>Purchase</td>
      <td>Created</td>
      <td>The client has been redirected to the provider and we are waiting for the completion of the payment.</td>
    </tr>

    <tr>
      <td class="substatus" rowspan="2">
        <StatusBadge type="warning" text="WAITING_ADDITIONAL_STEP" />
      </td>

      <td>Purchase</td>
      <td>Pending</td>
      <td>3DS/Second factor</td>
    </tr>

    <tr>
      <td>Authorize</td>
      <td>Pending</td>
      <td>3DS/Second factor for authorization flow</td>
    </tr>

    <tr>
      <td class="substatus">
        <StatusBadge type="warning" text="PENDING_PROVIDER_CONFIRMATION" />
      </td>

      <td>Purchase</td>
      <td>Pending</td>
      <td>Wating for providers payment confirmation.</td>
    </tr>

    <tr>
      <td class="substatus">
        <StatusBadge type="warning" text="PENDING_FRAUD_REVIEW" />
      </td>

      <td>Fraud</td>
      <td>Pending</td>
      <td>Transaction is being analyzed by fraud provider</td>
    </tr>

    <tr>
      <td class="substatus">
        <StatusBadge type="warning" text="PENDING_OTP_COMPLETION" />
      </td>

      <td>Purchase</td>
      <td>Pending</td>
      <td>Initial status upon payment creation</td>
    </tr>

    <tr>
      <td class="status">
        <StatusBadge type="success" text="VERIFIED" />
      </td>

      <td class="substatus">
        <StatusBadge type="success" text="VERIFIED" />
      </td>

      <td>Verify</td>
      <td>Succeeded</td>
      <td>Zero amount card authorizations</td>
    </tr>

    <tr>
      <td rowspan="2" class="status">
        <StatusBadge type="error" text="EXPIRED" />
      </td>

      <td rowspan="2" class="substatus">
        <StatusBadge type="error" text="EXPIRED" />
      </td>

      <td>Purchase</td>
      <td>Expired</td>
      <td>The offline payment method reaches its expiration date.</td>
    </tr>

    <tr>
      <td>Authorize</td>
      <td>Expired</td>
      <td><br />Authorization expires</td>
    </tr>

    <tr>
      <td rowspan="2" class="status">
        <StatusBadge type="error" text="REJECTED" />
      </td>

      <td rowspan="2" class="substatus">
        <StatusBadge type="error" text="REJECTED" />
      </td>

      <td>Purchase</td>
      <td>Rejected</td>
      <td>Rejected by Yuno</td>
    </tr>

    <tr>
      <td>Capture</td>
      <td>Error</td>
      <td>Capture rejection by Yuno</td>
    </tr>

    <tr>
      <td rowspan="3" class="status">
        <StatusBadge type="error" text="DECLINED" />
      </td>

      <td rowspan="2" class="substatus">
        <StatusBadge type="error" text="DECLINED" />
      </td>

      <td>Purchase</td>
      <td>Declined</td>
      <td>Providers rejection</td>
    </tr>

    <tr>
      <td>Capture</td>
      <td>Declined</td>
      <td>Providers capture rejection</td>
    </tr>

    <tr>
      <td class="substatus">
        <StatusBadge type="error" text="FRAUD_DECLINED" />
      </td>

      <td>Fraud screening</td>
      <td>Declined</td>
      <td>Declined fraud screening</td>
    </tr>

    <tr>
      <td rowspan="12" class="status">
        <StatusBadge type="success" text="SUCCEEDED" />
      </td>

      <td class="substatus">
        <StatusBadge type="success" text="PARTIALLY_APPROVED" />
      </td>

      <td>Purchase</td>
      <td>Succeeded</td>
      <td>Partial payment (payment with 2 cards)</td>
    </tr>

    <tr>
      <td class="substatus">
        <StatusBadge type="success" text="APPROVED" />
      </td>

      <td>Purchase</td>
      <td>Succeeded</td>
      <td>Successful payment</td>
    </tr>

    <tr>
      <td class="substatus">
        <StatusBadge type="success" text="CAPTURED" />
      </td>

      <td>Capture</td>
      <td>Succeeded</td>
      <td>Successful capture</td>
    </tr>

    <tr>
      <td rowspan="3" class="substatus">
        <StatusBadge type="success" text="PARTIALLY_CAPTURED" />
      </td>

      <td>Capture</td>
      <td>Succeeded</td>
      <td>Successful partial capture</td>
    </tr>

    <tr>
      <td>Refund</td>
      <td>Error/Declined</td>
      <td>Remains approved due to error in refund / cancellation</td>
    </tr>

    <tr>
      <td>Chargeback</td>
      <td>Error/Declined</td>
      <td>Remains approved due to rejection in chargeback</td>
    </tr>

    <tr>
      <td class="substatus">
        <StatusBadge type="secondary" text="PARTIALLY_REFUNDED" />
      </td>

      <td>Refund</td>
      <td>Succeeded</td>
      <td>Successful partial refund</td>
    </tr>

    <tr>
      <td class="substatus">
        <StatusBadge type="secondary" text="PARTIALLY_CHARGEBACKED" />
      </td>

      <td>Chargeback</td>
      <td>Succeeded</td>
      <td>Successful partial chargeback</td>
    </tr>

    <tr>
      <td class="substatus">
        <StatusBadge type="error" text="FRAUD_DECLINED" />
      </td>

      <td>Fraud screening</td>
      <td>Declined</td>
      <td>Fraud screening declined. Can occur before or after provider authorization. Payment succeeded and funds have moved. </td>
    </tr>

    <tr>
      <td class="substatus">
        <StatusBadge type="secondary" text="REFUND_RETRY_IN_PROCESS" />
      </td>

      <td>Refund</td>
      <td>Declined</td>
      <td>Transaction was declined and is waiting for retry.</td>
    </tr>

    <tr>
      <td class="substatus">
        <StatusBadge type="secondary" text="CAPTURE_RETRY_IN_PROCESS" />
      </td>

      <td>Capture</td>
      <td>Declined</td>
      <td>Transaction was declined and is waiting for retry.</td>
    </tr>

    <tr>
      <td class="substatus">
        <StatusBadge type="secondary" text="CAPTURE_RETRY_PROCESS_FAILED" />
      </td>

      <td>Capture</td>
      <td>Declined</td>
      <td>Transaction was declined and retry scheme it's finished.</td>
    </tr>

    <tr>
      <td rowspan="2" class="status">
        <StatusBadge type="secondary" text="REFUNDED" />
      </td>

      <td class="substatus">
        <StatusBadge type="warning" text="PENDING_PROVIDER_CONFIRMATION" />
      </td>

      <td>Refund</td>
      <td>Pending</td>
      <td>Refund Pending</td>
    </tr>

    <tr>
      <td class="substatus">
        <StatusBadge type="secondary" text="REFUNDED" />
      </td>

      <td>Refund</td>
      <td>Succeeded</td>
      <td>Successful refund</td>
    </tr>

    <tr>
      <td rowspan="2" class="status">
        <StatusBadge type="error" text="CANCELED" />
      </td>

      <td class="substatus">
        <StatusBadge type="warning" text="PENDING_PROVIDER_CONFIRMATION" />
      </td>

      <td>Cancel</td>
      <td>Pending</td>
      <td>Cancel Pending</td>
    </tr>

    <tr>
      <td class="substatus">
        <StatusBadge type="error" text="CANCELED" />
      </td>

      <td>Cancel</td>
      <td>Succeeded</td>
      <td>Successful cancelation</td>
    </tr>

    <tr>
      <td rowspan="2" class="status">
        <StatusBadge type="secondary" text="IN_DISPUTE" />
      </td>

      <td class="substatus">
        <StatusBadge type="secondary" text="RECEIVED" />
      </td>

      <td>Chargeback</td>
      <td>Created</td>
      <td>Chargeback or Inquiry received. Decision or documentation must be provided</td>
    </tr>

    <tr>
      <td class="substatus">
        <StatusBadge type="secondary" text="PENDING_REVIEW" />
      </td>

      <td>Chargeback</td>
      <td>Pending</td>
      <td>In\_review</td>
    </tr>

    <tr>
      <td rowspan="1" class="status">
        <StatusBadge type="error" text="CHARGEBACK" />
      </td>

      <td class="substatus">
        <StatusBadge type="error" text="LOST" />
      </td>

      <td>Chargeback</td>
      <td>Prevented</td>
      <td>Predispute deflected by provider/network. Payment reflects lost funds.</td>
    </tr>

    <tr>
      <td rowspan="4" class="status">
        <StatusBadge type="error" text="ERROR" />
      </td>

      <td class="substatus">
        <StatusBadge type="error" text="ERROR" />
      </td>

      <td />

      <td>Example: timeout.</td>

      <td />
    </tr>

    <tr>
      <td class="substatus">
        <StatusBadge type="error" text="TIMEOUT" />
      </td>

      <td />

      <td />

      <td />
    </tr>

    <tr>
      <td class="substatus">
        <StatusBadge type="warning" text="PENDING_REVERSE" />
      </td>

      <td />

      <td />

      <td />
    </tr>

    <tr>
      <td class="substatus">
        <StatusBadge type="warning" text="REVERSED_BY_TIMEOUT" />
      </td>

      <td />

      <td />

      <td />
    </tr>

    <tr>
      <td rowspan="1" class="status">
        <StatusBadge type="success" text="FRAUD" />
      </td>

      <td class="substatus">
        <StatusBadge type="success" text="FRAUD_VERIFIED" />
      </td>

      <td>Fraud</td>
      <td>Succeeded</td>
      <td>Transaction verified by fraud provider during stand alone fraud verification</td>
    </tr>
  </tbody>
</table>

<Note>
  `PREVENTED` is a transaction status only for `type = CHARGEBACK` when the provider/network reports a [predispute deflection](/docs/chargeback-management). In these scenarios, only the chargeback webhook is sent; no refund webhook is emitted.

  `REVIEW_WON` is a chargeback transaction status only. When a chargeback is won, the payment returns to its previous status (for example, `SUCCEEDED` / `APPROVED`) and no new payment status is emitted.
</Note>

### Possible states for sync and async flows

Use the diagram that matches your integration type to understand which payment states and transitions to expect.

#### Synchronous flow

In a synchronous flow, the payment moves from `CREATED` directly to a terminal status — such as `SUCCEEDED`, `DECLINED`, or `REJECTED` — within the same API response. There is no intermediate `PENDING` phase. `ERROR` is transversal and can occur at any point in the flow.

<Frame>
  <img src="https://mintcdn.com/yuno-3979e326/MTlogjS0_SlxtlJG/images/reference/payment/image2.png?fit=max&auto=format&n=MTlogjS0_SlxtlJG&q=85&s=f94d959aaab6834828925c985c49c88b" width="3600" height="2499" data-path="images/reference/payment/image2.png" />
</Frame>

#### Asynchronous flow

In an asynchronous flow, the payment passes through a `PENDING` phase after creation before reaching a terminal status. During this phase, substates such as `IN_PROCESS`, `AUTHORIZED`, and `WAITING_ADDITIONAL_STEP` reflect ongoing processing. The final status is delivered via webhook once processing completes. Payments initiated via direct async APMs may also enter a `READY_TO_PAY` state, which can transition to `EXPIRED` if not completed. `ERROR` is transversal and can occur at any point in the flow.

<Frame>
  <img src="https://mintcdn.com/yuno-3979e326/MTlogjS0_SlxtlJG/images/reference/payment/image3.png?fit=max&auto=format&n=MTlogjS0_SlxtlJG&q=85&s=d0c3713ffcd18b0bd8557396ef774065" width="3600" height="2784" data-path="images/reference/payment/image3.png" />
</Frame>
