POST
/api/public/v1/deals/{dealId}/move

Move a deal to another stage

The kanban drag, as an endpoint. `stageMovedAt` is reset only when the stage actually changes, so the stale-deal indicator measures time in the current stage rather than time since the deal was created — re-ordering within a column leaves it alone.

Required scope

The access token must carry this scope. A token missing it gets 403 Forbidden. Grant them to an API client under Settings → Company → API, and to a teammate under Employee → Permissions.

deals:write

Path Parameters

NameTypeRequiredDescription
dealIdstringRequiredDeal ID.

Request Body

PropertyTypeDescription
stageIdstringMust belong to this location’s own pipeline.
sortOrdernumberPosition within the column.
POSTExample request
curl
curl -X POST "https://www.pxb.app/api/public/v1/deals/{dealId}/move" \
  -H "Authorization: Bearer your_access_token" \
  -H "Content-Type: application/json" \
  -d '{
    "stageId": "stg_02"
  }'
200Example response
json
{
  "message": "Deal moved successfully!",
  "content": {
    "deal": {
      "id": "del_8830",
      "referenceId": 214,
      "locationId": "loc_abc123",
      "pipelineId": "pip_01",
      "stageId": "stg_02",
      "accountId": "acc_7712",
      "ownerId": "emp_44f1",
      "title": "Northwind — annual contract",
      "value": 4800000,
      "currency": "USD",
      "status": "OPEN",
      "probability": 60,
      "expectedCloseDate": "2026-10-15T00:00:00.000Z",
      "sortOrder": 0,
      "wonLostReason": null,
      "closedAt": null,
      "stageMovedAt": "2026-08-25T10:00:00.000Z",
      "createdAt": "2026-08-10T09:00:00.000Z",
      "updatedAt": "2026-08-25T10:00:00.000Z"
    }
  }
}

In the console

The same thing done by hand, for anyone comparing the API against the screen they already use.

xRM → Pipeline
/xrm/pipeline
  1. Drag a card to another column.