Update a merge queue's configuration
Applies a JSON Merge Patch to the queue’s configuration: an absent key leaves that setting unchanged, and an unknown key is rejected rather than silently dropped. Send requiredStatuses: [], allowedBotSubmitters: [] or batchingRules: [] to clear those lists.
Two of these fields are merge-protection controls, not tuning knobs: requiredStatuses decides what must pass before an entry may merge (clearing it gates on nothing), and allowedBotSubmitters decides which bots may enqueue. Treat access to this endpoint as security-relevant. Refused with MODE_CHANGE_IN_PROGRESS while the queue is converting between modes.
Authorizations
An API key, sent as Authorization: Bearer <key>. An organization admin creates one in the Trunk app under Settings → Developer → API Keys and chooses the merge-queue permissions it holds; a key with none can read merge queues but change nothing. Those permissions scope merge queue only: every key can use the Flaky Tests and Dynamic CI endpoints, including their writes, whatever permissions it holds.
Path Parameters
The merge queue's id.
"xK9mP2nQ"
Body
A JSON Merge Patch: an absent key leaves that setting unchanged, and an unknown key is rejected rather than dropped. requiredStatuses: [], allowedBotSubmitters: [] and batchingRules: [] clear those lists. A batchingRules write replaces the whole set. notReadyTimeoutMinutes must be a whole number of hours.
1 <= x <= 10000 <= x <= 10000 <= x <= 10000 <= x <= 100801 <= x <= 10000 <= x <= 100800 <= x <= 4320010011001100off, always off, bisectionSkipRedundantTests mergeCommit, squash, rebase renameTempBranch, pushNewBranchFromTemp 1Response
The updated merge queue
"xK9mP2nQ"
Resolve with GET /v2/repositories/{id}.
"7c9e6679-7425-40de-944b-e07fc1f90ae7"
"main"
The queue's lifecycle state. switchingModes is a transient conversion state during which config and mode writes are refused.
running, paused, draining, switchingModes "running"
The engine a queue runs. queue tests entries in strict arrival order, one line. graph builds a dependency graph and may test entries speculatively in parallel, which merges faster but can require bisection to attribute a failure. Changing mode is a real conversion, not a flag flip — see mergeQueues.switchModes.
queue, graph "queue"
Who owns the queue's configuration. terraform — the last write came from Terraform, identified on any queue write (create, config, pause/resume/drain, mode switch) by a User-Agent or X-Source header containing terraform or opentofu, case-insensitively — the same rule as v1. terraformWithDrift — Terraform owned it and a later write was not identified as Terraform's, so the live configuration may differ from the plan. Any such write counts, including pause/resume from other automation. manual — never written by Terraform.
manual, terraform, terraformWithDrift When the queue was created.
"2026-07-24T20:26:04.000Z"
When the queue's own record last changed — its state or configuration. Not affected by entries moving through it.
"2026-07-28T11:02:31.000Z"
Absolute browsable URL of the repository at its provider (not a Trunk API URL).
"https://github.com/acme/widgets"
Path — not an absolute URL — of this queue's pull-request collection on the Trunk API. Resolve it against the server URL; do not fetch it as-is.
"/v2/merge-queues/xK9mP2nQ/pull-requests"
A queue's full configuration. Two fields are merge-protection controls rather than tuning knobs — requiredStatuses (what must pass) and allowedBotSubmitters (who may enqueue) — so treat write access to this object as security-relevant.
The queue's page in the Trunk web app. Absent when the repository has no keyed organization (no slug to address it by).
"https://app.trunk.io/acme/merge-queue/xK9mP2nQ"