Saasco logoSaasco logo
Saasco logoSaasco logo

Introduction

Quick StartWhat is Saasco?

Analytics

CRM

postList ContactsgetGet ContactgetGet By EmailgetList RelatedpostUpsert ContactpatchUpdate ContactdelDelete ContactpostGet PropertiespostCount SubscribedpostMigrate Distinct Id

Email Marketing

Knowledge

Support

Projects

Contacts

Get Contact

Fetches a single contact by distinct ID, including its merged property bag. Returns 404 if no contact matches.

GET
/projects/{projectId}/crm/contacts/{distinctId}

Authorization

Authorization
AuthorizationBearer <token>

In: header

Path Parameters

projectIdrequiredstring

ID of the project that owns the contact.

distinctIdrequiredstring

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.