Payouts API
The payouts API for platforms
The FractionalPay payouts API tells you what every beneficiary is owed and what happens to each payout: balances split into pending, held, available and paid, payouts with clear statuses, and a signed webhook for every change.
Payouts become transfers on your own connected Stripe account. You get the scheduling, thresholds, approvals and retries without writing them yourself.
- Balances per beneficiary and currency in one call
- Six payout statuses and payout.* webhooks
- Idempotent writes, test and live keys
GET /v1/balances
200 OK
curl https://fractionalpay.com/api/v1/balances \
-H "Authorization: Bearer fp_test_4eC39H..."
{
"object": "list",
"data": [
{
"object": "balance",
"beneficiary_id": 8812,
"name": "Northwind Studio",
"currency": "USD",
"pending": 42000,
"held": 5000,
"available": 128450,
"paid": 1250000,
"by_currency": {
"USD": {
"pending": 42000,
"held": 5000,
"available": 128450,
"paid": 1250000,
"owed": 170450
}
}
},
{
"object": "balance",
"beneficiary_id": 8811,
"name": "Harbor Partners",
"currency": "USD",
"pending": 6500,
"held": 0,
"available": 19800,
"paid": 214000,
"by_currency": {
"USD": {
"pending": 6500,
"held": 0,
"available": 19800,
"paid": 214000,
"owed": 26300
}
}
}
],
"has_more": true
}
Money path
How a payout becomes a transfer on your account
FractionalPay does not sit in the money path. Customer payments land in your own platform account at your payment operator, and each beneficiary is linked to a connected account under that platform. We calculate, record and instruct. We never hold, pool or transmit funds and we are not a payment institution.
-
01
Shares accrue
Each split credits beneficiaries in the ledger. New shares start as pending, reserved shares as held.
-
02
Balance becomes available
After the availability delay or when a hold is released, the amount moves to available and fires
hold.releasedwhere relevant. -
03
Payout is scheduled
On the beneficiary's schedule, available balance above the minimum becomes a payout and fires
payout.scheduled. -
04
Transfer on your account
We instruct a transfer from your platform account to the beneficiary's connected account and track it to
payout.paidorpayout.failed.
Payout calendar
November 2026
1
2
3
4
5
6
$18.4k
$1.3k
7
8
9
10
11
12
13
$3.3k
14
15
16
17
18
19
20
$17.9k
21
22
23
24
25
26
27
28
29
30
- Nov 6 · Sellers $18,420.00Scheduled
- Nov 6 · Northwind Studio $1,284.50Scheduled
- Nov 13 · Partners $3,260.00Approval
- Nov 20 · Sellers $17,905.40Held
Payout statuses
Six statuses, one meaning each
GET /payouts returns every payout with one of six statuses. Your code never has to guess whether money moved, because each status maps to a single state of the transfer on your account.
-
scheduled
- What it means
- Due on a date, amount fixed
- Event
- payout.scheduled
-
held
- What it means
- Waiting on a hold or a negative balance
- Event
- none
-
awaiting_approval
- What it means
- Above your approval threshold
- Event
- none
-
sent
- What it means
- Transfer instruction accepted
- Event
- none
-
paid
- What it means
- Transfer confirmed on your account
- Event
- payout.paid
-
failed
- What it means
- Rejected, with a failure reason
- Event
- payout.failed
A failed payout keeps its failure_reason and the amount is not lost: it stays owed in the ledger and can go out again once the beneficiary fixes their account. Approvals above a threshold are a Scale feature: a second team member approves with POST /payouts/{id}/approve before the transfer is instructed.
Webhook delivery · payout.failed
200 delivered
POST https://api.yourplatform.com/hooks/fractionalpay
FractionalPay-Signature: t=1760534400,v1=5257a869e7ec...
{
"id": "evt_e09867748b1b47a01510c52e",
"type": "payout.failed",
"created": 1760534400,
"livemode": false,
"data": {
"payout": {
"id": 7302,
"object": "payout",
"beneficiary_id": 8811,
"amount": 19800,
"currency": "USD",
"status": "failed",
"scheduled_for": 1792141200,
"sent_at": 1792141260,
"external_transfer_id": "tr_1Q9Hpt7302",
"failure_reason": "account_closed",
"requires_approval": false,
"approved_by": null,
"approved_at": null,
"created": 1792062790
}
}
}For developers
Endpoints, keys and retries you can rely on
Base URL https://fractionalpay.com/api/v1, JSON in and out, amounts as integers in minor units with a three-letter currency. Every POST accepts an Idempotency-Key; the same key with the same body returns the first result for 24 hours, so a retried approval never approves twice.
Webhooks carry a FractionalPay-Signature header with an HMAC SHA-256 of the timestamp and raw body. Failed deliveries retry with backoff for 24 hours (1 min, 5 min, 30 min, 2 h, 6 h, 12 h) and can be replayed from the delivery log. Test keys start with fp_test_, live keys with fp_live_.
-
Read balances with
GET /balances -
List payouts and filter by status with
GET /payouts -
Approve a payout with
POST /payouts/{id}/approveon Scale -
Look up a beneficiary and its balances with
GET /beneficiaries/{id}
POST /v1/payouts/9204/approve
200 OK
curl -X POST https://fractionalpay.com/api/v1/payouts/9204/approve \
-H "Authorization: Bearer fp_test_4eC39H..." \
-H "Idempotency-Key: 33042946-order" \
-H "Content-Type: application/json"
{
"id": 9204,
"object": "payout",
"beneficiary_id": 8811,
"amount": 1326000,
"currency": "USD",
"status": "scheduled",
"scheduled_for": 1792141200,
"sent_at": null,
"external_transfer_id": null,
"failure_reason": null,
"requires_approval": true,
"approved_by": 7,
"approved_at": 1792062800,
"created": 1792062790
}
Webhook delivery · payout.paid
200 delivered
POST https://api.yourplatform.com/hooks/fractionalpay
FractionalPay-Signature: t=1760534400,v1=5257a869e7ec...
{
"id": "evt_7f5495b5aad91970bdb4eead",
"type": "payout.paid",
"created": 1760534400,
"livemode": false,
"data": {
"payout": {
"id": 9204,
"object": "payout",
"beneficiary_id": 8811,
"amount": 1326000,
"currency": "USD",
"status": "paid",
"scheduled_for": 1792141200,
"sent_at": 1792141260,
"external_transfer_id": "tr_1Q9Hpt9204",
"failure_reason": null,
"requires_approval": true,
"approved_by": 7,
"approved_at": 1792062800,
"created": 1792062790
}
}
}Stripe payout API, without the bookkeeping
What you would otherwise build around raw transfers
Your operator's own API can move money from your platform balance to a connected account. What it does not keep is your business view: who earned which share of which payment, what is reserved, what was clawed back by a refund and what is safe to pay today. That bookkeeping is the part teams underestimate.
FractionalPay keeps it in a double-entry ledger where every transaction balances to zero. Payouts are drawn from the available balance only, negative balances from refunds are netted before anything is sent, and a minimum threshold stops tiny transfers. If you also need the split itself, start with the split payment API; if your use case is paying sellers, see marketplace payouts.
- Daily, weekly or monthly schedules per beneficiary
- Minimum payout amount and availability delay
- Holds and reserves on Growth, four-eyes approvals on Scale
Beneficiary balances
Seller
Northwind Studio
$1,284.50
Available now
Weekly, Friday
Seller
Northwind Studio
$50.00
Reserve 10% for 14 days
Releases Nov 9
Partner
Harbor Partners
$198.00
Commission
Monthly, 1st
Partner
Harbor Partners
$2,140.00
Paid to date
Last payout Oct 1
Reconciliation run
Nov 6, 2026 · 3 matched, 1 open
-
txn_...4KQChargeOperator $1,000.00Ledger $1,000.00Matched
-
txn_...7PDPayoutOperator $1,284.50Ledger $1,284.50Matched
-
txn_...2WNFeeOperator $2.50Ledger noneMissing
-
txn_...9LAPayoutOperator $198.00Ledger $198.00Matched
| Reference | Type | Operator | Ledger | Status |
|---|---|---|---|---|
| txn_...4KQ | Charge | $1,000.00 | $1,000.00 | Matched |
| txn_...7PD | Payout | $1,284.50 | $1,284.50 | Matched |
| txn_...2WN | Fee | $2.50 | none | Missing |
| txn_...9LA | Payout | $198.00 | $198.00 | Matched |
Built for the engineer on call
Payout logic you can test before it touches money
Start in the sandbox with an fp_test_ key and demo data. Record test payments with POST /payments and watch balances move from pending to available. Live keys, webhook endpoints and real payouts open on a paid plan, once your own account is connected.
Daily reconciliation compares the ledger with your account's balance transactions and raises reconciliation.mismatch when a payout or fee does not line up. Full reference in the API documentation, plan limits on pricing.
Questions
Frequently asked questions
Something else on your mind? Write to [email protected] or read the API documentation.
What is the FractionalPay payouts API?
Is this a replacement for the Stripe payout API?
Does FractionalPay hold the funds being paid out?
What do pending, held and available mean?
Which plan includes payout approvals?
POST /payouts/{id}/approve, are part of Scale at 1,499 USD a month or 749 USD a month billed yearly.What are the API limits?
Is there a fee per payout?
Watch a split turn into payouts
Run a payment through the simulator to see each balance, the ledger lines and the payout date, then create a sandbox key and call the same endpoints.
No transaction fees from us. Runs on your own payment account at a licensed operator. FractionalPay never holds your funds.