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

# Get a checkout authorization

> The authoritative state of one authorization, including the processor response once approved.

<ParamField path="id" type="string" required>The authorization id.</ParamField>

<RequestExample>
  ```bash cURL theme={null}
  curl https://api.agentcard.sh/api/v2/checkout/authorizations/cauth_2q9d1x8f3k2m4t7w \
    -H "Authorization: Bearer $ORG_TOKEN"
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "id": "cauth_2q9d1x8f3k2m4t7w",
    "object": "checkout_authorization",
    "status": "approved",
    "mode": "token",
    "psp": "stripe",
    "merchant": "shop.example.com",
    "amount": 2306,
    "currency": "usd",
    "amount_display": "$23.06",
    "amount_authority": "processor",
    "amount_verified": true,
    "charged_amount": 2306,
    "charged_currency": "usd",
    "charged_kind": "captured",
    "replay_attempted": true,
    "settlement": {
      "status": "settled",
      "reason": "processor_succeeded",
      "final": true,
      "processor_reference": "ch_3Qxample",
      "processor_status": "succeeded",
      "processor_error_code": null,
      "settled_amount": 2306,
      "settled_currency": "usd",
      "checked_at": "2026-09-17T20:59:12.000Z",
      "resolved_at": "2026-09-17T20:59:12.000Z",
      "message": "The processor reports this payment succeeded: the charge settled."
    },
    "response": { "status": 200, "headers": { "content-type": "application/json" }, "body": "{\"id\":\"tok_…\"}" }
  }
  ```
</ResponseExample>

<ResponseField name="status" type="string">`awaiting_approval`, `approved`, `submitted_on_device` (hosted-form processors only; no processor evidence exists), `declined`, or `expired`.</ResponseField>
<ResponseField name="execution_mode" type="string">`user_approval` when the user approves in the Vault, `autopilot` when Agentcard pays without asking the user. An `autopilot` authorization carries no `approvalUrl` and names the permission that paid in `grant_id`. See [Enable auto-approval](/vault/app-auto-approval).</ResponseField>
<ResponseField name="autopilot_status" type="string">Present once Agentcard tried to pay without asking: `dispatching`, `succeeded`, `declined`, `not_submitted` (the purchase went back to waiting for the user), `outcome_unknown`, or `action_required` (the user's bank asked them to confirm the payment).</ResponseField>
<ResponseField name="execution_reason" type="string">`unverified_origin` when the purchase waits for the user because the create carried no `checkout_origin`, with a sentence in `execution_detail`. Absent otherwise.</ResponseField>
<ResponseField name="outcome" type="object | null">On an auto-approved purchase with `charged_kind: "none"`: what your app reported the merchant charged, refunded, or declined, with the `net_amount`. Null on any other purchase. See [Report a checkout outcome](/api-reference/vault/authorizations-outcome).</ResponseField>
<ResponseField name="response" type="object">On `approved` in `token` mode: the processor's response to replay into the paused request.</ResponseField>
<ResponseField name="substitutions" type="object">On `approved` in `cse` mode: the encrypted card fields to write into the paused body, plus `remove` for sibling keys to drop.</ResponseField>
<ResponseField name="amount" type="integer | null">The amount, in the currency's smallest unit, with `currency` and `amount_display` (the human form, `$23.06`). Null until an authority names one.</ResponseField>
<ResponseField name="amount_authority" type="string">Who named the amount: `processor` (the payment request, or the Stripe intent read back), `agent` (the `amount` your agent sent), `page` (the total read off the checkout page), or `none`. The highest known wins, and the processor's is read right before the card is sent.</ResponseField>
<ResponseField name="amount_verified" type="boolean | null">Whether what the processor charged matches the approved amount. Null when there was nothing to compare.</ResponseField>
<ResponseField name="charged_kind" type="string | null">`captured`, `authorized`, `none`, or null.</ResponseField>
<ResponseField name="reason" type="string">On `declined`: `user_declined`, `amount_mismatch`, `intent_not_confirmable`, `processor_refused` (with `psp_error_code`), or `processor_declined` (the processor declined an auto-approved purchase).</ResponseField>
<ResponseField name="processor_error" type="object">Optional on a Razorpay `processor_refused` result: bounded `reason`, `source`, `step`, `payment_id`, and `order_id` identifiers reported by the processor. Raw response bodies and descriptions are excluded. Older records may not contain these details.</ResponseField>
<ResponseField name="replay_attempted" type="boolean">True when a device may already have sent the card. On `expired`, read `settlement` for what the processor says.</ResponseField>
<ResponseField name="settlement" type="object | null">Whether the charge settled, read back from the processor by Agentcard itself once the authorization finished. `status` is `settled` (the processor reports a succeeded payment; `processor_reference` is its charge or intent, `settled_amount` what it collected), `not_settled` (no charge was made: `reason` is `processor_canceled`, `confirm_failed` with `processor_error_code`, or `not_confirmed`), or `unknown` with a `reason` (`check_pending`, `awaiting_customer_action`, `processor_processing`, `awaiting_merchant_capture`, `processor_unreachable`, `processor_refused_read`, `processor_reply_malformed`, `no_processor_reference`, `processor_reference_incomplete`). `final` is true once Agentcard will not check again; while false, poll or wait for the `checkout_authorization.settled` / `settlement_unconfirmed` webhook. `message` says it in a sentence. Only a Stripe PaymentIntent confirm can be read back; every other request is `unknown` / `no_processor_reference`, final at once. Null while awaiting approval, on a decline, and on an expiry where no device ever held the card.</ResponseField>

An approval is not an order. Confirm the order with the merchant before acting on it. A settled charge is not an order either: it tells you the money moved when the merchant page never showed a receipt, and the merchant's order is still where the purchase is confirmed.

`processor_refused` means the device reported a rejected processor request. A generic code such as Razorpay's `BAD_REQUEST_ERROR` does not establish an issuer decline or prove that nothing was charged. Check the merchant payment status before starting another attempt.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.