# Replace example resource IDs and ownerId with values from your workspace.
: "${POWERDIALER_API_KEY:?Set POWERDIALER_API_KEY to your scoped API key}"
curl --request GET \
--url 'https://api.migration.powerdialer.ai/api/public/v2/contacts?limit=50' \
--header "Authorization: Bearer $POWERDIALER_API_KEY"{
"data": [
{
"ownerId": "user_example",
"externalId": "crm-contact-123",
"name": "Alex Morgan",
"phoneNumber": "+12125550100",
"additionalNumbers": [],
"metadata": {
"source": "website",
"timeZone": "America/New_York",
"timeZoneSource": "provided"
},
"timeZone": "America/New_York",
"timeZoneSource": "provided",
"id": 123,
"createdAt": "2026-10-08T12:00:00.000Z",
"updatedAt": "2026-10-08T12:00:00.000Z"
}
],
"nextCursor": null
}{
"error": {
"code": "invalid_api_key",
"message": "API key is invalid, expired or revoked",
"requestId": "00000000-0000-4000-8000-000000000004"
}
}List contacts
Read the contacts your integration can access, for example when building an initial CRM synchronization. Requires contacts:read. Results are restricted to the key’s workspace and permitted contact owners; membership in a visible calling list does not broaden contact access.
Contacts arrive in increasing numeric ID order. Set limit to control page size and pass a non-null nextCursor back as after. Stop when the cursor is null. Pages are not a frozen snapshot; use the change feed to reconcile updates and deletions during enumeration.
An empty page means no matching visible records, not proof that historical contacts never existed. Legacy contacts need established attribution before they are available. 400 invalid_request indicates invalid pagination or unsupported query fields; 403 insufficient_scope requires a key with contact-read permission. Reads can be retried without an idempotency key.
See contacts and imports.
# Replace example resource IDs and ownerId with values from your workspace.
: "${POWERDIALER_API_KEY:?Set POWERDIALER_API_KEY to your scoped API key}"
curl --request GET \
--url 'https://api.migration.powerdialer.ai/api/public/v2/contacts?limit=50' \
--header "Authorization: Bearer $POWERDIALER_API_KEY"{
"data": [
{
"ownerId": "user_example",
"externalId": "crm-contact-123",
"name": "Alex Morgan",
"phoneNumber": "+12125550100",
"additionalNumbers": [],
"metadata": {
"source": "website",
"timeZone": "America/New_York",
"timeZoneSource": "provided"
},
"timeZone": "America/New_York",
"timeZoneSource": "provided",
"id": 123,
"createdAt": "2026-10-08T12:00:00.000Z",
"updatedAt": "2026-10-08T12:00:00.000Z"
}
],
"nextCursor": null
}{
"error": {
"code": "invalid_api_key",
"message": "API key is invalid, expired or revoked",
"requestId": "00000000-0000-4000-8000-000000000004"
}
}Authorizations
Issued in Developers. Workspace/owner/scopes come from credential, never acting-user headers. API keys cannot manage API credentials.
Query Parameters
Exclusive numeric ID cursor. Omit or use 0 for the first page, then pass the previous nextCursor. Keep the same filters while paging.
0 <= x <= 2147483647Maximum items to return in one page, from 1 to 200. Defaults to 50. Smaller pages reduce response size; this is not a total-result limit.
1 <= x <= 200Response
A page of visible contacts and the next cursor, or null when no further page currently exists.