List & search contacts
curl --request GET \ --url 'https://api.sipstack.com/api/v2/contacts?page=1&limit=50' \ --header 'x-api-key: <x-api-key>'import requests
url = "https://api.sipstack.com/api/v2/contacts"
querystring = {"page":"1","limit":"50"}
headers = {"x-api-key": "<x-api-key>"}
response = requests.get(url, headers=headers, params=querystring)
print(response.json())const url = 'https://api.sipstack.com/api/v2/contacts?page=1&limit=50';const options = {method: 'GET', headers: {'x-api-key': '<x-api-key>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}import axios from 'axios';
const options = { method: 'GET', url: 'https://api.sipstack.com/api/v2/contacts', params: {page: '1', limit: '50'}, headers: {'x-api-key': '<x-api-key>'}};
try { const { data } = await axios.request(options); console.log(data);} catch (error) { console.error(error);}Lists your organization’s contacts, newest first. Hides soft-deleted and
merged rows. Requires the contacts:read scope. Supports offset or
keyset (cursor / next_cursor) paging.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Query Parameters
Section titled “Query Parameters ”Opaque keyset cursor from a previous response’s next_cursor.
Case-insensitive match across first/last name, phone, email, and business.
Search by phone number — digits matched against the stored number (≥3 digits).
Return only contacts carrying this exact tag.
Responses
Section titled “ Responses ”Paginated contact list.
object
A contact record. POST /api/v2/contacts returns the compact subset
(id, uuid, phone_number, names, email, tags, consent_status,
consent_date, created_at);
the list/get/update endpoints return the full record below.
object
object
How the contact was created (e.g. api).
Page metadata returned by the paginated Developer API list endpoints.
Per-endpoint limit defaults and caps vary (see each endpoint’s limit
parameter). In keyset (cursor) mode page, total, and totalPages are
null — walk pages via next_cursor instead.
object
Items per page (the default and maximum vary by endpoint).
Total matching records across all pages (null in cursor mode).
Example
{ "data": [ { "phone_number": "+14165550100", "consent_status": "implied" } ], "pagination": { "page": 1, "limit": 25, "total": 143, "totalPages": 6 }}Invalid cursor or phone filter.
Inline error shape used by the messaging API and management endpoints.
object
Example
{ "success": false, "error": "Recipient phone number (to) is required"}Missing or invalid API key.
Inline error shape used by the messaging API and management endpoints.
object
Example
{ "success": false, "error": "Recipient phone number (to) is required"}The key is missing the contacts:read scope.
Inline error shape used by the messaging API and management endpoints.
object
Example
{ "success": false, "error": "Recipient phone number (to) is required"}Internal error.
Inline error shape used by the messaging API and management endpoints.
object
Example
{ "success": false, "error": "Recipient phone number (to) is required"}