Get Contact
Fetches a single contact by distinct ID, including its merged property bag. Returns 404 if no contact matches.
Authorization
Authorization In: header
Path Parameters
ID of the project that owns the contact.
Distinct ID of the contact to fetch.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://www.saasco.com/api/v2/projects/string/crm/contacts/string"{
"id": "string",
"createdAt": "string",
"updatedAt": "string",
"projectId": "string",
"distinctId": "string",
"email": "string",
"toDelete": true,
"properties": {
"age": 0,
"avatar": "http://example.com",
"birthday": "string",
"createdAt": "string",
"description": "string",
"displayName": "string",
"email": "user@example.com",
"firstName": "string",
"gender": "string",
"id": "string",
"lastName": "string",
"name": "string",
"phone": "string",
"title": "string",
"username": "string",
"website": "string",
"$id": "string",
"$lastSeen": "string",
"$lastIdentifiedAt": "string",
"$processedAt": "string",
"$unsubscribed": true,
"$subscribed": true,
"$unsubscribeReason": "manual",
"$unsubscribeSource": "string",
"$emailValidated": true,
"$lastEmailValidatedAt": "string",
"$emailValidationResult": "string",
"$emailScore": 0,
"$stripeCustomerId": "string",
"$os": "string",
"$browser": "string",
"$browserVersion": "string",
"$screenHeight": 0,
"$screenWidth": 0,
"$screenDpi": 0,
"$device": "string",
"$userAgent": "string",
"$ip": "string",
"$timezone": "string",
"$city": "string",
"$country": "string",
"$countryCode": "string",
"$continent": "string",
"$region": "string",
"$locale": "string",
"$latitude": 0,
"$longitude": 0,
"$referrer": "string",
"$referringDomain": "string",
"$initialReferrer": "string",
"$initialReferringDomain": "string",
"$utmSource": "string",
"$utmMedium": "string",
"$utmCampaign": "string",
"$utmTerm": "string",
"$utmContent": "string",
"$initialUtmSource": "string",
"$initialUtmMedium": "string",
"$initialUtmCampaign": "string",
"$initialUtmTerm": "string",
"$initialUtmContent": "string",
"$_toDelete": true,
"$_emailScoreActions": "string",
"property1": "string",
"property2": "string"
}
}{
"code": "BAD_REQUEST",
"message": "Invalid input data",
"issues": []
}{
"code": "UNAUTHORIZED",
"message": "Authorization not provided",
"issues": []
}{
"code": "FORBIDDEN",
"message": "Insufficient access",
"issues": []
}{
"code": "NOT_FOUND",
"message": "Not found",
"issues": []
}{
"code": "INTERNAL_SERVER_ERROR",
"message": "Internal server error",
"issues": []
}List Contacts
Queries contacts with attribute and event filters, returning a page of contacts plus the total `count` matching the filter. A POST because the filter structure is too rich for a query string. This is the endpoint behind audience building. The same filter shape defines a dynamic contact list or a campaign audience.
Get By Email
Looks a contact up by email address rather than distinct ID, the usual entry point when all you have is an email from a form or webhook. When more than one contact holds the address, returns the primary: a hard distinct ID over a `soft_` placeholder, then the most recently updated. Returns 404 if no contact matches.