---
title: "Create a new contact without requiring a phone number"
---

> Documentation Index
> Fetch the complete documentation index at: https://developer.channelautomations.com/llms.txt
> Use this file to discover all available pages before exploring further.

Path: Channel Automation API › Contacts

`POST /api/contacts/no-phone`

## Authentication

Requires one of the following:

- `ApiKeyAuth`, apiKey, in header, header `X-API-Key`, format `API_KEY`
- `BearerAuth`, http, header `Authorization`, format `JWT`

## Request body

_Required._

- `workspace_id` (`post/api/contacts/no-phone.workspace_id`; string, required) — Workspace ID the contact belongs to
  - format `uuid`
- `firstname` (`post/api/contacts/no-phone.firstname`; string, optional) — Contact's first name
- `lastname` (`post/api/contacts/no-phone.lastname`; string, optional) — Contact's last name
- `name` (`post/api/contacts/no-phone.name`; string, optional) — Full display name (if not provided, will be generated from firstname and lastname)
- `phone_number` (`post/api/contacts/no-phone.phone_number`; string, optional) — Optional phone number (will be checked for duplicates if provided). If not provided, a placeholder will be automatically generated in the format NOPHONE-{timestamp}-{random}
- `email` (`post/api/contacts/no-phone.email`; string, optional) — Contact's email address
  - format `email`
- `lead_status` (`post/api/contacts/no-phone.lead_status`; string, optional) — Current lead status
- `lead_source` (`post/api/contacts/no-phone.lead_source`; string, optional) — Source of the lead
- `product` (`post/api/contacts/no-phone.product`; string, optional) — Product or service of interest
- `address` (`post/api/contacts/no-phone.address`; string, optional) — Street address (mapped to st_address in database)
- `city` (`post/api/contacts/no-phone.city`; string, optional) — City
- `state` (`post/api/contacts/no-phone.state`; string, optional) — State or province
- `zip` (`post/api/contacts/no-phone.zip`; string, optional) — ZIP or postal code
- `notes` (`post/api/contacts/no-phone.notes`; string, optional) — Additional notes about the contact
- `tags` (`post/api/contacts/no-phone.tags`; array<string>, optional) — Array of tags to associate with the contact
- `priority` (`post/api/contacts/no-phone.priority`; string, optional) — Priority level for the contact
  - one of `"low"`, `"medium"`, `"high"`
- `opt_in_through` (`post/api/contacts/no-phone.opt_in_through`; string, optional) — How the contact opted in
  - default `"api"`

## Example request

```json
{
  "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
  "firstname": "string",
  "lastname": "string",
  "name": "string",
  "phone_number": "string",
  "email": "user@example.com",
  "lead_status": "string",
  "lead_source": "string",
  "product": "string",
  "address": "string",
  "city": "string",
  "state": "string",
  "zip": "string",
  "notes": "string",
  "tags": [
    "string"
  ],
  "priority": "low",
  "opt_in_through": "api"
}
```

## Code samples

### cURL

```bash
curl --request POST \
  --url https://api.channelautomation.com/api/contacts/no-phone \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: <X-API-Key>' \
  --data '
{
  "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
  "firstname": "string",
  "lastname": "string",
  "name": "string",
  "phone_number": "string",
  "email": "user@example.com",
  "lead_status": "string",
  "lead_source": "string",
  "product": "string",
  "address": "string",
  "city": "string",
  "state": "string",
  "zip": "string",
  "notes": "string",
  "tags": [
    "string"
  ],
  "priority": "low",
  "opt_in_through": "api"
}
'
```

### TypeScript

```typescript
const url = 'https://api.channelautomation.com/api/contacts/no-phone';
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/json', 'X-API-Key': '<X-API-Key>'},
  body: JSON.stringify({
    workspace_id: '0967198e-ec7b-4c6b-b4d3-f71244cadbe9',
    firstname: 'string',
    lastname: 'string',
    name: 'string',
    phone_number: 'string',
    email: 'user@example.com',
    lead_status: 'string',
    lead_source: 'string',
    product: 'string',
    address: 'string',
    city: 'string',
    state: 'string',
    zip: 'string',
    notes: 'string',
    tags: ['string'],
    priority: 'low',
    opt_in_through: 'api'
  })
};

fetch(url, options)
  .then(res => res.json())
  .then(json => console.log(json))
  .catch(err => console.error(err));
```

### Python

```python
import requests

url = "https://api.channelautomation.com/api/contacts/no-phone"

payload = {
    "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
    "firstname": "string",
    "lastname": "string",
    "name": "string",
    "phone_number": "string",
    "email": "user@example.com",
    "lead_status": "string",
    "lead_source": "string",
    "product": "string",
    "address": "string",
    "city": "string",
    "state": "string",
    "zip": "string",
    "notes": "string",
    "tags": ["string"],
    "priority": "low",
    "opt_in_through": "api"
}
headers = {
    "Content-Type": "application/json",
    "X-API-Key": "<X-API-Key>"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
```

## Responses

### 201

Contact created successfully

#### Example

