An activity is any single item of work sitting on a technician's plate. Rather than asking you to poll tickets, project tasks, schedule entries and workflow tasks separately, this API fans out across all of them and returns one merged, sortable feed for the authenticated caller — the same list that backs the activities view in the web app.
GET /activities returns the caller's own work across tickets, project tasks, schedule entries, ad-hoc items, workflow tasks, time entries and notifications. Narrow it with type (repeatable, to select which sources contribute), status (open, closed or all), search, and priority or date-range filters — dueDateStart/dueDateEnd and createdAtStart/createdAtEnd. Order the result with sortBy (type, title, status, priority or dueDate) plus sortDirection, and page through it with page and pageSize.
curl -G https://algapsa.com/api/v1/activities \
-H "X-API-Key: $ALGA_API_KEY" \
--data-urlencode "status=open" \
--data-urlencode "sortBy=dueDate" \
--data-urlencode "sortDirection=asc" \
--data-urlencode "pageSize=50"Passing groupBy (type, priority, status or dueDate) buckets the response server-side, which is usually cheaper than grouping a full page of results on the client.
Not every piece of work starts as a ticket. An ad-hoc activity is a personal, self-assigned item that shows up in the same feed as a schedule activity. Create one with POST /activities/ad-hoc — times are optional, but when you supply both the end must be after the start. Edit it with PATCH /activities/ad-hoc/{id}, where omitted fields are left untouched and notes: null explicitly clears the field.
POST /activities/ad-hoc/{id}/done is the check-box: done: true closes the item, done: false reopens it back to scheduled. DELETE /activities/ad-hoc/{id} removes it permanently.
Technicians can bucket their activities into saved groups in the web app. GET /activities/groups reads those groups back with their ordered item references, so a client can reproduce the same "my groups" view over the unified list.
Membership is exclusive — an activity belongs to at most one group. POST /activities/groups/items moves an activity into a group at a given sortOrder, removing it from any other group first and shifting the rows after it to keep the ordering dense. DELETE /activities/groups/items makes an activity ungrouped again, and is a no-op if it wasn't in a group. After a drag-to-reorder, send the whole ordered membership to PATCH /activities/groups/{groupId}/items — each row's sortOrder is set to its position in what you pass.
These endpoints are scoped to the authenticated caller: you read and organize your own work, not the whole tenant's. Access is gated by user_schedule:read; mutating another user's ad-hoc item additionally requires being an assignee or holding user_schedule:update or user_schedule:read_all. To read the activity trail on a specific quote instead, see Quotes API.
Every endpoint links through to its full parameters, request and response schemas, and code samples.
GET/api/v1/activitiesAlgaPSAList user activitiesPOST/api/v1/activities/ad-hocAlgaPSACreate ad-hoc activityPATCH/api/v1/activities/ad-hoc/{id}AlgaPSAUpdate ad-hoc activityDELETE/api/v1/activities/ad-hoc/{id}AlgaPSADelete ad-hoc activityPOST/api/v1/activities/ad-hoc/{id}/doneAlgaPSAToggle ad-hoc activity doneGET/api/v1/activities/groupsAlgaPSAList custom activity groupsPATCH/api/v1/activities/groups/{groupId}/itemsAlgaPSAReorder activities within a groupPOST/api/v1/activities/groups/itemsAlgaPSAMove an activity into a groupDELETE/api/v1/activities/groups/itemsAlgaPSARemove an activity from its group