---
title: "Create or update a candidate (upsert)"
method: POST
path: "/v1/candidates"
tags: ["Candidates"]
---

# Create or update a candidate (upsert)

`POST /v1/candidates`

Create or update a candidate by unique ID (email). Invalid timezones will be erased.

## Request body

- object
  - `name` string, nullable
  - `email` string, nullable, required
  - `phone_number` string, nullable
  - `opted_in` boolean, nullable
  - `timezone` string, IANA timezone, nullable

## Response `200`

successful

- object
  - `data` Candidate, required
    - `id` string, required
    - `type` 'customer', required
    - `attributes` object, required
      - `id` integer, required
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required
      - `deleted_at` string, date-time, nullable
      - `last_contacted_at` string, date-time, nullable
      - `name` string
      - `email` string, email, nullable
      - `phone_number` string, nullable
      - `first_name` string
      - `last_name` string
      - `extra` object, required
      - `health_status` object
      - `opted_in` boolean, nullable, required
      - `timezone` string, nullable, required
      - `unsubscribed_at` string, date-time, nullable, required
      - `consented_at` string, date-time, nullable, required
      - `email_valid` boolean, nullable, required
      - `unsubscribed` boolean, required

## Other responses

- `401` — unauthorized
- `422` — account over candidate limit

---

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