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

# Send a one-time code

> Send a one-time code over WhatsApp to a phone number or a known person (`personExternalId`). WhatsApp writes the message text, and the expiry comes from the authentication template chosen on the dashboard. Calling again while the code is still valid resends the same code with the same `otpId` (`resent: true`). Returns 429 with `retryAfterSeconds` inside the resend cooldown or over the hourly per-number cap. People sharing a phone get separate codes when `personExternalId` or `reference` is passed.



## OpenAPI

````yaml /api-reference/openapi.json post /api/v1/otp/send
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/otp/send:
    post:
      tags:
        - One-time codes
      summary: Send a one-time code
      description: >-
        Send a one-time code over WhatsApp to a phone number or a known person
        (`personExternalId`). WhatsApp writes the message text, and the expiry
        comes from the authentication template chosen on the dashboard. Calling
        again while the code is still valid resends the same code with the same
        `otpId` (`resent: true`). Returns 429 with `retryAfterSeconds` inside
        the resend cooldown or over the hourly per-number cap. People sharing a
        phone get separate codes when `personExternalId` or `reference` is
        passed.
      operationId: otp_send
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $schema: https://json-schema.org/draft/2020-12/schema
              type: object
              properties:
                phone:
                  type: string
                  minLength: 1
                  description: Recipient phone in E.164 format, e.g. +5215512345678.
                personExternalId:
                  type: string
                  minLength: 1
                  description: Your own ID for the person; Boom uses their stored phone.
                reference:
                  type: string
                  maxLength: 255
                  description: >-
                    Your label for what the code is for, e.g. an appointment ID.
                    People sharing a phone get separate codes when this or
                    `personExternalId` is passed.
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $schema: https://json-schema.org/draft/2020-12/schema
                type: object
                properties:
                  otpId:
                    type: string
                    description: Pass this to otp_verify.
                  status:
                    type: string
                    const: PENDING
                  expiresAt:
                    type: string
                    description: ISO 8601 timestamp.
                  resent:
                    type: boolean
                    description: True when an existing valid code was sent again.
                  reference:
                    anyOf:
                      - type: string
                      - type: 'null'
                  personExternalId:
                    anyOf:
                      - type: string
                      - type: 'null'
                required:
                  - otpId
                  - status
                  - expiresAt
                  - resent
                  - reference
                  - personExternalId
                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.