Skip to main content
🤖 LLM Friendly: This page is available in raw Markdown format for LLM consumption:contacts.md|Get full documentation:llms.txt/llms-full.txt

Contacts

Manage contacts within your workspace. Contacts store customer or lead information including phone numbers, emails, and custom metadata. They can be organized into Address Books.

info

Data Scoping Agents can only see contacts within Address Books they have access to (books owned by them owner_type: agent, books owned by teams they belong to owner_type: team, or shared books owner_type: everyone).

Endpoints

MethodEndpointDescription
GET/call-center/contactsList all contacts
GET/call-center/contacts/lookupLook up contact by phone number
GET/call-center/contacts/:idGet contact details
POST/call-center/contactsCreate a new contact
POST/call-center/contacts/assign-listBatch assign contacts to a list
PUT/call-center/contacts/:idUpdate a contact
DELETE/call-center/contacts/:idDelete a contact

Authentication

All endpoints require Bearer JWT with agent-api audience.

Contact Object

FieldTypeDescription
idstringUnique contact ID (prefixed with ct_)
workspace_idstringWorkspace identifier
address_book_idstringID of the address book this contact belongs to (defaults to Default book if omitted)
first_namestringContact first name
last_namestringContact last name
companystringCompany name
titlestringJob title
emailsobject[]List of email addresses (see Email Object)
phone_numbersobject[]List of phone numbers (see Phone Number Object)
tagsstring[]Tags for categorization
notesstringFree-text notes (max 1000 chars)
timezonestringContact timezone (e.g., "Asia/Ho_Chi_Minh")
languagestringPreferred language (e.g., "vi", "en")
country_codestringISO 3166-1 alpha-2 country code (e.g., "VN")
assigned_agent_idstringOptional ID of the assigned agent responsible for this contact
sourcestringOrigin of this contact (e.g., "manual", "import", "call")
custom_fieldsobjectKey-value pairs for custom data
created_atstringISO 8601 creation timestamp
updated_atstringISO 8601 last update timestamp

Phone Number Object

FieldTypeDescription
phone_numberstringPhone number string (e.g., "+84901234567")
typestringType label: mobile, work, home, fax, etc.
is_primarybooleanWhether this is the primary phone number

Email Object

FieldTypeDescription
emailstringEmail address
typestringType label: work, personal, etc.
is_primarybooleanWhether this is the primary email

List Contacts

GET /call-center/contacts

Retrieve a paginated list of all contacts in the workspace.

Query Parameters

ParameterTypeDefaultDescription
pagenumber1Page number (min: 1)
limitnumber20Items per page (min: 1, max: 100)
searchstringSearch by name, phone number, or email (text search)
sort_fieldstringSort by: created_at, first_name, last_name, company
sort_orderstringdescSort order: asc or desc

Request

curl -X GET "https://{workspace_id}.firetell.app/api/v1/call-center/contacts?page=1&limit=10&search=john" \
-H "Authorization: Bearer YOUR_AGENT_JWT"

Response 200 OK

{
"data": [
{
"id": "ct_a1b2c3d4e5f6g7h8i9j0k1",
"workspace_id": "my_workspace",
"address_book_id": "ab_x1y2z3w4v5u6t7s8",
"first_name": "John",
"last_name": "Doe",
"company": "Acme Corp",
"title": "CTO",
"emails": [
{ "email": "john@acme.com", "type": "work", "is_primary": true }
],
"phone_numbers": [
{ "phone_number": "+84901234567", "type": "mobile", "is_primary": true }
],
"tags": ["vip", "enterprise"],
"notes": "Key decision maker",
"timezone": "Asia/Ho_Chi_Minh",
"language": "en",
"country_code": "VN",
"owner_id": "ag_abc123",
"owner_type": "agent",
"source": "manual",
"custom_fields": { "deal_size": "50000" },
"created_at": "2026-01-15T08:30:00.000Z",
"updated_at": "2026-07-13T09:00:00.000Z"
}
],
"meta": {
"total": 1,
"page": 1,
"limit": 10,
"total_pages": 1
}
}

