> ## 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.

# Upsert person

> Create or update a person by external id. Attributes are merged into the stored ones by default (omitted keys kept, null removes a key); pass mode:'replace' to swap the whole set.



## OpenAPI

````yaml /api-reference/openapi.json post /api/v1/cdp/people
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:
    post:
      tags:
        - CDP People
      summary: Upsert person
      description: >-
        Create or update a person by external id. Attributes are merged into the
        stored ones by default (omitted keys kept, null removes a key); pass
        mode:'replace' to swap the whole set.
      operationId: cdp_people_upsert
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $schema: https://json-schema.org/draft/2020-12/schema
              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: {}
                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:
                - externalId
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $schema: https://json-schema.org/draft/2020-12/schema
                type: object
                properties:
                  externalId:
                    type: string
                  created:
                    type: boolean
                required:
                  - externalId
                  - created
                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.