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

# Prepare or attach SMS registration

> Requires phone_numbers:write. Save truthful business and consent details to receive a price quote. Attach reuses the paid approved workspace registration for another eligible number with the same business and messaging purpose, without an extra subscription. Use POST /billing/sms-registration with billing:write to confirm the price and open checkout.



## OpenAPI

````yaml /api-reference/openapi.json post /phone-numbers/{id}/sms-registration
openapi: 3.1.0
info:
  title: Famulor API
  version: 1.0.0
  description: >-
    REST API for Famulor. Authenticate with an API key (`fam_...`, created under
    **Settings → API Keys**) or an OAuth 2.0 access token (`fam_at_...`) as a
    Bearer token.


    Every response uses a consistent envelope: `{ "data": ... , "meta": { ... }
    }` on success and `{ "error": { "code", "message" } }` on failure. List
    endpoints paginate with `?limit=` (default 50, max 200) and `?offset=`;
    `meta.pagination.total` carries the total match count.


    REST operations require API Access through the workspace plan or a recurring
    add-on. Without it, regular operations return `403 api_access_required`. The
    invoice-payment and billing-portal operations remain available with a valid
    `billing:write` credential after a failed plan payment so an authorized
    owner, admin, or billing member can recover billing.


    The same customer-facing capabilities are available as MCP tools at
    `https://app.famulor.io/mcp` (Model Context Protocol, streamable HTTP) using
    the same credentials, scopes, and workspace access. MCP availability is
    controlled separately by Connect AI / MCP, not by API Access.
servers:
  - url: https://app.famulor.io/api/v1
    description: Hosted platform.
  - url: https://{domain}/api/v1
    description: White-label tenant domain — same paths, tenant branding.
    variables:
      domain:
        default: app.famulor.io
        description: Your white-label tenant domain.
security:
  - bearerAuth: []
tags:
  - name: Account
    description: Self-inspection of the calling credential.
  - name: Migrations
    description: Preview and import data from supported legacy platforms.
  - name: Assistants
    description: Create and manage voice assistants.
  - name: Tools
    description: >-
      Reusable tools (HTTP APIs and external MCP servers) assistants can call
      mid-conversation.
  - name: Voices
    description: Browse the text-to-speech voice library.
  - name: Calls
    description: Start outbound calls and read call history, transcripts and recordings.
  - name: History
    description: Unified conversation history across calls, messaging and assistant emails.
  - name: Campaigns
    description: Outbound calling campaigns with a compliant power dialer.
  - name: Leads
    description: Manage Audience contacts across campaigns, channels and Call QA metrics.
  - name: Segments
    description: >-
      Saved, dynamic lead filters — reusable audience definitions used for
      Audience search and campaign lead assignment.
  - name: Suppression
    description: Cross-channel marketing opt-outs and active workspace suppression records.
  - name: Callbacks
    description: >-
      Scheduled callbacks booked by the Schedule callback tool across voice,
      chat, and email.
  - name: Phone Numbers
    description: Marketplace numbers and customer-provided numbers.
  - name: Famulor Loop
    description: >-
      Personal business-phone access, directory, presence, devices, and Loop
      call recents.
  - name: SIP Trunks
    description: Bring your own SIP provider and numbers.
  - name: Carrier Connections
    description: Connect a supported carrier account and import its existing phone numbers.
  - name: Knowledge Bases
    description: RAG knowledge bases and documents for assistants.
  - name: Settings
    description: Workspace-level settings such as caller-memory defaults.
  - name: Billing
    description: Balance and minutes ledger of the key owner.
  - name: Automations
    description: >-
      Native workspace automations — list, create, update, trigger. Plan gate:
      automation_platform.
  - name: Milian Missions
    description: Recurring jobs that Milian runs unattended on schedule.
  - name: Integrations
    description: >-
      Calendar integrations (Cal.com, Calendly, Acuity Scheduling, Google
      Calendar, Outlook, native booking engine). Assign them to assistants to
      provide availability and booking tools, plus provider-supported
      appointment lookup, cancellation, and rescheduling.
  - name: Bookings
    description: >-
      Native booking engine — event types with weekly availability, public
      booking pages at /book/{workspace}/{slug}, and the bookings they produce.
  - name: Dashboards
    description: >-
      Custom analytics dashboards, reusable widgets, and tenant-scoped
      performance analytics. Requires the custom_dashboards plan feature.
  - name: Catalog
    description: >-
      Read-only platform catalogs — available models, supported assistant
      languages, and prompt templates.
  - name: Simulations
    description: Assistant simulation tests (plan-gated).
  - name: Versions
    description: Assistant configuration version history.
  - name: Caller IDs
    description: Outbound caller ID verification.
  - name: Widgets
    description: Web widget connectors.
  - name: Messaging
    description: >-
      Telegram, Slack, and Messenger text bots linked to assistants (Chat SDK).
      Includes conversation delay, inactivity end, and conversation-ended
      webhooks.
  - name: QA
    description: Cohort AI Quality Assurance runs over call transcripts.
  - name: White Label
    description: >-
      Manage white-label customer accounts, defaults, credit transfers and
      customer plan offers. Each endpoint documents its required scope and
      workspace eligibility.
  - name: API Keys
    description: >-
      Self-service API keys for the calling workspace or a same-brand workspace
      where the credential's user is owner/admin. A key can only mint further
      keys with a scope subset of its own.
  - name: Workspaces
    description: >-
      List visible workspaces, create an additional workspace for the key owner,
      and mint a dedicated credential for a selected owner/admin workspace.
  - name: SMS
    description: Outbound SMS from workspace phone numbers.