Lookup Contact by Phone Number

GET /call-center/contacts/lookup

Find a contact by their phone number. The phone number is automatically normalized for matching, so formats like +84901234567, 0901234567, or 84901234567 all match the same contact.

Query Parameters

ParameterTypeRequiredDescription
numberstringPhone number to look up

Request

curl -X GET "https://{workspace_id}.firetell.app/api/v1/call-center/contacts/lookup?number=84901234567" \
-H "Authorization: Bearer YOUR_AGENT_JWT"

Response 200 OK

Returns the matching contact object, or null if no contact is found.

{
"id": "ct_a1b2c3d4e5f6g7h8i9j0k1",
"first_name": "John",
"last_name": "Doe",
"company": "Acme Corp",
"phone_numbers": [
{ "phone_number": "+84901234567", "type": "mobile", "is_primary": true }
]
}
tip

This endpoint is commonly used during incoming calls to display caller information. The call flow engine also uses it internally for the Contact Lookup node.


Get Contact Details

GET /call-center/contacts/:id

Retrieve detailed information about a specific contact.

Path Parameters

ParameterTypeDescription
idstringContact ID (e.g., ct_a1b2c3...)

Request

curl -X GET "https://{workspace_id}.firetell.app/api/v1/call-center/contacts/ct_a1b2c3d4e5f6g7h8i9j0k1" \
-H "Authorization: Bearer YOUR_AGENT_JWT"

Response 200 OK

Returns the full contact object.

Error Responses

StatusDescription
404Contact not found

Create a Contact

POST /call-center/contacts

Create a new contact in the workspace. All fields except the basic identity fields are optional.

Request Body

FieldTypeRequiredDescription
first_namestringFirst name (max 100 chars)
last_namestringLast name (max 100 chars)
companystringCompany name (max 100 chars)
titlestringJob title (max 100 chars)
emailsobject[]Email addresses (see Email Object)
phone_numbersobject[]Phone numbers (see Phone Number Object)
tagsstring[]Tags for categorization
notesstringFree-text notes (max 1000 chars)
timezonestringTimezone identifier (max 50 chars)
languagestringLanguage code (max 10 chars)
country_codestringISO country code (max 10 chars)
address_book_idstringAssign to an address book (defaults to Default book if omitted)
assigned_agent_idstringOptional assigned agent responsible for this contact
sourcestringOrigin label (max 50 chars)
custom_fieldsobjectKey-value pairs for custom data

Request

curl -X POST "https://{workspace_id}.firetell.app/api/v1/call-center/contacts" \
-H "Authorization: Bearer YOUR_AGENT_JWT" \
-H "Content-Type: application/json" \
-d '{
"first_name": "Jane",
"last_name": "Smith",
"company": "TechStart Inc.",
"title": "Product Manager",
"emails": [
{ "email": "jane@techstart.io", "type": "work", "is_primary": true }
],
"phone_numbers": [
{ "phone_number": "+84912345678", "type": "mobile", "is_primary": true },
{ "phone_number": "+84281234567", "type": "work" }
],
"tags": ["lead", "tech"],
"notes": "Met at TechConf 2026",
"timezone": "Asia/Ho_Chi_Minh",
"language": "vi",
"country_code": "VN",
"address_book_id": "ab_x1y2z3w4v5u6t7s8",
"owner_type": "agent",
"source": "manual"
}'

Response 201 Created

Returns the created contact object.

