# What you can test

Endpoint-by-endpoint coverage of the sandbox.


## Fully supported with `sk_test_`

| Area | Endpoints |
|---|---|
| Checkout | `POST /v1/checkout/sessions`, retrieve, list, `PATCH`, expire |
| Products & prices | `/v1/products`, `/v1/products/{id}/prices` |
| Customers | `/v1/customers` (create, list, retrieve, update, delete) |
| Invoices | `/v1/invoices`, items, send, `mark_paid`, `/installments`, `/payments` |
| Subscriptions | `/v1/subscriptions` (create, list, retrieve, update, cancel) |
| Refunds | `POST /v1/refunds`, retrieve, list |
| Payments | `GET /v1/payments` (list, retrieve, status & source filters) |
| Events | `GET /v1/events` |
| Webhook endpoints | `/v1/webhook_endpoints` (CRUD, secret rotation, deliveries) |
| Balance | `GET /v1/balance` (test balance, always zero-settlement) |

Objects created with a test key carry `"livemode": false`.

## Live-only (a test key is rejected)

| Area | Why |
|---|---|
| `/v1/subscription_links` | Hosted links always create live subscriptions |
| Payouts | There is no money to pay out in test mode |
| Store API (`/v1/store/*`) | Storefronts run against your live catalogue |
| Hosted invoice payment pages | Test invoices are settled via checkout sessions or `mark_paid` |
| Instant payouts, fee ledger, accounting exports | Live accounting only |

## Disputes

Pay with `4000 0000 0000 0259`. The payment succeeds, then turns into a dispute: the payment is flagged as `disputed` and you receive `charge.dispute.created` on your test webhook endpoint.

