---
title: "Assert a contact by email"
method: PUT
path: "/contacts/assert"
tags: ["Contacts"]
---

# Assert a contact by email

`PUT /contacts/assert`

## Request

- Base URL: `https://www.sagaris.ai/api/v1`
- URL: `https://www.sagaris.ai/api/v1/contacts/assert`
- Auth: HTTP bearer

Create or update a live contact by case-insensitive email in the key workspace. Returns 201 on create or 200 on update. Omitted fields are preserved; empty strings clear optional profile values. Reuses canonical create/update billing and rate gates. Idempotency-Key is ignored: retries match the same live email. No lifecycle, consent, workspace or provenance overrides. Concurrent assertions converge through the live-email unique index; a race retry can consume a second write-rate token.

## Request body

- object
  - `email` string, email, required
  - `first_name` string
  - `last_name` string
  - `company` string
  - `job_title` string
  - `phone` string
  - `website` string: Absolute URL or empty string.
  - `linkedin_url` string: Absolute URL or empty string.

## Response `200`

Updated contact.

- ContactEnvelope
  - `data` Contact, required: The public contact projection returned by list and create.
    - `id` string
    - `email` string, nullable
    - `first_name` string, nullable
    - `last_name` string, nullable
    - `company` string, nullable
    - `job_title` string, nullable
    - `phone` string, nullable
    - `linkedin_url` string, nullable
    - `website` string, nullable
    - `lifecycle` string, nullable
    - `source` string, nullable
    - `tags` string[], nullable
    - `created_at` string, date-time
    - `updated_at` string, date-time
  - `error` unknown, required

## Other responses

- `201`: Created contact.
- `400`: Invalid JSON body or field validation failure.
- `401`: Missing, malformed, invalid, revoked, or expired API key.
- `402`: Workspace billing gate blocked this write.
- `403`: The key does not hold the required scope for this operation.
- `409`: Concurrent email conflict; retry the assertion.
- `429`: Per-key write rate limit exceeded (60 requests / 60s).
- `500`: Database or audit failure; retry the assertion.
- `503`: The database / API-keys table is not provisioned.

---

[API](https://skmtc.dev/sagaris/apis/sagaris-public-api.md) · [All operations](https://skmtc.dev/sagaris/apis/sagaris-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/sagaris/apis/sagaris-public-api/revisions/ac70219a7080?raw)
