---
title: "Create and crawl a managed knowledge website"
method: POST
path: "/knowledge/websites"
---

# Create and crawl a managed knowledge website

`POST /knowledge/websites`

## Request

- Base URL: `https://platform-api.visitoai.com/m2m/v1`
- URL: `https://platform-api.visitoai.com/m2m/v1/knowledge/websites`
- Auth: HTTP bearer

Create the existing website group and enqueue its first crawl. Prefer this for multi-page websites with later refresh/selection management. Default depth two, maximum ten; page budget defaults/maxes to five hundred. Optional propertyId from list_properties, otherwise global. Return website.websiteId and job.jobId; use get_knowledge_crawl until terminal status, then get_knowledge_website and get_knowledge_usage. 202 means queued, not indexed/active. After an ambiguous failure discover the website/job before retrying. Required permission: knowledge:write. Connected business only; no tenant override.

## Request body

- KnowledgeWebsiteCreateInput
  - `url` string, required
  - `crawlDepth` integer
  - `maxPages` integer
  - `propertyId` string

## Response `202`

Success

- KnowledgeWebsiteCreated
  - `website` KnowledgeWebsite, required
    - `websiteId` string, required
    - `sourceId` string, required
    - `sourceType` 'website', required
    - `active` boolean, required
    - `scope` 'property' | 'global', required
    - `title` string, required
    - `url` string, required
    - `chunkCount` integer, required
    - `activeTokens` integer
    - `selectedTokens` integer
    - `createdBy` object
      - `id` string
      - `displayName` string
      - `email` string
    - `rootUrl` string, required
    - `normalizedRootUrl` string, required
    - `crawlDepth` integer, required
    - `maxPages` integer, required
    - `propertyId` string
    - `propertyName` string
    - `status` 'idle' | 'crawling' | 'failed', required
    - `defaultEnabled` boolean, required
    - `selectionRules` object[], required
      - `kind` 'path' | 'page', required
      - `key` string, required
      - `enabled` boolean, required
    - `currentGenerationId` string
    - `latestJob` KnowledgeCrawlJob
      - `jobId` string
      - `status` 'queued' | 'running' | 'completed' | 'failed'
      - `progress` object
        - `phase` 'queued' | 'crawling' | 'embedding' | 'finalizing'
        - `pagesDiscovered` integer
        - `pagesProcessed` integer
        - `chunksEmbedded` integer
      - `chunks` integer
      - `url` string
      - `crawlDepth` integer
      - `maxPages` integer
      - `sourceId` string
      - `error` object
        - `code` string
        - `message` string
      - `websiteId` string
      - `websiteGenerationId` string
      - `createdAt` string
      - `startedAt` string
      - `completedAt` string
      - `updatedAt` string
      - `snapshotPages` integer
    - `totalPages` integer, required
    - `enabledPages` integer, required
    - `pages` object[]
      - `sourceId` string, required
      - `url` string, required
      - `canonicalUrl` string, required
      - `path` string, required
      - `enabled` boolean, required
      - `chunkCount` integer, required
      - `tokens` integer
      - `displayOrder` integer
      - `updatedAt` string
    - `createdAt` string
    - `updatedAt` string
    - `lastCrawledAt` string
  - `job` KnowledgeCrawlJob, required
    - `jobId` string
    - `status` 'queued' | 'running' | 'completed' | 'failed'
    - `progress` object
      - `phase` 'queued' | 'crawling' | 'embedding' | 'finalizing'
      - `pagesDiscovered` integer
      - `pagesProcessed` integer
      - `chunksEmbedded` integer
    - `chunks` integer
    - `url` string
    - `crawlDepth` integer
    - `maxPages` integer
    - `sourceId` string
    - `error` object
      - `code` string
      - `message` string
    - `websiteId` string
    - `websiteGenerationId` string
    - `createdAt` string
    - `startedAt` string
    - `completedAt` string
    - `updatedAt` string
    - `snapshotPages` integer

## Other responses

- `400`: Invalid request
- `403`: Missing permission
- `404`: Resource not found
- `409`: Conflict; read state and reconcile

---

[API](https://skmtc.dev/visitoai/apis/visito-m2m-api.md) - [All operations](https://skmtc.dev/visitoai/apis/visito-m2m-api/llms.txt) - [OpenAPI document](https://skmtc.dev/visitoai/apis/visito-m2m-api/revisions/98377d35c234?raw)
