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

# Update a number

> Partial: an omitted field is untouched, and a field sent as null clears it where the column is nullable.



## OpenAPI

````yaml /api-reference/openapi-public.json patch /dids/{id}
openapi: 3.0.3
info:
  description: >-
    The API your own systems use: place and follow calls, have an AI agent call
    someone, run campaigns and get their results, keep contacts in step with
    your CRM, and receive signed webhooks. Authenticate with an integration key
    (Authorization: Bearer ft_...), used only from the IP addresses it allows.
  title: FireTone API
  version: 0.1.0
servers:
  - description: Your platform's API host
    url: https://{host}/api/v1
    variables:
      host:
        default: api.firet.one
security:
  - bearerAuth: []
tags:
  - name: Auth
  - description: >-
      Live calls and what can be done to them: hang up, hold, transfer, park,
      merge, monitor, whisper; the Desk's own call.
    name: Calls
  - description: 'Outbound campaigns: contacts, attempts, outcomes.'
    name: Campaigns
  - description: 'Customers: who called, what is known about them, and their memory.'
    name: Contacts
  - description: What was said on an AI call, and the review of it.
    name: Conversations
  - name: IVR
  - description: >-
      Your own systems: HTTP connections an IVR calls mid-call, and webhooks for
      call events. Tenant URLs must be public https addresses.
    name: Integrations
  - name: Live
  - name: Provisioning
  - name: Reporting
  - description: Tickets raised by people, agents and the API.
    name: Tickets
  - description: Messages left for an extension or a queue.
    name: Voicemail
paths:
  /dids/{id}:
    patch:
      tags:
        - Provisioning
      summary: Update a number
      description: >-
        Partial: an omitted field is untouched, and a field sent as null clears
        it where the column is nullable.
      operationId: patchDidsId
      parameters:
        - in: path
          name: id
          required: true
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateDIDRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DID'
          description: OK
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
components:
  schemas:
    UpdateDIDRequest:
      description: >-
        All fields optional. destination_id is validated against
        destination_type and the owning organisation, because the column has no
        foreign key.
      properties:
        destination_id:
          description: >-
            The id of the extension, queue, IVR flow, process, room or client
            trunk the number goes to. Must belong to the number's organisation.
            Not used for `external`.
          format: uuid
          nullable: true
          type: string
        destination_type:
          description: >-
            Where the number's calls go: `extension` (a phone), `queue`, `flow`
            (an IVR), `process`, `conference` (a room), `external` (forwarded to
            another number), `client_trunk` (a client's own PBX; only where that
            module is on) or `recorder`.
          enum:
            - extension
            - queue
            - external
            - flow
            - process
            - recorder
            - conference
            - client_trunk
          type: string
        destination_value:
          description: >-
            For `external`: the number to forward to, normalised to E.164. For
            `extension`: the extension number, as an alternative to
            `destination_id`.
          nullable: true
          type: string
        enabled:
          description: >-
            Whether the number is in service. A disabled number's calls are
            refused.
          type: boolean
        monthly_rental:
          description: >-
            Exact decimal amount as a string. Never a JSON number: rates are
            fractions of a cent and binary floating point cannot represent them
            exactly.
          example: '12.5000'
          type: string
        team_id:
          description: >-
            The team the number belongs to, if any; a team supervisor sees only
            their teams' numbers.
          format: uuid
          nullable: true
          type: string
        trunk_id:
          description: The trunk this number arrives on, when it is pinned to one.
          format: uuid
          nullable: true
          type: string
      type: object
    DID:
      properties:
        destination_id:
          description: >-
            The id of the extension, queue, IVR flow, process, room or client
            trunk the number goes to. Must belong to the number's organisation.
            Not used for `external`.
          format: uuid
          nullable: true
          type: string
        destination_type:
          description: >-
            Where the number's calls go: `extension` (a phone), `queue`, `flow`
            (an IVR), `process`, `conference` (a room), `external` (forwarded to
            another number), `client_trunk` (a client's own PBX; only where that
            module is on) or `recorder`.
          enum:
            - extension
            - queue
            - external
            - flow
            - process
            - recorder
            - conference
            - client_trunk
          type: string
        destination_value:
          description: >-
            For `external`: the number to forward to, normalised to E.164. For
            `extension`: the extension number, as an alternative to
            `destination_id`.
          nullable: true
          type: string
        e164:
          description: The number, in E.164 form with the plus.
          example: '+61300000001'
          type: string
        enabled:
          description: >-
            Whether the number is in service. A disabled number's calls are
            refused.
          type: boolean
        id:
          description: The number's id.
          format: uuid
          type: string
        monthly_rental:
          description: >-
            Exact decimal amount as a string. Never a JSON number: rates are
            fractions of a cent and binary floating point cannot represent them
            exactly.
          example: '12.5000'
          type: string
        organisation_id:
          description: >-
            The organisation the number belongs to. May be left out by a caller
            with exactly one organisation.
          format: uuid
          type: string
        team_id:
          description: >-
            The team the number belongs to, if any; a team supervisor sees only
            their teams' numbers.
          format: uuid
          nullable: true
          type: string
        trunk_id:
          description: The trunk this number arrives on, when it is pinned to one.
          format: uuid
          type: string
      required:
        - id
        - organisation_id
        - e164
        - destination_type
        - enabled
      type: object
    Error:
      properties:
        error:
          properties:
            code:
              enum:
                - invalid_request
                - invalid_credentials
                - unauthenticated
                - forbidden
                - not_found
                - conflict
                - internal
              type: string
            message:
              type: string
          required:
            - code
            - message
          type: object
      required:
        - error
      type: object
  responses:
    BadRequest:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      description: The request is not valid. The message names every field that is wrong.
    Unauthorized:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      description: Missing, invalid or expired token
    Forbidden:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      description: Outside the caller's scope, or insufficient role
    NotFound:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      description: Not found, or not visible to the caller
    Conflict:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      description: >-
        The row is still referenced, or a unique value is taken. The message
        names what still points at it.
  securitySchemes:
    bearerAuth:
      bearerFormat: JWT or API key
      description: >-
        Every request sends `Authorization: Bearer <token>`. The token is either
        a panel session (a JWT from /auth/login, 12 hours) or an API key
        `ft_<id>_<secret>`. An API key is accepted only from an address on its
        IP allowlist (403 ip_not_allowed otherwise; 403 ip_allowlist_required
        for an old key that has none), is limited to its rate per minute (429
        rate_limited with Retry-After; X-RateLimit-Limit/Remaining/Reset on
        every response), and at most 60 call placements a minute.
      scheme: bearer
      type: http

````

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