Boards and My work

Read the board with its per-column pages and the personal My work lists through the SAQ REST API.

Written for
integration-developer
Roles
owner, admin, member, elevated-client-user, agent
Requires
API token with read scope
Feature
tickets

The board is the ticket list grouped by state, one column per state in workflow order. Column order is priority first (highest at the top), then most recent activity. Archived tickets are never on a board. All three operations return TicketSummary items, described on Tickets.

GET /api/w/{slug}/board

The board for the whole workspace or one project. Token: yes, read. The query accepts every filter of GET /tickets (projectId, stateIds, kindIds, labelIds, priorityIds, stateCategory, assigneeId, reporterId, viewerId, billingClientId, billingPolicy, due, q, queue); limit (1–50, default 50) caps each column, and cursor is ignored here.

Request

curl "https://saq.no/api/w/acme/board?projectId=01924c3e-6b2a-7d11-9d0e-3a1f4b5c6d7e&limit=20" \
  -H 'Authorization: Bearer saq_YOUR_TOKEN'

Response 200 (Board)

{
  "columns": [
    {
      "state": {
        "id": "01924c3e-0002-7000-8000-000000000001",
        "key": "backlog",
        "name": "Backlog",
        "category": "open"
      },
      "total": 37,
      "tickets": [],
      "nextCursor": "MHwyMDI2LTA5LTE5VDEwOjE1OjAwLjAwMFp8MDE5MjRjM2U"
    },
    {
      "state": {
        "id": "01924c3e-0002-7000-8000-000000000005",
        "key": "done",
        "name": "Done",
        "category": "closed"
      },
      "total": 2,
      "tickets": [],
      "nextCursor": null
    }
  ]
}
Field Type Meaning
columns[].state object id, key, name, category (open or closed)
columns[].total integer Tickets in the column after filtering, beyond the page shown
columns[].tickets[] TicketSummary The first page, in board order
columns[].nextCursor string or null Cursor for GET /board/{stateId}; null when the column is complete
Error Status When
invalid 400 Bad query value
forbidden 403 Missing read scope

GET /api/w/{slug}/board/{stateId}

The next page of one column, in board order. Token: yes, read. Send the same filters as for the board plus cursor from that column's nextCursor and an optional limit.

curl "https://saq.no/api/w/acme/board/01924c3e-0002-7000-8000-000000000001?projectId=01924c3e-6b2a-7d11-9d0e-3a1f4b5c6d7e&cursor=MHwyMDI2LTA5LTE5VDEwOjE1OjAwLjAwMFp8MDE5MjRjM2U" \
  -H 'Authorization: Bearer saq_YOUR_TOKEN'

Response 200 (TicketList): { "items": TicketSummary[], "nextCursor": string | null }.

Error Status When
invalid 400 details.reason: "bad_cursor", or stateId is not a UUID

GET /api/w/{slug}/my

The caller's personal lists. Token: yes, read. No parameters.

curl https://saq.no/api/w/acme/my \
  -H 'Authorization: Bearer saq_YOUR_TOKEN'

Response 200 (MyWork)

{
  "assigned": [],
  "reported": [],
  "watching": [],
  "dueSoon": []
}
Field Meaning
assigned Open tickets assigned to the caller
reported Tickets the caller started
watching Tickets the caller is a viewer on
dueSoon Visible tickets with a due date coming up

Each list holds TicketSummary items. For an agent account, assigned and reported refer to the agent itself.