List Related
Lists other contacts for the same person: contacts sharing this email, contacts on the same Stripe customer, and contacts Stripe relates by a shared card number (the Dashboard Related customers list). Card matches come from charge search on the card fingerprint. Returns an empty list when nothing matches.
Authorization
Authorization In: header
Path Parameters
ID of the project that owns the contact.
Distinct ID of the contact whose siblings to list.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/projects/string/crm/contacts/string/related"[ { "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" }, "relationship": "card" }]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.
Upsert Contact
Creates a contact, or updates it if one already exists with the same distinct ID. Properties are merged rather than replaced, so omitting a property leaves its current value alone. Send an explicit null to clear one. Omitting `distinctId` generates one with a `soft_` prefix, which is what you want for a contact you only know by email. A new hard distinct ID whose email is already on another contact creates a second, related contact rather than failing. New signups become contacts when the app calls identify() with the user id and email. Use this to import people who already exist. Do not invent people.