/statements/pay
Execute owner statement payouts with one explicit selection per ownership member. The statement journals must be current. Recording payouts requires statements:record-payout. Every selection books a payout transaction against its bank account. A statement-period-locked payout date skips the statement before accounting creation; preview the same request to retrieve the first available date. provider: "ramp" additionally requires ach-payments:execute and dispatches an ACH payment through the exact Ramp entity and source bank account imported for that bank account; missing or ambiguous routing, or a payout_distribution Category account without a completed current Ramp chart-of-accounts push, is rejected before payout creation. The first otherwise-valid Ramp payout activates a transfer flow whose status has never been configured; an explicitly inactive flow remains unavailable. provider: null never dispatches, even when the bank account is Ramp-backed. Each statement validates and executes atomically and independently, so one blocked statement never rolls back earlier results. Raw bank details are never accepted here; owner ACH methods are managed through POST /contacts/{id}/payment-methods/ach.
Required scope: statements:record-payout
Authorization
apiKey API key provided in dashboard
In: header
Query Parameters
Validate this request through the real write path, then roll back all changes. See https://docs.vrplatform.app/api/dry-run-mode.
Request Body
application/json
Payout date for every statement.
1 <= items <= 100Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://api.vrplatform.app/statements/pay" \ -H "Content-Type: application/json" \ -d '{ "statements": [ { "statementId": "775b692d-f1fa-4640-9327-0c9bb8d02222", "payouts": [ { "contactId": "b5ec5d98-4bee-4da1-ad24-dde86346cb1d", "provider": "ramp", "bankAccountId": "5b26b598-a880-4e32-8c41-126aa0206857" } ] } ] }'{
"operation": {
"operationId": "3051932a-fdd2-48fa-b330-7e7d41535969",
"type": "ach-verification",
"status": "queued",
"resource": {
"type": "bank-rule",
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"role": "source"
}
},
"results": [
{
"statementId": "775b692d-f1fa-4640-9327-0c9bb8d02222",
"status": "requested",
"payouts": [
{
"contactId": "b5ec5d98-4bee-4da1-ad24-dde86346cb1d",
"provider": "ramp",
"amount": -9007199254740991,
"transactionId": "75906707-8c31-479c-b354-aa805c4cefbc"
}
],
"message": "string"
}
]
}{
"code": "AUDIT_CURSOR_EXPIRED",
"message": "string",
"links": {
"docs": "string",
"schema": "string"
},
"issues": [
{
"message": "string",
"path": [
"string"
],
"schema": "string"
}
],
"retryable": true,
"context": null
}{
"code": "AUDIT_CURSOR_EXPIRED",
"message": "string",
"links": {
"docs": "string",
"schema": "string"
},
"issues": [
{
"message": "string",
"path": [
"string"
],
"schema": "string"
}
],
"retryable": true,
"context": null
}{
"code": "AUDIT_CURSOR_EXPIRED",
"message": "string",
"links": {
"docs": "string",
"schema": "string"
},
"issues": [
{
"message": "string",
"path": [
"string"
],
"schema": "string"
}
],
"retryable": true,
"context": null
}{
"code": "AUDIT_CURSOR_EXPIRED",
"message": "string",
"links": {
"docs": "string",
"schema": "string"
},
"issues": [
{
"message": "string",
"path": [
"string"
],
"schema": "string"
}
],
"retryable": true,
"context": null
}{
"code": "AUDIT_CURSOR_EXPIRED",
"message": "string",
"links": {
"docs": "string",
"schema": "string"
},
"issues": [
{
"message": "string",
"path": [
"string"
],
"schema": "string"
}
],
"retryable": true,
"context": null
}{
"code": "AUDIT_CURSOR_EXPIRED",
"message": "string",
"links": {
"docs": "string",
"schema": "string"
},
"issues": [
{
"message": "string",
"path": [
"string"
],
"schema": "string"
}
],
"retryable": true,
"context": null
}{
"code": "AUDIT_CURSOR_EXPIRED",
"message": "string",
"links": {
"docs": "string",
"schema": "string"
},
"issues": [
{
"message": "string",
"path": [
"string"
],
"schema": "string"
}
],
"retryable": true,
"context": null
}{
"code": "MISDIRECTED_REQUEST",
"message": "string",
"links": {
"docs": "string",
"schema": "string"
},
"issues": [
{
"message": "string",
"path": [
"string"
],
"schema": "string"
}
],
"retryable": true,
"context": {
"teamId": "a4ede8ba-7c0a-4485-8763-cbd9b282fbec",
"dataRegion": "ap",
"apiBaseUrl": "http://example.com"
}
}{
"code": "AUDIT_CURSOR_EXPIRED",
"message": "string",
"links": {
"docs": "string",
"schema": "string"
},
"issues": [
{
"message": "string",
"path": [
"string"
],
"schema": "string"
}
],
"retryable": true,
"context": null
}{
"code": "LOCKED",
"message": "string",
"links": {
"docs": "string",
"schema": "string"
},
"issues": [
{
"message": "string",
"path": [
"string"
],
"schema": "string"
}
],
"retryable": true,
"context": null
}{
"code": "AUDIT_CURSOR_EXPIRED",
"message": "string",
"links": {
"docs": "string",
"schema": "string"
},
"issues": [
{
"message": "string",
"path": [
"string"
],
"schema": "string"
}
],
"retryable": true,
"context": null
}{
"code": "AUDIT_CURSOR_EXPIRED",
"message": "string",
"links": {
"docs": "string",
"schema": "string"
},
"issues": [
{
"message": "string",
"path": [
"string"
],
"schema": "string"
}
],
"retryable": true,
"context": null
}