Mission Control
Read your organization's board, what needs a person now, and give an item to one of your agents.
TL;DRAI summary
Mission Control helps you see all the urgent tasks across your vehicle remarketing operation in one place. It helps you quickly identify what needs your attention, like offers or overdue closings, so you can act on them or assign them to your team.
Mission Control is the board in the app that gathers everything waiting on someone, from every system that owns some of it: offers to decide, closings past their deadline, onboarding steps, valuations, billing, campaigns and the CRM's follow-ups. The API reads the same board, in the same triage order, so a system or an agent of your organization sees what the people see, and can take work off the board. Since 1.5.0.
| Scope | Grants |
|---|---|
mission-control:read | GET /api/v1/mission-control |
mission-control:read and tasks:write | POST /api/v1/mission-control/items/{itemId}/delegate |
Both an API key and a Connect Cypress token are accepted. The board is your organization's own: never another organization's work, and never what Cypress keeps for itself.
The board
GET /api/v1/mission-control answers the items, most urgent first, with a
summary counted over them and the sources that failed to load this time (a
board missing a source looks the same as one with nothing to show).
{
"items": [
{
"id": "offer-clx…",
"source": "offers",
"kind": "offer-decision",
"phase": "sale",
"urgency": "decision",
"badge": null,
"title": "$20,000 offered on 2021 Honda Civic",
"entity": {
"type": "offer", "id": "clx…", "label": "2021 Honda Civic",
"links": { "app": "https://app.getcypress.ai/go/offer/clx…" }
},
"aggregate": null,
"valueKind": "blocked",
"responsible": { "kind": "role", "id": null, "label": "Fleet manager" },
"dueAt": null,
"enteredAt": "2026-10-15T14:00:00.000Z",
"automation": { "actor": "human", "did": null, "can": "Cedar can score this offer against the floor and market", "at": null },
"delegable": true,
"links": { "app": "https://app.getcypress.ai/go/item/offer-clx…" }
}
],
"summary": { "total": 1, "byPhase": { "sale": 1, … }, "byUrgency": { "decision": 1, … }, "automated": 0, "blockedValue": 0, "opportunityValue": 0 },
"unavailable": []
}An item's id is stable while the work is open (offer-<id>,
closing-<id>, crm-task-<taskId>). entity is the one record it is about,
with the link that opens it in the app; an aggregate is many records under
one decision ("4 deals gone quiet"). The board's free text is left out on
purpose, because it can name a counterparty, and so are the app's buttons and
photos: follow entity.links.app, or read the record through its own API.
The item's own links.app opens what it is about too, or the board for a
summary.
| Filter | Values |
|---|---|
source | Comma list of offers, listings, onboarding, valuations, closings, billing, campaigns, crm, platform |
urgency | Comma list of decision, overdue, due-soon, attention, fyi |
owner | me (the person or agent the token acts as; an API key is nobody, so 422) or unassigned |
automated | false leaves out the receipts of what automations already did |
The board is not paged: each source shows its most urgent few and one line for the rest, as the app does.
Delegating an item to an agent
POST /api/v1/mission-control/items/{itemId}/delegate gives an item to one of
your organization's agents. It is what Delegate to an agent does on the
board in the app, by the same rule:
- An item that is a task (
crm-task-<id>) is handed to the agent. - An item about one record (a vehicle, an offer, a closing, a contact, a company or a deal) becomes a task on that record, titled as the item, due when it is due, and given to the agent. An offer's or a closing's task is on its vehicle.
- Anything else is refused (
422 INVALID): an aggregate, an item about your organization, or a receipt of what an automation did. Open it and give its parts to the agent one by one.
{ "agentUserId": "clx…", "note": "Check the floor before you answer" }Both fields are optional. Without agentUserId the item goes to your
organization's only agent; with none connected, or more than one and none
named, it is refused and says which. GET /api/v1/members lists your agents
(kind: AGENT). The note is kept as the task's notes.
{
"task": { "id": "clx…", "title": "$20,000 offered on 2021 Honda Civic", "source": "AUTOMATION", "playKey": "mission-control:offer-clx…", "assignee": { "id": "clx…", "name": "Scout", "kind": "AGENT" }, … },
"created": true,
"how": "made",
"agent": { "id": "clx…", "name": "Scout" },
"item": { "id": "offer-clx…", "title": "$20,000 offered on 2021 Honda Civic" }
}how is made (201), handed-over for a task item, or already when the
item was delegated before and its task is still open: asking twice never makes
two tasks. The task is an ordinary task, with the
same TASK.CREATED and TASK.ASSIGNED webhooks, and its playKey
(mission-control:<itemId>) says where it came from. Like every write, it takes
?dryRun=true and an Idempotency-Key.
Tasks
Read and write your organization's tasks, the work items people, automations and agents share, with the app's own rules, dry runs and idempotency keys.
Insights
Cedar's and Sequoia's insights on your vehicles and buy targets, as data, with what each rests on, how sure it is and the guardrail that applied.