post_payout_accounts_by_orgid_tax_details

Changes data · you confirm first

Calls POST /api/payout-accounts/{orgId}/tax-details as the signed-in person · REST reference

Add the full SSN or EIN a payout account was set up without

Stripe files a clinic's Form 1099 only with its full TIN. A sole proprietor onboarded with the last four of its SSN, or a company whose EIN Stripe does not hold, reads taxIdProvided: false on its payout account, and the Payout tab asks for this once. The body is for the business type the account already has; the other type's is refused (400, details.field businessType). Submitted to Stripe as individual.id_number, or company.name and company.tax_id; NOT stored and NOT logged — Stripe then answers only whether it holds one. Needs execute:UpdateOrgCommand in this organization, or platform staff; the organization must be a SERVICE_PROVIDER.

Arguments

ArgumentTypeDescription
orgIdpathstring (uuid)required
bodyJSONobjectrequiredThe request body, as a JSON object. Its fields are listed below.

Fields of body

FieldTypeDescription
businessType"company" | "individual"required
companyobjectRequired for company.
company.einstringrequiredThe full nine digits; spaces and dashes are ignored.
company.namestringrequiredThe legal name the EIN is registered to.
ssnstringRequired for individual. The full nine digits; spaces and dashes are ignored.

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.

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "post_payout_accounts_by_orgid_tax_details",
    "arguments": {
      "orgId": "11111111-1111-4111-8111-111111111111",
      "body": {
        "businessType": "company",
        "company": {
          "ein": "string",
          "name": "string"
        },
        "ssn": "string"
      }
    }
  }
}
Confirmation
The client shows the person the exact request and waits. Nothing runs until they tick Make this change. See Reading and changing.

Result

On success (HTTP 200) the tool returns one text item holding the API's JSON, pretty-printed.

Where the payout account stands once Stripe has taken them.

json
{
  "bankLast4": "string",
  "bankName": "string",
  "businessType": "individual",
  "detailsSubmitted": true,
  "payoutsEnabled": true,
  "requirementsDue": [
    "string"
  ],
  "status": "NOT_STARTED",
  "taxIdProvided": true
}

Fields

FieldTypeDescription
bankLast4string | nullLast four digits of the bank account Stripe pays out to, when Stripe reported one.
bankNamestring | null
businessType"individual" | "company" | nullThe business type the details were submitted as; null when none were, or Stripe did not answer.
detailsSubmittedboolean
payoutsEnabledboolean
requirementsDuearray of stringStripe's requirement ids still owed, past due first. Empty when none or unknown.
status"NOT_STARTED" | "INCOMPLETE" | "VERIFYING" | "ACTION_REQUIRED" | "REJECTED" | "ACTIVE"NOT_STARTED — no connected account. INCOMPLETE — setup on Stripe's page was not finished. VERIFYING — everything was submitted and Stripe has not enabled payouts yet. ACTION_REQUIRED — Stripe needs more information. REJECTED — Stripe rejected the account. ACTIVE — payouts are enabled.
taxIdProvidedboolean | nullWhether Stripe holds the full SSN (individual.id_number_provided) or EIN (company.tax_id_provided) it files the clinic's Form 1099 under; null when unknown. False on an account whose details were submitted is what POST /tax-details completes.

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.

400

A field is missing, the wrong shape, for the other business type, or refused by Stripe. details.field names it; no submitted value is echoed back.

403

Not platform staff and not holding execute:UpdateOrgCommand in the organization, or the organization is not a service provider.

409

The organization has no payout account whose details were submitted (EFT_NOT_SET_UP).

502

Stripe refused the submission for a reason that names no field of this form.

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.

json
{
  "name": "post_payout_accounts_by_orgid_tax_details",
  "description": "POST /api/payout-accounts/{orgId}/tax-details — Stripe files a clinic's Form 1099 only with its full TIN. A sole proprietor onboarded with the last four of its SSN, or a company whose EIN Stripe does not hold, reads `taxIdProvided: false` on its payout account, and the Payout tab asks for this once. The body is for the business type the account already has; the other type's is refused (400, `details.field` `businessType`). Submitted to Stripe as `individual.id_number`, or `company.name` and `company.tax_id`; NOT stored and NOT logged — Stripe then answers only whether it holds one. Needs `execute:UpdateOrgCommand` in this organization, or platform staff; the organization must be a SERVICE_PROVIDER.\n\nThis changes data. The person is asked to confirm it before it runs, and nothing happens if they decline.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "orgId": {
        "type": "string"
      },
      "body": {
        "type": "string",
        "description": "The JSON request body: { businessType*: one of \"company\" | \"individual\"; company: { ein*: string (The full nine digits; spaces and dashes are ignored.); name*: string (The legal name the EIN is registered to.) } (Required for `company`.); ssn: string (Required for `individual`.) }"
      }
    },
    "required": [
      "orgId",
      "body"
    ]
  },
  "annotations": {
    "readOnlyHint": false,
    "destructiveHint": true,
    "idempotentHint": false,
    "openWorldHint": false
  }
}