Webhooks / Create Contact
Create Contact
Create or update a contact from structured data — no AI extraction.
POST …/contacts/create
Use this endpoint when your data is already clean and structured. No AI extraction is performed — fields are mapped directly to the contact record.
This endpoint is asynchronous. It enqueues the work and returns immediately.
Also accessible at POST …/contacts (same behavior).
Request
POST {WEBHOOK_BASE_URL}/{token}/contacts/create
Content-Type: application/json
{
"full_name": "John Doe",
"phone_number": "5550000001",
"contact_email": "john.doe@example.com",
"contact_address": "123 Main St, Springfield, USA 00000",
"tags": ["motivated-seller"],
"source": "Airtable Import",
"contributors": ["Sarah Smith"]
}
Body fields
| Field | Type | Required | Description |
|---|---|---|---|
full_name |
string | No* | Contact’s full name |
phone_number |
string | No* | Contact’s phone number |
contact_email |
string | No* | Contact’s email address |
contact_address |
string | No | Contact’s address — linked to a property if found |
note |
string | No | Creates a note on the contact |
tags |
string[] | No | Applied to the contact after creation |
source |
string | No | Defaults to Webhook if omitted |
contributors |
string[] | No | Full names of org users to assign as contributors |
Deduplication
Goliath deduplicates contacts on ingest using one of two strategies:
- Name + phone or email — when a name is present alongside a phone or email
- Phone or email only — when no name is provided
If a match is found, the existing contact is updated rather than a new one being created.
Responses
New event
200 OK
{
"success": true,
"acknowledged": true,
"eventId": "a1b2c3d4-0000-0000-0000-000000000000"
}
Duplicate event
200 OK
{
"success": true,
"acknowledged": true
}