List Contacts
This endpoint returns a page of contacts for the authenticated account.
Endpoint
Section titled “Endpoint”GET /v1/contacts/contactsAuthentication
Section titled “Authentication”Include your API key in the x-api-key header. See Authentication.
Required Scope
Section titled “Required Scope”contacts:readQuery Parameters
Section titled “Query Parameters”| Parameter | Type | Required | Description |
|---|---|---|---|
clientId | string | No | Returns only contacts that belong to this client. |
noClient | string | No | "true" returns only contacts that have no client. When set, clientId is ignored. |
archived | string | No | "true" returns only archived contacts. Any other value, or no value, returns only contacts that are not archived. |
all | string | No | "true" returns archived and non-archived contacts. When set, archived is ignored. |
page | string | No | 0-based page index. Defaults to 0. A non-numeric value is treated as 0. |
pageSize | string | No | Number of contacts per page. Defaults to 25. There is no maximum. |
sortCol | string | No | One of contactName, contactDescription, contactEmail, createdAt, updatedAt, Client.client_name. Requires sortDir. Invalid values are ignored. |
sortDir | string | No | asc or desc (not case-sensitive). Requires sortCol. Invalid values are ignored. |
See Pagination for paging and sorting rules.
Request Body
Section titled “Request Body”This endpoint does not accept a request body.
Example Request
Section titled “Example Request”curl "https://api.crewsum.com/v1/contacts/contacts?clientId=client-ghi123jkl4567890&page=0&pageSize=25" \ -H "x-api-key: $CREWSUM_API_KEY"const response = await fetch( "https://api.crewsum.com/v1/contacts/contacts?clientId=client-ghi123jkl4567890&page=0&pageSize=25", { headers: { "x-api-key": process.env.CREWSUM_API_KEY } },);const result = await response.json();GET /v1/contacts/contacts?clientId=client-ghi123jkl4567890&page=0&pageSize=25 HTTP/1.1Host: api.crewsum.comx-api-key: <your-api-key>Response
Section titled “Response”On success, the API returns HTTP 200 OK.
Example Response
Section titled “Example Response”{ "message": "Successfully fetched contacts", "data": { "contacts": [ { "email": "placeholder@example.com", "type": "EXTERNAL", "userId": null, "hasPortalAccess": true, "id": "contact-jkl123mno4567890", "name": "Contact Name", "description": "A brief description of the contact", "isArchived": false, "createdAt": "2026-01-05T15:30:00.000Z", "updatedAt": "2026-02-10T09:12:00.000Z", "clientId": "client-ghi123jkl4567890", "clientName": "Client Name", "isDeleted": false, "clientDeleted": false, "clientArchived": false, "associations": [ { "projectId": "project-abc123def4567890", "projectName": "Project Name", "endCustomer": "End Customer Name", "contactType": "MANAGER", "notificationLevel": "COPY_ONLY" } ], "supplierAssociations": [ { "supplierId": "supplier-abc123def4567890", "supplierName": "Supplier Name" } ] } ], "count": 1 }}Behavior
Section titled “Behavior”data.contactsholds the current page.data.countis the total number of contacts that match the filters, across all pages.- Deleted contacts are never returned.
- Without a valid
sortColandsortDirpair, contacts are sorted byupdatedAtdescending, thencreatedAtdescending. Contacts that were never updated (updatedAt: null) sort last. contactEmailsorts by the email shown in the response, so internal contacts sort by their linked user’s email.emailis always a string. External contacts return the stored contact email. Internal contacts return the linked user’s email. It is an empty string when neither exists.userIdisnullfor external contacts. For internal contacts it is the internal<tenantId>#<userId>form, for exampleacme#user-a.- Contacts without a client return
nullforclientId,clientName,clientArchived, andclientDeleted. associationslists the contact’s active project associations.endCustomeris the project’s end customer name, ornull.supplierAssociationslists the suppliers the contact is linked to.updatedAtisnullfor contacts that were never updated.
Error Responses
Section titled “Error Responses”| Status | Meaning |
|---|---|
500 | {"message": "Error fetching contacts"}. Crewsum could not fetch contacts. |
Authentication and scope failures are described in Errors.
Related Webhooks
Section titled “Related Webhooks”This endpoint does not trigger a webhook.