Skip to main content

List Contacts

Retrieve your contacts with pagination and filtering. You can also fetch a single contact by ID.

List All Contacts​

Retrieve a paginated list of contacts in your organization.

Endpoint​

GET /contacts

Returns: 200 OK

Query Parameters​

ParameterTypeDefaultDescription
limitnumber20Items per page (min: 1, max: 100)
afterstring—Cursor — return items after this id (exclusive).
beforestring—Cursor — return items before this id (exclusive).
emailstring—Filter by email address. Exact match, case-insensitive.
phone_numberstring—Filter by phone number. Exact match; separators and a bare country code (e.g. 966…) are normalized to E.164 first.
external_idstring—Filter by your own identifier. Exact match — how to check whether a person is already imported.
list_idstring—Filter by contact list ID
tag_idstring—Filter by tag ID
segment_idstring—Only the members of this segment, as of its last count (counted_at on the segment). Suppressed contacts are left out. Returns 409 segment_not_ready while the segment's status is processing, and 404 if the segment does not exist.

Results are returned newest first. See Pagination for cursor details.

Response​

{
"object": "list",
"has_more": true,
"data": [
{
"id": "01957e3a-4b5c-7d8e-9f0a-1b2c3d4e5f6a",
"email": "john.doe@example.com",
"phone_number": "+201234567890",
"external_id": "user_10294",
"first_name": "John",
"last_name": "Doe",
"source": "api",
"properties": {
"company": "Acme Inc"
},
"is_suppressed": false,
"created_at": "2026-03-01T10:00:00.000Z",
"updated_at": "2026-03-08T12:00:00.000Z"
}
]
}

See Create Contact for the per-item field reference.


Examples​

curl "https://api.arsel.sa/v1/contacts?limit=20" \
-H "Authorization: Bearer $ARSEL_API_KEY"

For the next page, pass the id of the last item from the previous response as after:

curl "https://api.arsel.sa/v1/contacts?limit=20&after=01957e3a-4b5c-7d8e-9f0a-1b2c3d4e5f6a" \
-H "Authorization: Bearer $ARSEL_API_KEY"

Find a Contact by Email or Phone​

email, phone_number and external_id are exact-match lookups. The response is still a list; it is empty when nothing matches.

curl "https://api.arsel.sa/v1/contacts?email=john.doe@example.com" \
-H "Authorization: Bearer $ARSEL_API_KEY"

A phone number's + must be URL-encoded as %2B:

curl "https://api.arsel.sa/v1/contacts?phone_number=%2B201234567890" \
-H "Authorization: Bearer $ARSEL_API_KEY"

Filter by List​

curl "https://api.arsel.sa/v1/contacts?list_id=01957e3a-4b5c-7d8e-9f0a-1b2c3d4e5f6a&limit=50" \
-H "Authorization: Bearer $ARSEL_API_KEY"

Filter by Tag​

curl "https://api.arsel.sa/v1/contacts?tag_id=01957e3a-4b5c-7d8e-9f0a-1b2c3d4e5f6b&limit=50" \
-H "Authorization: Bearer $ARSEL_API_KEY"

Get Contact Details​

Retrieve a single contact by ID.

Endpoint​

GET /contacts/:id

Returns: 200 OK

Path Parameters​

ParameterTypeDescription
idstringThe contact ID

Response​

Returns the same shape as Create Contact.

{
"id": "01957e3a-4b5c-7d8e-9f0a-1b2c3d4e5f6a",
"email": "john.doe@example.com",
"phone_number": "+201234567890",
"external_id": "user_10294",
"first_name": "John",
"last_name": "Doe",
"source": "api",
"properties": {
"company": "Acme Inc",
"job_title": "Software Engineer",
"city": "Cairo"
},
"is_suppressed": false,
"created_at": "2026-01-15T10:00:00.000Z",
"updated_at": "2026-03-08T12:00:00.000Z"
}

Examples​

curl "https://api.arsel.sa/v1/contacts/01957e3a-4b5c-7d8e-9f0a-1b2c3d4e5f6a" \
-H "Authorization: Bearer $ARSEL_API_KEY"

Error Responses​

{
"status_code": 401,
"name": "unauthorized",
"message": "Invalid API Key"
}