Contacts
Overview
Contacts represent the people who submit tickets to your helpdesk. Each contact belongs to a workspace and is associated with one or more tickets.
List Contacts
Retrieve a paginated list of contacts in the current workspace.
GET /api/contacts
Query Parameters
| Parameter | Type | Description |
|---|---|---|
per_page |
integer | Results per page (default: 25, max: 100) |
sort |
string | Sort field: name, created_at, last_activity. Prefix with - for descending (default: name) |
filter[name] |
string | Partial match on contact name |
filter[email] |
string | Partial match on contact email |
filter[search] |
string | Search across both name and email |
Example Request
curl "https://there-there.app/api/contacts?filter[search]=john&sort=-last_activity&per_page=10" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json"
Example Response
{
"data": [
{
"id": 12,
"ulid": "01hx9f3k2n...",
"name": "John Doe",
"email": "john@customer.com",
"avatar_url": null,
"ticket_count": 3,
"last_activity_at": "2025-06-02T14:15:00+00:00"
}
],
"links": { "first": "...", "last": "...", "prev": null, "next": "..." },
"meta": { "current_page": 1, "last_page": 2, "per_page": 10, "total": 14 }
}
Get Contact
GET /api/contacts/{contact}
The single contact response wraps the contact under data and includes notes.
Create Contact
POST /api/contacts
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
email |
string | Yes | Unique per workspace |
name |
string | No | |
notes |
string | No | Free-text notes |
The email is normalized to lowercase on creation.
Update Contact
PUT /api/contacts/{contact}
All fields are optional. Omit a field to leave it unchanged.
Delete Contact
DELETE /api/contacts/{contact}
Admin role required. Returns 204 on success.