Payouts

.md

The queue of trader payout requests, searched, filtered and sorted the way the website's Payouts screen does it.

Scopesadmin:read
Permissionview_payouts
GET/v1/admin/payouts

Every 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

ParameterDescription
statuspending (to review), waiting (pending or approved), approved (to pay), paid, rejected, or all (the default)
methodbank_transfer, crypto, paypal, or all (the default)
periodAsked for in the last 7d, 30d, 90d or 365d, or all (the default)
tagOnly requests with this tag. A tag that no longer exists finds nothing
flagged1 for traders with open fraud flags only. Needs view_fraud
qSearch: 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
sortqueue (the default), -created_at newest first, created_at oldest first, -amount largest first, or trader by name
limitHow many, see pagination
starting_afterThe 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"
    }
}
FieldDescription
numberWhat people read out: the last six characters of the id
statuspending, approved, processing, paid or rejected. Nothing sets processing today
amountWhat the trader asked for, which comes off the account when it is paid
trader_shareWhat the trader receives: amount times their split, fixed when they asked
methodbank_transfer, crypto or paypal
traderWho asked. deleted is true for a trader who deleted their account, whose request still has to be decided
accountThe account the money comes from. Null when it was removed
open_flagsOpen fraud flags involving the trader. Null without view_fraud
tagsThe team's own labels, each with id, name and color
ticketThe linked ticket, with id and open. Null when there is none, or without view_tickets or manage_tickets
action_urlWhere the website shows the request, a path inside the web application

Errors

StatusCodeMeaning
400workspace_requiredAsked by our own staff without naming a firm
400validation_failedstatus, method, period or flagged is not one of its values
400invalid_sortsort is not one of the five orders
400invalid_limitlimit is not a positive integer
400invalid_cursorstarting_after is not a cursor handed out for this sort
401invalid_tokenNot a token, or the secret does not match
401revoked_tokenSigned out here or from another device
401expired_tokenNinety days without use, or a set expiry passed
403admin_access_requiredThis account no longer helps run the environment
403insufficient_scopeThis device does not hold admin:read
403workspace_not_permittedThe Propper-Workspace header names an environment this account cannot act in
403forbiddenWithout view_payouts, or flagged without view_fraud