---
title: "Start monitoring a website"
method: POST
path: "/websites"
tags: ["Websites"]
---

# Start monitoring a website

`POST /websites`

## Request

- Base URL: `https://ai.redreplier.com/ai-app/api/v1`
- URL: `https://ai.redreplier.com/ai-app/api/v1/websites`
- Auth: HTTP bearer

Adds a website and, when `description` is left out, scrapes the URL to write one so mention scoring knows what the product does. That scrape uses one AI generation from the plan quota; if it fails or the quota is exhausted the website is still created with `description: null`, so set one with PATCH or `/websites/analyze-description`. Send `description: ""` to create the website with no description and skip the scrape. Keywords supplied here are stored as `PENDING` and are not monitored until `POST /keywords/activate-pending` moves them into free slots on the plan.

## Headers

- `X-Workspace-Id` string

## Request body

- CreateWebsiteRequest
  - `url` string, uri, required
  - `name` string
  - `keywords` string[]
  - `description` string: Set it yourself to skip scraping and AI generation. An empty string stores no description and also skips them; leaving the field out has RedReplier write one.

## Response `201`

Website created

- Website
  - `id` string, uuid, required
  - `accountGroupId` string, uuid
  - `domain` string, required
  - `url` string, uri, required
  - `name` string, nullable
  - `description` string, nullable: Feeds mention scoring.
  - `createdAt` string, date-time, nullable
  - `updatedAt` string, date-time, nullable
  - `keywords` Keyword[], required
    - `id` string, uuid, required
    - `websiteId` string, uuid, required
    - `value` string, required
    - `status` 'PENDING' | 'ACTIVE' | 'DISABLED' | 'SUSPENDED', required: `PENDING` keywords are stored but not monitored until a paid slot covers them.
    - `createdAt` string, date-time, nullable
    - `updatedAt` string, date-time, nullable

## Other responses

- `400`: Validation error
- `401`: Missing, invalid, expired or revoked API key or access token. `code: token_issuer_lost_access` means the member who created the API key was deactivated or lost access to the workspace: ask a workspace admin for a new key
- `403`: The credentials are valid but cannot be used here. `code: permission_denied`: the workspace role behind the API key or OAuth sign-in lacks `redreplier.write`; `role`, `keyRole` and `issuerRole` say which role fell short. `code: subscription_required`: the organization plan does not include API access. `code: workspace_access_denied`: `X-Workspace-Id` names a workspace the caller cannot reach, or an API key was sent to a workspace other than its own
- `429`: Rate limit exceeded

---

[API](https://skmtc.dev/redreplier/apis/redreplier-public-api.md) · [All operations](https://skmtc.dev/redreplier/apis/redreplier-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/redreplier/apis/redreplier-public-api/revisions/4388cca3045e?raw)
