The Create Contact endpoint lets you create a contact in Amplemarket from your own data. Use it when you have a person — at minimum an email address — that you want to bring into Amplemarket and use in downstream flows, such as processing it through Workflows.
Example flow:
-
You have a person’s details (at least an email address)
-
You call
POST /contacts with those details
-
Amplemarket creates the contact, optionally associating it to an account and an owner
-
You receive the created contact in the
201 response and can use it in downstream flows, for example running it through Workflows
This endpoint creates a single contact per request.
For specific API details, please refer to the API specification.
This endpoint does not enrich the contact. Only the data you send in the payload is used. If you need to gather more information first, refer to the People Search guide; to check an email before creating a contact, see the Email Verification guide.
The request body is a single JSON object describing the contact.
POST /contacts HTTP/1.1
Authorization: Bearer {{API Key}}
Content-Type: application/json
curl -X POST https://api.amplemarket.com/contacts \
-H "Authorization: Bearer {{API Key}}" \
-H "Content-Type: application/json" \
-d '{
"email": "jane.doe@example.com",
"first_name": "Jane",
"last_name": "Doe",
"title": "CEO"
}'
The only required field is email, and it must be unique within your account: if a contact with the same email already exists, the request returns a 409 Conflict instead of creating a duplicate. All other fields are optional, and every field except phone_numbers must be a String.
| Field | Type | Description |
|---|
email | string | Required. The contact’s email address. Must be unique within your account |
first_name | string | The contact’s first name |
last_name | string | The contact’s last name |
title | string | The contact’s job title |
city | string | The contact’s city |
state | string | The contact’s state or region |
country | string | The contact’s country |
industry | string | The contact’s industry |
linkedin_url | string | The contact’s LinkedIn profile URL |
owner_email | string | Email of the Amplemarket user that should own the contact |
account_id | string | Public ID of an account to associate the contact to |
crm_account_id | string | A CRM account identifier used to resolve the account association |
company_domain | string | A company domain used to resolve the account association |
company_name | string | A company name used to resolve the account association |
phone_numbers | array | Phone numbers to attach to the contact (see Phone numbers) |
You can associate the new contact to an existing account using one of four fields. They are evaluated in the following priority order, and only the first one present is used — the others are ignored:
account_id — matched against the account’s public ID
crm_account_id — matched against the linked CRM account identifier
company_domain — matched against the account’s domain
company_name — matched against the account’s name
If the field you provide matches no account, or matches more than one, the request fails with a 400. If you omit all four fields, the contact is created without an account association.
Assigning an owner
Use owner_email to assign the contact to a specific user. The email must match an active user in your Amplemarket account; otherwise the request fails with a 400. If you omit owner_email, the contact is created without an owner.
The owner_email you provide must match an active user in your Amplemarket account — it is not an arbitrary email address.
Phone numbers
phone_numbers is an array of objects. Each object supports:
| Field | Type | Description |
|---|
number | string | Required for each entry. The phone number, in a valid, parseable format (ideally E.164, e.g. +12127365000) |
kind | string | The kind of number: mobile, office, phone, landline, voip, direct, or fax |
type | string | An alias for kind |
Each phone number is validated. If an entry has no number, or the number cannot be recognized as a valid phone number, the whole request fails with a 400 (missing_field or invalid_parameter) and the contact is not created. Send numbers in a valid, parseable format (ideally E.164, e.g. +12127365000).
CRM behavior
If your account has an active CRM integration set up to push contacts, this endpoint always attempts to create a new contact in your CRM. It never links to, or imports, an existing CRM record.
If the CRM push fails, the contact is not created — the request returns a 422 and nothing is persisted. Fix the CRM-side issue and retry.
Request example
{
"email": "jane.doe@example.com",
"first_name": "Jane",
"last_name": "Doe",
"title": "CEO",
"linkedin_url": "https://www.linkedin.com/in/jane-doe",
"owner_email": "rep@yourcompany.com",
"company_domain": "example.com",
"phone_numbers": [
{ "number": "+1 212-736-5000", "kind": "mobile" }
]
}
There are a few potential outcomes:
-
The contact is created. The response will have status
201 Created and the body is the created contact:
{
"id": "019f055d-8fb2-70f0-8bff-449354d1b3d2",
"name": "Jane Doe",
"first_name": "Jane",
"last_name": "Doe",
"linkedin_url": null,
"email": "jane.doe@example.com",
"time_zone": null,
"location": null,
"title": "CEO",
"company_domain": "example.com",
"company_name": "Example",
"owner": "rep@yourcompany.com",
"last_contacted_at": null,
"phone_numbers": [
{
"id": "019f2864-54f2-737b-ab47-a328353c2355",
"uploaded_id": "019f2864-54fd-76ac-a4e3-d4e2b36717e2",
"object": "phone_number",
"number": "+1 212-736-5000",
"type": "mobile",
"source": "uploaded_by_user",
"is_wrong_number": false,
"kind": "mobile"
}
],
"recent_activity": []
}
-
The request is malformed — for example,
email is missing, or a field has the wrong type. The response will have status 400, following the standard error format.
-
A contact with the same email already exists. The response will have status
409 with the conflict error code.
-
The request was well-formed but could not be completed — most commonly a CRM push failure. The response will have status
422.
Common errors and pitfalls
- Missing or non-string fields: every field except
phone_numbers must be a String. Sending null, a number, or an object for a text field returns a 400 with a pointer to the offending field.
- Account association that matches nothing (or too much):
account_id, crm_account_id, company_domain, and company_name must each resolve to exactly one account. If you are getting 400s here, confirm the value and remember that only the highest-priority field you send is used.
- Unknown owner:
owner_email must be an active user in your account.
- Invalid phone numbers: every
phone_numbers entry must include a number in a valid, parseable format. A missing or unrecognizable number returns a 400 and the contact is not created.
- Duplicate emails: creating the same email twice returns
409, not a second contact.
- CRM push failure: if your account pushes contacts to a CRM, a CRM-side failure blocks creation with a
422. In that configuration this endpoint behaves like a create-or-nothing operation, not a best-effort create.