Contacts
Create, retrieve, update, and delete contacts. Manage related notes, tasks, and deals. Import and export contact data in bulk.
All Contacts endpoints require JWT authentication via the
Authorization: Bearer <token> header. Some endpoints require Admin role.Core Endpoints
GET
/contacts
List contacts
JWT Required
Retrieve a paginated list of contacts with optional filters.
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| page | integer | Optional | Page number for pagination. Default: 1 |
| per_page | integer | Optional | Number of results per page (max 100). Default: 25. Max: 100 |
| search | string | Optional | Search term to filter results |
| status | string | Optional | Filter by status. Values: active, inactive |
| company_id | integer | Optional | Filter by company |
| assigned_to | integer | Optional | Filter by assigned user |
| source | string | Optional | Filter by lead source |
| date_from | string | Optional | Filter by created_at start date (YYYY-MM-DD) |
| date_to | string | Optional | Filter by created_at end date (YYYY-MM-DD) |
| scope | string | Optional | Filter by user scope (me, team, company). Values: me, team, company |
| sort_by | string | Optional | Sort field (default: name). Values: name, email, phone, company_name, status, created_at |
| sort_dir | string | Optional | Sort direction. Values: ASC, DESC |
Response
Paginated contact list
{
"data": [
{
"id": 1,
"first_name": "Jane",
"last_name": "Smith",
"email": "jane.smith@example.com",
"phone": "+1-555-0100",
"mobile": "+1-555-0101",
"job_title": "VP of Operations",
"company_id": 5,
"company_name": "Acme Corp",
"address_street": "123 Main St",
"address_city": "Toronto",
"address_state": "ON",
"address_zip": "M5V 2T6",
"address_country": "Canada",
"notes": "Key decision maker",
"tags": "enterprise,priority",
"status": "active",
"source": "Website",
"assigned_to": 1,
"created_at": "2026-01-15T09:30:00.000000Z",
"updated_at": "2026-01-15T09:30:00.000000Z"
}
],
"current_page": 1,
"last_page": 1,
"per_page": 1,
"total": 1
}Code Examples
curl -X GET "https://crm.revorbit.com/api/contacts" \ -H "Authorization: Bearer YOUR_JWT_TOKEN"
const response = await fetch(
"https://crm.revorbit.com/api/contacts",
{
method: "GET",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
}
}
);
const data = await response.json();
POST
/contacts
Create contact
JWT Required
Create a new contact record.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| first_name | string | Required | Contact's first name |
| last_name | string | Required | Contact's last name |
| string | Optional | Email address | |
| phone | string | Optional | Primary phone number |
| mobile | string | Optional | Mobile phone number |
| job_title | string | Optional | Job title or role |
| company_id | integer | Optional | ID of the associated company |
| address_street | string | Optional | |
| address_city | string | Optional | |
| address_state | string | Optional | |
| address_zip | string | Optional | |
| address_country | string | Optional | |
| notes | string | Optional | |
| tags | string | Optional | Comma-separated tag list |
| status | string | Optional | Values: active, inactive |
| source | string | Optional | |
| assigned_to | integer | Optional | User ID to assign contact to |
Response
Contact created
{
"success": true,
"data": {
"id": 1,
"first_name": "Jane",
"last_name": "Smith",
"email": "jane.smith@example.com",
"phone": "+1-555-0100",
"mobile": "+1-555-0101",
"job_title": "VP of Operations",
"company_id": 5,
"company_name": "Acme Corp",
"address_street": "123 Main St",
"address_city": "Toronto",
"address_state": "ON",
"address_zip": "M5V 2T6",
"address_country": "Canada",
"notes": "Key decision maker",
"tags": "enterprise,priority",
"status": "active",
"source": "Website",
"assigned_to": 1,
"created_at": "2026-01-15T09:30:00.000000Z",
"updated_at": "2026-01-15T09:30:00.000000Z"
},
"message": "..."
}Code Examples
curl -X POST "https://crm.revorbit.com/api/contacts" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"first_name": "...",
"last_name": "...",
"email": "...",
"phone": "...",
"mobile": "...",
"job_title": "...",
"company_id": 1,
"address_street": "...",
"address_city": "...",
"address_state": "...",
"address_zip": "...",
"address_country": "...",
"notes": "...",
"tags": "...",
"status": "active",
"source": "...",
"assigned_to": 1
}'const response = await fetch(
"https://crm.revorbit.com/api/contacts",
{
method: "POST",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
"Content-Type": "application/json"
},
body: JSON.stringify(
{
"first_name": "...",
"last_name": "...",
"email": "...",
"phone": "...",
"mobile": "...",
"job_title": "...",
"company_id": 1,
"address_street": "...",
"address_city": "...",
"address_state": "...",
"address_zip": "...",
"address_country": "...",
"notes": "...",
"tags": "...",
"status": "active",
"source": "...",
"assigned_to": 1
}
)
}
);
const data = await response.json();
GET
/contacts/{id}
Get contact
JWT Required
Retrieve a single contact by ID with full details.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | integer | Required | Resource ID |
Response
Contact details
{
"success": true,
"data": {
"id": 1,
"first_name": "Jane",
"last_name": "Smith",
"email": "jane.smith@example.com",
"phone": "+1-555-0100",
"mobile": "+1-555-0101",
"job_title": "VP of Operations",
"company_id": 5,
"company_name": "Acme Corp",
"address_street": "123 Main St",
"address_city": "Toronto",
"address_state": "ON",
"address_zip": "M5V 2T6",
"address_country": "Canada",
"notes": "Key decision maker",
"tags": "enterprise,priority",
"status": "active",
"source": "Website",
"assigned_to": 1,
"created_at": "2026-01-15T09:30:00.000000Z",
"updated_at": "2026-01-15T09:30:00.000000Z"
}
}Code Examples
curl -X GET "https://crm.revorbit.com/api/contacts/{id}" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"const response = await fetch(
"https://crm.revorbit.com/api/contacts/{id}",
{
method: "GET",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
}
}
);
const data = await response.json();
PUT
/contacts/{id}
Update contact
JWT Required
Update an existing contact's fields.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | integer | Required | Resource ID |
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| first_name | string | Required | Contact's first name |
| last_name | string | Required | Contact's last name |
| string | Optional | Email address | |
| phone | string | Optional | Primary phone number |
| mobile | string | Optional | Mobile phone number |
| job_title | string | Optional | Job title or role |
| company_id | integer | Optional | ID of the associated company |
| address_street | string | Optional | |
| address_city | string | Optional | |
| address_state | string | Optional | |
| address_zip | string | Optional | |
| address_country | string | Optional | |
| notes | string | Optional | |
| tags | string | Optional | Comma-separated tag list |
| status | string | Optional | Values: active, inactive |
| source | string | Optional | |
| assigned_to | integer | Optional | User ID to assign contact to |
Code Examples
curl -X PUT "https://crm.revorbit.com/api/contacts/{id}" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"first_name": "...",
"last_name": "...",
"email": "...",
"phone": "...",
"mobile": "...",
"job_title": "...",
"company_id": 1,
"address_street": "...",
"address_city": "...",
"address_state": "...",
"address_zip": "...",
"address_country": "...",
"notes": "...",
"tags": "...",
"status": "active",
"source": "...",
"assigned_to": 1
}'const response = await fetch(
"https://crm.revorbit.com/api/contacts/{id}",
{
method: "PUT",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
"Content-Type": "application/json"
},
body: JSON.stringify(
{
"first_name": "...",
"last_name": "...",
"email": "...",
"phone": "...",
"mobile": "...",
"job_title": "...",
"company_id": 1,
"address_street": "...",
"address_city": "...",
"address_state": "...",
"address_zip": "...",
"address_country": "...",
"notes": "...",
"tags": "...",
"status": "active",
"source": "...",
"assigned_to": 1
}
)
}
);
const data = await response.json();
DELETE
/contacts/{id}
Delete contact
JWT Required
Permanently delete a contact record.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | integer | Required | Resource ID |
Code Examples
curl -X DELETE "https://crm.revorbit.com/api/contacts/{id}" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"const response = await fetch(
"https://crm.revorbit.com/api/contacts/{id}",
{
method: "DELETE",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
}
}
);
const data = await response.json();
POST
/contacts/{id}/notes
Add note to contact
JWT Required
Add a text note to a contact.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | integer | Required | Resource ID |
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| content | string | Required | Note text content |
Code Examples
curl -X POST "https://crm.revorbit.com/api/contacts/{id}/notes" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"content":"..."}'const response = await fetch(
"https://crm.revorbit.com/api/contacts/{id}/notes",
{
method: "POST",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
"Content-Type": "application/json"
},
body: JSON.stringify(
{
"content": "..."
}
)
}
);
const data = await response.json();
DELETE
/contacts/{id}/notes/{noteId}
Delete contact note
JWT Required
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | integer | Required | Resource ID |
| noteId | integer | Required |
Code Examples
curl -X DELETE "https://crm.revorbit.com/api/contacts/{id}/notes/{noteId}" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"const response = await fetch(
"https://crm.revorbit.com/api/contacts/{id}/notes/{noteId}",
{
method: "DELETE",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
}
}
);
const data = await response.json();
GET
/contacts/{id}/tasks
Get contact tasks
JWT Required
List tasks associated with a contact.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | integer | Required | Resource ID |
Code Examples
curl -X GET "https://crm.revorbit.com/api/contacts/{id}/tasks" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"const response = await fetch(
"https://crm.revorbit.com/api/contacts/{id}/tasks",
{
method: "GET",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
}
}
);
const data = await response.json();
POST
/contacts/{id}/tasks
Add task to contact
JWT Required
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | integer | Required | Resource ID |
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| title | string | Required | |
| description | string | Optional | |
| due_date | date | Optional | |
| due_time | string | Optional | |
| priority | string | Optional | Values: low, medium, high |
| assigned_to | integer | Optional | |
| contact_id | integer | Optional | |
| company_id | integer | Optional | |
| deal_id | integer | Optional |
Code Examples
curl -X POST "https://crm.revorbit.com/api/contacts/{id}/tasks" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "...",
"description": "...",
"due_date": "2026-01-15",
"due_time": "...",
"priority": "low",
"assigned_to": 1,
"contact_id": 1,
"company_id": 1,
"deal_id": 1
}'const response = await fetch(
"https://crm.revorbit.com/api/contacts/{id}/tasks",
{
method: "POST",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
"Content-Type": "application/json"
},
body: JSON.stringify(
{
"title": "...",
"description": "...",
"due_date": "2026-01-15",
"due_time": "...",
"priority": "low",
"assigned_to": 1,
"contact_id": 1,
"company_id": 1,
"deal_id": 1
}
)
}
);
const data = await response.json();
PUT
/contacts/{id}/tasks/{taskId}
Update contact task
JWT Required
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | integer | Required | Resource ID |
| taskId | integer | Required |
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| title | string | Required | |
| description | string | Optional | |
| due_date | date | Optional | |
| due_time | string | Optional | |
| priority | string | Optional | Values: low, medium, high |
| assigned_to | integer | Optional | |
| contact_id | integer | Optional | |
| company_id | integer | Optional | |
| deal_id | integer | Optional |
Code Examples
curl -X PUT "https://crm.revorbit.com/api/contacts/{id}/tasks/{taskId}" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "...",
"description": "...",
"due_date": "2026-01-15",
"due_time": "...",
"priority": "low",
"assigned_to": 1,
"contact_id": 1,
"company_id": 1,
"deal_id": 1
}'const response = await fetch(
"https://crm.revorbit.com/api/contacts/{id}/tasks/{taskId}",
{
method: "PUT",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
"Content-Type": "application/json"
},
body: JSON.stringify(
{
"title": "...",
"description": "...",
"due_date": "2026-01-15",
"due_time": "...",
"priority": "low",
"assigned_to": 1,
"contact_id": 1,
"company_id": 1,
"deal_id": 1
}
)
}
);
const data = await response.json();
DELETE
/contacts/{id}/tasks/{taskId}
Delete contact task
JWT Required
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | integer | Required | Resource ID |
| taskId | integer | Required |
Code Examples
curl -X DELETE "https://crm.revorbit.com/api/contacts/{id}/tasks/{taskId}" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"const response = await fetch(
"https://crm.revorbit.com/api/contacts/{id}/tasks/{taskId}",
{
method: "DELETE",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
}
}
);
const data = await response.json();
GET
/contacts/{id}/linked-emails
Get contact emails
JWT Required
List synced emails linked to this contact.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | integer | Required | Resource ID |
Code Examples
curl -X GET "https://crm.revorbit.com/api/contacts/{id}/linked-emails" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"const response = await fetch(
"https://crm.revorbit.com/api/contacts/{id}/linked-emails",
{
method: "GET",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
}
}
);
const data = await response.json();
GET
/contacts/export
Export contacts
Admin Required
Export all contacts as a CSV file.
Response
CSV file download (binary file download)
Code Examples
curl -X GET "https://crm.revorbit.com/api/contacts/export" \ -H "Authorization: Bearer YOUR_JWT_TOKEN"
const response = await fetch(
"https://crm.revorbit.com/api/contacts/export",
{
method: "GET",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
}
}
);
const data = await response.json();
GET
/contacts/template
Get import template
Admin Required
Download a CSV template for importing contacts.
Response
CSV template (binary file download)
Code Examples
curl -X GET "https://crm.revorbit.com/api/contacts/template" \ -H "Authorization: Bearer YOUR_JWT_TOKEN"
const response = await fetch(
"https://crm.revorbit.com/api/contacts/template",
{
method: "GET",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
}
}
);
const data = await response.json();
POST
/contacts/import
Import contacts
Admin Required
Import contacts from a CSV file. Uses the template format.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| file | file | Optional | CSV file to import |
Response
Import results
{
"success": true,
"message": "...",
"imported": 1,
"skipped": 1,
"errors": [
"..."
]
}Code Examples
curl -X POST "https://crm.revorbit.com/api/contacts/import" \ -H "Authorization: Bearer YOUR_JWT_TOKEN" \ -F "file=@/path/to/file"
const response = await fetch(
"https://crm.revorbit.com/api/contacts/import",
{
method: "POST",
headers: {
"Authorization": "Bearer YOUR_JWT_TOKEN",
}
}
);
const data = await response.json();