Payouts
Sidedoor pays operators through Stripe Connect. You onboard once via a
Stripe-hosted flow, and thereafter takings from bookings, events and vouchers
are settled to your connected account. Both endpoints require the
operator role (client); onboarding needs
operators.settings:write.
Endpoints
Section titled “Endpoints”| Method | Path | Purpose | Auth |
|---|---|---|---|
| POST | /api/my-operator/payout/connect/start |
Begin Stripe onboarding | operator |
| GET | /api/my-operator/payout/status |
Read connected-account status | operator |
Start onboarding
Section titled “Start onboarding”POST /api/my-operator/payout/connect/start takes no body. It creates (or
reuses) your Stripe connected account and returns a hosted onboarding url -
redirect the operator there to complete Stripe’s account form.
curl -X POST "https://thesidedoor.co/api/my-operator/payout/connect/start" \ -H "Authorization: Bearer $SIDEDOOR_TOKEN"const res = await fetch( "https://thesidedoor.co/api/my-operator/payout/connect/start", { method: "POST", headers: { Authorization: `Bearer ${process.env.SIDEDOOR_TOKEN}` } },);const { url } = await res.json();// Redirect the operator to `url` to finish Stripe onboarding.$ch = curl_init("https://thesidedoor.co/api/my-operator/payout/connect/start");curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ["Authorization: Bearer {$token}"],]);$data = json_decode(curl_exec($ch), true);// header("Location: " . $data["url"]);{ "url": "https://connect.stripe.com/setup/e/acct_.../..." }If payments are not configured on the platform this returns 503; a Stripe
failure returns 502.
Check payout status
Section titled “Check payout status”GET /api/my-operator/payout/status reads the live state of your connected
account from Stripe. status is enabled once charges and payouts are both on,
pending once details are submitted, or onboarding while still incomplete.
curl "https://thesidedoor.co/api/my-operator/payout/status" \ -H "Authorization: Bearer $SIDEDOOR_TOKEN"const res = await fetch( "https://thesidedoor.co/api/my-operator/payout/status", { headers: { Authorization: `Bearer ${process.env.SIDEDOOR_TOKEN}` } },);const data = await res.json();$ch = curl_init("https://thesidedoor.co/api/my-operator/payout/status");curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ["Authorization: Bearer {$token}"],]);$data = json_decode(curl_exec($ch), true);{ "connected": true, "provider": "stripe", "status": "enabled", "charges_enabled": true, "payouts_enabled": true, "details_submitted": true, "account_id": "acct_1AbCdEf"}Before onboarding starts the response is
{ "connected": false, "provider": "stripe", "status": "not_started" }. If the
platform’s Stripe key is missing the status is unconfigured; a Stripe read
failure returns status: "error".
Sidedoor operates the Stripe webhook that fulfils guest checkout - you do not need to handle payment webhooks yourself.