Activities
Activities API
CRUD endpoints for managing activities (tasks, calls, meetings, emails, notes).
Activity types: type_id vs type_code
Activity types are editable list-of-values entries, so an activity carries two type identifiers in its response:
type_id— thelist_values.idof the chosen "Activity Type". This is the editable system: list values can be renamed, reordered, or added to, and the id is what you read, write (on create/update), and filter on (q[type_id_eq]=...). Its value is database-assigned, not a fixed code.type_code— the RMS-aligned ActivityType code, for drop-in compatibility with industry-standard rental management systems. Built-in types expose a stable code:Task=1001,Call=1002,Fax=1003,Email=1004,Meeting=1005,Note=1006,Letter=1007. User-added custom activity types have no CRMS code, so theirtype_codeisnull. This field is read-only.
Endpoints
| Method | URL | Description |
|---|---|---|
| GET | /api/v1/activities |
List activities |
| GET | /api/v1/activities/{id} |
Show an activity |
| POST | /api/v1/activities |
Create an activity |
| PUT | /api/v1/activities/{id} |
Update an activity |
| DELETE | /api/v1/activities/{id} |
Delete an activity |
| POST | /api/v1/activities/{id}/complete |
Mark activity as complete |
Authentication
Requires a Sanctum bearer token with activities:read (GET) or activities:write (POST/PUT/DELETE) ability.
List Activities
GET /api/v1/activities
Query Parameters
| Parameter | Type | Description |
|---|---|---|
page |
integer | Page number (default: 1) |
per_page |
integer | Items per page (default: 20, max: 100) |
q[subject_cont] |
string | Filter by subject containing value |
q[type_id_eq] |
integer | Filter by activity type |
q[status_id_eq] |
integer | Filter by status |
q[completed_true] |
boolean | Filter completed activities |
include |
string | Comma-separated relationships to include |
Response
{
"activities": [
{
"id": 1,
"subject": "Follow up on rental quote",
"description": null,
"location": null,
"regarding_id": 42,
"regarding_type": "Member",
"owned_by": 1,
"starts_at": "2026-03-21T10:00:00.000Z",
"ends_at": "2026-03-21T10:30:00.000Z",
"priority": 1,
"type_id": 78,
"type_code": 1001,
"status_id": 2001,
"completed": false,
"time_status": 0,
"custom_fields": {},
"participants": [],
"activity_type_name": "Task",
"activity_status_name": "Scheduled",
"time_status_name": "Free",
"created_at": "2026-03-21T10:00:00.000Z",
"updated_at": "2026-03-21T10:00:00.000Z"
}
],
"meta": {
"total": 1,
"per_page": 20,
"page": 1
}
}
Show Activity
GET /api/v1/activities/{id}
Response
{
"activity": {
"id": 1,
"subject": "Follow up on rental quote",
"description": null,
"location": null,
"regarding_id": 42,
"regarding_type": "Member",
"owned_by": 1,
"starts_at": "2026-03-21T10:00:00.000Z",
"ends_at": "2026-03-21T10:30:00.000Z",
"priority": 1,
"type_id": 78,
"type_code": 1001,
"status_id": 2001,
"completed": false,
"time_status": 0,
"custom_fields": {},
"participants": [],
"activity_type_name": "Task",
"activity_status_name": "Scheduled",
"time_status_name": "Free",
"created_at": "2026-03-21T10:00:00.000Z",
"updated_at": "2026-03-21T10:00:00.000Z"
}
}
Create Activity
POST /api/v1/activities
Request Body
{
"activity": {
"subject": "Follow up on quote",
"type_id": 1001,
"status_id": 2001,
"priority": 1,
"description": "Call to discuss pricing",
"regarding_type": "Member",
"regarding_id": 42,
"owned_by": 5,
"starts_at": "2026-03-22T10:00:00Z",
"ends_at": "2026-03-22T10:30:00Z"
}
}
Update Activity
PUT /api/v1/activities/{id}
Accepts the same body as create. Only include fields to update.
Clearing nullable fields: Omitting a field or sending
nullleaves it unchanged. To clear a nullable field tonull, send an empty string""as its value.
Delete Activity
DELETE /api/v1/activities/{id}
Returns 204 No Content on success.
Complete Activity
POST /api/v1/activities/{id}/complete
Marks an activity as complete. Sets completed to true and updates the status accordingly.
Response
{
"activity": {
"id": 1,
"subject": "Follow up on rental quote",
"description": null,
"location": null,
"regarding_id": 42,
"regarding_type": "Member",
"owned_by": 1,
"starts_at": "2026-03-21T10:00:00.000Z",
"ends_at": "2026-03-21T10:30:00.000Z",
"priority": 1,
"type_id": 78,
"type_code": 1001,
"status_id": 2001,
"completed": true,
"time_status": 0,
"custom_fields": {},
"participants": [],
"activity_type_name": "Task",
"activity_status_name": "Scheduled",
"time_status_name": "Free",
"created_at": "2026-03-21T10:00:00.000Z",
"updated_at": "2026-03-21T10:00:00.000Z"
}
}