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

# Change a number's after-hours instructions and business hours

> Partial patch of two settings of one number the tenant still holds, given in E.164 (`+15550100000`; the `+` may be left out). A field left out keeps its stored value. `after_hours_instructions` replace the number's custom instructions on calls that start outside business hours, on a non-work day or on a holiday; null or an empty string turns them off. `business_hours.override` sets the number's own work days and one window (`HH:MM`, in the tenant's time zone, not past midnight); null returns to the tenant's business hours from Settings, Monday to Friday. `business_hours.holiday_source` is `COUNTRY` (the default: public holidays of the number's country, England for UK numbers) or `NONE`. Any other field is rejected with 400; change the other settings in the dashboard. Returns the updated number. 404 `phone_number_not_found` for a number the tenant does not hold.



## OpenAPI

````yaml https://api.neoagent.io/public-api/openapi.json patch /public-api/phone/numbers/{number}
openapi: 3.1.0
info:
  description: >-
    Neo's public contract for the dashboard ChatAgent, partner integrations, and
    MSP automation. Every response is wrapped in a `{data, meta}` envelope;
    errors use `{error: {code, message, details?}, meta: {request_id}}`.
    Authenticate with a `Bearer neo_sk_<env>_<secret>` API key (service account)
    or a Microsoft Entra ID JWT (dashboard user). Signed-URL endpoints (end-user
    feedback links) take a `signature` query parameter instead.
  title: Neo Public API
  version: 1.0.0
servers:
  - url: https://api.neoagent.io
security: []
tags:
  - description: Service metadata — health, OpenAPI.
    name: Meta
  - description: Agents and workflows — read, version history, delete, stats.
    name: Agents
  - description: Agent/workflow execution history, sub-resources, retry/cancel.
    name: Executions
  - description: >-
      Every tool call the tenant's agents made in the last 30 days, within the
      caller's workflow access.
    name: Audit Log
  - description: PSA webhook events and their workflow-match results.
    name: Callbacks
  - description: Technician-in-the-loop approval requests.
    name: TIL requests
  - description: RMM script executions triggered by agents.
    name: RMM scripts
  - description: Dispatch-agent field-update decisions.
    name: Dispatch
  - description: The authenticated tenant.
    name: Tenant
  - description: Agent-builder schema catalogs (raw JSON payloads).
    name: Schemas
  - description: Escalate to the Neo team (HubSpot ticket).
    name: Escalation
  - description: Tenant settings.
    name: Settings
  - description: Tenant API-key management (dashboard JWT only).
    name: API keys
  - description: End-user feedback links (signed-URL auth).
    name: Feedback
  - description: End-client companies (CRUD + bulk-update).
    name: End companies
  - description: Channels — bind a CONVERSATIONAL agent to a transport (Teams or Slack).
    name: Channels
  - description: PSA/RMM/M365 integration status and connection management.
    name: Integrations
  - description: Technician roster (controls TIL routing and paging).
    name: Technicians
  - description: Future runs queued for TRIGGERED agents.
    name: Scheduled work
  - description: Subscription state and customer-facing credit usage (no provider $).
    name: Billing
  - description: Inbox messages and announcements.
    name: Inbox & Comms
  - description: Tenant-authored agent skills (CRUD) and the built-in skill catalog.
    name: Skills
paths:
  /public-api/phone/numbers/{number}:
    patch:
      tags:
        - Phone Agent
      summary: Change a number's after-hours instructions and business hours
      description: >-
        Partial patch of two settings of one number the tenant still holds,
        given in E.164 (`+15550100000`; the `+` may be left out). A field left
        out keeps its stored value. `after_hours_instructions` replace the
        number's custom instructions on calls that start outside business hours,
        on a non-work day or on a holiday; null or an empty string turns them
        off. `business_hours.override` sets the number's own work days and one
        window (`HH:MM`, in the tenant's time zone, not past midnight); null
        returns to the tenant's business hours from Settings, Monday to Friday.
        `business_hours.holiday_source` is `COUNTRY` (the default: public
        holidays of the number's country, England for UK numbers) or `NONE`. Any
        other field is rejected with 400; change the other settings in the
        dashboard. Returns the updated number. 404 `phone_number_not_found` for
        a number the tenant does not hold.
      operationId: public_api.phone_number_update_patch
      parameters:
        - in: path
          name: number
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicAfterHoursUpdate'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  data:
                    $ref: '#/components/schemas/PublicPhoneNumber'
                  meta:
                    $ref: '#/components/schemas/SuccessMeta'
                required:
                  - data
                  - meta
                type: object
          description: Success.
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          description: Bad request — malformed input.
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          description: Unauthenticated — missing or invalid credentials.
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          description: Forbidden — authenticated but not allowed.
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          description: Not found.
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          description: Conflict — the resource is in a state that blocks this operation.
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          description: Request validation failed.
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          description: Rate limited — see Retry-After.
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          description: Internal server error.
      security:
        - bearerAuth: []
components:
  schemas:
    PublicAfterHoursUpdate:
      description: >-
        A change to a number's after-hours instructions or business hours. A
        field left out keeps

        its stored value.
      properties:
        after_hours_instructions:
          anyOf:
            - type: string
            - type: 'null'
          default: null
          description: >-
            Used in place of the number's custom instructions on calls that
            start outside business hours or on a holiday. Send null or an empty
            string to turn them off.
          title: After Hours Instructions
        business_hours:
          anyOf:
            - $ref: '#/components/schemas/PublicBusinessHoursUpdate'
            - type: 'null'
          default: null
      title: PublicAfterHoursUpdate
      type: object
    PublicPhoneNumber:
      description: >-
        Public projection of a `phone_numbers` row.


        `psa_settings` and `agent_settings` are returned as opaque JSON — their

        inner shapes (which PSA action to take on missing customer, which voice

        profile, which custom prompt) are tenant-curated and not part of the
        public

        contract. Anyone wanting to edit them goes through the dashboard.


        `agent_settings.attached_memory_ids` lists the ids of the MSP-wide
        memories

        attached to the number, which the agent reads on every call, except one

        that was deleted or no longer fits the 4,000-character total. A call
        uses

        the newest edit of each, so an id can name an older version.
      properties:
        agent_settings:
          additionalProperties: true
          title: Agent Settings
          type: object
        country:
          $ref: '#/components/schemas/CountryCode'
        created_at:
          format: date-time
          title: Created At
          type: string
        id:
          title: Id
          type: integer
        minutes_used_this_month:
          anyOf:
            - type: integer
            - type: 'null'
          title: Minutes Used This Month
        number:
          title: Number
          type: string
        psa_settings:
          additionalProperties: true
          title: Psa Settings
          type: object
        status:
          $ref: '#/components/schemas/PhoneNumberStatus'
        updated_at:
          format: date-time
          title: Updated At
          type: string
      required:
        - id
        - number
        - country
        - status
        - minutes_used_this_month
        - psa_settings
        - agent_settings
        - created_at
        - updated_at
      title: PublicPhoneNumber
      type: object
    SuccessMeta:
      properties:
        pagination:
          $ref: '#/components/schemas/Pagination'
        request_id:
          format: uuid
          type: string
        timings_ms:
          additionalProperties:
            type: number
          type: object
        warnings:
          description: >-
            Non-fatal warnings about the created/updated resource (e.g. an
            unhealthy PSA callback).
          items:
            type: string
          type: array
      required:
        - request_id
        - timings_ms
      type: object
    ErrorEnvelope:
      properties:
        error:
          properties:
            code:
              description: Stable machine-readable error code.
              type: string
            details:
              additionalProperties: true
              type: object
            message:
              type: string
          required:
            - code
            - message
          type: object
        meta:
          properties:
            request_id:
              format: uuid
              type:
                - string
                - 'null'
          type: object
      required:
        - error
        - meta
      type: object
    PublicBusinessHoursUpdate:
      description: The business hours to change. A field left out keeps its stored value.
      properties:
        holiday_source:
          anyOf:
            - enum:
                - NONE
                - COUNTRY
              type: string
            - type: 'null'
          default: null
          description: >-
            `COUNTRY` (the default): the public holidays of the number's country
            count as outside business hours all day; UK numbers use the holidays
            of England. `NONE`: no holidays.
          title: Holiday Source
        override:
          anyOf:
            - $ref: '#/components/schemas/PublicBusinessHoursOverride'
            - type: 'null'
          default: null
          description: >-
            This number's own hours. Send null to use the tenant's business
            hours and time zone from Settings, Monday to Friday.
      title: PublicBusinessHoursUpdate
      type: object
    CountryCode:
      enum:
        - - US
          - '+1'
          - null
          - null
        - - CA
          - '+1'
          - null
          - null
        - - GB
          - '+44'
          - BUd29cd8d0f57893ad3311964d784dc9a1
          - AD231ece3809334da636dd351b9f2fdf60
        - - NL
          - '+31'
          - null
          - AD3e3f88b6d5277d90f9a5b3946c8f6b4c
        - - AU
          - '+61'
          - null
          - AD2959da1db1ac1fc0bd2019c9baa658dc
        - - NZ
          - '+64'
          - BUa773bd090fba6fdd9af485916160888b
          - ADdf8429724400c2873c9b7d3874215410
      title: CountryCode
      type: array
    PhoneNumberStatus:
      description: >-
        What a phone number is doing, and who decided it.


        ACTIVE and INACTIVE belong to the customer. INACTIVE means they switched
        the number off

        themselves and can switch it back on whenever they like; it stays
        theirs.


        SUSPENDED belongs to Neo. Nothing is paying for the number, so it stops
        taking calls — but

        Neo keeps it for a short while, and paying again brings it straight back
        with the same

        number. A customer cannot switch a suspended number on themselves.


        RELEASED belongs to Neo, and it is final. The number has been given back
        to the carrier,

        which returns it to a public pool where anyone may buy it. Nothing
        brings a released number

        back; a customer who returns gets a new number.


        RELEASING belongs to the customer's admin, who deleted the agent. The
        number takes

        no calls, leaves their list, and nothing switches it back on; the
        reconciliation gives it to

        the carrier on its next pass and marks it RELEASED. A separate state,
        because RELEASED must

        mean the carrier already has the number.
      enum:
        - ACTIVE
        - INACTIVE
        - SUSPENDED
        - RELEASING
        - RELEASED
      title: PhoneNumberStatus
      type: string
    Pagination:
      properties:
        has_more:
          type: boolean
        next_cursor:
          type:
            - string
            - 'null'
      required:
        - next_cursor
        - has_more
      type: object
    PublicBusinessHoursOverride:
      description: >-
        Business hours of this number in place of the tenant's: the days it is
        open, and one window

        in the tenant's time zone. The window cannot run past midnight.
      properties:
        end_time:
          description: Closing time, 24-hour `HH:MM`, later than `start_time`.
          title: End Time
          type: string
        start_time:
          description: Opening time, 24-hour `HH:MM`, for example `08:30`.
          title: Start Time
          type: string
        work_days:
          description: The days the number is open. At least one.
          items:
            enum:
              - MONDAY
              - TUESDAY
              - WEDNESDAY
              - THURSDAY
              - FRIDAY
              - SATURDAY
              - SUNDAY
            type: string
          title: Work Days
          type: array
      required:
        - work_days
        - start_time
        - end_time
      title: PublicBusinessHoursOverride
      type: object
  securitySchemes:
    bearerAuth:
      description: >-
        `Authorization: Bearer <token>` where `<token>` is either a
        `neo_sk_<env>_<secret>` API key (service account) or a Microsoft Entra
        ID access token (dashboard user).
      scheme: bearer
      type: http

````

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