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

# Set company sender test numbers

> Replace the list of up to five personal mobile numbers that can exchange RCS messages with this company sender while it awaits network approval. Works in every status except canceled. Before a number receives messages, the support team registers it as a test device and its owner accepts the invitation on that phone. Messages to and from test numbers use RCS only, without SMS fallback, reach the sender's default connection and its assistant, and are charged like other RCS messages. Other recipients stay blocked until approval. Workspace phone numbers cannot be test numbers. **Required scope:** `phone_numbers:write`.



## OpenAPI

````yaml /api-reference/openapi.json put /sms/rcs/senders/{id}/test-numbers
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 transaction ledger of the API key's workspace.
  - name: Automations
    description: >-
      Native workspace automations — list, create, update, trigger. Requires
      Automations in the workspace plan.
  - 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 Custom dashboards in the workspace plan.
  - 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.
  - name: Milian
    description: >-
      Ask Milian, the AI co-worker in your workspace, and start voice sessions
      with it.
  - name: Translation
    description: >-
      Live translation sessions that interpret a conversation between two
      languages.
  - name: Shopify
    description: Native Shopify app store connections, assistant tools and activity.
  - name: Avatars
    description: Private custom avatars and widget avatar selection.
  - name: Webhook Subscriptions
    description: >-
      Signed workspace event subscriptions, independent of existing
      destinations.
paths:
  /sms/rcs/senders/{id}/test-numbers:
    parameters:
      - name: id
        in: path
        required: true
        description: Company sender ID in the authenticated workspace.
        schema:
          type: string
          format: uuid
    put:
      tags:
        - SMS
      summary: Set company sender test numbers
      description: >-
        Replace the list of up to five personal mobile numbers that can exchange
        RCS messages with this company sender while it awaits network approval.
        Works in every status except canceled. Before a number receives
        messages, the support team registers it as a test device and its owner
        accepts the invitation on that phone. Messages to and from test numbers
        use RCS only, without SMS fallback, reach the sender's default
        connection and its assistant, and are charged like other RCS messages.
        Other recipients stay blocked until approval. Workspace phone numbers
        cannot be test numbers. **Required scope:** `phone_numbers:write`.
      operationId: setSmsRcsSenderTestNumbers
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                test_numbers:
                  type: array
                  maxItems: 5
                  items:
                    type: string
                    minLength: 1
                    maxLength: 32
                    description: >-
                      Personal mobile number in international format, for
                      example +4915112345678.
                  description: >-
                    Complete list of up to five personal mobile numbers in
                    international format. Replaces the saved list; an empty list
                    removes all test numbers.
                expected_updated_at:
                  type: string
                  format: date-time
                  description: >-
                    Update time of the sender you read. The change is rejected
                    if the sender changed since.
              required:
                - test_numbers
      responses:
        '200':
          description: Set company sender test numbers.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/SmsRcsSender'
                required:
                  - data
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: Application changed. Read current state before retrying.
        '429':
          $ref: '#/components/responses/RateLimited'
        '503':
          $ref: '#/components/responses/RequestProtectionUnavailable'
