SIGNALS Documentation
API Reference

Activities

Create and query tasks, calls, meetings, and other activities via the API.

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 — the list_entries.id of the chosen "Activity Type". This is the editable system: list entries 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 compatibility 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 legacy import type code, so their type_code is null. 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 title 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,
            "title": "Follow up on rental quote",
            "description": null,
            "location": null,
            "regarding_id": 42,
            "regarding_type": "Account",
            "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": {},
            "involved_contacts": [],
            "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,
        "title": "Follow up on rental quote",
        "description": null,
        "location": null,
        "regarding_id": 42,
        "regarding_type": "Account",
        "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": {},
        "involved_contacts": [],
        "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": {
        "title": "Follow up on quote",
        "type_id": 1001,
        "status_id": 2001,
        "priority": 1,
        "description": "Call to discuss pricing",
        "regarding_type": "Account",
        "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 null leaves it unchanged. To clear a nullable field to null, 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,
        "title": "Follow up on rental quote",
        "description": null,
        "location": null,
        "regarding_id": 42,
        "regarding_type": "Account",
        "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": {},
        "involved_contacts": [],
        "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"
    }
}