paths:
  /phone-numbers/{id}/sms-registration:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
    post:
      tags:
        - Phone Numbers
      summary: Prepare or attach SMS registration
      description: >-
        Requires phone_numbers:write. Save truthful business and consent details
        to receive a price quote. Attach reuses the paid approved workspace
        registration for another eligible number with the same business and
        messaging purpose, without an extra subscription. Use POST
        /billing/sms-registration with billing:write to confirm the price and
        open checkout.
      operationId: manageSmsRegistration
      requestBody:
        required: true
        content:
          application/json:
            schema:
              oneOf:
                - type: object
                  required:
                    - action
                    - details
                  properties:
                    action:
                      type: string
                      enum:
                        - save
                    details:
                      $ref: '#/components/schemas/SmsRegistrationInput'
                - type: object
                  required:
                    - action
                    - confirm
                  properties:
                    action:
                      type: string
                      enum:
                        - attach
                    confirm:
                      type: boolean
                      enum:
                        - true
      responses:
        '200':
          description: >-
            Workspace registration, reviewed quote and status. Provider
            identifiers and internal billing details are omitted.
          content:
            application/json:
              schema:
                type: object
                properties:
                  registration:
                    type: object
                    nullable: true
                    properties:
                      id:
                        type: string
                        format: uuid
                      status:
                        type: string
                      details:
                        $ref: '#/components/schemas/SmsRegistrationInput'
                      phone_number_ids:
                        type: array
                        items:
                          type: string
                          format: uuid
                      last_error:
                        type: string
                        nullable: true
                      paid_until:
                        type: string
                        format: date-time
                        nullable: true
                      cancel_at_period_end:
                        type: boolean
                      quote:
                        type: object
                        nullable: true
                        properties:
                          quote_ref:
                            type: string
                          setup_amount:
                            type: integer
                            description: One-time net price in currency minor units.
                          monthly_amount:
                            type: integer
                            description: Monthly net price in currency minor units.
                          currency:
                            type: string
                          expires_at:
                            type: string
                            format: date-time
                  checkout_url:
                    type: string
                    format: uri
        '400':
          description: Invalid details or number eligibility.
        '403':
          description: Insufficient workspace role, scope or plan access.
        '409':
          description: >-
            Expired quote, conflicting application or existing messaging
            service.
        '503':
          description: Registration or billing is temporarily unavailable.