```json
{
  "success": true,
  "data": {
    "id": "string",
    "workspace_id": "string",
    "firstname": "John",
    "lastname": "Doe",
    "name": "John Doe",
    "phone_number": "+1234567890",
    "email": "john.doe@example.com",
    "lead_status": "qualified",
    "lead_source": "website",
    "product": "premium_plan",
    "address": "123 Main St",
    "city": "New York",
    "state": "NY",
    "zip": "10001",
    "notes": "string",
    "tags": [
      "vip",
      "enterprise"
    ],
    "priority": "high",
    "opt_in_through": "api",
    "conversation_status": "active",
    "last_message_at": "2019-08-24T14:15:22Z",
    "created_at": "2019-08-24T14:15:22Z",
    "updated_at": "2019-08-24T14:15:22Z",
    "follow_up_date": "2019-08-24",
    "webhook_name": "string",
    "firstName": "string",
    "lastName": "string",
    "phone": "string",
    "workspaceId": "string",
    "status": "string"
  }
}
```

- `success` (`post/api/contacts/no-phone.response.201.success`; boolean, optional)
  - example `true`
- `data` (`post/api/contacts/no-phone.response.201.data`; object, optional)
  - `firstName` (`post/api/contacts/no-phone.response.201.data.firstName`; string, required) — The contact's first name
  - `phone` (`post/api/contacts/no-phone.response.201.data.phone`; string, required) — The contact's phone number
  - `workspaceId` (`post/api/contacts/no-phone.response.201.data.workspaceId`; string, required) — The workspace ID this contact belongs to
  - `id` (`post/api/contacts/no-phone.response.201.data.id`; string, optional) — The auto-generated ID of the contact
  - `workspace_id` (`post/api/contacts/no-phone.response.201.data.workspace_id`; string, optional) — Workspace ID
  - `firstname` (`post/api/contacts/no-phone.response.201.data.firstname`; string, optional) — Contact's first name
    - example `"John"`
  - `lastname` (`post/api/contacts/no-phone.response.201.data.lastname`; string, optional) — Contact's last name
    - example `"Doe"`
  - `name` (`post/api/contacts/no-phone.response.201.data.name`; string, optional) — Full name (auto-generated from firstname + lastname)
    - example `"John Doe"`
  - `phone_number` (`post/api/contacts/no-phone.response.201.data.phone_number`; string, optional) — Contact's phone number in E.164 format
    - example `"+1234567890"`
  - `email` (`post/api/contacts/no-phone.response.201.data.email`; string, optional) — The contact's email
    - format `email`; example `"john.doe@example.com"`
  - `lead_status` (`post/api/contacts/no-phone.response.201.data.lead_status`; string, optional) — Current lead status
    - example `"qualified"`
  - `lead_source` (`post/api/contacts/no-phone.response.201.data.lead_source`; string, optional) — Source of the lead
    - example `"website"`
  - `product` (`post/api/contacts/no-phone.response.201.data.product`; string, optional) — Product of interest
    - example `"premium_plan"`
  - `address` (`post/api/contacts/no-phone.response.201.data.address`; string, optional) — Street address
    - example `"123 Main St"`
  - `city` (`post/api/contacts/no-phone.response.201.data.city`; string, optional) — City
    - example `"New York"`
  - `state` (`post/api/contacts/no-phone.response.201.data.state`; string, optional) — State or province
    - example `"NY"`
  - `zip` (`post/api/contacts/no-phone.response.201.data.zip`; string, optional) — ZIP or postal code
    - example `"10001"`
  - `notes` (`post/api/contacts/no-phone.response.201.data.notes`; string, optional) — Additional notes about the contact
  - `tags` (`post/api/contacts/no-phone.response.201.data.tags`; array<string>, optional) — Array of tags associated with contact
    - example `["vip","enterprise"]`
  - `priority` (`post/api/contacts/no-phone.response.201.data.priority`; string, optional) — Contact priority level
    - one of `"low"`, `"medium"`, `"high"`, `"urgent"`; example `"high"`
  - `opt_in_through` (`post/api/contacts/no-phone.response.201.data.opt_in_through`; string, optional) — How contact opted in for communications
    - example `"api"`
  - `conversation_status` (`post/api/contacts/no-phone.response.201.data.conversation_status`; string, optional) — Current conversation status
    - example `"active"`
  - `last_message_at` (`post/api/contacts/no-phone.response.201.data.last_message_at`; string, optional) — Timestamp of last message
    - format `date-time`
  - `created_at` (`post/api/contacts/no-phone.response.201.data.created_at`; string, optional) — The date the contact was created
    - format `date-time`
  - `updated_at` (`post/api/contacts/no-phone.response.201.data.updated_at`; string, optional) — The date the contact was last updated
    - format `date-time`
  - `follow_up_date` (`post/api/contacts/no-phone.response.201.data.follow_up_date`; string, optional) — Follow-up date
    - format `date`
  - `webhook_name` (`post/api/contacts/no-phone.response.201.data.webhook_name`; string, optional) — Name of webhook that created this contact
  - `lastName` (`post/api/contacts/no-phone.response.201.data.lastName`; string, optional) — The contact's last name
  - `status` (`post/api/contacts/no-phone.response.201.data.status`; string, optional) — The contact's status

### 400

Invalid request - missing required fields

### 409

Conflict - contact with phone number already exists

### 500

Server error


Source: https://developer.channelautomations.com/api/post-api-contacts-no-phone/index.md
