---
title: "Create a contact"
method: POST
path: "/v3/contacts"
tags: ["Contacts"]
---

# Create a contact

`POST /v3/contacts`

<small>_Requires the `contacts:write` scope (or a broader one that includes it)._</small>

Use this endpoint when you need to add a single new contact to your account — for example when capturing a lead from your own application. Provide any known profile fields and custom field values; the contact is created under your ownership and returned with its assigned id. To add many contacts at once, or to update existing ones by a match key, use the import endpoint instead.

## Request body

- object — Request model for creating a new contact. All fields are optional — at minimum provide email or a LinkedIn URL.
  - `email` string, email — Primary email address
  - `firstName` string — First name
  - `lastName` string — Last name
  - `phone` string — Phone number
  - `phone2` string — Secondary phone number
  - `title` string — Job title
  - `company` string — Organization name
  - `companySize` 'Empty' | 'SelfEmployed' | 'Ten' | 'Fifty' | 'TwoHundred' | 'FiveHundred' | 'OneThousand' | 'FiveThousand' | 'TenThousand' | 'OverTenThousand' — Organization employee count range
  - `industry` string — Business sector
  - `city` string — City of residence
  - `state` string — State/province
  - `country` string — Country
  - `timeZoneId` string — Timezone identifier
  - `linkedInUrl` string, uri — LinkedIn profile URL
  - `linkedInSalesNavigatorUrl` string, uri — Sales Navigator URL
  - `linkedInRecruiterUrl` string, uri — Recruiter URL
  - `notes` string — Additional information
  - `accountId` integer, nullable — ID of the contact account to link this contact to
  - `customFields` object[] — User-defined fields
    - `key` string, required — Field identifier
    - `value` string, nullable — Field content

## Response `201`

Contact created successfully

- object — Contact response model
  - `id` integer — Unique ID
  - `email` string, email — Primary email address
  - `domain` string — Email domain (derived from email)
  - `firstName` string — First name
  - `lastName` string — Last name
  - `phone` string — Phone number
  - `title` string — Job title
  - `company` string — Organization name
  - `companySize` 'empty' | 'selfEmployed' | 'ten' | 'fifty' | 'twoHundred' | 'fiveHundred' | 'oneThousand' | 'fiveThousand' | 'tenThousand' | 'overTenThousand' — Organization employee count range
  - `industry` string — Business sector
  - `city` string — City of residence
  - `state` string — State/province
  - `country` string — Country
  - `timeZoneId` string — Timezone identifier
  - `linkedInUrl` string, uri — LinkedIn profile URL
  - `linkedInSalesNavigatorUrl` string, uri — Sales Navigator URL
  - `linkedInRecruiterUrl` string, uri — Recruiter URL
  - `phoneStatus` 'pending' | 'invalid' | 'valid' | 'validationFailed' | 'notValidated' — Phone validation status
  - `notes` string — Additional information
  - `ownerUserId` integer — ID of the user who owns this contact
  - `accountId` integer, nullable — ID of the contact account this contact belongs to
  - `isOptedOut` boolean — Whether the contact has opted out of communications
  - `callStatus` 'none' | 'toCall' | 'called' — Contact-level call status. Set via `PATCH /v3/contacts/{id}` (`callStatus` field). Pass `none` to clear.
  - `meetingStatus` 'none' | 'meetingBooked' — Contact-level meeting status. Set via `PATCH /v3/contacts/{id}` (`meetingStatus` field). Pass `none` to clear.
  - `addingDate` string, date-time, nullable — Date the contact was added
  - `createdAt` string, date-time, nullable — Creation timestamp
  - `lastModifiedAt` string, date-time, nullable — Last modification timestamp
  - `customFields` object[] — User-defined fields
    - `key` string, required — Field identifier
    - `value` string, nullable — Field content

## Other responses

- `400` — Validation failure on the request body, or a business rule rejection (e.g. contact already exists, missing required identifier).
- `401` — Unauthorized. The response body is empty; check the `WWW-Authenticate` header for the expected scheme.
- `403` — User lacks required feature scope to create contacts
- `429` — Too Many Requests

---

[API](https://skmtc.net/reply/apis/reply-api.md) · [All operations](https://skmtc.net/reply/apis/reply-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/reply/reply-api/revisions/1c3d32eaf95e/schema)
