Create or update a contact
POST
/v1/contactsSecret key — sk_… or sk_test_… · Base URL https://api.volanea.com
Upsert by email (addresses are lowercased). Only the provided fields are changed on update.
Body
Required · application/json
emailemailrequiredfirstNamestringlastNamestringsubscribedbooleandataobjectArbitrary custom fields (replaces the stored object).
Response
200 · Contact
contactIdstringrequiredprojectIdstringemailemailrequiredfirstNamestring | nulllastNamestring | nullsubscribedbooleanrequireddataobject | nullArbitrary custom fields.
localestring | nullcreatedAtdate-timerequiredupdatedAtdate-timerequired
Errors
Every failure returns the standard envelope — branch on `code`, never on the wording of `error`.
401Missing or invalid API key.422Request validation failed (code `validation_error`, 422).
Request
curl https://api.volanea.com/v1/contacts \
-X POST \
-H "Authorization: Bearer sk_..." \
-H "Content-Type: application/json" \
-d '{
"email": "ada@example.com",
"firstName": "Ada",
"lastName": "Lovelace"
}'Response
200 · application/json
{
"success": true,
"data": {
"contactId": "con_5e90",
"projectId": "<projectId>",
"email": "ada@example.com",
"firstName": "Ada",
"lastName": "Lovelace",
"subscribed": true,
"data": {},
"locale": "en",
"createdAt": "2026-01-01T09:00:00.000Z",
"updatedAt": "2026-01-01T09:00:00.000Z"
}
}92 endpoints · OpenAPI document