components:
  schemas:
    SmsRegistrationInput:
      type: object
      properties:
        legal_name:
          type: string
          minLength: 2
          maxLength: 128
        business_type:
          type: string
          enum:
            - Co-operative
            - Corporation
            - Limited Liability Corporation
            - Non-profit Corporation
            - Partnership
        industry:
          type: string
          enum:
            - AGRICULTURE
            - AUTOMOTIVE
            - BANKING
            - CONSTRUCTION
            - CONSUMER
            - EDUCATION
            - ELECTRONICS
            - ENGINEERING
            - ENERGY
            - FAST_MOVING_CONSUMER_GOODS
            - FINANCIAL
            - FINTECH
            - FOOD_AND_BEVERAGE
            - GOVERNMENT
            - HEALTHCARE
            - HOSPITALITY
            - INSURANCE
            - JEWELRY
            - LEGAL
            - MANUFACTURING
            - MEDIA
            - NOT_FOR_PROFIT
            - OIL_AND_GAS
            - ONLINE
            - PROFESSIONAL_SERVICES
            - RAW_MATERIALS
            - REAL_ESTATE
            - RELIGION
            - RETAIL
            - TECHNOLOGY
            - TELECOMMUNICATIONS
            - TRANSPORTATION
            - TRAVEL
        registration_type:
          type: string
          enum:
            - EIN
            - CBN
            - CN
            - ACN
            - CIN
            - VAT
            - VATRN
            - RN
            - Other
        registration_number:
          type: string
          minLength: 2
          maxLength: 64
        website:
          type: string
          maxLength: 2048
          format: uri
        regions:
          minItems: 1
          maxItems: 5
          type: array
          items:
            type: string
            enum:
              - AFRICA
              - ASIA
              - EUROPE
              - LATIN_AMERICA
              - USA_AND_CANADA
        company_type:
          type: string
          enum:
            - private
            - public
            - non-profit
            - government
        stock_exchange:
          default: ''
          type: string
          minLength: 0
          maxLength: 20
        stock_ticker:
          default: ''
          type: string
          minLength: 0
          maxLength: 20
        brand_contact_email:
          default: ''
          anyOf:
            - type: string
              maxLength: 254
              format: email
              pattern: >-
                ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
            - type: string
              enum:
                - ''
        volume:
          type: string
          enum:
            - low
            - standard
        use_case:
          type: string
          enum:
            - LOW_VOLUME
            - 2FA
            - ACCOUNT_NOTIFICATION
            - CUSTOMER_CARE
            - DELIVERY_NOTIFICATION
            - FRAUD_ALERT
            - HIGHER_EDUCATION
            - MARKETING
            - MIXED
            - POLLING_VOTING
            - PUBLIC_SERVICE_ANNOUNCEMENT
            - SECURITY_ALERT
        representative_first_name:
          type: string
          minLength: 1
          maxLength: 100
        representative_last_name:
          type: string
          minLength: 1
          maxLength: 100
        representative_email:
          type: string
          maxLength: 254
          format: email
          pattern: >-
            ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
        representative_phone:
          type: string
          pattern: ^\+[1-9]\d{7,14}$
        representative_title:
          type: string
          minLength: 2
          maxLength: 100
        representative_position:
          type: string
          enum:
            - Director
            - GM
            - VP
            - CEO
            - CFO
            - General Counsel
            - Other
        street:
          type: string
          minLength: 2
          maxLength: 100
        city:
          type: string
          minLength: 2
          maxLength: 100
        region:
          type: string
          minLength: 1
          maxLength: 100
        postal_code:
          type: string
          minLength: 2
          maxLength: 20
        country:
          type: string
          pattern: ^[A-Z]{2}$
        campaign_description:
          type: string
          minLength: 40
          maxLength: 4096
        message_flow:
          type: string
          minLength: 40
          maxLength: 2048
        message_samples:
          minItems: 2
          maxItems: 5
          type: array
          items:
            type: string
            minLength: 20
            maxLength: 1024
        privacy_policy_url:
          type: string
          maxLength: 2048
          format: uri
        terms_url:
          type: string
          maxLength: 2048
          format: uri
        has_links:
          type: boolean
        has_phone_numbers:
          type: boolean
        age_gated:
          type: boolean
        direct_lending:
          type: boolean
        consent_confirmed:
          type: boolean
          enum:
            - true
      required:
        - legal_name
        - business_type
        - industry
        - registration_type
        - registration_number
        - website
        - regions
        - company_type
        - stock_exchange
        - stock_ticker
        - brand_contact_email
        - volume
        - use_case
        - representative_first_name
        - representative_last_name
        - representative_email
        - representative_phone
        - representative_title
        - representative_position
        - street
        - city
        - region
        - postal_code
        - country
        - campaign_description
        - message_flow
        - message_samples
        - privacy_policy_url
        - terms_url
        - has_links
        - has_phone_numbers
        - age_gated
        - direct_lending
        - consent_confirmed
      additionalProperties: false
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API key
      description: >-
        API key (`fam_...`, created under **Settings → API Keys**) or an OAuth
        2.0 access token (`fam_at_...`). REST operations also require API Access
        for the credential's workspace. Keys can be restricted to scopes such as
        `assistants:read`, `calls:write`, `campaigns:write`, `automations:read`,
        `dashboards:read`, `dashboards:write`, `leads:write`, `segments:write`,
        `loop:read`, `loop:write`, `phone_numbers:write`, `sip_trunks:write`,
        `knowledge:write`, `voices:read`, `billing:read`, `billing:write`,
        `settings:write`, `platform:read`, `platform:write`; a `*:write` scope
        implies the matching `*:read`. Automation and dashboard endpoints also
        accept the legacy `calls:*` scope. Keys without scope restrictions have
        full access within the workspace's available capabilities.

````