Skip to content

Refresh payouts and withdrawals from Stripe​

POST
/stripe/connect/payouts/reconcile

Re-reads every payout of the caller's connected Stripe account and repairs FundlyHub's own records of them: the payout rows, the link between each payout and the donations it carried, and the payout entries in the financial ledger. These are what a campaign's Updates feed (GET /projects/{fundraiserId}/updates) lists as withdrawals, so a payout Stripe made on its automatic schedule shows up there without waiting for a webhook. Moves no money. Never a dry run.
Omit accountId to refresh the caller's own account. An acct_… id of an organization account the caller can manage payouts for is also accepted; any other id answers 404, like an unknown one.
Requires a bearer session; rate limited to 100 requests per minute per account, and to one refresh per account per minute (429 with Retry-After).

Authorizations​

BearerAuth

In the browser, authentication rides on the httpOnly session cookies set by /cognito/signin or the Google / Apple sign-in at /cognito/oauth/{provider}. For scripts and for Swagger UI testing, paste an API key (fh_live_…, created with POST /api-keys); a Cognito JWT is accepted too. Sign-in does not return a token in its body.

Type
HTTP (bearer)

Request Body​

application/json
JSON
{
"accountId": "acct_1AbCdEfGhIjKlMnO"
}

Responses​

Refresh result

application/json
JSON
{
"accountId": "acct_1AbCdEfGhIjKlMnO",
"payoutsFound": 0,
"payoutRowsInserted": 0,
"payoutRowsUpdated": 0,
"donationsStamped": 0,
"donationsCleared": 0,
"balanceTransactionsBackfilled": 0,
"ledgerRowsWritten": 0,
"errors": 0,
"payouts": [
{
"id": "po_1AbCdEfGhIjKlMnO",
"status": "string",
"amount": 0,
"currency": "string",
"row": "string",
"donationsStamped": 0,
"ledgerRowsWritten": 0,
"ok": true
}
]
}

Playground​

Server
Authorization
Body

Samples​

Powered by VitePress OpenAPI

Built with VitePress