---
title: "Add keep-in-touch cadences in bulk (v2)"
method: POST
path: "/v2/keep-in-touch/cadences/batch-create"
tags: ["keep-in-touch"]
---

# Add keep-in-touch cadences in bulk (v2)

`POST /v2/keep-in-touch/cadences/batch-create`

## Request

- Base URL: `https://api.prod.getdex.com`
- URL: `https://api.prod.getdex.com/v2/keep-in-touch/cadences/batch-create`
- Auth: HTTP bearer

Add the Team cadence (`kind: 'team'`; owners, admins and standard members) or the caller's own My cadence (`kind: 'my'`; every member, viewers included) on one frequency to up to 1000 contacts (`contact_ids`). A contact that already has a cadence of that kind is skipped and keeps it unchanged (`skipped_existing_contact_ids`); a missing, archived or other-workspace contact is skipped too (`not_found_contact_ids`). Due dates are computed by the server. 400 `frequency_not_found`; a viewer's Team batch is refused like the single create. The contacts are written in pages that commit independently, so a failed request may have added some cadences: retrying the same body is safe. Workspace-only: send the `X-Dex-Workspace` header (400 `workspace_context_required` without it). **Requires an `Idempotency-Key` header**. Returns `{ data: { cadences: [...], skipped_existing_contact_ids, not_found_contact_ids } }` with status 201.

## Headers

- `Idempotency-Key` string, required

## Request body

- object
  - `kind` 'team' | 'my', required
  - `frequency_id` string, uuid, required
  - `contact_ids` string[], required

## Response `201`

Created

- object
  - `data` object, required
    - `cadences` object[], required
      - `id` string, uuid, required
      - `kind` 'team' | 'my', required
      - `contact_id` string, uuid, required
      - `frequency_id` string, uuid, required
      - `days` integer, required
      - `next_due_at` union, required
        - string, date-time
        - unknown
      - `snoozed_until` union, required
        - string, date-time
        - unknown
      - `created_at` union, required
        - string, date-time
        - unknown
      - `updated_at` union, required
        - string, date-time
        - unknown
      - `contact` object, required
        - `id` string, uuid, required
        - `first_name` string, nullable, required
        - `last_name` string, nullable, required
        - `image_url` string, nullable, required
        - `job_title` string, nullable
    - `skipped_existing_contact_ids` string[], required
    - `not_found_contact_ids` string[], required

## Other responses

- `400`: Request body failed validation.
- `401`: Missing or invalid API key.
- `403`: Valid key, insufficient permission.
- `404`: Resource does not exist.
- `409`: Request conflicts with the current state of the resource.
- `429`: Rate limit exceeded.
- `500`: Unexpected server error.

## Changes

- **2026-10-20** `1d88d52d821d`: 1 info
  - added the optional property `data/cadences/items/contact/job_title` to the response with the `201` status
- **2026-10-15** `51c9adf0f104`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/getdex/apis/dex-public-api/changes/v2/keep-in-touch/cadences/batch-create/post.md)

---

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