/v1/admin/payoutsEvery payout request of the firm's traders. The same list as Payouts on the website, with the same search and the same filters. Where the website reads a value it does not know as the default, because its addresses get bookmarked, this refuses it: a client that thinks it filtered and got everything shows the wrong list.
A request is decided on with review and paid. One request, with what it takes to decide, is a payout. The counters above the list are the summary.
Needs a firm. Our own staff name one with the Propper-Workspace header.
Request
| Parameter | Description |
|---|---|
status | pending (to review), waiting (pending or approved), approved (to pay), paid, rejected, or all (the default) |
method | bank_transfer, crypto, paypal, or all (the default) |
period | Asked for in the last 7d, 30d, 90d or 365d, or all (the default) |
tag | Only requests with this tag. A tag that no longer exists finds nothing |
flagged | 1 for traders with open fraud flags only. Needs view_fraud |
q | Search: the payout number (#Q8R3T6), an account number, the trader's name or email, a payout, trader or account id, or the reference it was paid with |
sort | queue (the default), -created_at newest first, created_at oldest first, -amount largest first, or trader by name |
limit | How many, see pagination |
starting_after | The next_cursor of the page before. A cursor only works with the sort it was handed out with |
queue is the order the website opens on: what waits for a decision, then
what waits for the money, each oldest first, then everything settled, newest
first. A word in q starting with # only looks at the payout number and the
account number.
curl "https://api.proppertrading.com/v1/admin/payouts?status=pending&limit=1" \
-H "Authorization: Bearer ptat_9f2c1a44_3b8e7d2f5c9a1b4e6d8f0a2c4e6b8d1f" \
-H "Propper-Workspace: acme"
Response
{
"data": [
{
"object": "payout",
"id": "po_99fc6kngcrdz7axf",
"number": "#DZ7AXF",
"status": "pending",
"amount": { "value": "762.00", "currency": "USD" },
"trader_share": { "value": "609.60", "currency": "USD" },
"method": "crypto",
"created_at": "2026-10-04T03:59:48+00:00",
"reviewed_at": null,
"paid_at": null,
"trader": {
"id": "usr_33hajhd7u9q5mjqr",
"name": "Kai Popescu",
"email": "[email protected]",
"avatar_url": null,
"deleted": false
},
"account": { "id": "acct_gsvrm4k43wtsvjj3", "number": "PA6F9BFA2E" },
"open_flags": 0,
"tags": [],
"ticket": null,
"action_url": "/admin/payouts/po_99fc6kngcrdz7axf"
}
],
"meta": {
"request_id": "req_01m50pyyadvar0xaehmy4fzjvy",
"has_more": true,
"next_cursor": "eyJzIjoicXVldWUiLCJ2IjpbMCwiMTc5MTA4NjM4OC4wMDAwMDAiXSwiaWQiOiJwb185OWZjNmtuZ2NyZHo3YXhmIn0"
}
}
| Field | Description |
|---|---|
number | What people read out: the last six characters of the id |
status | pending, approved, processing, paid or rejected. Nothing sets processing today |
amount | What the trader asked for, which comes off the account when it is paid |
trader_share | What the trader receives: amount times their split, fixed when they asked |
method | bank_transfer, crypto or paypal |
trader | Who asked. deleted is true for a trader who deleted their account, whose request still has to be decided |
account | The account the money comes from. Null when it was removed |
open_flags | Open fraud flags involving the trader. Null without view_fraud |
tags | The team's own labels, each with id, name and color |
ticket | The linked ticket, with id and open. Null when there is none, or without view_tickets or manage_tickets |
action_url | Where the website shows the request, a path inside the web application |
Errors
| Status | Code | Meaning |
|---|---|---|
| 400 | workspace_required | Asked by our own staff without naming a firm |
| 400 | validation_failed | status, method, period or flagged is not one of its values |
| 400 | invalid_sort | sort is not one of the five orders |
| 400 | invalid_limit | limit is not a positive integer |
| 400 | invalid_cursor | starting_after is not a cursor handed out for this sort |
| 401 | invalid_token | Not a token, or the secret does not match |
| 401 | revoked_token | Signed out here or from another device |
| 401 | expired_token | Ninety days without use, or a set expiry passed |
| 403 | admin_access_required | This account no longer helps run the environment |
| 403 | insufficient_scope | This device does not hold admin:read |
| 403 | workspace_not_permitted | The Propper-Workspace header names an environment this account cannot act in |
| 403 | forbidden | Without view_payouts, or flagged without view_fraud |