Last updated: May 21, 2025
This documentation outlines how to interact with the Really Focus REST API.
The Pulse API uses API tokens for authentication. All API requests must include an Authorization
header with a Bearer token.
Authorization: Bearer <YOUR_API_TOKEN>
You can generate and manage your API tokens from your user profile settings page.
All API requests must be made over HTTPS.
All API endpoints are relative to the following base URL:
https://reallyfocus.com/api
Endpoints for managing client records.
GET /clients
Returns a list of all clients accessible by the authenticated user's team.
{
"data": [
{
"id": 1,
"name": "Example Client Inc.",
"email": "contact@example.com",
"description": "Description of the client.",
"phone": "555-1234",
"is_archived": false,
"logo_path": null,
"created_at": "2023-10-27T10:00:00.000000Z",
"updated_at": "2023-10-27T10:00:00.000000Z"
// ClientResource fields...
},
// ... more clients
]
}
GET /clients/{client_id}
Returns the details for a specific client.
client_id
(int, required): The ID of the client to retrieve.
{
"data": {
"id": 1,
"name": "Example Client Inc.",
"email": "contact@example.com",
"description": "Description of the client.",
"phone": "555-1234",
"is_archived": false,
"logo_path": null,
"created_at": "2023-10-27T10:00:00.000000Z",
"updated_at": "2023-10-27T10:00:00.000000Z"
// ClientResource fields...
}
}
404 Not Found
: If the client does not exist.403 Forbidden
: If the client does not belong to the user's team.POST /clients
Creates a new client record.
{
"name": "New Client Co.",
"email": "new@client.co",
"description": "A promising new client.",
"phone": "555-5678"
}
name
(string, required): Name of the client.email
(string, nullable, email): Client's email address.description
(string, required): Description of the client.phone
(string, nullable): Client's phone number.logo
(file, nullable, image): Client logo (omitted in example, standard file upload).Returns the newly created client object (similar structure to Get Client response).
422 Unprocessable Entity
: If validation fails (e.g., missing required fields, plan limits reached).PUT /clients/{client_id}
or PATCH /clients/{client_id}
Updates an existing client record.
client_id
(int, required): The ID of the client to update.Include only the fields you want to update.
{
"name": "Updated Client Name",
"phone": "555-9999",
"is_archived": true
}
name
(string, required): Name of the client.email
(string, nullable, email): Client's email address.description
(string, required): Description of the client.phone
(string, nullable): Client's phone number.is_archived
(boolean, nullable): Set to true to archive the client.logo
(file, nullable, image): New client logo (omitted in example).Returns the updated client object.
404 Not Found
: If the client does not exist.403 Forbidden
: If the client does not belong to the user's team.422 Unprocessable Entity
: If validation fails.DELETE /clients/{client_id}
Deletes a client record. Note: This currently performs a hard delete. Consider implications for related projects and tasks.
client_id
(int, required): The ID of the client to delete.An empty response indicates successful deletion.
404 Not Found
: If the client does not exist.403 Forbidden
: If the client does not belong to the user's team.Endpoints for managing projects.
GET /projects
Returns a list of all projects accessible by the authenticated user's team.
{
"data": [
{
"id": 1,
"name": "Project Alpha",
"description": "First project for client.",
"client_id": 1,
"is_archived": false,
"created_at": "2023-10-27T10:05:00.000000Z",
"updated_at": "2023-10-27T10:05:00.000000Z",
"client": {
// Embedded ClientResource data...
}
// ProjectResource fields...
},
// ... more projects
]
}
GET /projects/{project_id}
Returns the details for a specific project.
project_id
(int, required): The ID of the project to retrieve.
{
"data": {
"id": 1,
"name": "Project Alpha",
"description": "First project for client.",
"client_id": 1,
"is_archived": false,
"created_at": "2023-10-27T10:05:00.000000Z",
"updated_at": "2023-10-27T10:05:00.000000Z",
"client": {
// Embedded ClientResource data...
}
// ProjectResource fields...
}
}
404 Not Found
: If the project does not exist.403 Forbidden
: If the project does not belong to the user's team.POST /projects
Creates a new project.
{
"name": "Project Beta",
"description": "Second project.",
"client_id": 1
}
name
(string, required): Name of the project.description
(string, nullable): Project description.client_id
(int, required): The ID of the client this project belongs to (must belong to user's team).Returns the newly created project object.
422 Unprocessable Entity
: If validation fails (e.g., invalid client_id).403 Forbidden
: If the specified client_id does not belong to the user's team.PUT /projects/{project_id}
or PATCH /projects/{project_id}
Updates an existing project.
project_id
(int, required): The ID of the project to update.Include only the fields you want to update.
{
"name": "Project Beta Renamed",
"is_archived": true
}
name
(string, required): Name of the project.description
(string, nullable): Project description.is_archived
(boolean, sometimes): Set to true to archive the project.Returns the updated project object.
404 Not Found
: If the project does not exist.403 Forbidden
: If the project does not belong to the user's team.422 Unprocessable Entity
: If validation fails.DELETE /projects/{project_id}
Deletes a project record. Note: This currently performs a hard delete.
project_id
(int, required): The ID of the project to delete.An empty response indicates successful deletion.
404 Not Found
: If the project does not exist.403 Forbidden
: If the project does not belong to the user's team.Endpoints for managing tasks.
GET /tasks
Returns a list of tasks for the authenticated user's team. Can be filtered by project.
project_id
(int, optional): Filter tasks by a specific project ID.
{
"data": [
{
"id": 1,
"name": "Design Mockups",
"description": "Create initial designs.",
"status": 1, // 1: Open, 2: In Progress, 3: Closed
"priority": 2, // Refer to Priority Enum
"weight": null, // Refer to TaskWeight Enum
"project_id": 1,
"due_date": "2023-11-15",
"start_date": "2023-11-01",
"assignment_id": 1,
// ... other TaskResource fields
"project": { /* Embedded ProjectResource */ },
"assignedTo": { /* Embedded UserResource */ }
},
// ... more tasks
]
}
403 Forbidden
: If filtering by a `project_id` that doesn't belong to the user's team.GET /tasks/{task_id}
Returns the details for a specific task.
task_id
(int, required): The ID of the task to retrieve.
{
"data": {
"id": 1,
"name": "Design Mockups",
// ... other TaskResource fields
"project": { /* Embedded ProjectResource */ },
"assignedTo": { /* Embedded UserResource */ },
"parent": null,
"children": []
}
}
404 Not Found
: If the task does not exist.403 Forbidden
: If the task does not belong to the user's team.POST /tasks
Creates a new task.
{
"name": "Implement Feature X",
"description": "Code the main logic for Feature X.",
"project_id": 1,
"priority": 3,
"due_date": "2023-11-30",
"assignment_id": 2 // User ID of the assignee (must be in team)
}
name
(string, required): Task name.description
(string, required): Task description.status
(int, optional, default: 1): Task status (1: Open, 2: In Progress, 3: Closed).priority
(int, required): Task priority (refer to Enum).weight
(int, nullable): Task weight (refer to Enum).project_id
(int, required): ID of the project this task belongs to.due_date
(date, required): Due date (YYYY-MM-DD).start_date
(date, nullable): Start date (YYYY-MM-DD). Must be before or equal to due_date.assignment_id
(int, nullable): ID of the user assigned to the task (must be in the same team).parent_id
(int, nullable): ID of the parent task (must be in same project, cannot be a subtask itself).estimated_duration
/ actual_duration
(numeric, nullable): Duration value.estimated_duration_unit
/ actual_duration_unit
(string, nullable): Unit ('hours', 'days', 'weeks').currently_working_on
(boolean, nullable): Is the assignee actively working on this?Returns the newly created task object.
422 Unprocessable Entity
: If validation fails.403 Forbidden
: If the specified `project_id` or `assignment_id` is invalid or not accessible by the user's team.PUT /tasks/{task_id}
or PATCH /tasks/{task_id}
Updates an existing task.
task_id
(int, required): The ID of the task to update.Include only the fields you want to update.
{
"status": 2,
"assignment_id": 1,
"priority": 1
}
Same fields as Create Task, but all are optional ('sometimes' validation rule applies).
Returns the updated task object.
404 Not Found
: If the task does not exist.403 Forbidden
: If the task does not belong to the user's team or if attempting to move to a project not in the user's team.422 Unprocessable Entity
: If validation fails.DELETE /tasks/{task_id}
Deletes a task record.
task_id
(int, required): The ID of the task to delete.An empty response indicates successful deletion.
404 Not Found
: If the task does not exist.403 Forbidden
: If the task does not belong to the user's team.If you can't find what you're looking for, reach out to our support team.
Contact Support