Skip to main content
POST
Provision a property

Authorizations

Authorization
string
header
required

A Surfais API key — an organisation key or a partner key. Issued by Surfais; shown once. Rotate by creating a new key, then revoking the old one.

Headers

Idempotency-Key
string

Optional. 1–255 characters, unique per intended write. Same key + same request → the stored response is replayed with Idempotent-Replayed: true; same key + different request → 409 idempotency_key_reuse; still running → 409 idempotency_key_in_flight. Outside that range → 400 validation_error (invalid_header).

Required string length: 1 - 255

Path Parameters

orgId
string<uuid>
required

Organisation id. Org keys: the key's own org. Partner keys: any org with an active link. Anything else is 404.

Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$

Body

application/json
name
string
required
Required string length: 1 - 200
domain
string
required

Registrable host name. Normalised before storage and comparison: lower-cased, scheme / www. / path / port removed (example.com, https://www.Example.com/x and EXAMPLE.COM are the same domain).

Required string length: 1 - 2048
geography
string | null

Primary-market hint (alpha-2 when set by the UI). Not validated against the market list.

Required string length: 1 - 100
external_ref
string | null

Your own identifier. Unique per organisation, case-insensitively.

Required string length: 1 - 255
competitors
object[]

Competitors to track for the property. An existing competitor row in the organisation with the same domain is reused (its stored name is kept); otherwise one is created. Duplicate domains within the request are collapsed (first wins). A competitor with the property's own domain is 400 validation_error (competitor_is_self).

Maximum array length: 100
markets
string[]

Markets you intend to run prompts in. Validated against the market list AND the organisation's country-cap headroom (422 country_cap_exceeded before anything is created); NOT persisted here — countries attach to prompts (POST …/prompts, PUT …/brands/{id}/prompts). Echoed in markets.

Maximum array length: 29

ISO 3166-1 alpha-2 market (case-insensitive). Must be one Surfais scans; otherwise 400 validation_error with details[].code = "unsupported_country".

Pattern: ^[A-Za-z]{2}$

Response

The created property (the brand detail) plus the markets echo.

data
object
required