Zavu 10DLC API

The 10DLC API from Zavu — 11 operation(s) for 10dlc.

Operations 18

GET /v1/10dlc/brands List 10DLC brands #
POST /v1/10dlc/brands Create 10DLC brand #
GET /v1/10dlc/brands/use-cases List 10DLC use cases #
GET /v1/10dlc/brands/{brandId} Get 10DLC brand #
PATCH /v1/10dlc/brands/{brandId} Update 10DLC brand #
DELETE /v1/10dlc/brands/{brandId} Delete 10DLC brand #
POST /v1/10dlc/brands/{brandId}/submit Submit 10DLC brand for review #
POST /v1/10dlc/brands/{brandId}/sync Sync 10DLC brand status #
GET /v1/10dlc/campaigns List 10DLC campaigns #
POST /v1/10dlc/campaigns Create 10DLC campaign #
GET /v1/10dlc/campaigns/{campaignId} Get 10DLC campaign #
PATCH /v1/10dlc/campaigns/{campaignId} Update 10DLC campaign #
DELETE /v1/10dlc/campaigns/{campaignId} Delete 10DLC campaign #
POST /v1/10dlc/campaigns/{campaignId}/submit Submit 10DLC campaign for review #
POST /v1/10dlc/campaigns/{campaignId}/sync Sync 10DLC campaign status #
GET /v1/10dlc/campaigns/{campaignId}/phone-numbers List campaign phone number assignments #
POST /v1/10dlc/campaigns/{campaignId}/phone-numbers Assign phone number to campaign #
DELETE /v1/10dlc/campaigns/{campaignId}/phone-numbers/{assignmentId} Unassign phone number from campaign #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/zavu-10dlc-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

zavu-10dlc-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Zavu Unified Messaging Layer 10 DLC API
  version: 0.2.0
  description: 'Unified multi-channel messaging API for Zavu.


    Supported channels:

    - **SMS**: Simple text messages

    - **WhatsApp**: Rich messaging with media, buttons, lists, CTA URL buttons, and templates

    - **Telegram**: Bot messaging with text, media, and interactive elements

    - **Email**: Transactional emails via Amazon SES


    Design goals:

    - Simple `send()` entrypoint for developers

    - Project-level authentication via Bearer token

    - Support for all WhatsApp message types (text, image, video, audio, document, sticker, location, contact, buttons, list, cta_url, reaction, template)

    - If a non-text message type is sent, WhatsApp channel is used automatically

    - 24-hour WhatsApp conversation window enforcement

    - Universal `to` field accepts phone numbers (E.164), email addresses, or numeric chat IDs (Telegram/Instagram/Messenger)

    '
