---
title: "Create or update contact (legacy status contract)"
method: POST
path: "/contacts/add"
tags: ["Contact"]
---

# Create or update contact (legacy status contract)

`POST /contacts/add`

## Request

- Base URL: `https://api.spurnow.com`
- URL: `https://api.spurnow.com/contacts/add`
- Auth: HTTP bearer

Legacy endpoint used by current frontend flows. Returns status payloads (`success`, `exists`, `failed`) instead of strict exception-only semantics.

## Request body

- AddContactInput
  - `firstName` string, required
  - `lastName` string, required
  - `email` string, required
  - `number` string, required
  - `tags` number[], required
  - `update` boolean, required
  - `id` number, required

## Response `201`

Status response for create/update operation.

- union
  - AddContactSuccessResponseDto
    - `status` string, required
    - `message` string, required
    - `contactId` number: Present when a contact was created in this call.
  - AddContactExistsResponseDto
    - `status` string, required
    - `message` string, required
    - `contactId` number: Existing contact id when duplicate is found.
  - AddContactFailedResponseDto
    - `status` string, required
    - `message` string, required

## Other responses

- `400`: Input validation failure (e.g. invalid number).
- `404`: WhatsApp channel not connected for workspace.

---

[API](https://skmtc.dev/spurnow/apis/spur-apis.md) - [All operations](https://skmtc.dev/spurnow/apis/spur-apis/llms.txt) - [OpenAPI document](https://skmtc.dev/spurnow/apis/spur-apis/revisions/27ca7bf002cb?raw)
