cypress.DOCS
Log inRegister
Cypress Docs
Developers

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.

Dive deeper:

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.

ScopeGrants
mission-control:readGET /api/v1/mission-control
mission-control:read and tasks:writePOST /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.

FilterValues
sourceComma list of offers, listings, onboarding, valuations, closings, billing, campaigns, crm, platform
urgencyComma list of decision, overdue, due-soon, attention, fyi
ownerme (the person or agent the token acts as; an API key is nobody, so 422) or unassigned
automatedfalse 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.