servers:
- url: https://api.zavu.dev
security:
- bearerAuth: []
tags:
- name: 10DLC
paths:
  /v1/10dlc/brands:
    get:
      summary: List 10DLC brands
      description: List 10DLC brand registrations for this project.
      operationId: listTenDlcBrands
      tags:
      - 10DLC
      parameters:
      - name: limit
        in: query
        schema:
          type: integer
          default: 50
          maximum: 100
      - name: cursor
        in: query
        schema:
          type: string
      responses:
        '200':
          description: List of brands.
          content:
            application/json:
              schema:
                type: object
                required:
                - items
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/TenDlcBrand'
                  nextCursor:
                    type:
                    - string
                    - 'null'
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - bearerAuth: []
    post:
      summary: Create 10DLC brand
      description: Create a 10DLC brand registration. The brand starts in draft status. Submit it for review using the submit endpoint.
      operationId: createTenDlcBrand
      tags:
      - 10DLC
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TenDlcBrandCreateRequest'
            example:
              entityType: PRIVATE_PROFIT
              displayName: Acme Corp
              companyName: Acme Corporation
              ein: 12-3456789
              email: compliance@acme.com
              phone: '+14155551234'
              street: 123 Main St
              city: San Francisco
              state: CA
              postalCode: '94102'
              country: US
              website: https://acme.com
              vertical: Technology
      responses:
        '201':
          description: Brand created in draft status.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TenDlcBrandResponse'
        '400':
          description: Invalid request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - bearerAuth: []
  /v1/10dlc/brands/use-cases:
    get:
      summary: List 10DLC use cases
      description: List available use cases for 10DLC campaign registration.
      operationId: listTenDlcUseCases
      tags:
      - 10DLC
      responses:
        '200':
          description: List of available use cases.
          content:
            application/json:
              schema:
                type: object
                required:
                - useCases
                properties:
                  useCases:
                    type: array
                    items:
                      type: object
                      properties:
                        name:
                          type: string
                        description:
                          type: string
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - bearerAuth: []
  /v1/10dlc/brands/{brandId}:
    get:
      summary: Get 10DLC brand
      operationId: getTenDlcBrand
      tags:
      - 10DLC
      parameters:
      - $ref: '#/components/parameters/TenDlcBrandIdParam'
      responses:
        '200':
          description: Brand details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TenDlcBrandResponse'
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Brand not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - bearerAuth: []
    patch:
      summary: Update 10DLC brand
      description: Update a 10DLC brand in draft status. Cannot update after submission.
      operationId: updateTenDlcBrand
      tags:
      - 10DLC
      parameters:
      - $ref: '#/components/parameters/TenDlcBrandIdParam'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TenDlcBrandUpdateRequest'
      responses:
        '200':
          description: Brand updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TenDlcBrandResponse'
        '400':
          description: Invalid request or brand already submitted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Brand not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - bearerAuth: []
    delete:
      summary: Delete 10DLC brand
      operationId: deleteTenDlcBrand
      tags:
      - 10DLC
      parameters:
      - $ref: '#/components/parameters/TenDlcBrandIdParam'
      responses:
        '204':
          description: Brand deleted.
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Brand not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - bearerAuth: []
  /v1/10dlc/brands/{brandId}/submit:
    post:
      summary: Submit 10DLC brand for review
      description: Submit a draft brand to The Campaign Registry (TCR) for vetting. The brand must be in draft status. A $35 registration fee is charged from your balance.
      operationId: submitTenDlcBrand
      tags:
      - 10DLC
      parameters:
      - $ref: '#/components/parameters/TenDlcBrandIdParam'
      responses:
        '200':
          description: Brand submitted for review.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TenDlcBrandResponse'
        '400':
          description: Brand already submitted or invalid status.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Brand not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - bearerAuth: []
  /v1/10dlc/brands/{brandId}/sync:
    post:
      summary: Sync 10DLC brand status
      description: Sync the brand status with the registration provider. Use this to check for approval updates after submission.
      operationId: syncTenDlcBrand
      tags:
      - 10DLC
      parameters:
      - $ref: '#/components/parameters/TenDlcBrandIdParam'
      responses:
        '200':
          description: Brand status synced.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TenDlcBrandResponse'
        '400':
          description: Brand has not been submitted yet.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Brand not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - bearerAuth: []
  /v1/10dlc/campaigns:
    get:
      summary: List 10DLC campaigns
      description: List 10DLC campaign registrations for this project.
      operationId: listTenDlcCampaigns
      tags:
      - 10DLC
      parameters:
      - name: brandId
        in: query
        description: Filter campaigns by brand ID.
        schema:
          type: string
      - name: limit
        in: query
        schema:
          type: integer
          default: 50
          maximum: 100
      - name: cursor
        in: query
        schema:
          type: string
      responses:
        '200':
          description: List of campaigns.
          content:
            application/json:
              schema:
                type: object
                required:
                - items
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/TenDlcCampaign'
                  nextCursor:
                    type:
                    - string
                    - 'null'
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - bearerAuth: []
    post:
      summary: Create 10DLC campaign
      description: Create a 10DLC campaign under an existing brand. The campaign starts in draft status. Submit it for carrier review using the submit endpoint.
      operationId: createTenDlcCampaign
      tags:
      - 10DLC
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TenDlcCampaignCreateRequest'
            example:
              brandId: brand_abc123
              name: Order Notifications
              useCase: ACCOUNT_NOTIFICATION
              description: Send order status updates and shipping notifications to customers who opted in.
              sampleMessages:
              - 'Hi {{name}}, your order #{{order_id}} has shipped! Track it at {{url}}'
              - 'Your order #{{order_id}} has been delivered. Thank you for your purchase!'
              subscriberOptIn: true
              subscriberOptOut: true
              subscriberHelp: true
              numberPooling: false
              directLending: false
              embeddedLink: true
              embeddedPhone: false
              affiliateMarketing: false
              ageGated: false
      responses:
        '201':
          description: Campaign created in draft status.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TenDlcCampaignResponse'
        '400':
          description: Invalid request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Brand not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - bearerAuth: []
  /v1/10dlc/campaigns/{campaignId}:
    get:
      summary: Get 10DLC campaign
      operationId: getTenDlcCampaign
      tags:
      - 10DLC
      parameters:
      - $ref: '#/components/parameters/TenDlcCampaignIdParam'
      responses:
        '200':
          description: Campaign details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TenDlcCampaignResponse'
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Campaign not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - bearerAuth: []
    patch:
      summary: Update 10DLC campaign
      description: Update a 10DLC campaign in draft status. Cannot update after submission.
      operationId: updateTenDlcCampaign
      tags:
      - 10DLC
      parameters:
      - $ref: '#/components/parameters/TenDlcCampaignIdParam'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TenDlcCampaignUpdateRequest'
      responses:
        '200':
          description: Campaign updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TenDlcCampaignResponse'
        '400':
          description: Invalid request or campaign already submitted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Campaign not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - bearerAuth: []
    delete:
      summary: Delete 10DLC campaign
      operationId: deleteTenDlcCampaign
      tags:
      - 10DLC
      parameters:
      - $ref: '#/components/parameters/TenDlcCampaignIdParam'
      responses:
        '204':
          description: Campaign deleted.
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Campaign not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - bearerAuth: []
  /v1/10dlc/campaigns/{campaignId}/submit:
    post:
      summary: Submit 10DLC campaign for review
      description: Submit a draft campaign for carrier review. The campaign must be in draft status and its brand must be verified.
      operationId: submitTenDlcCampaign
      tags:
      - 10DLC
      parameters:
      - $ref: '#/components/parameters/TenDlcCampaignIdParam'
      responses:
        '200':
          description: Campaign submitted for review.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TenDlcCampaignResponse'
        '400':
          description: Campaign already submitted or invalid status.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Campaign not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - bearerAuth: []
  /v1/10dlc/campaigns/{campaignId}/sync:
    post:
      summary: Sync 10DLC campaign status
      description: Sync the campaign status with the registration provider. Use this to check for approval updates after submission.
      operationId: syncTenDlcCampaign
      tags:
      - 10DLC
      parameters:
      - $ref: '#/components/parameters/TenDlcCampaignIdParam'
      responses:
        '200':
          description: Campaign status synced.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TenDlcCampaignResponse'
        '400':
          description: Campaign has not been submitted yet.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Campaign not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - bearerAuth: []
  /v1/10dlc/campaigns/{campaignId}/phone-numbers:
    get:
      summary: List campaign phone number assignments
      description: List phone numbers assigned to a 10DLC campaign.
      operationId: listTenDlcCampaignPhoneNumbers
      tags:
      - 10DLC
      parameters:
      - $ref: '#/components/parameters/TenDlcCampaignIdParam'
      responses:
        '200':
          description: List of phone number assignments.
          content:
            application/json:
              schema:
                type: object
                required:
                - items
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/TenDlcPhoneNumberAssignment'
                  nextCursor:
                    type:
                    - string
                    - 'null'
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Campaign not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - bearerAuth: []
    post:
      summary: Assign phone number to campaign
      description: Assign a US phone number to an approved 10DLC campaign. The campaign must be in approved status.
      operationId: assignTenDlcPhoneNumber
      tags:
      - 10DLC
      parameters:
      - $ref: '#/components/parameters/TenDlcCampaignIdParam'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TenDlcPhoneNumberAssignRequest'
            example:
              phoneNumberId: pn_abc123
      responses:
        '201':
          description: Phone number assigned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TenDlcAssignmentResponse'
        '400':
          description: Campaign not approved or invalid request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Campaign or phone number not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - bearerAuth: []
  /v1/10dlc/campaigns/{campaignId}/phone-numbers/{assignmentId}:
    delete:
      summary: Unassign phone number from campaign
      description: Remove a phone number assignment from a 10DLC campaign.
      operationId: unassignTenDlcPhoneNumber
      tags:
      - 10DLC
      parameters:
      - $ref: '#/components/parameters/TenDlcCampaignIdParam'
      - $ref: '#/components/parameters/TenDlcAssignmentIdParam'
      responses:
        '204':
          description: Phone number unassigned.
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Campaign or assignment not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - bearerAuth: []
components:
  schemas:
    TenDlcBrand:
      type: object
      required:
      - id
      - entityType
      - displayName
      - email
      - phone
      - street
      - city
      - state
      - postalCode
      - country
      - vertical
      - status
      - createdAt
      - updatedAt
      properties:
        id:
          type: string
        entityType:
          $ref: '#/components/schemas/TenDlcEntityType'
        displayName:
          type: string
          description: Display name of the brand.
          example: Acme Corp
        companyName:
          type:
          - string
          - 'null'
          description: Legal company name.
        ein:
          type:
          - string
          - 'null'
          description: Employer Identification Number (EIN).
          example: 12-3456789
        firstName:
          type:
          - string
          - 'null'
        lastName:
          type:
          - string
          - 'null'
        email:
          type: string
          format: email
        phone:
          type: string
          description: Contact phone number in E.164 format.
          example: '+14155551234'
        street:
          type: string
        city:
          type: string
        state:
          type: string
        postalCode:
          type: string
        country:
          type: string
          description: Two-letter ISO country code.
          example: US
        website:
          type:
          - string
          - 'null'
          format: uri
        vertical:
          type: string
          description: Industry vertical.
          example: Technology
        stockSymbol:
          type:
          - string
          - 'null'
        stockExchange:
          type:
          - string
          - 'null'
        status:
          $ref: '#/components/schemas/TenDlcBrandStatus'
        brandScore:
          type:
          - integer
          - 'null'
          description: Trust score assigned by TCR after vetting.
        brandRelationship:
          type:
          - string
          - 'null'
        failureReason:
          type:
          - string
          - 'null'
          description: Reason for rejection, if applicable.
        submittedAt:
          type:
          - string
          - 'null'
          format: date-time
        verifiedAt:
          type:
          - string
          - 'null'
          format: date-time
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    TenDlcCampaign:
      type: object
      required:
      - id
      - brandId
      - name
      - useCase
      - description
      - sampleMessages
      - subscriberOptIn
      - subscriberOptOut
      - subscriberHelp
      - numberPooling
      - directLending
      - embeddedLink
      - embeddedPhone
      - affiliateMarketing
      - ageGated
      - status
      - createdAt
      - updatedAt
      properties:
        id:
          type: string
        brandId:
          type: string
          description: ID of the brand this campaign belongs to.
        name:
          type: string
          example: Order Notifications
        useCase:
          type: string
          description: Campaign use case type.
          example: ACCOUNT_NOTIFICATION
        subUseCases:
          type:
          - array
          - 'null'
          items:
            type: string
        description:
          type: string
          description: Description of the messaging campaign.
        sampleMessages:
          type: array
          items:
            type: string
          description: Sample messages representative of campaign content.
        subscriberOptIn:
          type: boolean
        subscriberOptOut:
          type: boolean
        subscriberHelp:
          type: boolean
        numberPooling:
          type: boolean
        directLending:
          type: boolean
        embeddedLink:
          type: boolean
        embeddedPhone:
          type: boolean
        affiliateMarketing:
          type: boolean
        ageGated:
          type: boolean
        messageFlow:
          type:
          - string
          - 'null'
        helpMessage:
          type:
          - string
          - 'null'
        optInKeywords:
          type:
          - array
          - 'null'
          items:
            type: string
        optOutKeywords:
          type:
          - array
          - 'null'
          items:
            type: string
        status:
          $ref: '#/components/schemas/TenDlcCampaignStatus'
        dailyLimit:
          type:
          - integer
          - 'null'
          description: Daily message limit based on brand trust score.
        failureReason:
          type:
          - string
          - 'null'
        registrationCostCents:
          type:
          - integer
          - 'null'
          description: One-time registration cost in cents.
        monthlyFeeCents:
          type:
          - integer
          - 'null'
          description: Recurring monthly fee in cents.
        submittedAt:
          type:
          - string
          - 'null'
          format: date-time
        approvedAt:
          type:
          - string
          - 'null'
          format: date-time
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    TenDlcBrandStatus:
      type: string
      description: Status of a 10DLC brand registration.
      enum:
      - draft
      - pending
      - verified
      - rejected
    TenDlcCampaignCreateRequest:
      type: object
      required:
      - brandId
      - name
      - useCase
      - description
      - sampleMessages
      - subscriberOptIn
      - subscriberOptOut
      - subscriberHelp
      - numberPooling
      - directLending
      - embeddedLink
      - embeddedPhone
      - affiliateMarketing
      - ageGated
      properties:
        brandId:
          type: string
          description: ID of the brand to create this campaign under.
        name:
          type: string
          maxLength: 100
        useCase:
          type: string
          maxLength: 50
          description: Campaign use case (e.g., ACCOUNT_NOTIFICATION, MARKETING, 2FA).
        subUseCases:
          type: array
          items:
            type: string
        description:
          type: string
          maxLength: 4096
        sampleMessages:
          type: array
          items:
            type: string
            maxLength: 1024
          minItems: 1
          maxItems: 5
        subscriberOptIn:
          type: boolean
        subscriberOptOut:
          type: boolean
        subscriberHelp:
          type: boolean
        numberPooling:
          type: boolean
        directLending:
          type: boolean
        embeddedLink:
          type: boolean
        embeddedPhone:
          type: boolean
        affiliateMarketing:
          type: boolean
        ageGated:
          type: boolean
        messageFlow:
          type: string
          maxLength: 2048
        helpMessage:
          type: string
          maxLength: 500
        optInKeywords:
          type: array
          items:
            type: string
            maxLength: 50
        optOutKeywords:
          type: array
          items:
            type: string
            maxLength: 50
    TenDlcCampaignResponse:
      type: object
      required:
      - campaign
      properties:
        campaign:
          $ref: '#/components/schemas/TenDlcCampaign'
    TenDlcPhoneNumberAssignRequest:
      type: object
      required:
      - phoneNumberId
      properties:
        phoneNumberId:
          type: string
          description: ID of the phone number to assign.
    TenDlcBrandCreateRequest:
      type: object
      required:
      - entityType
      - displayName
      - email
      - phone
      - street
      - city
      - state
      - postalCode
      - country
      - vertical
      properties:
        entityType:
          $ref: '#/components/schemas/TenDlcEntityType'
        displayName:
          type: string
          maxLength: 100
          description: Display name of the brand.
          example: Acme Corp
        companyName:
          type: string
          maxLength: 200
          description: Legal company name.
        ein:
          type: string
          description: 'Employer Identification Number (format: XX-XXXXXXX).'
          example: 12-3456789
        firstName:
          type: string
          maxLength: 50
        lastName:
          type: string
          maxLength: 50
        email:
          type: string
          format: email
        phone:
          type: string
          description: Contact phone in E.164 format.
          example: '+14155551234'
        street:
          type: string
          maxLength: 200
        city:
          type: string
          maxLength: 100
        state:
          type: string
          maxLength: 50
        postalCode:
          type: string
          maxLength: 20
        country:
          type: string
          minLength: 2
          maxLength: 2
          description: Two-letter ISO country code.
          example: US
        website:
          type: string
          format: uri
        vertical:
          type: string
          maxLength: 50
          description: Industry vertical.
          example: Technology
        stockSymbol:
          type: string
          maxLength: 10
        stockExchange:
          type: string
          maxLength: 50
    TenDlcCampaignStatus:
      type: string
      description: Status of a 10DLC campaign registration.
      enum:
      - draft
      - pending
      - approved
      - rejected
    TenDlcAssignmentResponse:
      type: object
      required:
      - assignment
      properties:
        assignment:
          $ref: '#/components/schemas/TenDlcPhoneNumberAssignment'
    Error:
      type: object
      required:
      - code
      - message
      properties:
        code:
          type: string
          example: invalid_request
        message:
          type: string
          example: Phone number is invalid
        details:
          type: object
          additionalProperties: true
    TenDlcEntityType:
      type: string
      description: Business entity type for 10DLC brand registration.
      enum:
      - PRIVATE_PROFIT
      - PUBLIC_PROFIT
      - NON_PROFIT
      - GOVERNMENT
      - SOLE_PROPRIETOR
    TenDlcBrandUpdateRequest:
      type: object
      properties:
        entityType:
          $ref: '#/components/schemas/TenDlcEntityType'
        displayName:
          type: string
          maxLength: 100
        companyName:
          type: string
          maxLength: 200
        ein:
          type: string
        firstName:
          type: string
          maxLength: 50
        lastName:
          type

# --- truncated at 32 KB (34 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/zavu/refs/heads/main/openapi/zavu-10dlc-api-openapi.yml