Combined first RCS setup (brand + first bot)
Set up RCS in ONE call for a brand-new tenant. Send the brand identity (brand name, website, logo, industry, contact person, postal address, optional tax id / legal entity) together with the FIRST bot (display name, a 100-character-or-fewer description, https Terms-of-Service and Privacy-Policy URLs, at least one of bot_contact_phone / bot_contact_email, and optional bot_type / region / platform / billing_category / carrier_mccmnc). The server creates the brand, marks it submitted (observe-only — there is NO blocking platform approval step), then submits the bot to the RCS directory with the brand bundled in the same combined registration, because the RCS provider has no standalone brand-creation API and receives the brand ONLY alongside the bot. Returns 201 with { brand, bot } on success. This endpoint is for the FIRST setup only — a tenant that already has a brand reuses it with POST /rcs/bots (passing its brand_id); sending setup with an existing brand returns 422. 422 when a field fails validation; 502 with the provider’s rejection reason verbatim when the directory refuses the combined submission; 500 when the local record could not be saved after the provider accepted (try again — our team is notified).
Authorizations
Dashboard JWT token from Clerk
Headers
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
1 - 255Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
true, false Response
The brand and the first bot were both registered. data.brand is the stored brand record (status submitted); data.bot is the bot's registration response plus its localId, in the standard { data, meta } envelope.
The brand and the first bot were both registered. data.brand is the stored brand record (status submitted); data.bot is the bot's registration response plus its localId, in the standard { data, meta } envelope.