Skip to main content
POST
/
v1
/
contacts
Create Contact
curl --request POST \
  --url https://api.example.com/v1/contacts \
  --header 'Content-Type: application/json' \
  --data '
{
  "full_name": "<string>",
  "email": "<string>",
  "phone": "<string>",
  "job_title": "<string>",
  "company_name": "<string>",
  "linkedin_url": "<string>",
  "notes": "<string>",
  "tags": [
    {}
  ]
}
'
{
  "data": {
    "id": "<string>",
    "full_name": "<string>",
    "email": "<string>",
    "phone": "<string>",
    "job_title": "<string>",
    "company_name": "<string>",
    "linkedin_url": "<string>",
    "created_at": "<string>",
    "updated_date": "<string>"
  }
}

Request

Headers

Authorization: Bearer wbk_your_api_key_here
Content-Type: application/json

Body Parameters

full_name
string
required
Contact’s full name
email
string
Email address (recommended)
phone
string
Phone number with country code
job_title
string
Job title or position
company_name
string
Company or organization name
linkedin_url
string
LinkedIn profile URL
notes
string
Additional notes about the contact
tags
array
Array of tag strings for categorization

Response

data
object
The created contact object
curl -X POST \
  https://nbkxaqxwvkgbddekwsma.supabase.co/functions/v1/api-gateway/v1/contacts \
  -H "Authorization: Bearer wbk_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "full_name": "John Smith",
    "email": "john@example.com",
    "phone": "+1-555-0123",
    "job_title": "CEO",
    "company_name": "Tech Corp",
    "linkedin_url": "https://linkedin.com/in/johnsmith"
  }'

Example Response

{
  "data": {
    "id": "789e0123-e45b-67c8-a901-234567890abc",
    "full_name": "John Smith",
    "email": "john@example.com",
    "phone": "+1-555-0123",
    "job_title": "CEO",
    "company_name": "Tech Corp",
    "linkedin_url": "https://linkedin.com/in/johnsmith",
    "notes": null,
    "created_at": "2026-02-24T14:30:00Z",
    "updated_date": "2026-02-24T14:30:00Z"
  }
}

Validation

If both email and phone are omitted, the API will return a validation error. At least one contact method is required.

Duplicate Detection

The API checks for duplicate contacts based on:
  • Exact email match (case-insensitive)
  • Exact phone number match
If a duplicate is found, the existing contact will be returned instead of creating a new one.

Errors

StatusCodeDescription
400validation_errorMissing required fields or invalid format
401invalid_keyInvalid API key
403insufficient_permissionsMissing write permission
429rate_limitedRate limit exceeded

Example Validation Error

{
  "error": {
    "code": "validation_error",
    "message": "Invalid request parameters",
    "details": {
      "fields": {
        "full_name": "Required field",
        "email": "Invalid email format"
      }
    }
  }
}