VRPlatformVRPlatform
StatementsPayments

/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

POST
/statements/pay
X-API-Key<token>

API key provided in dashboard

In: header

Query Parameters

dryRun?boolean

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

date?string|null

Payout date for every statement.

statements*
Items1 <= items <= 100

Response 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
}