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

# Stripe

> Read charges, payment intents, invoices, subscriptions, and the balance ledger from a Stripe account

The Stripe source reads customers, payments, invoices, subscriptions, catalog
objects, balance transactions, and events. It is built with an
[HTTP manifest](/pages/connectors/building-a-connector/http-manifests) and is
**beta**. Its resources are stable, though future releases may add columns.
It targets API version `2026-07-29.dahlia`.

## Configuration

| Field | Scope | Default | Description |
| - | - | - | - |
| `api_key` | Connection | | Required. Secret. Restricted key (`rk_…`) with read permissions on the extracted resources, or a secret key (`sk_…`). |

## Resources

| Resource | Parent | Notes |
| - | - | - |
| `customers` | | Connection probe |
| `charges` | | Incremental |
| `payment_intents` | | Incremental. `raw` preserves `client_secret` |
| `refunds` | | Incremental. `status` settles after creation |
| `disputes` | | Incremental |
| `balance_transactions` | | Incremental. Ledger with per-transaction fee splits |
| `payouts` | | Incremental |
| `invoices` | | Incremental. Embedded `lines` truncates at 10 |
| `invoice_line_items` | `invoices` | One request per invoice. The complete line set |
| `credit_notes` | | Incremental |
| `subscriptions` | | `status=all` keeps canceled subscriptions. Embedded `items` truncates at 10 |
| `subscription_items` | `subscriptions` | One request per subscription. Only source of the item-level billing period |
| `products`, `prices`, `coupons`, `promotion_codes` | | Catalog objects |
| `checkout_sessions` | | Incremental |
| `setup_intents` | | `raw` preserves `client_secret` |
| `payment_methods` | | No `created` list filter, so never incremental |
| `tax_rates` | | |
| `events` | | Incremental. 30-day retention |

The two fan-out children exist because Stripe embeds `lines` and `items` as
lists that truncate at 10 with their own `has_more`. The parent keeps the
embedded copy as `raw` JSON for reference, and the child resource is the
complete set.

<Warning>
  `payment_intents.raw` and `setup_intents.raw` contain `client_secret`. Treat
  those destination tables as sensitive. Stripe retains events for 30 days, so
  a pipeline paused longer than that cannot recover the missing event history.
</Warning>

## Modes

All resources support full reads. If interrupted, a full read of a top-level
resource resumes after its last completed page.

The incremental resources are `charges`, `payment_intents`, `refunds`,
`disputes`, `balance_transactions`, `payouts`, `invoices`, `credit_notes`,
`checkout_sessions`, and `events`. All follow the same pattern.

| | |
| - | - |
| Cursor field | `created` (Unix epoch, `int64`) |
| Request parameter | `created[gte]` (query) |
| Comparator | `numeric` |
| Checkpoint key | `<resource>_created` (e.g. `charges_created`) |
| Overlap | none by default |

The cursor field is fixed by the manifest. Only a lookback window is
user-configurable, which the numeric comparator supports. A lookback matters
here because `created` never changes. A refund that settles from `pending` to
`succeeded`, or a dispute that resolves, is not re-read by an incremental run
unless a lookback window covers it. Use full runs or the `events` feed to
capture post-creation mutations.

## Behavior

* **Auth**: HTTP basic with the API key as the username and no password,
  matching `curl -u sk_test_…:`.
* **Pagination**: Stripe returns no next-page token. The cursor is the id of
  the last record on the page (`data.-1.id`), echoed back as
  `starting_after`, with `has_more` as the terminator and `limit=100` per
  page.
* **API version**: pinned via `Stripe-Version: 2026-07-29.dahlia`, so payload
  response schema is set by the manifest, not the account's dashboard
  setting. The exception is `events.data.object`, which is rendered at the
  version current when each event was created.
* **Rate limiting**: a static 8 requests/second limiter, held below Stripe's
  25 rps sandbox ceiling since one limiter is shared across all concurrently
  extracting resources. Stripe publishes no rate-limit response headers, so
  there is no dynamic block.
* **Timestamps**: every Stripe timestamp is a Unix epoch integer typed
  `int64`, not `timestamptz`.


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