---
title: "Provision Website"
method: POST
path: "/api/v1/websites/provision"
tags: ["Basics"]
---

# Provision Website

`POST /api/v1/websites/provision`

Creates a fully configured website in a single call, skipping the onboarding wizard. Optionally configures competitors, prompts, and a processing schedule. Requires a global API key. **Partner integrations** may include an `external_id` to map their own identifier onto the new Athena website.

> **Beta**: This endpoint is in beta. The request and response schemas may change.

## Request body

- ProvisionWebsiteRequest — Request body for provisioning a fully configured website
  - `url` string, required — Website URL. Protocol (https://) is stripped automatically.
  - `name` string, required — Brand name
  - `description` string — Brand description
  - `country` string — Base country for the website
  - `language` string — Default language. If omitted, derived from country (e.g., Germany → German). Falls back to English.
  - `industry` string — Industry category. Common values: `SaaS & Software`, `E-commerce & Retail`, `Healthcare & Medical`, `Information Technology`, `Banking & Financial Services`, `Education & E-learning`, `Consulting`, `Manufacturing`, `Hospitality & Travel`, `Real Estate`, and more. Accepts any string.
  - `identifiers` string[] — Brand names, aliases, and abbreviations used for mention detection. If empty, auto-generated by AI on the first processing run.
  - `competitors` CompetitorInput[] — Competitors to track. Deduplicated by URL.
    - `name` string, required — Competitor name
    - `url` string, required — Competitor website URL
    - `identifiers` string[] — Additional aliases beyond the name and domain (which are included automatically). If empty, auto-generated on the first processing run.
  - `prompts` PromptInput[] — Prompts (queries) to monitor across AI models. Deduplicated by text.
    - `text` string, required — The prompt/query text to send to AI models
    - `topic` string — Topic name to group the prompt under. Created if it doesn't exist.
    - `type` 'discovery' | 'high_intent' — Prompt type. `discovery` for informational queries, `high_intent` for purchase-intent queries.
  - `schedule` ScheduleInput — Processing schedule configuration. If omitted entirely, no schedule is created — the user can configure one via the UI. All fields within the schedule are optional with sensible defaults.
    - `days` object — Which days to run processing. Keys are day names (Monday–Sunday), values are booleans.
    - `models` object — Which AI models to query. Available model IDs: `chatgpt`, `ai_overview`, `perplexity`, `gemini`, `copilot`, `grok`, `ai_mode`, `claude`.
    - `isActive` boolean — Whether automatic scheduled runs are enabled
    - `processingHour` integer — UTC hour when scheduled processing fires. If omitted, assigned randomly between 0–17.
  - `external_id` string — **Partner-only.** An identifier from your own system to map to this Athena website. Accepted only when authenticating with an API key for an organization flagged as a partner. Sending this field as a direct customer returns `403 Forbidden`. Must be unique per resource type within your organization — duplicates return `409` with the existing resource in the payload.

## Response `201`

Website provisioned successfully

- object
  - `website` ProvisionedWebsite, required — The provisioned website response
    - `id` string, uuid, required — Unique website identifier
    - `url` string, required — Cleaned website URL (protocol stripped)
    - `name` string, required — Brand name
    - `orgId` string, uuid, required — Organization ID the website belongs to
    - `promptCount` integer, required — Number of prompts created
    - `competitorCount` integer, required — Number of competitors created
    - `hasSchedule` boolean, required — Whether a processing schedule was configured
    - `externalId` string, nullable — **Partner-only.** Echoes the `external_id` from the provision request if provided, or `null` if the partner did not supply one. Only present on responses to partner API keys — direct-customer responses omit the field.
  - `billingEntityCreated` boolean, required — Whether the billing entity exists after provisioning. When false, entity creation failed even after a retry: the website exists but has no credits, and setting credits fails with a 400 until it is repaired. Contact AthenaHQ support in that case.

## Other responses

- `400` — Bad request - Invalid parameters
- `401` — Unauthorized - Invalid or missing API key
- `403` — Forbidden - Requires a global API key, or (partner-only field) the key lacks partner identity for an `external_id`.
- `409` — Conflict - (partners only) the supplied `external_id` is already mapped to another website.
- `500` — Internal server error

---

[API](https://skmtc.net/athenahq/apis/athenahq-api.md) · [All operations](https://skmtc.net/athenahq/apis/athenahq-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/athenahq/athenahq-api/revisions/6c5d71622cb9/schema)
