Skip to content

Create a contact

POST
/api/v2/contacts
curl --request POST \
--url https://api.sipstack.com/api/v2/contacts \
--header 'Content-Type: application/json' \
--header 'x-api-key: <x-api-key>' \
--data '{ "phoneNumber": "+14165550100", "firstName": "Jordan", "lastName": "Lee", "email": "jordan.lee@example.com", "tags": [ "newsletter" ], "consentStatus": "express", "consentMethod": "web_form", "consentDate": "2026-09-01" }'

Creates a contact in your organization. Create-only — this endpoint never updates an existing contact. The phone number is normalized to E.164 before the uniqueness check; a live contact with the same number returns 409. Requires the contacts:write scope.

Media type application/json
object
phoneNumber
required

Contact phone number — normalized to E.164 (a leading 1 is added to 10-digit numbers).

string
firstName
string
nullable
lastName
string
nullable
email
string format: email
nullable
tags
Array<string>
customFields
object
key
additional properties
any
consentStatus

Consent to text. Defaults to implied. Marketing campaigns send to US numbers only with express consent. Every express contact gets a consent history entry recording the method, the date and the API key that set it.

string
Allowed values: implied express none
consentMethod

How express consent was obtained. Used only with consentStatus: express (ignored otherwise). Optional: if you set express without it, the consent history records the method as api (declared by caller). Send it whenever you know it — a stated method is stronger evidence.

string
Allowed values: web_form paper_signature verbal_recorded other
consentMethodNote

Free-text detail on how consent was obtained (longer text is cut at 500 characters). Required when consentMethod is other.

string
<= 500 characters
consentDate

When express consent was obtained: YYYY-MM-DD or a full ISO 8601 timestamp. Cannot be in the future (a YYYY-MM-DD that is today in any timezone is accepted). Defaults to now. Used only with consentStatus: express.

string
Examples

A contact with express consent

{
"phoneNumber": "+14165550100",
"firstName": "Jordan",
"lastName": "Lee",
"email": "jordan.lee@example.com",
"tags": [
"newsletter"
],
"consentStatus": "express",
"consentMethod": "web_form",
"consentDate": "2026-09-01"
}

Contact created. data is the compact Contact subset (id, uuid, phone_number, names, email, tags, consent_status, consent_date, created_at) — not the full record; read it back via GET /api/v2/contacts/{id} for the complete contact.

Media type application/json
object
success
boolean
data

A contact record. POST /api/v2/contacts returns the compact subset (id, uuid, phone_number, names, email, tags, consent_status, consent_date, created_at); the list/get/update endpoints return the full record below.

object
id
string format: uuid
uuid
string format: uuid
phone_number
string
first_name
string
nullable
last_name
string
nullable
email
string
nullable
business
string
nullable
tags
Array<string>
custom_fields
object
key
additional properties
any
consent_status
string
Allowed values: implied express none
consent_date
string format: date-time
nullable
is_opted_out
boolean
is_blocked
boolean
is_archived
boolean
is_starred
boolean
last_contacted_at
string format: date-time
nullable
total_messages_sent
integer
total_messages_received
integer
source

How the contact was created (e.g. api).

string
nullable
created_at
string format: date-time
updated_at
string format: date-time
Example
{
"data": {
"phone_number": "+14165550100",
"consent_status": "implied"
}
}

Phone number missing or invalid, or invalid consent fields: an unknown consentStatus or consentMethod, consentMethod: other without consentMethodNote, or an unreadable or future consentDate.

Media type application/json

Inline error shape used by the messaging API and management endpoints.

object
success
boolean
error
string
Example
{
"success": false,
"error": "Recipient phone number (to) is required"
}

Missing or invalid API key.

Media type application/json

Inline error shape used by the messaging API and management endpoints.

object
success
boolean
error
string
Example
{
"success": false,
"error": "Recipient phone number (to) is required"
}

API access is not enabled on your plan.

Media type application/json

Inline error shape used by the messaging API and management endpoints.

object
success
boolean
error
string
Example
{
"success": false,
"error": "Recipient phone number (to) is required"
}

Organization not provisioned for contacts.

Media type application/json

Inline error shape used by the messaging API and management endpoints.

object
success
boolean
error
string
Example
{
"success": false,
"error": "Recipient phone number (to) is required"
}

A contact with this phone number already exists (including a soft-deleted one holding the key).

Media type application/json

Inline error shape used by the messaging API and management endpoints.

object
success
boolean
error
string
Example
{
"success": false,
"error": "Recipient phone number (to) is required"
}

Internal error.

Media type application/json

Inline error shape used by the messaging API and management endpoints.

object
success
boolean
error
string
Example
{
"success": false,
"error": "Recipient phone number (to) is required"
}