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

# Payment Intent

A payment intent represents a single intent to collect a card payment from
a buyer. It is the object that actually tracks the money: how much is
being collected, and where that collection stands — from `pending`
(nothing paid yet) through `processing` (a payment is in flight) to a
terminal `succeeded` or `canceled`.

Create one with
[`POST /payments/payment-intent`](/api-reference/payment-intent-post) and
collect it with [Payment Elements](/docs/payments/payment-elements). The
`POST` response includes a `clientSecret` scoped to that intent. It is the
browser's credential for that intent: it authorizes loading the payment form
and confirming the payment, which advances the intent from `pending` to
`processing`. It grants nothing else and is returned only on that create
response — never on `GET` — so treat it as sensitive: pass it to the browser,
but never log it or persist it.

## Statuses

| Status       | Meaning                                                                                                                                  |
| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------- |
| `pending`    | Created, no payment received yet.                                                                                                        |
| `processing` | A buyer completed the payment form; settlement is in flight. A declined card returns the intent to `pending` so the buyer can try again. |
| `succeeded`  | The payment settled. This is the terminal success state.                                                                                 |
| `canceled`   | The intent was canceled and can no longer be paid.                                                                                       |

## Metadata

`metadata` is stored on the intent and echoed back on every read — use it to
carry your own order reference (for example `{ "orderId": "ord_123" }`) so
you can correlate a payment intent to the right order without extra lookups.

## Tracking payment state

Subscribe to the
[`payments.payment_intent.updated`](/docs/payments/webhooks/payment-intent-updated)
webhook and read the intent back with
[`GET /payments/payment-intent/{id}`](/api-reference/payment-intent-get-by-id)
when it fires. If you cannot receive webhooks, poll that endpoint instead.

Fulfill when `status` is `"succeeded"` — that is the only signal a payment has
settled; never grant goods or services on a browser-side signal alone.
