Payouts

Create payouts. Payouts disburse funds from your merchant balance to an external bank account or card. Also manage the funding side: recurring schedules and manual top-ups that keep your instant-payout balance funded.

export FRAME_API_KEY='sk_sandbox_...'

List funding schedules

List your recurring top-up schedules, newest first. Only schedules created in the requesting API key's mode (live or sandbox) are returned.

Query parameters
pageintegeroptional

The page offset at which you'd like to resume fetching data.

per_pageintegeroptional

A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10.

Returns

Paginated list of funding schedules

GET/v1/payout_funding/schedules
curl --request GET \
  --url https://api.framepayments.com/v1/payout_funding/schedules \
  --header 'Authorization: Bearer API_KEY'
RESPONSE
{
  "meta": {
    "page": 1,
    "url": "/v1/payout_funding/schedules",
    "has_more": false,
    "prev": null,
    "next": null
  },
  "data": [
    {
      "id": "00000000-0000-4000-8000-000000000001",
      "object": "payout_funding_schedule",
      "amount": 50000,
      "currency": "USD",
      "next_run": 1745110800,
      "last_run": null,
      "created": 1745107200,
      "updated": 1745107200,
      "livemode": false,
      "cadence": "weekly",
      "enabled": true
    }
  ]
}

Create funding schedule

Create a recurring top-up schedule that automatically funds your instant-payout balance on a fixed cadence. Each run credits the configured amount to the balance the instant payout rail draws against, so instant payouts keep working without manual effort. The first run occurs at next_run (defaults to now) and subsequent runs follow the cadence.

Body parameters
amountinteger

Amount in cents to credit each run. Must be greater than 0.

cadenceenum

How often the top-up runs. One of daily, weekly, or monthly.

enabledbooleanoptional

Whether the schedule starts active. Defaults to true.

next_runintegeroptional

Unix timestamp for the first run. Defaults to now, so the schedule executes on the next sweep.

Returns

The newly created funding schedule

POST/v1/payout_funding/schedules
curl --request POST \
  --url https://api.framepayments.com/v1/payout_funding/schedules \
  --header 'Authorization: Bearer API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
  "amount": 50000,
  "cadence": "weekly"
}'
RESPONSE
{
  "id": "00000000-0000-4000-8000-000000000001",
  "object": "payout_funding_schedule",
  "amount": 50000,
  "currency": "USD",
  "next_run": 1745107200,
  "last_run": null,
  "created": 1745107200,
  "updated": 1745107200,
  "livemode": false,
  "cadence": "weekly",
  "enabled": true
}

Update funding schedule

Update a recurring top-up schedule's amount, cadence, enabled state, or next run time. Disable a schedule by setting enabled to false; the recurring sweep skips disabled schedules until they are re-enabled.

Path parameters
idstring

ID of the funding schedule

Body parameters
amountintegeroptional

Amount in cents to credit each run. Must be greater than 0.

cadenceenumoptional

How often the top-up runs. One of daily, weekly, or monthly.

enabledbooleanoptional

Whether the schedule is active.

next_runintegeroptional

Unix timestamp for the next run.

Returns

The updated funding schedule

PATCH/v1/payout_funding/schedules/{id}
curl --request PATCH \
  --url https://api.framepayments.com/v1/payout_funding/schedules/a70cd72f-e74a-40f2-96a2-3f60714aac4a \
  --header 'Authorization: Bearer API_KEY'
RESPONSE
{
  "id": "00000000-0000-4000-8000-000000000001",
  "object": "payout_funding_schedule",
  "amount": 25000,
  "currency": "USD",
  "next_run": 1745110800,
  "last_run": null,
  "created": 1745107200,
  "updated": 1745107200,
  "livemode": false,
  "cadence": "daily",
  "enabled": true
}

Create manual top-up

Push funds into your instant-payout balance on demand — for example ahead of a known payout spike. The credited amount is immediately reflected in the available balance the instant payout rail draws against. Pass an idempotency_key to make retries safe; a repeated key returns the original entry without charging again.

Body parameters
amountinteger

Amount in cents to credit. Must be greater than 0.

idempotency_keystringoptional

Optional key that makes retries safe. A repeated key returns the original entry instead of charging again.

Returns

Funding entry recording the credited top-up

POST/v1/payout_funding/top_ups
curl --request POST \
  --url https://api.framepayments.com/v1/payout_funding/top_ups \
  --header 'Authorization: Bearer API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
  "amount": 75000
}'
RESPONSE
{
  "id": "00000000-0000-4000-8000-000000000001",
  "schedule": null,
  "object": "payout_funding_entry",
  "amount": 75000,
  "currency": "USD",
  "created": 1745107200,
  "livemode": false,
  "source": "manual_push"
}

Create payout

Initiate a payout to a payment method owned by an account. frameOS supports payouts to debit cards via the card_receive capability and to bank accounts via the bank_account_receive capability — each must be active on the account before funds can be disbursed. Both payout types require a verified KYC record on the account; identity verification is the foundation of payout eligibility.

Body parameters
payment_methodstring

ID of the payment method to pay out to. Must belong to an account with the relevant payout capability active.

amountinteger

Amount in cents. Must be greater than 0.

currencystring

Three-letter ISO currency code. Must be USD.

speedenumoptional

Payout speed. Required for ACH bank account payouts; must be one of asap, same_day, or standard. Not accepted for card (push_to_card) payouts.

Returns

Payout object for the newly initiated disbursement

POST/v1/payouts
curl --request POST \
  --url https://api.framepayments.com/v1/payouts \
  --header 'Authorization: Bearer API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
  "payment_method": null,
  "amount": 1000,
  "currency": "USD"
}'
RESPONSE
{
  "id": "00000000-0000-4000-8000-000000000001",
  "status": "pending",
  "speed": "asap",
  "amount": 1000,
  "currency": "USD",
  "payment_method": "00000000-0000-4000-8000-000000000002",
  "object": "payout",
  "livemode": false,
  "processor_fee": null,
  "merchant_fee": null,
  "customer_fee": null,
  "created": 1745107200,
  "updated": 1745107200,
  "succeeded": null,
  "failed": null
}
Frame Assistant

Ask anything about Frame's APIs and products