components:
  schemas:
    SmsRcsSender:
      type: object
      additionalProperties: false
      properties:
        id:
          type: string
          format: uuid
          description: Company sender ID.
        profile:
          $ref: '#/components/schemas/SmsRcsProfile'
        details:
          $ref: '#/components/schemas/SmsRcsReviewDetails'
        countries:
          type: array
          items:
            type: string
            pattern: ^[A-Z]{2}$
          description: Requested recipient country codes.
        status:
          type: string
          description: >-
            Application state. Paid or submitted does not establish production
            approval.
          enum:
            - draft
            - submitted
            - platform_review
            - provider_review
            - action_required
            - approved
            - rejected
            - suspended
            - canceled
        timeline:
          type: array
          items:
            type: object
            additionalProperties: false
            properties:
              status:
                type: string
                description: Recorded state.
                enum:
                  - draft
                  - submitted
                  - platform_review
                  - provider_review
                  - action_required
                  - approved
                  - rejected
                  - suspended
                  - canceled
              message:
                type: string
                description: Customer-facing next-step guidance.
              created_at:
                type: string
                description: Event time.
                format: date-time
            required:
              - status
              - message
              - created_at
          description: Recorded application progress.
        review_note:
          type:
            - string
            - 'null'
          description: Corrections or next steps requested during review.
        setup_credits_charged:
          type: number
          minimum: 0
          description: Once-only setup credits charged for this sender.
        setup_charged_at:
          type:
            - string
            - 'null'
          format: date-time
          description: Time the setup charge committed.
        default_connector_id:
          type:
            - string
            - 'null'
          format: uuid
          description: Default SMS connector for new incoming RCS contacts.
        assistant_id:
          type:
            - string
            - 'null'
          format: uuid
          description: Assigned assistant.
        linked_phone_number_ids:
          type: array
          items:
            type: string
            format: uuid
          description: Owned associated numbers. Additional numbers do not buy setup again.
        test_numbers:
          type: array
          maxItems: 5
          items:
            type: string
            pattern: ^\+[1-9][0-9]{4,14}$
          description: >-
            Personal mobile numbers that can exchange RCS messages with this
            sender while it awaits network approval. Each must also be
            registered as a test device by the support team.
        ready:
          type: boolean
          description: Whether approval and required routing have actually been verified.
        created_at:
          type: string
          description: Creation time.
          format: date-time
        updated_at:
          type: string
          description: Last update time used for concurrent-edit protection.
          format: date-time
      required:
        - id
        - profile
        - details
        - countries
        - status
        - timeline
        - review_note
        - setup_credits_charged
        - setup_charged_at
        - default_connector_id
        - assistant_id
        - linked_phone_number_ids
        - test_numbers
        - ready
        - created_at
        - updated_at
    SmsRcsProfile:
      type: object
      additionalProperties: false
      properties:
        name:
          type: string
          description: Company display name shown to recipients.
          minLength: 1
          maxLength: 100
        description:
          type: string
          description: What messages recipients receive.
          maxLength: 100
          default: ''
        use_case:
          type: string
          description: Truthful messaging purpose; cannot change after launch.
          enum:
            - PROMOTIONAL
            - TRANSACTIONAL
            - OTP
            - MULTI_USE
          default: MULTI_USE
        logo_url:
          type: string
          description: >-
            Company logo: 224×224 pixels, at most 50 KB, PNG/JPEG. Public HTTPS
            URL; may be empty while preparing a draft.
          maxLength: 2048
        banner_url:
          type: string
          description: >-
            Company banner: 1440×448 pixels, at most 200 KB, PNG/JPEG. Public
            HTTPS URL; may be empty while preparing a draft.
          maxLength: 2048
        accent_color:
          type: string
          description: Company accent color with sufficient contrast against white.
          pattern: ^#[0-9a-fA-F]{6}$
          default: '#00596B'
        website_url:
          type: string
          description: >-
            Company website. Public HTTPS URL; may be empty while preparing a
            draft.
          maxLength: 2048
        support_email:
          type: string
          description: Support email address, or empty in a draft.
        support_phone:
          type: string
          description: Support phone number in E.164, or empty in a draft.
          maxLength: 20
        privacy_policy_url:
          type: string
          description: >-
            Public privacy policy. Public HTTPS URL; may be empty while
            preparing a draft.
          maxLength: 2048
        terms_url:
          type: string
          description: >-
            Public messaging terms. Public HTTPS URL; may be empty while
            preparing a draft.
          maxLength: 2048
      required:
        - name
      description: >-
        Company identity shown on RCS messages. Saving a profile does not grant
        approval.
    SmsRcsReviewDetails:
      type: object
      additionalProperties: false
      properties:
        legal_name:
          type: string
          description: Registered legal business name.
          maxLength: 200
        representative_name:
          type: string
          description: Authorized company representative.
          maxLength: 200
        representative_email:
          type: string
          description: Authorized representative email address, or empty in a draft.
        opt_in_url:
          type: string
          description: >-
            Actual opt-in process or evidence. Public HTTPS URL; may be empty
            while preparing a draft.
          maxLength: 2048
        opt_in_description:
          type: string
          description: How recipients explicitly consent to these messages.
          maxLength: 4000
        opt_out_description:
          type: string
          description: Working opt-out process including STOP handling.
          maxLength: 4000
        video_url:
          type: string
          description: >-
            Video demonstrating the actual messaging and consent flow. Public
            HTTPS URL; may be empty while preparing a draft.
          maxLength: 2048
        sample_messages:
          type: array
          maxItems: 5
          items:
            type: string
            description: Truthful message example.
            minLength: 1
            maxLength: 1600
          description: >-
            Representative messages with company identity and opt-out
            instructions; never invent consent evidence.
        estimated_monthly_messages:
          type: integer
          minimum: 0
          maximum: 1000000000
          description: Expected monthly volume.
      description: >-
        Company-owned evidence used for review; complete required details before
        submission.
    ErrorEnvelope:
      type: object
      description: Error envelope returned by every /api/v1 endpoint on failure.
      required:
        - error
      properties:
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
              enum:
                - unauthorized
                - forbidden
                - api_access_required
                - not_found
                - invalid_request
                - rate_limited
                - conflict
                - telephony_configuration_error
                - telephony_unavailable
                - destination_forbidden
                - internal_error
                - service_unavailable
                - verification_address_required
                - bundle_address_missing
              description: >-
                Stable, machine-readable error code. `service_unavailable` is
                returned by POST /bookings and GET
                /booking-event-types/{id}/slots specifically when the
                availability engine could not be reached (see
                AvailabilityOrProtectionUnavailable).
                `verification_address_required` and `bundle_address_missing` are
                returned by POST /phone-numbers when the verification behind the
                number has no address (see the operation description).
            message:
              type: string
              description: Human-readable description of the error.
            reason:
              type: string
              description: >-
                Optional, more specific and stable reason for this error, for
                example `plan_required`, `read_only_role` or `missing_scope`.
                Branch on `code` first: `reason` is only present on some errors,
                and new values may be added.
            hint:
              type: string
              description: >-
                Optional recovery advice that is safe to show to the end user,
                for example which settings page to open.
  responses:
    BadRequest:
      description: Invalid request body or parameters.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
          example:
            error:
              code: invalid_request
              message: '"to_number" is required (E.164 format, e.g. +4930123456).'
    Unauthorized:
      description: Missing, invalid, expired or revoked API key / access token.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
          example:
            error:
              code: unauthorized
              message: Invalid API key.
    Forbidden:
      description: >-
        The credential lacks the required scope or role, or the workspace does
        not have the required capability.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
          examples:
            scopeDenied:
              summary: Required scope is missing
              value:
                error:
                  code: forbidden
                  message: >-
                    This API key is missing the required scope
                    "assistants:write".
            apiAccessRequired:
              summary: API Access is not available
              value:
                error:
                  code: api_access_required
                  message: >-
                    API Access is not available for this workspace. Review
                    Settings → Plan.
    NotFound:
      description: Resource not found (or it belongs to another workspace).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
          example:
            error:
              code: not_found
              message: Assistant not found
    RateLimited:
      description: Too many requests. Retry after the indicated delay.
      headers:
        Retry-After:
          description: Seconds to wait before retrying.
          schema:
            type: integer
            minimum: 1
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
          example:
            error:
              code: rate_limited
              message: Too many requests. Retry after the indicated delay.
    RequestProtectionUnavailable:
      description: Request protection is temporarily unavailable.
      headers:
        Retry-After:
          description: Seconds to wait before retrying.
          schema:
            type: integer
            minimum: 1
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
          example:
            error:
              code: internal_error
              message: Request protection is temporarily unavailable.
  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.

````

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