Projects

Connect the organization's Stripe account (or return the one it has)

Creates a Stripe connected account for the project's owning organization under Run402's Stripe Connect platform: full Stripe dashboard, Stripe collects its fees and is liable for its losses, card_payments plus sepa_debit_payments where Stripe offers SEPA Direct Debit. Nothing is prefilled that the body does not carry; Stripe collects the rest during hosted onboarding, which a PERSON completes once at the one-time onboarding.url this response carries while onboarding is incomplete. Idempotent per organization: a second call returns the live account with 200 and creates nothing; the create is a durable intent with a deterministic Stripe idempotency key, so an interrupted request never leaves two accounts. Behind the organization lifecycle gate. Audited. Direct charges only: the organization is the merchant of record, Stripe bills it for processing and dispute fees from its own balance, Run402 takes no application fee (platform_fee_bps 0) and never holds, moves, or refunds the money. Refunds and disputes live in the organization's own Stripe dashboard. 503 STRIPE_CONNECT_UNAVAILABLE when the platform's Stripe configuration is absent or Stripe is unreachable.

post/projects/v1/{project_id}/stripe/account

Request

  • Base URL: https://api.run402.com
  • URL: https://api.run402.com/projects/v1/{project_id}/stripe/account
  • Auth: one of:
    • HTTP bearer
    • API key in header SIGN-IN-WITH-X
    • HTTP bearer
    • HTTP bearer

Path parameters

project_idstring required

Run402 project ID. Public IDs are not UUIDs.

Example:prj_1741340000_0042

The project through which the organization's Stripe account is reached. A service_key acts only for its OWN project; principals and grant keys authorize via project.stripe.manage (mutations) or project.read (reads). The account belongs to the project's owning organization, read fresh.

Headers

SIGN-IN-WITH-Xstring required

SIWX auth header — base64-encoded JSON payload containing a signed CAIP-122 (EIP-4361) message. See https://docs.x402.org/extensions/sign-in-with-x.

Request body

countrystring

ISO 3166-1 alpha-2. Defaults to the platform's country; the account holder confirms it during onboarding. Decides whether sepa_debit_payments is requested.

business_type'company' | 'individual' | 'non_profit'
business_namestring

The display and registered name.

support_emailstring email

Shown to payers on receipts and bank statements; without it Stripe falls back to the platform's support details.

statement_descriptorstring

What the member's bank statement says. Set it so the statement names the organization, never the platform.

emailstring email

The account's contact email (Stripe's own communications go here).

Response

The organization already has a live account.

org_idstring uuid required
scope'organization' required
account_idstring nullable required

The Stripe account id (acct_…); null only while the create is still being confirmed.

status'creating' | 'onboarding' | 'active' | 'restricted' | 'disconnected' required
livemodeboolean
charges_enabledboolean required
payouts_enabledboolean required
details_submittedboolean required
capabilitiesobject required

Stripe capability statuses by name (card_payments, sepa_debit_payments: active, pending, inactive, unrequested).

countrystring nullable
default_currencystring nullable
dashboard'full' required
custody'organization' required
platform_fee_bps0 required
created_atstring date-time required
updated_atstring date-time required
disconnected_atstring date-time nullable

Example response

{
  "next_actions": [
    {
      "method": "POST",
      "path": "/tiers/v1/hobby",
      "auth": "x402"
    }
  ],
  "onboarding": {
    "next_actions": [
      {
        "method": "POST",
        "path": "/tiers/v1/hobby",
        "auth": "x402"
      }
    ]
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.