Upsert a contact
Creates or updates a contact by email address in one idempotent call - wire it into signup and profile-update flows without existence checks. Any extra JSON fields are stored as custom attributes, ready for segmentation and template variables.
POST
/v2/ accounts/ {accountId}/ contactsPath parameters
accountIdstringrequired
The account the request is scoped to.
Request body
Email plus any custom attribute slug/value pairs.
emailstring (email)required
The contact’s email address - the identity the upsert is keyed on.
Additional fields are accepted as custom attributes.
Response
The upserted contact.
Errors
400
The request body or parameters failed validation.
401
Missing or invalid token, or the token is not authorized for this account/user.
See Errors and rate limits for what error responses look like.
curl --location --request POST 'https://api.sendstreak.com/v2/accounts/YOUR_ACCOUNT_ID/contacts' \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
"email": "[email protected]"
}'
const res = await fetch('https://api.sendstreak.com/v2/accounts/YOUR_ACCOUNT_ID/contacts', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SENDSTREAK_TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
"email": "[email protected]"
})
});
import os, requests
res = requests.post(
'https://api.sendstreak.com/v2/accounts/YOUR_ACCOUNT_ID/contacts',
headers={'Authorization': f"Bearer {os.environ['SENDSTREAK_TOKEN']}"},
json={
"email": "[email protected]"
},
)
{
"_id": "665f0a2b1c9d440012ab34cd",
"email": "[email protected]",
"createDate": "2026-07-07T09:30:00.000Z",
"hardBounced": "2026-07-07T09:30:00.000Z",
"complaintDate": "2026-07-07T09:30:00.000Z",
"unsubscribeDate": "2026-07-07T09:30:00.000Z",
"topicUnsubscriptions": [
"6651dd2e4f9b110014ab90cd"
]
}