PATCH
/api/public/v1/tickets/{ticketId}

Update a ticket

Change any field on a work item, including moving it between statuses. Send only what changes. Only the creator, the assignee, or a manager of the ticket’s project may edit a given item.

Required scope

The access token must carry this scope. A token missing it gets 403 Forbidden. Grant them to an API client under Dev Tools → API, to an assistant or CLI sign-in when you approve or edit it under Dev Tools, and to a teammate under Employee → Permissions.

projects:write

Path Parameters

NameTypeRequiredDescription
ticketIdstringRequiredTicket ID.

Request Body

PropertyTypeDescription
titlestringWhat the work is.
descriptionstringSend null to clear it.
statusstringMoving to DONE stamps `resolvedAt`; moving off DONE clears it again.
prioritystring
assigneeIdstringSend null to leave it unassigned. Whoever is named has to be on the project, and is notified.
reporterIdstringMove who the work is credited to. There is no null — a ticket always has a reporter.
reporterAccountIdstringCredit it to an xRM customer instead, which clears the employee. Never send both.
milestoneIdstringAny milestone in the same project. Send null to take the ticket out of its milestone.
dueDatestringISO 8601, or null to unschedule.
labelIdsarrayReplaces the whole label set — send the full list, not a delta.
knownUpdatedAtstringThe `updatedAt` you last read. Writes still land if the record moved since (last write wins), but the response carries a `conflict` naming who changed what.
PATCHExample request
curl
curl -X PATCH "https://www.pxb.app/api/public/v1/tickets/{ticketId}" \
  -H "Authorization: Bearer your_access_token" \
  -H "Content-Type: application/json" \
  -d '{
    "status": "IN_REVIEW",
    "assigneeId": "emp_44f1"
  }'
200Example response
json
{
  "message": "Ticket updated successfully!",
  "content": {
    "project": {
      "id": "tkt_a1b2c3",
      "key": "APOLLO-14",
      "number": 14,
      "title": "Ship the billing export",
      "description": "CSV export of the ledger for accountants.",
      "status": "IN_REVIEW",
      "priority": "HIGH",
      "estimate": 5,
      "dueDate": "2026-09-15T08:00:00.000Z",
      "isOverdue": false,
      "project": {
        "id": "prj_a1b2c3",
        "key": "APOLLO",
        "name": "Apollo billing rebuild",
        "color": "violet"
      },
      "type": {
        "id": "typ_01",
        "name": "Task",
        "icon": "CircleCheck",
        "color": "blue"
      },
      "milestone": {
        "id": "epc_9f8e",
        "name": "Billing",
        "color": "violet"
      },
      "goal": {
        "id": "spr_22",
        "number": 4,
        "year": 2026,
        "status": "ACTIVE"
      },
      "assignee": {
        "employeeId": "emp_44f1",
        "name": "Dana Reyes",
        "email": null,
        "avatarUrl": null
      },
      "creator": {
        "employeeId": "emp_12ab",
        "name": "Sam Okafor",
        "email": null,
        "avatarUrl": null
      },
      "reporter": {
        "kind": "CUSTOMER",
        "id": "acc_5e2f",
        "name": "Priya Nair",
        "email": "priya@example.com",
        "avatarUrl": null
      },
      "labels": [
        {
          "id": "lbl_77",
          "name": "customer-request",
          "color": "amber"
        }
      ],
      "projectId": "prj_a1b2c3",
      "typeId": "typ_01",
      "milestoneId": "epc_9f8e",
      "goalId": "spr_22",
      "boardOrder": 0,
      "planOrder": 0,
      "subtaskCount": 2,
      "commentCount": 4,
      "attachmentCount": 0,
      "linkCount": 1,
      "createdAt": "2026-08-01T14:02:00.000Z",
      "updatedAt": "2026-08-20T09:41:00.000Z",
      "resolvedAt": null
    },
    "conflict": null
  }
}
403Example response
json
{
  "message": "Only the assignee, the creator, or a manager of this project can change this ticket."
}

In the console

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

Projects
/projects
  1. Open a ticket, or use the inline controls on the table row.
  2. Drag a card on the board to change its status.