{
"id": "ct_n3w1d2e3f4g5h6i7j8k9l0",
"workspace_id": "my_workspace",
"first_name": "Jane",
"last_name": "Smith",
"company": "TechStart Inc.",
"title": "Product Manager",
"emails": [
{ "email": "jane@techstart.io", "type": "work", "is_primary": true }
],
"phone_numbers": [
{
"phone_number": "+84912345678",
"type": "mobile",
"is_primary": true,
"normalized_number": "84912345678"
},
{
"phone_number": "+84281234567",
"type": "work",
"normalized_number": "84281234567"
}
],
"tags": ["lead", "tech"],
"notes": "Met at TechConf 2026",
"address_book_id": "ab_x1y2z3w4v5u6t7s8",
"owner_type": "agent",
"source": "manual",
"created_at": "2026-07-21T08:00:00.000Z",
"updated_at": "2026-07-21T08:00:00.000Z"
}

Error Responses

StatusDescription
400Validation error or address book does not exist
info

Phone numbers are automatically normalized for consistent lookup. The normalized_number field is generated server-side and used for the Lookup endpoint.


Update a Contact

PUT /call-center/contacts/:id

Update an existing contact. All fields are optional — only include the fields you want to change.

Path Parameters

ParameterTypeDescription
idstringContact ID

Request Body

Same fields as Create a Contact. All fields are optional.

Request

curl -X PUT "https://{workspace_id}.firetell.app/api/v1/call-center/contacts/ct_a1b2c3d4e5f6g7h8i9j0k1" \
-H "Authorization: Bearer YOUR_AGENT_JWT" \
-H "Content-Type: application/json" \
-d '{
"company": "TechStart Global",
"title": "VP of Product",
"tags": ["vip", "enterprise", "tech"]
}'

Response 200 OK

Returns the updated contact object.

Error Responses

StatusDescription
400Validation error or address book does not exist
404Contact not found

Delete a Contact

DELETE /call-center/contacts/:id

Permanently delete a contact from the workspace. This action cannot be undone.

Path Parameters

ParameterTypeDescription
idstringContact ID

Request

curl -X DELETE "https://{workspace_id}.firetell.app/api/v1/call-center/contacts/ct_a1b2c3d4e5f6g7h8i9j0k1" \
-H "Authorization: Bearer YOUR_AGENT_JWT"

Response 200 OK

Returns the deleted contact object.

Error Responses

StatusDescription
404Contact not found
caution

Deleting a contact is irreversible. Consider updating the contact's tags or moving it to a different address book instead if you need to archive it.


Assign Contacts to an Address Book

POST /call-center/contacts/assign-list

Batch assign multiple contacts to an address book (or unassign by passing null). You can assign up to 50 contacts per request.

Request Body

FieldTypeRequiredDescription
address_book_idstring | nullTarget address book ID. Pass null to unassign contacts from their book
contact_idsstring[]Array of contact IDs to assign (min: 1, max: 50)

Request

curl -X POST "https://{workspace_id}.firetell.app/api/v1/call-center/contacts/assign-list" \
-H "Authorization: Bearer YOUR_AGENT_JWT" \
-H "Content-Type: application/json" \
-d '{
"address_book_id": "ab_x1y2z3w4v5u6t7s8",
"contact_ids": [
"ct_a1b2c3d4e5f6g7h8i9j0k1",
"ct_n3w1d2e3f4g5h6i7j8k9l0",
"ct_z9y8x7w6v5u4t3s2r1q0p9"
]
}'

Response 200 OK

{
"matched": 3,
"modified": 3
}
FieldTypeDescription
matchednumberNumber of contacts found that you have access to
modifiednumberNumber of contacts actually updated (excludes no-ops)
tip

If matched is less than the number of contact_ids you sent, it means some contacts don't exist or you don't have access to them.

Unassign Contacts

To remove contacts from their current address book, pass null as the address_book_id:

curl -X POST "https://{workspace_id}.firetell.app/api/v1/call-center/contacts/assign-list" \
-H "Authorization: Bearer YOUR_AGENT_JWT" \
-H "Content-Type: application/json" \
-d '{
"address_book_id": null,
"contact_ids": ["ct_a1b2c3d4e5f6g7h8i9j0k1"]
}'

Error Responses

StatusDescription
400Validation error or address book not found