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

# Create a contact

`POST /v1/contacts`

Creates a new contact in your organization

## Headers

- `x-workspace-id` string, uuid

## Request body

- PublicCreateContactDto
  - `firstName` string, required — First name of the contact
  - `lastName` string, required — Last name of the contact
  - `email` string — Email address of the contact
  - `company` string — Company name
  - `city` string — City
  - `country` string — Country
  - `url` string — Website URL
  - `linkedinUrl` string — LinkedIn profile URL
  - `linkedinSalesUrl` string — LinkedIn Sales Navigator URL
  - `role` string — Role / job title
  - `allowPhoneCalls` boolean — Whether the contact accepts phone calls. Defaults to true.
  - `phoneNumbers` string[], required — Phone numbers in E.164 format (e.g., +33612345678)
  - `customFields` object — Custom field values keyed by the custom field **slug** (the stable, immutable identifier returned by GET /custom-fields). Custom fields must already exist for the team (use the Custom Fields endpoints to create them). For backwards compatibility this endpoint also accepts keys matching the custom field **name**, but this fallback is deprecated and will be removed in a future release — migrate your integrations to use slugs.

## Response `201`

The created contact

- PublicContactDto
  - `id` string, required
  - `firstName` string, required
  - `lastName` string, required
  - `email` object, nullable
  - `company` object, nullable
  - `city` object, nullable
  - `country` object, nullable
  - `url` object, nullable
  - `linkedinUrl` object, nullable
  - `linkedinSalesUrl` object, nullable
  - `role` object, nullable
  - `allowPhoneCalls` boolean, required
  - `callCount` number, required
  - `lastCallAt` string, date-time, nullable
  - `teamId` string, required
  - `phoneNumbers` string[], required
  - `customFields` object, required
  - `createdAt` string, date-time, required
  - `updatedAt` string, date-time, required
  - `lastModificationSource` 'SKIPCALL' | 'API', required

## Other responses

- `400` — Invalid input data
- `401` — Invalid or missing API key
- `403` — Subscription required or plan not eligible

---

[API](https://skmtc.dev/skipcall/apis/skipcall-public-api.md) · [All operations](https://skmtc.dev/skipcall/apis/skipcall-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/skipcall/skipcall-public-api/revisions/f594352719bd/schema)
