Skip to main content
POST
Create a company

Authorizations

Authorization
string
header
required

OAuth 2.1 authorization code + PKCE (S256). Tokens are tenant-bound (company_id) and scoped. Discover endpoints via /.well-known/oauth-authorization-server.

Body

application/json

Create an agency subaccount under the token tenant. The token is confined to one company, so parentCompanyId is required and must equal your own company id (the server rejects anything else). Only an agency-parent caller may create subaccounts. Agency platform billing without bound first-client coverage, and any create once freeClientId is already set, require tier, interval, and createRequestId: the call returns a Stripe checkoutUrl, and the client is created only after a signed Stripe webhook confirms payment. Legacy per-client billing without platform billing may still create the first client immediately when freeClientId is unset. Unrecognized fields are passed through.

name
string
required

Subaccount company name (required).

Minimum string length: 1
parentCompanyId
string
required

Parent agency id — must equal the token tenant's company id; OAuth clamps it to your own company.

privacyPolicyAccepted
boolean
required

Must be true — the owner accepts the privacy policy.

termsOfServiceAccepted
boolean
required

Must be true — the owner accepts the terms of service.

phone
string

Company phone number. Optional for agency subaccounts.

Minimum string length: 1
website
string

Company website URL.

appstoreUrl
string

Company App Store URL.

category
string

Company category.

companyStage
string

Company stage (e.g. 'seed', 'growth').

hireRange
string

Company hiring range.

companyNiche
string

Company niche.

address
object

Company address.

instagram
string

Instagram handle.

linkedin
string

LinkedIn URL.

tiktok
string

TikTok handle.

profileImageUrl
string

Company profile image URL.

tier
enum<string>

Client plan tier. Required, together with interval, for a payment-first client checkout — agency platform billing without bound coverage, or an additional client once freeClientId is already set; missing or invalid then fails with invalid_request "Choose a client plan and billing schedule before checkout."

Available options:
starter,
growth,
scale
interval
enum<string>

Billing schedule for the client plan. Required, together with tier, on the same payment-first-checkout path as tier.

Available options:
monthly,
annual
createRequestId
string

Idempotency key (8-128 chars, [A-Za-z0-9_-]). Required for a payment-first client checkout (agency platform billing without bound coverage, or an additional client once freeClientId is already set); omitting it then fails with invalid_request "A client checkout request ID is required."

Response

HTTP 201 with { data: ... }. data is either the created company result (companyId, stripeCustomerId, requiresPerClientCheckout, isFreeClient, message; sometimes idempotent), or { success: true, checkoutUrl } when the request is payment-first (agency platform billing without bound coverage, or an additional client once freeClientId is set) and held pending Stripe checkout until payment. (Route returns HTTP 201; manifest successCode is 200.)

data
object
required

Included and legacy covered clients are created immediately. A payment-first client — including the first client on agency platform billing without bound coverage — returns checkoutUrl and is created only after confirmed payment.