1. Contact
Hatif
  • Rate Limiting
  • Account API
    • Service Login
      POST
  • Channels API
    • Get Channels
      GET
  • Support API
    • Upload Image, Video, or PDF
      POST
    • Upload Audio File
      POST
  • Whatsapp API
    • Send Text
      POST
    • Send Template
      POST
    • Send Image
      POST
    • Send Audio
      POST
    • Send Video
      POST
    • Send File
      POST
    • List Templates (Service Account)
      GET
  • Contact
    • Set Property Value on Contact
      PUT
    • Search Contacts
      POST
    • Delete Property Value on Contact
      DELETE
    • Create Contact
      POST
    • Update Contact
      PUT
    • Get Contacts
      GET
    • Get Contact By Id
      GET
    • Create Bulk Contacts vCards
      POST
    • Contacts History
      GET
  • Contact Properties
    • List Contact Properties
      GET
    • Contact Properties Statistics
      POST
    • Create Contact Property
      POST
    • Update Contact Property
      PUT
    • Delete Contact Property
      DELETE
  • Workspace API
    • Get Workspace Users
  • Conversations API
    • Get Conversation Timeline
    • List Conversations
    • Create Conversation
    • Assign Conversation
    • Get Conversation
  • Outbound IVR API
    • Create Outbound IVR
  • Tags API
    • Tag a conversation
    • Create Tag
    • Delete Tag
    • Update Tag
    • List Tags
  • Conversations - Service Account
  • Call Webhook
  • WhatsApp Message Webhook
  • Schemas
    • Call Webhook
    • WhatsApp Message Webhook
    • ServiceAccountTemplateDto
    • ConversationDto
    • CreateTagDto
    • ServiceAccountTemplateParameterDto
    • ChannelConversationDto
    • UpdateTagDto
    • TemplateParameterDto
    • TagDto
    • ParameterValueDto
    • ConversationTimelineDto
    • PagedResultOfTagDto
    • ChannelNotFoundError
    • AiSummaryDto
    • ReplyInfoDto
    • InternalThreadDto
    • LocationMessageDto
    • AssignationInfoDto
    • PagedResultOfConversationDto
    • PagedResultOfConversationTimelineDto
  1. Contact

Create Contact

POST
/v1/contacts
Creates a new contact in the workspace — or updates an existing one if a contact with the same phone number already exists (see "Upsert behavior" below).
Validation: name and phoneNumber are required — both return a 400 if empty. phoneNumber is normalized to a consistent format server-side (the curl example below sends "966501234567" and gets back "+966501234567").
Upsert-by-phone-number behavior: this endpoint looks up an existing contact in the workspace with the exact same phone number.
If found: updates that contact's name, marks it isAnonymous = false, and applies the other fields from this request. It does not create a duplicate or return a 409 Conflict — a second POST with the same phone number silently becomes an update.
If not found: creates a brand-new contact.

Request

Authorization
Provide your bearer token in the
Authorization
header when making requests to protected resources.
Example:
Authorization: Bearer ********************
Body Params application/jsonRequired

Examples

Responses

🟢200OK
application/json
Returns the created (or updated, if the phone number already existed) contact — wrapped under an id key. Despite the key name, the value is the full contact object, not an ID string. This is a known quirk in the API (the server-side variable was named Id but actually holds the whole DTO).
Bodyapplication/json

Request Request Example
Shell
JavaScript
Java
Swift
curl --location 'https://api.voxa.sa/v1/contacts' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "Ahmed Al-Otaibi",
    "phoneNumber": "966501234567",
    "email": "ahmed@example.com",
    "company": "Acme Co",
    "customFields": {
        "source": "landing-page"
    }
}'
Response Response Example
{
    "id": {
        "workspaceId": "d307b8...............",
        "name": "Ahmed Noshy",
        "phoneNumber": "+966501234567",
        "contactType": 1,
        "email": "Noshy@Hatif.io",
        "company": "Hatif",
        "position": null,
        "customFields": {
            "source": "landing-page"
        },
        "notes": [],
        "customProperties": [],
        "lastModificationTime": "2026-06-19T13:55:18.2983548+00:00",
        "lastModifierId": null,
        "creationTime": "2026-06-09T08:05:17.467676",
        "creatorId": null,
        "id": "3a21bd..............."
    }
}
Modified at 2026-06-19 14:10:17
Previous
Delete Property Value on Contact
Next
Update Contact
Built with