Skip to main content
POST

Authorizations

Authorization
string
header
required

User-principal OAuth 2.0 Bearer authentication. Send a user-scoped Auth0 access token (audience = the app API audience) as Authorization: Bearer <jwt>. The request resolves to the user's identity and is authorized by their Role on the {companyId} in the path — the same role-based permissions the web app enforces. This is the path the MCP connector uses to act on a user's behalf; endpoints that accept it list both BearerAuth and ApiKeyAuth.

Path Parameters

companyId
string<uuid>
required

Company identifier

Body

application/json
entityType
enum<string>
required

The entity type this job writes, independent of its source rows.

Available options:
Event,
Exposure,
Quote,
Submission,
Person,
Organization
source
object
required

At least one selector is required. Selectors combine with AND. Membership is snapshotted when queued; later rows are excluded. Explicit IDs must all exist, be accessible and match the other selectors.

groupBy
string[]

Optional JSON path segments. Rows with equal non-null values at this path produce one result together; missing/null values stay separate. Maximum 1000 rows per result. Omitted means one result per row.

Required array length: 1 - 20 elements
Minimum string length: 1
quoteMode
enum<string>

Quote jobs only, without groupBy. Restore an already bound legacy quote from its retained source identity, original bound/applied_to_policy status and existing policy. Existing quotes retain their identity and parent links; conflicting statuses or source evidence are refused. This does not bind a policy or generate invoices, recommended forms or lifecycle packets. See the historical bound quote contract in the import overview.

Available options:
restore-bound
transformations
object

How data.<entityKey> becomes an entity in this company's field model: one entry per field reference id (camelCase). Each value is either a JEXL expression string that reads the data's top-level keys by name (submission.name, broker.email), or a mapping for a list of child objects: { "mapOver": "<data path>", "values": { "<childKey>": "<expression>" } }. Inside values, bare names and me are the current element, parent is the object holding the list and root is the whole data. A child value may itself be a mapping; its mapOver path reads the current scope (for example me.locations). A { "values": { ... } } constructor without mapOver builds one object in the surrounding scope and can contain mapped lists. At every depth, root remains the original data.

Every field of data.<entityKey> without a transformation is kept as sent. A transformed entity with an id updates that entity; otherwise one is created. Keys the company's field model does not declare are dropped before an entity write. Policy jobs instead construct the whole-policy or single-transaction command envelope; envelope keys are validated by that contract.

guards
object[]

Conditions that must hold for the write to proceed, evaluated against the transformed entity, reading its fields by bare name. Only a strict true passes, and a condition that cannot be evaluated fails. They run in addition to the company's own entity invariants.

attemptBatch
string | null

Optional label applied to every attempt created by this job.

Minimum string length: 1

Response

Job accepted for background execution.

id
string<uuid>
required