Tickets

Searching and listing tickets, one ticket with its conversation, creating, updating, bulk changes, replies and notes, and attachments.

MethodPathSummary
GET/v1/app/psa/checkCheck PSA app access
GET/v1/app/psa/ticketsList tickets for tenant
GET/v1/app/psa/tickets/:idGet a single ticket with messages and activity
POST/v1/app/psa/ticketsCreate a ticket
POST/v1/app/psa/tickets/bulkBulk update tickets (close, set_status, set_type, set_category, set_priority, assign)
POST/v1/app/psa/tickets/:idUpdate ticket fields
POST/v1/app/psa/tickets/:id/deleteDelete ticket
POST/v1/app/psa/tickets/:id/messagesAdd a message or internal note to a ticket
GET/v1/app/psa/attachments/:idDownload/view an attachment by DB id
GET/v1/app/psa/tickets/:id/attachmentsList attachments for a ticket

#Check PSA app access

GET/v1/app/psa/check
Address
https://<your-org>.brambleit.cloud/api/v1/app/psa/check
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: PSA.

Response 200

FieldTypeDescription
okboolean
userobject
user.idinteger
user.rolesarray of any
Example response
JSON
{
  "ok": true,
  "user": {
    "id": 42,
    "roles": []
  }
}

Errors

StatusMessage
404User not found

Example request

Bash
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/app/psa/check' \
  -H "X-API-Key: $BRAMBLE_KEY"

#List tickets for tenant

GET/v1/app/psa/tickets
Address
https://<your-org>.brambleit.cloud/api/v1/app/psa/tickets
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: PSA.

Query parameters

NameTypeDescription
viewany
qany
queue_idnumber
customer_idnumber
prioritystring: "low" | "medium" | "high" | "critical"
type_idnumber
category_idnumber
status_idnumber
limitinteger
offsetinteger

Response 200

FieldTypeDescription
ticketsarray of object
tickets[].previewarray of any
tickets[].last_bodyany
tickets[].minutesinteger
tickets[].contact_role_idsarray of any
moreany
countsarray of any
queue_openany
Example response
JSON
{
  "tickets": [
    {
      "…r": "…",
      "preview": [],
      "last_body": null,
      "minutes": 1,
      "contact_role_ids": []
    }
  ],
  "more": null,
  "counts": [],
  "queue_open": null
}

Example request

Bash
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/app/psa/tickets' \
  -H "X-API-Key: $BRAMBLE_KEY"

#Get a single ticket with messages and activity

GET/v1/app/psa/tickets/:id
Address
https://<your-org>.brambleit.cloud/api/v1/app/psa/tickets/:id
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: PSA.

Path parameters

NameTypeDescription
idrequiredinteger

Response 200

FieldTypeDescription
ticketany
messagesarray of any
activityany
Example response
JSON
{
  "ticket": null,
  "messages": [],
  "activity": null
}

Errors

StatusMessage
404Ticket not found

Example request

Bash
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/app/psa/tickets/42' \
  -H "X-API-Key: $BRAMBLE_KEY"

#Create a ticket

POST/v1/app/psa/tickets
Address
https://<your-org>.brambleit.cloud/api/v1/app/psa/tickets
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: PSA.

Request body JSON

NameTypeDescription
type_idinteger
category_idinteger
subcategory_idinteger
subjectrequiredany
queue_idrequirednumber
customer_idinteger
contact_idinteger
priorityany
assigned_toany
body_htmlany
bodyany

Response 200

FieldTypeDescription
ticketany
Example response
JSON
{
  "ticket": null
}

Errors

StatusMessage
400subject, body and queue_id required
400Unknown queue
400That type isn't used in this queue

Example request

Bash
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/app/psa/tickets' \
  -H "X-API-Key: $BRAMBLE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type_id":7,"category_id":7,"subcategory_id":7,"subject":"…","queue_id":12.5,"customer_id":7,"contact_id":7,"priority":"…","assigned_to":"…","body_html":"…","body":"…"}'

#Bulk update tickets (close, set_status, set_type, set_category, set_priority, assign)

POST/v1/app/psa/tickets/bulk

Bulk update tickets (close, set_status, set_type, set_category, set_priority, assign). set_status takes a status id as value. Closing (close, or a status in the Closed group) skips tickets without a type and category and reports them as skipped.

Address
https://<your-org>.brambleit.cloud/api/v1/app/psa/tickets/bulk
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: PSA.

Request body JSON

NameTypeDescription
actionrequiredstring
ticket_idsrequiredarray of any
valuenumber: "low" | "medium" | "high" | "critical"

Response 200

FieldTypeDescription
updatedinteger
skippedany
Example response
JSON
{
  "updated": 1,
  "skipped": null
}

Errors

