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

# Add website knowledge

> Adds a page to the receptionist's knowledge. Allo scrapes and summarizes it during the request, so the call takes a few seconds. Up to 5 websites per receptionist.

<Note>
  **Required scope:** `AGENTS_WRITE`
</Note>

## Behavior

Adds a page to the receptionist's knowledge. Allo scrapes it and summarizes it during the request, so this call takes a few seconds and returns `201` with the entry once the page has been read.

Send an absolute `http(s)` URL of a publicly reachable page. A receptionist holds up to 5 websites, and the same URL cannot be added twice.

The response never carries the scraped text. That text is what the receptionist reads, not something you configure.

Point it at the page that carries the answers, not at the site root. Only the page you send is read.

## Errors

* `400 INVALID_KNOWLEDGE_URL`: the URL is malformed or cannot be scraped.
* `409 AGENT_KNOWLEDGE_ALREADY_EXISTS`: this receptionist already has an entry for that URL.
* `409 AGENT_KNOWLEDGE_LIMIT_REACHED`: the receptionist already holds 5 websites. Delete one first.
* `500 AGENT_KNOWLEDGE_SCRAPE_FAILED`: the page could not be read. This one is retryable, so try again in a few seconds and check the page is publicly reachable.
* `404 PHONE_NUMBER_NOT_FOUND`: the number is not one you have access to.


## OpenAPI

````yaml POST /v2/api/numbers/{number}/agent/knowledge/websites
openapi: 3.0.3
info:
  title: Allo API
  description: >-
    Allo API provides programmatic access to your Allo account, allowing you to
    manage webhooks, retrieve calls and contacts, and send SMS messages.


    All requests to `/v1/api/**` endpoints automatically go through quota
    checking and scope validation.
  version: 1.0.0
  contact:
    name: Allo Support
servers:
  - url: https://api.withallo.com
    description: Production server
security: []
tags:
  - name: Summary Templates
    description: >-
      Manage call summary templates that control how AI-generated call summaries
      are structured for your team.
  - name: Webhooks
    description: >-
      Manage webhook endpoints to receive real-time notifications about events
      in your Allo account. Each endpoint subscribes to one or more event topics
      and is verified with a signing secret.
  - name: Calls
    description: >-
      Retrieve and search call records with filtering and pagination. Filter
      calls by your Allo phone number.
  - name: Contacts
    description: >-
      Search and retrieve contact information with sorting and pagination.
      Includes engagement level tracking.
  - name: SMS
    description: Send SMS messages to phone numbers using your Allo numbers.
  - name: Phone Numbers
    description: Retrieve information about your Allo phone numbers.
  - name: Analytics
    description: Pre-computed call metrics, team performance, and outbound dial funnel
  - name: CRM
    description: Manage people, companies, and deals in your CRM.
  - name: Notes
    description: >-
      Internal team notes on conversations and CRM people, with @mention
      support. Notes are never visible to the contact.
  - name: Threads
    description: >-
      Team discussion threads attached to a conversation item (call, SMS, or
      conversation note). One thread per item.
  - name: AI Receptionist
    description: >-
      Read and write the AI receptionist configuration of a phone line: business
      details, voice, prompt, capabilities, business hours, transfer rules,
      scheduling calendars and knowledge sources.
paths:
  /v2/api/numbers/{number}/agent/knowledge/websites:
    post:
      tags:
        - AI Receptionist
      summary: Add website knowledge
      description: >-
        Adds a page to the receptionist's knowledge. Allo scrapes and summarizes
        it during the request, so the call takes a few seconds. Up to 5 websites
        per receptionist.
      operationId: addAgentWebsiteKnowledge
      parameters:
        - name: number
          in: path
          required: true
          description: Allo phone number in E.164 format
          schema:
            type: string
            example: '+14155551234'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - url
              properties:
                url:
                  type: string
                  description: An absolute http(s) URL of a publicly reachable page.
                  example: https://acme.test/pricing
      responses:
        '201':
          description: The entry that was created
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/AgentWebsiteKnowledge'
        '400':
          $ref: '#/components/responses/ApiValidationError'
        '401':
          $ref: '#/components/responses/ApiUnauthorized'
        '403':
          $ref: '#/components/responses/ApiForbidden'
        '404':
          $ref: '#/components/responses/ApiNotFound'
        '409':
          $ref: '#/components/responses/ApiConflict'
        '429':
          $ref: '#/components/responses/ApiRateLimited'
      security:
        - ApiKeyAuth: []
components:
  schemas:
    AgentWebsiteKnowledge:
      type: object
      description: >-
        A page Allo scraped and summarized for the receptionist to answer from.
        The scraped text itself is not reported: it is what the receptionist
        reads, not something you configure.
      properties:
        id:
          type: string
          example: wkb-abc123
        url:
          type: string
          example: https://acme.test/pricing
        status:
          type: string
          enum:
            - ACTIVE
            - DISABLED
          description: >-
            `DISABLED` keeps the entry and its scraped text, and stops the
            receptionist using it.
        created_at:
          type: string
          format: date-time
          nullable: true
        updated_at:
          type: string
          format: date-time
          nullable: true
    ApiError:
      type: object
      properties:
        error:
          type: object
          properties:
            type:
              type: string
            code:
              type: string
            message:
              type: string
            retryable:
              type: boolean
            request_id:
              type: string
            retry_after_seconds:
              type: integer
              nullable: true
  responses:
    ApiValidationError:
      description: Invalid request parameters
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
    ApiUnauthorized:
      description: Invalid or missing API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
    ApiForbidden:
      description: API key lacks the required scope or access to the resource
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
    ApiNotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
    ApiConflict:
      description: Conflict with existing resource
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
    ApiRateLimited:
      description: Rate limit exceeded
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: Authorization

````