Working with tickets
Discover the board first
bash
curl https://api.stoneity.com/public/v1/boards -H "Authorization: Bearer $KEY"
curl https://api.stoneity.com/public/v1/boards/65fef78fa23b4d12ab34cd56 -H "Authorization: Bearer $KEY"The board response lists every field (fields[].id, type, isRequired, options[] for dropdowns) and every state (states[].id, name, isFirst, isLast). Use these ids in ticket calls.
Create
POST /tickets needs boardId and subject. Optional: description, priority, requesterUserId or requesterEmail, assigneeUserId, assigneeGroupId, and fields[] for custom fields. Mandatory board fields must be present; otherwise you get 400 with the field name in the message.
Read
GET /tickets/{id}accepts the ticket id or the ticket number (e.g.INC-1042).GET /tickets?boardId=…supportsstateId,assigneeUserId,requesterUserId,createdSince,createdUntil(ISO 8601),qandorder=asc|desc.
Update
| Operation | Endpoint |
|---|---|
| Change custom fields | PATCH /tickets/{id} with fields[] |
| Change state | POST /tickets/{id}/state with stateId (board transition rules and approvals apply) |
| Assign | POST /tickets/{id}/assignee with userId and/or groupId; both empty unassigns |
| Comment | POST /tickets/{id}/comments with body and isInternal |
| Attach a file | POST /tickets/{id}/attachments as multipart/form-data (file, optional fieldId, isInternal) |
| Download | GET /tickets/{id}/attachments/{key} |
Every mutation returns the updated ticket representation.
Ticket representation
json
{
"id": "65fef78fa23b4d12ab34cd56",
"number": "INC-1042",
"boardId": "…",
"subject": "VPN access issue",
"description": "…",
"state": { "id": "…", "name": "Open", "group": "Open", "isFirst": true, "isLast": false },
"assignee": { "userId": 17, "groupId": null },
"requester": { "userId": null, "email": "jane@example.com" },
"priority": "High",
"channel": "api",
"createdBy": 418,
"createdAt": "2026-09-07T12:00:00Z",
"updatedAt": "2026-09-07T12:05:00Z",
"resolvedAt": null,
"isWaitingApproval": false,
"commentCount": 1,
"attachmentCount": 0,
"fields": [ { "fieldId": "…", "name": "Source system", "type": "Text", "value": "Shop" } ]
}