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

A typed-change patch — the compact way to edit a company's configuration without sending the whole body. It is a list of TYPED INTENT changes (never raw key-addressed ops): the server compiles them into the complete assembled configuration and commits it through the SAME pipeline (and gates) as a full-body import — atomically, all-or-nothing.

A one-change list is the normal single-verb case; a list of several is used when changes are genuinely multi-part (e.g. an option set plus a field that uses it), committed together as one future config state.

changes
object[]
required

The ordered list of typed changes to apply (1..N).

Minimum array length: 1

Add a field to a top-level entity OR a custom object. Args map 1:1 onto the Fields-sheet columns. entity names either a top-level/system entity (→ a top-level field) or a custom-object key (→ a sub-field on that object). Type + args validity is decided by the same rules the spreadsheet uses. A custom-object target cannot be an EmbeddedExposure; Pointer is custom-object-only.

baseRevision
string

OPTIONAL optimistic-concurrency token. Omit to apply against the current configuration (the normal case). Supply the revision from a prior describe read (or a prior dryRun) to guard against concurrent edits: if the configuration changed since, the request is rejected 409 (fmv1-config-revision-mismatch) naming the current revision, and nothing is applied.

Minimum string length: 1
dryRun
boolean

OPTIONAL. When true, the server runs the IDENTICAL pipeline (compile → whole-config validation → breaking-change gate) but stops before the write — nothing is committed. The response reports the verdict, the would-be change summaries, and the CURRENT (pre-image) revision (marked dryRun: true), which you pass as baseRevision on the follow-up commit for check-then-commit. A dry run that fails compile/validation/the gate returns the SAME error a commit would (a commit fails identically and also writes nothing). Omit (or false) to commit.

Response

Patch committed successfully

The result of a typed-change patch. On a commit, revision is the NEW configuration revision and dryRun is absent. On a dry run, dryRun is true, nothing was written, and revision is the CURRENT (pre-image) revision — pass it as the follow-up commit's baseRevision.

revision
string
required

On a commit: the new configuration revision (the token to pass as the next patch's baseRevision). On a dry run: the current (pre-image) revision, since nothing was written.

changes
object[]
required

One human-readable summary per change, in request order — applied changes on a commit, would-be changes on a dry run.

dryRun
boolean

Present and true only when the request set dryRun: true: the changes were validated but NOT written.