post_finance_eft_onboard
Calls POST /api/finance/eft/onboard as the signed-in person · REST reference
Make an organization payout-ready
Creates or attaches the org's Stripe Connect record so a later payout SETTLES instead of being skipped and retained. Internal/test onboarding — this is not Stripe's hosted onboarding flow, and there is no org-owner path: only platform staff can call it. A failure is answered by what it is, with no upstream text: the DAL refusing the request by its code (no such organization 404, with the DAL's sentence), 503 when the DAL cannot be reached, 500 otherwise.
Arguments
| Argument | Type | Description | |
|---|---|---|---|
bodyJSON | object | required | The request body, as a JSON object. Its fields are listed below. |
Fields of body
| Field | Type | Description | |
|---|---|---|---|
accountId | string | An existing Stripe account id to attach instead of creating one. | |
country | string | ISO country for the Connect account. | |
currency | string | ||
orgId | string (uuid) | required | The only validated field. Everything else is passed through unchecked. |
Example call
A client sends this over the MCP session; Claude and other agents build it for you. The values are placeholders — the shape is real.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "post_finance_eft_onboard",
"arguments": {
"body": {
"orgId": "11111111-1111-4111-8111-111111111111",
"accountId": "string",
"country": "string",
"currency": "string"
}
}
}
}Result
On success (HTTP 200) the tool returns one text item holding the API's JSON, pretty-printed.
The org's Connect state after onboarding.
{
"accountId": "string",
"chargesEnabled": true,
"orgId": "11111111-1111-4111-8111-111111111111",
"payoutsEnabled": true,
"status": "string",
"stripeConnectId": "11111111-1111-4111-8111-111111111111"
}Fields
| Field | Type | Description |
|---|---|---|
accountId | string | The Stripe account id. |
chargesEnabled | boolean | |
orgId | string (uuid) | |
payoutsEnabled | boolean | False here means a payout run will SKIP and retain the funds. |
status | string | |
stripeConnectId | string (uuid) | The :StripeConnect node id, not the Stripe account id. |
When it fails
A failed call returns isError: true with the API's message as text. A change the person declines, or lets time out, also comes back this way and nothing changes.
400The request was malformed or failed a guard.
403Authenticated, but the caller holds none of the required permissions.
404The DAL found no such organization. Carries the DAL's sentence.
What the model is shown
This is the tool exactly as the server lists it in tools/list. The description starts with the REST call it makes.
{
"name": "post_finance_eft_onboard",
"description": "POST /api/finance/eft/onboard — Creates or attaches the org's Stripe Connect record so a later payout SETTLES instead of being skipped and retained. Internal/test onboarding — this is not Stripe's hosted onboarding flow, and there is no org-owner path: only platform staff can call it. A failure is answered by what it is, with no upstream text: the DAL refusing the request by its code (no such organization 404, with the DAL's sentence), 503 when the DAL cannot be reached, 500 otherwise.\n\nThis changes data. The person is asked to confirm it before it runs, and nothing happens if they decline.",
"inputSchema": {
"type": "object",
"properties": {
"body": {
"type": "string",
"description": "The JSON request body: { accountId: string (An existing Stripe account id to attach instead of creating one.); country: string (ISO country for the Connect account.); currency: string; orgId*: string (The only validated field.) }"
}
},
"required": [
"body"
]
},
"annotations": {
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": false
}
}