> ## Documentation Index
> Fetch the complete documentation index at: https://docs.useboom.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Batch upsert people

> Upsert up to 1000 people in one request. Idempotent and safely retryable. Attributes merge by default; pass mode:'replace' to swap each person's whole set.



## OpenAPI

````yaml /api-reference/openapi.json post /api/v1/cdp/people/batch
openapi: 3.1.0
info:
  title: Boom API
  version: 1.0.0
  description: >-
    Boom's public REST API — one uniform surface over every platform capability.
    CDP: upsert people and custom objects, define object and relationship types,
    link and unlink relationships, and record behavioral events — one record per
    request or up to 1000 per request via the `/batch` endpoints. Segments: read
    (list, read, membership) and full authoring — discover the filterable
    catalog, validate a filter, create and update segments, preview match
    counts, and trigger evaluation. Initiatives: create and configure outreach
    initiatives, link WhatsApp templates, drive the lifecycle (launch, cancel,
    archive), and read collected-data summaries. Participants: enroll people
    into an active initiative, track their status, read conversation
    transcripts, and stop outreach. Journeys: read-only access to always-on
    message flows and their metrics. WhatsApp templates: list your WhatsApp
    numbers and list, read, and create message templates. The same capabilities
    are exposed as MCP tools with identical schemas.
servers:
  - url: https://www.useboom.ai
    description: Production
  - url: https://dev.useboom.ai
    description: Development (sandbox — use a development organization API key)
security:
  - bearerAuth: []
paths:
  /api/v1/cdp/people/batch:
    post:
      tags:
        - CDP People
      summary: Batch upsert people
      description: >-
        Upsert up to 1000 people in one request. Idempotent and safely
        retryable. Attributes merge by default; pass mode:'replace' to swap each
        person's whole set.
      operationId: cdp_people_batch_upsert
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $schema: https://json-schema.org/draft/2020-12/schema
              type: object
              properties:
                items:
                  minItems: 1
                  maxItems: 1000
                  type: array
                  items:
                    type: object
                    properties:
                      externalId:
                        type: string
                        minLength: 1
                        maxLength: 255
                        description: >-
                          Your stable identifier for this person (idempotency
                          key).
                      firstName:
                        description: Given name.
                        anyOf:
                          - type: string
                            maxLength: 255
                          - type: 'null'
                      lastName:
                        description: Family name.
                        anyOf:
                          - type: string
                            maxLength: 255
                          - type: 'null'
                      email:
                        description: Email address.
                        anyOf:
                          - type: string
                            maxLength: 255
                          - type: 'null'
                      phoneNumber:
                        description: Phone number in E.164 format (e.g. +5215555555555).
                        anyOf:
                          - type: string
                            maxLength: 255
                          - type: 'null'
                      attributes:
                        description: >-
                          Free-form custom traits. Merged into the stored ones
                          by default: keys you omit are kept, and a key sent as
                          null is removed. Pass mode:'replace' to swap the whole
                          set.
                        type: object
                        propertyNames:
                          type: string
                          maxLength: 255
                        additionalProperties: {}
                    required:
                      - externalId
                  description: People to upsert.
                mode:
                  default: merge
                  description: >-
                    How `attributes` and the profile fields are applied. 'merge'
                    (default) overlays the attributes you send onto the stored
                    ones: omitted keys are kept, a key sent as null is removed,
                    and an omitted or null profile field (firstName, lastName,
                    email, phoneNumber) keeps its stored value. 'replace' swaps
                    the whole attribute set (any key you leave out is DELETED)
                    and writes every profile field as sent, so an omitted one is
                    cleared.
                  type: string
                  enum:
                    - merge
                    - replace
              required:
                - items
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $schema: https://json-schema.org/draft/2020-12/schema
                type: object
                properties:
                  summary:
                    type: object
                    properties:
                      total:
                        type: integer
                        minimum: -9007199254740991
                        maximum: 9007199254740991
                      created:
                        type: integer
                        minimum: -9007199254740991
                        maximum: 9007199254740991
                      updated:
                        type: integer
                        minimum: -9007199254740991
                        maximum: 9007199254740991
                      failed:
                        type: integer
                        minimum: -9007199254740991
                        maximum: 9007199254740991
                    required:
                      - total
                      - created
                      - updated
                      - failed
                    additionalProperties: false
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        index:
                          type: integer
                          minimum: -9007199254740991
                          maximum: 9007199254740991
                          description: Zero-based index of the failed item.
                        externalId:
                          type: string
                        error:
                          type: object
                          properties:
                            code:
                              type: string
                              description: Stable machine-readable error code (snake_case).
                            message:
                              type: string
                          required:
                            - code
                            - message
                          additionalProperties: false
                      required:
                        - index
                        - error
                      additionalProperties: false
                required:
                  - summary
                  - errors
                additionalProperties: false
        '400':
          description: Validation failed or the request cannot proceed.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: Stable machine-readable error code (snake_case).
                      message:
                        type: string
                    required:
                      - code
                      - message
                required:
                  - error
        '401':
          description: Missing, malformed, or revoked API key.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: Stable machine-readable error code (snake_case).
                      message:
                        type: string
                    required:
                      - code
                      - message
                required:
                  - error
        '404':
          description: The resource does not exist in this organization.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: Stable machine-readable error code (snake_case).
                      message:
                        type: string
                    required:
                      - code
                      - message
                required:
                  - error
        '409':
          description: >-
            Conflicts with the current state (duplicates, wrong lifecycle
            state).
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: Stable machine-readable error code (snake_case).
                      message:
                        type: string
                    required:
                      - code
                      - message
                required:
                  - error
        '422':
          description: The request is well-formed but semantically invalid.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: Stable machine-readable error code (snake_case).
                      message:
                        type: string
                    required:
                      - code
                      - message
                required:
                  - error
        '429':
          description: Rate limit exceeded — retry after `Retry-After`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: Stable machine-readable error code (snake_case).
                      message:
                        type: string
                    required:
                      - code
                      - message
                required:
                  - error
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: Stable machine-readable error code (snake_case).
                      message:
                        type: string
                    required:
                      - code
                      - message
                required:
                  - error
        '503':
          description: Transient error — retry with a narrower request.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: Stable machine-readable error code (snake_case).
                      message:
                        type: string
                    required:
                      - code
                      - message
                required:
                  - error
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'Organization API key, sent as `Authorization: Bearer boom_org_...`.'

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.