> ## 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.

# List charges



## OpenAPI

````yaml /openapi/payments.yaml get /charges
openapi: 3.0.3
info:
  title: Ionic Payments API
  version: '2026-05-01'
  description: |
    Payment intents, charges, and refunds — the money-movement core.

    A payment intent (`pi_…`) tracks one payment. Create it with an amount and
    currency, then confirm it with a payment method or one-time payment token.
    Each confirmation creates a Charge; after a decline, confirm the same
    PaymentIntent again with a different payment method. With
    `capture_method: automatic` (the default) a successful
    confirmation captures immediately; with `manual` it authorizes, and you
    capture later. A Charge (`ch_…`) records one confirmation attempt, and
    `latest_charge_id` points to the most recent one. A Refund (`rf_…`) returns
    captured funds from a Charge.

    All monetary amounts are integers in the currency's minor unit (for example
    cents for USD). Timestamps are Unix epoch seconds. Identifiers are opaque,
    prefixed strings.

    Authentication uses a merchant secret key (`sk_…`) as a bearer token. Read
    endpoints require the `payments:read` permission; write endpoints require
    `payments:write`. The mode of the key (test or live) scopes which resources
    it can see and mutate, and is reflected by each resource's `livemode` field.
    Confirming and retrieving an intent additionally accept a publishable key
    (`pk_…`) together with the intent's `client_secret`, for client-side flows;
    every other endpoint is secret-key only. Send an `Idempotency-Key` header on
    create, confirm, capture, and cancel so retries do not duplicate an
    operation.

    Errors are returned as `{ "error": { "code": "...", "message": "..." } }`.
    Payment-specific failures carry extra fields: a card decline returns `402`
    with `type: card_error`, a `decline_code`, a `decline_type`, and a
    `retryable` flag, and embeds the current payment intent so you can inspect
    its status without a second call.
servers:
  - url: '{baseUrl}/v1'
    variables:
      baseUrl:
        default: https://api.ionicfi.com
        description: API base URL for your environment.
security:
  - secretKey: []
tags:
  - name: Payment Intents
    description: Create, confirm, capture, and cancel attempts to collect money.
  - name: Charges
    description: Records of individual PaymentIntent confirmation attempts.
  - name: Refunds
    description: Reversals of captured funds on a charge.
paths:
  /charges:
    get:
      tags:
        - Charges
      summary: List charges
      operationId: charges_list
      parameters:
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Offset'
        - name: starting_after
          in: query
          description: >-
            Cursor: a charge id (typically the previous response's
            `next_cursor`). Returns results strictly after it, newest first.
            Cannot be combined with `offset`.
          schema:
            type: string
      responses:
        '200':
          description: A list of charges, newest first.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChargeList'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
      security:
        - secretKey:
            - payments:read
components:
  parameters:
    Limit:
      name: limit
      in: query
      description: Page size (default 20, max 100).
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 20
    Offset:
      name: offset
      in: query
      description: Number of records to skip.
      schema:
        type: integer
        minimum: 0
        default: 0
  schemas:
    ChargeList:
      type: object
      required:
        - data
        - has_more
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Charge'
        has_more:
          type: boolean
          description: Whether more records exist beyond this page.
        next_cursor:
          type: string
          description: >-
            Present when `has_more` is true: the last returned charge's id. Pass
            it as `starting_after` on the next request.
    Charge:
      type: object
      required:
        - amount
        - amount_refunded
        - authorization_code
        - created_at
        - currency
        - decline_code
        - decline_type
        - failure_message
        - id
        - intent_id
        - object
        - payment_method
        - settled_at
        - settlement_batch_id
        - status
        - updated_at
      properties:
        id:
          type: string
          description: The charge id (`ch_…`).
        object:
          type: string
          enum:
            - charge
          description: Always `charge`.
        intent_id:
          type: string
          description: The payment intent this charge belongs to (`pi_…`).
        payment_method:
          type: string
          description: The payment method (`pm_…`) used. Always present.
        amount:
          type: integer
          description: The charge amount, in minor units. Always positive.
        amount_refunded:
          type: integer
          description: Total refunded so far, in minor units.
        currency:
          type: string
          description: The charge's currency, matching `amount`'s currency.
        status:
          type: string
          enum:
            - pending
            - authorized
            - succeeded
            - declined
            - failed
            - refunded
            - voided
            - uncertain
          description: >-
            `uncertain` means the final outcome is not known yet. Retrieve the
            Charge again before retrying.
        authorization_code:
          type: string
          nullable: true
          description: >-
            Authorization code for an approved payment. Null until the Charge is
            authorized or completed.
        settlement_batch_id:
          type: string
          nullable: true
          description: >-
            Terminal batch (`tmb_…`) containing this Charge. Null until the
            Charge is settled in a batch.
        settled_at:
          type: integer
          nullable: true
          description: >-
            Unix epoch seconds when the Charge settled. Null until settlement
            completes.
        decline_code:
          type: string
          nullable: true
          description: Machine-readable decline reason, such as `insufficient_funds`.
        decline_type:
          type: string
          nullable: true
          description: >-
            One of `authorization` (a card or funds issue), `authentication`
            (the payment could not be authenticated), or `infrastructure` (a
            temporary processing problem). Set only when the Charge was
            declined; null otherwise.
        failure_message:
          type: string
          nullable: true
          description: >-
            A human-readable failure detail. Nullable; present when the charge
            failed.
        created_at:
          type: integer
          description: Unix epoch seconds when the charge was created.
        updated_at:
          type: integer
          description: Unix epoch seconds when the charge was last updated.
    Error:
      type: object
      properties:
        error:
          $ref: '#/components/schemas/ErrorDetail'
    ErrorDetail:
      type: object
      required:
        - code
        - message
      properties:
        code:
          type: string
        message:
          type: string
        type:
          type: string
          enum:
            - card_error
            - invalid_request_error
            - api_error
        decline_code:
          type: string
        decline_type:
          type: string
          enum:
            - authorization
            - authentication
            - infrastructure
        retryable:
          type: boolean
          description: >-
            Whether the underlying condition may resolve on its own over time —
            for example available funds being deposited or a velocity window
            resetting. `true` does not mean the request is safe to retry
            immediately.
        doc_url:
          type: string
  responses:
    BadRequest:
      description: The request was malformed or failed validation.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: INVALID_REQUEST
              message: invalid currency
    Unauthorized:
      description: Missing or invalid API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: The key lacks the required permission, or the merchant is not active.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    RateLimited:
      description: Too many requests. Honour the `Retry-After` header before retrying.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    InternalError:
      description: |
        The API could not return a successful response. For a mutating request,
        retrieve the resource before retrying because the operation may have
        completed.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    secretKey:
      type: http
      scheme: bearer
      description: 'A merchant secret key (`sk_…`) sent as `Authorization: Bearer <key>`.'

````