API
Contacts API
Ingest, list, update, export, and erase contacts.
Upsert people with a stable id from your product. Do not use email as the only identity if users can change it.
Endpoints: ingestContacts, listProjectContacts, getProjectContact, updateProjectContact, eraseProjectContact, exportProjectContacts, createContactImport
Scope: write for ingest and update; read for list/get/export; erasure is a deliberate write (and is audited).
Ingest
POST /v1/projects/{projectId}/contact_ingestion
Up to 5,000 contacts per request. Prefer a few hundred per batch.
{
"contacts": [{
"externalId": "user_42",
"email": "amelia@example.com",
"locale": "en",
"properties": { "plan": "pro", "first_name": "Amelia" }
}]
}externalId makes retries safe. Properties use schema keys. Do not put marketing consent in properties — use createConsentEvent.
curl -X POST "$AUDRYO_API_BASE/projects/$PROJECT_ID/contact_ingestion" \
-H "Authorization: Bearer $AUDRYO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"contacts":[{"externalId":"user_42","email":"amelia@example.com","properties":{"plan":"pro"}}]}'List and get
GET /v1/projects/{projectId}/contacts is cursor-paginated (page[after], see API introduction).
GET /v1/projects/{projectId}/contacts/{contactId} returns the profile, including properties Audryo stored.
Update and erase
Patch properties with updateProjectContact. Erase (eraseProjectContact) removes personal data and takes the person off the contact list. An anonymous hold remains so the same address is not mailed again.
CSV import API
createContactImport starts the same job as Data → Import. Poll listContactImports until it finishes.