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

# The Charge object

> Read the record of each payment attempt made against a PaymentIntent.

<ResponseExample>
  ```json The Charge object theme={null}
  {
    "id": "ch_01JEXAMPLE2K8V4N9C6M1Q7R",
    "object": "charge",
    "intent_id": "pi_01JEXAMPLE2K8V4N9C6M1Q7R",
    "amount": 2500,
    "amount_refunded": 0,
    "currency": "usd",
    "status": "pending",
    "decline_code": null,
    "decline_type": null,
    "failure_message": null,
    "payment_method": "pm_01JEXAMPLE2K8V4N9C6M1Q7R"
  }
  ```
</ResponseExample>

A Charge (`ch_…`) records one confirmation attempt on a [PaymentIntent](/api-reference/payment-intents). It holds the outcome, authorization details, decline details, and settlement status. Ionic creates Charges when a PaymentIntent is confirmed; you read them but do not create them. A Charge can later be returned through a [Refund](/api-reference/refunds).

Each Charge references its PaymentIntent in `intent_id` and the PaymentMethod used in `payment_method`. For how these objects connect, see [Key concepts](/concepts/key-concepts#how-the-objects-connect). For refunds and captures, see [Refunds and captures](/guides/refunds-captures).

## Attributes

<ResponseField name="id" type="string">
  The charge id (`ch_…`).
</ResponseField>

<ResponseField name="intent_id" type="string">
  The payment intent this charge belongs to (`pi_…`).
</ResponseField>

<ResponseField name="amount" type="integer">
  The charge amount, in minor units. Always positive.
</ResponseField>

<ResponseField name="amount_refunded" type="integer">
  Total refunded so far, in minor units.
</ResponseField>

<ResponseField name="currency" type="string">
  The charge's currency, matching `amount`'s currency.
</ResponseField>

<ResponseField name="status" type="string">
  `uncertain` means the final outcome is not known yet. Retrieve the Charge again before retrying.
</ResponseField>

<ResponseField name="decline_code" type="string | null">
  Machine-readable decline reason, such as `insufficient_funds`.
</ResponseField>

<ResponseField name="decline_type" type="string | null">
  One of `authorization` (a card or funds issue), `authentication` (a fraud signal such as a lost or stolen card), or `infrastructure` (a processing or network problem). Set only when the Charge was declined; null otherwise.
</ResponseField>

<ResponseField name="failure_message" type="string | null">
  A human-readable failure detail. Nullable; present when the charge failed.
</ResponseField>

<ResponseField name="payment_method" type="string">
  The payment method (`pm_…`) used. Always present.
</ResponseField>

See every field in the response of [Retrieve a charge](/api-reference/charges/retrieve-a-charge).

## Endpoints

| Endpoint | Use it for |
| - | - |
| [List charges](/api-reference/charges/list-charges) | Review payment attempts or build reporting. |
| [Retrieve a charge](/api-reference/charges/retrieve-a-charge) | Check the outcome, decline details, and settlement status of one attempt. |

## Statuses

| Status | Meaning |
| - | - |
| `pending` | The attempt is in progress. |
| `authorized` | Approved and waiting for capture. |
| `succeeded` | Captured. |
| `declined` | The issuer declined. `decline_code` says why. See [Decline codes](/api-reference/decline-codes). |
| `failed` | The attempt could not be processed. |
| `refunded` | The full amount was refunded. |
| `voided` | The authorization was released before capture. |
| `uncertain` | The outcome is not known yet. Retrieve the Charge again before retrying. |

See [how payment status changes](/concepts/key-concepts#how-payment-status-changes) for how Charge outcomes move the PaymentIntent.

## Decline details

A declined or failed Charge carries `decline_code`, `decline_type`, and `failure_message`. [Decline codes](/api-reference/decline-codes) lists every code and what to do about it.

A PaymentIntent's `charges` list is ordered oldest first. Use `latest_charge_id` on the PaymentIntent to find the most recent attempt.


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