A ticket is the unit of work on the AlgaPSA service desk. Use this API to create tickets, move them through your boards and statuses, assign them to technicians, and log comments, time, and files.
A ticket references a board, a status, a priority, and a client — all by ID. Resolve those first: statuses and priorities have their own lookups (GET /tickets/statuses and GET /tickets/priorities), while board and client IDs come from their own APIs. The Create a ticket guide walks through the full lookup-then-create flow.
curl https://algapsa.com/api/v1/tickets \
-H "X-API-Key: $ALGA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "VPN down at the Northwind branch",
"client_id": "cl_3f9a2c",
"board_id": "bd_support",
"status_id": "st_new",
"priority_id": "pr_high"
}'Once a ticket exists, the rest happens through the sub-resources under /tickets/{id}: add notes with POST /comments, change where it sits with PUT /status, hand it off with PUT /assignment, and read logged effort from GET /time-entries. Files, documents, and materials hang off the same ticket.
List and filter with GET /tickets, run a text query with GET /tickets/search, or pull counts for a dashboard from GET /tickets/stats. To open a ticket straight from a piece of hardware, use POST /tickets/from-asset.
When several tickets describe the same underlying issue, group them under one master ticket. Create the bundle with POST /tickets/{id}/bundle, choosing a sync mode of link_only to just link the children or sync_updates to propagate the master's changes to them. Adjust membership later with POST /tickets/{id}/bundle/children and DELETE /tickets/{id}/bundle/children/{childId}, hand the master role to another ticket with POST /tickets/{id}/bundle/promote, and change the sync mode through PUT /tickets/{id}/bundle/settings. Read a ticket's role (master, child, or standalone) and its full membership from GET /tickets/{id}/bundle, or break the whole group apart with DELETE /tickets/{id}/bundle.
Every endpoint links through to its full parameters, request and response schemas, and code samples.
GET/api/v1/ticketsAlgaPSAAlgaDeskList ticketsPOST/api/v1/ticketsAlgaPSAAlgaDeskCreate ticketGET/api/v1/tickets/{id}AlgaPSAAlgaDeskGet ticketPUT/api/v1/tickets/{id}AlgaPSAAlgaDeskUpdate ticketDELETE/api/v1/tickets/{id}AlgaPSAAlgaDeskDelete ticketPUT/api/v1/tickets/{id}/assignmentAlgaPSAAlgaDeskUpdate ticket assignmentGET/api/v1/tickets/{id}/bundleAlgaPSAAlgaDeskGet ticket bundlePOST/api/v1/tickets/{id}/bundleAlgaPSAAlgaDeskCreate ticket bundleDELETE/api/v1/tickets/{id}/bundleAlgaPSAAlgaDeskUnbundle ticketPOST/api/v1/tickets/{id}/bundle/childrenAlgaPSAAlgaDeskAdd bundle childrenDELETE/api/v1/tickets/{id}/bundle/children/{childId}AlgaPSAAlgaDeskRemove bundle childPOST/api/v1/tickets/{id}/bundle/promoteAlgaPSAAlgaDeskPromote bundle masterPUT/api/v1/tickets/{id}/bundle/settingsAlgaPSAAlgaDeskUpdate ticket bundle settingsGET/api/v1/tickets/{id}/commentsAlgaPSAAlgaDeskList ticket commentsPOST/api/v1/tickets/{id}/commentsAlgaPSAAlgaDeskAdd ticket commentPUT/api/v1/tickets/{id}/comments/{commentId}AlgaPSAAlgaDeskPUT v1POST/api/v1/tickets/{id}/comments/{commentId}/reactionsAlgaPSAAlgaDeskPOST v1GET/api/v1/tickets/{id}/documentsAlgaPSAAlgaDeskGET v1POST/api/v1/tickets/{id}/documentsAlgaPSAAlgaDeskPOST v1GET/api/v1/tickets/{id}/documents/{documentId}AlgaPSAAlgaDeskGET v1DELETE/api/v1/tickets/{id}/documents/{documentId}AlgaPSAAlgaDeskDELETE v1GET/api/v1/tickets/{id}/materialsAlgaPSAGET v1POST/api/v1/tickets/{id}/materialsAlgaPSAPOST v1PUT/api/v1/tickets/{id}/statusAlgaPSAAlgaDeskUpdate ticket statusGET/api/v1/tickets/{id}/time-entriesAlgaPSAList ticket time entriesGET/api/v1/tickets/from-assetAlgaPSAGET v1POST/api/v1/tickets/from-assetAlgaPSACreate ticket from assetGET/api/v1/tickets/prioritiesAlgaPSAAlgaDeskGET v1GET/api/v1/tickets/searchAlgaPSAAlgaDeskSearch ticketsGET/api/v1/tickets/statsAlgaPSAAlgaDeskGet ticket statsGET/api/v1/tickets/statusesAlgaPSAAlgaDeskGET v1