StatusMessage
400action and ticket_ids[] required
400No valid ticket IDs
400Unknown status
400None of these tickets' queues use that status
400None of these tickets' queues use that type
400Set a type and category on these tickets before closing them
400Invalid priority value
404No matching tickets found
400Unknown action

Example request

Bash
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/app/psa/tickets/bulk' \
  -H "X-API-Key: $BRAMBLE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"action":"string","ticket_ids":[],"value":"low"}'

#Update ticket fields

POST/v1/app/psa/tickets/:id
Address
https://<your-org>.brambleit.cloud/api/v1/app/psa/tickets/:id
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: PSA.

Path parameters

NameTypeDescription
idrequirednumber

Request body JSON

NameTypeDescription
type_idinteger
category_idinteger
subcategory_idinteger
status_idnumber
statusstring
queue_idnumber
subjectrequiredany
reply_to_emailstring
cc_emailsstring (email)
assigned_tonumber
keystring

Response 200

FieldTypeDescription
ticketany
Example response
JSON
{
  "ticket": null
}

Errors

StatusMessage
400Unknown status
400A ticket needs a queue
400Unknown queue
400"…" isn't used in this queue
400That type isn't used in this queue
400The subject can't be empty
400Invalid reply-to email address
404Ticket not found

Example request

Bash
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/app/psa/tickets/12.5' \
  -H "X-API-Key: $BRAMBLE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type_id":7,"category_id":7,"subcategory_id":7,"status_id":12.5,"status":"active","queue_id":12.5,"subject":"…","reply_to_email":"alex@example.com","cc_emails":"alex@example.com","assigned_to":12.5,"key":"…"}'

#Delete ticket

POST/v1/app/psa/tickets/:id/delete
Address
https://<your-org>.brambleit.cloud/api/v1/app/psa/tickets/:id/delete
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: PSA.

Path parameters

NameTypeDescription
idrequiredinteger

Response 200

FieldTypeDescription
successboolean
Example response
JSON
{
  "success": true
}

Errors

StatusMessage
404Ticket not found

Example request

Bash
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/app/psa/tickets/42/delete' \
  -H "X-API-Key: $BRAMBLE_KEY"

#Add a message or internal note to a ticket

POST/v1/app/psa/tickets/:id/messages
Address
https://<your-org>.brambleit.cloud/api/v1/app/psa/tickets/:id/messages
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: PSA.

Path parameters

NameTypeDescription
idrequirednumber (email)

Request body JSON

NameTypeDescription
typestring
body_htmlany
bodyany
attachmentsarray of any
status_idinteger
statusstring
tostring (email)
ccstring (email)
is_resolutionboolean

Response 200

FieldTypeDescription
messagestring
Example response
JSON
{
  "message": "Saved"
}

Errors

StatusMessage
400Write a message first
400Attachments can be up to 15 MB each and 25 MB in total
400Unknown status
400Invalid To email address
400"…" isn't used in this queue
404Ticket not found

Example request

Bash
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/app/psa/tickets/12.5/messages' \
  -H "X-API-Key: $BRAMBLE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type":"string","body_html":"…","body":"…","attachments":[],"status_id":7,"status":"active","to":"string","cc":"string","is_resolution":true}'

#Download/view an attachment by DB id

GET/v1/app/psa/attachments/:id
Address
https://<your-org>.brambleit.cloud/api/v1/app/psa/attachments/:id
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: PSA.

Path parameters

NameTypeDescription
idrequiredinteger

Response

A file or page.

Errors

StatusMessage
404Attachment not found
403Forbidden
404File not found

Example request

Bash
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/app/psa/attachments/42' \
  -H "X-API-Key: $BRAMBLE_KEY"

#List attachments for a ticket

GET/v1/app/psa/tickets/:id/attachments
Address
https://<your-org>.brambleit.cloud/api/v1/app/psa/tickets/:id/attachments
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: PSA.

Path parameters

NameTypeDescription
idrequiredinteger

Response 200

FieldTypeDescription
attachmentsarray of object
attachments[].idinteger
attachments[].ticket_idinteger
attachments[].message_idinteger, or null
attachments[].filenamestring
attachments[].mime_typestring, or null
attachments[].size_bytesinteger, or null
attachments[].created_atstring (date-time), or null
Example response
JSON
{
  "attachments": [
    {
      "id": 42,
      "ticket_id": 7,
      "message_id": 7,
      "filename": "Example filename",
      "mime_type": "string",
      "size_bytes": 1,
      "created_at": "2026-11-12T09:30:00.000Z"
    }
  ]
}

Errors

StatusMessage
404Ticket not found

Example request

Bash
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/app/psa/tickets/42/attachments' \
  -H "X-API-Key: $BRAMBLE_KEY"