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

# Lifecycle

> Payment lifecycle for authorisation and capture flows

<Steps>
  <Step title="Create a Payment Session with capture_method: manual">
    Pass `payment_method_options.card.capture_method: manual` inside the session options:

    ```json theme={"system"}
    POST /collect/payment_sessions

    {
      "amount": 100000,
      "currency": "ZAR",
      "type": "one_time",
      "options": {
        "checkout_options": {
          "return_url": "https://merchant.example/order/123/status"
        },
        "payment_method_options": {
          "card": {
            "capture_method": "manual"
          }
        }
      },
      "external_reference": "order_123"
    }
    ```
  </Step>

  <Step title="Customer completes authorisation">
    The customer is redirected to the checkout page (`session_url`) and completes the card payment. On success, the underlying payment object transitions to `status: succeeded`, meaning funds are **reserved but not yet settled**.

    The Payment Session itself transitions to `status: completed` with `payment_outcome: reserved`. The session outcome remains `reserved` even after subsequent captures or voids, which are tracked on the underlying payment resource. The deprecated `payment_status` field continues to be populated with `paid` for backwards compatibility.

    The payment object at this stage:

    ```json theme={"system"}
    {
      "id": "pay_rOaZNqKZMFxsRb2NBL1cj",
      "status": "succeeded",
      "intent": "payment",
      "amount": 100000,
      "currency": "ZAR",
      "capture_method": "manual",
      "authorised_amount": 100000,
      "paid_amount": 0,
      "voided_amount": 0,
      "country": "ZA",
      "payment_method_details": {
        "type": "card",
        "card": {
          "type": "CREDIT",
          "scheme": "MASTERCARD",
          "bin": "527346",
          "last4": "3333"
        }
      },
      "external_reference": "order_123",
      "mode": "live",
      "created_at": "2026-03-18T09:00:44.224Z",
      "updated_at": "2026-03-18T09:01:12.531Z"
    }
    ```

    **Webhook fired:** `payment.succeeded`
  </Step>

  <Step title="Capture or void">
    Once the authorisation succeeds, you have a limited window to act before it expires:

    * **Capture** the payment to settle funds (full or partial)
    * **Void** the authorisation to release the hold
    * **Do nothing** and let the authorisation expire automatically
  </Step>
</Steps>

## Flow Diagram

```mermaid theme={"system"}
flowchart TD
  A[Authorisation succeeds] --> B{Merchant decides}
  B --> C[Full capture]
  B --> D[Partial capture]
  B --> E[Void]
  B --> F[No action]
  D --> G{Remaining authorisation}
  G --> H[Capture remaining]
  G --> I[Void remaining]
  F --> J[Authorisation expires]
```

## Authorisation Expiry

Authorisations have a limited validity period set by the issuing bank and card network. After expiry:

* The authorisation can no longer be captured
* Reserved funds are automatically released back to the customer by the card network
* Attempting to capture returns a `409 Conflict` error:

```json theme={"system"}
{
  "type": "https://docs.momentco.io/errors/conflict",
  "title": "Conflict",
  "status": 409,
  "detail": "The authorisation has expired and can no longer be captured.",
  "instance": "/collect/payments/pay_rOaZNqKZMFxsRb2NBL1cj/captures",
  "code": "conflict"
}
```

<Note>
  Authorisation validity periods vary by payment method and issuing bank, typically ranging from 5 to 30 days for card payments. Plan your capture workflow accordingly.
</Note>
