curl --request POST \
--url https://api.athenahq.ai/api/v1/websites/provision \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"url": "acme.com",
"name": "Acme Corp",
"description": "Enterprise widgets company",
"country": "United States",
"language": "English",
"industry": "SaaS & Software",
"identifiers": [
"Acme",
"Acme Corp"
],
"competitors": [],
"prompts": [],
"schedule": {
"days": {
"Monday": true,
"Wednesday": true,
"Friday": true
},
"models": {
"chatgpt": true,
"gemini": true,
"perplexity": true
},
"isActive": true,
"processingHour": 11
},
"external_id": "ws_a7f3b2c9"
}
'import requests
url = "https://api.athenahq.ai/api/v1/websites/provision"
payload = {
"url": "acme.com",
"name": "Acme Corp",
"description": "Enterprise widgets company",
"country": "United States",
"language": "English",
"industry": "SaaS & Software",
"identifiers": ["Acme", "Acme Corp"],
"competitors": [],
"prompts": [],
"schedule": {
"days": {
"Monday": True,
"Wednesday": True,
"Friday": True
},
"models": {
"chatgpt": True,
"gemini": True,
"perplexity": True
},
"isActive": True,
"processingHour": 11
},
"external_id": "ws_a7f3b2c9"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
url: 'acme.com',
name: 'Acme Corp',
description: 'Enterprise widgets company',
country: 'United States',
language: 'English',
industry: 'SaaS & Software',
identifiers: ['Acme', 'Acme Corp'],
competitors: [],
prompts: [],
schedule: {
days: {Monday: true, Wednesday: true, Friday: true},
models: {chatgpt: true, gemini: true, perplexity: true},
isActive: true,
processingHour: 11
},
external_id: 'ws_a7f3b2c9'
})
};
fetch('https://api.athenahq.ai/api/v1/websites/provision', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.athenahq.ai/api/v1/websites/provision",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'url' => 'acme.com',
'name' => 'Acme Corp',
'description' => 'Enterprise widgets company',
'country' => 'United States',
'language' => 'English',
'industry' => 'SaaS & Software',
'identifiers' => [
'Acme',
'Acme Corp'
],
'competitors' => [
],
'prompts' => [
],
'schedule' => [
'days' => [
'Monday' => true,
'Wednesday' => true,
'Friday' => true
],
'models' => [
'chatgpt' => true,
'gemini' => true,
'perplexity' => true
],
'isActive' => true,
'processingHour' => 11
],
'external_id' => 'ws_a7f3b2c9'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.athenahq.ai/api/v1/websites/provision"
payload := strings.NewReader("{\n \"url\": \"acme.com\",\n \"name\": \"Acme Corp\",\n \"description\": \"Enterprise widgets company\",\n \"country\": \"United States\",\n \"language\": \"English\",\n \"industry\": \"SaaS & Software\",\n \"identifiers\": [\n \"Acme\",\n \"Acme Corp\"\n ],\n \"competitors\": [],\n \"prompts\": [],\n \"schedule\": {\n \"days\": {\n \"Monday\": true,\n \"Wednesday\": true,\n \"Friday\": true\n },\n \"models\": {\n \"chatgpt\": true,\n \"gemini\": true,\n \"perplexity\": true\n },\n \"isActive\": true,\n \"processingHour\": 11\n },\n \"external_id\": \"ws_a7f3b2c9\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.athenahq.ai/api/v1/websites/provision")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"acme.com\",\n \"name\": \"Acme Corp\",\n \"description\": \"Enterprise widgets company\",\n \"country\": \"United States\",\n \"language\": \"English\",\n \"industry\": \"SaaS & Software\",\n \"identifiers\": [\n \"Acme\",\n \"Acme Corp\"\n ],\n \"competitors\": [],\n \"prompts\": [],\n \"schedule\": {\n \"days\": {\n \"Monday\": true,\n \"Wednesday\": true,\n \"Friday\": true\n },\n \"models\": {\n \"chatgpt\": true,\n \"gemini\": true,\n \"perplexity\": true\n },\n \"isActive\": true,\n \"processingHour\": 11\n },\n \"external_id\": \"ws_a7f3b2c9\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.athenahq.ai/api/v1/websites/provision")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"url\": \"acme.com\",\n \"name\": \"Acme Corp\",\n \"description\": \"Enterprise widgets company\",\n \"country\": \"United States\",\n \"language\": \"English\",\n \"industry\": \"SaaS & Software\",\n \"identifiers\": [\n \"Acme\",\n \"Acme Corp\"\n ],\n \"competitors\": [],\n \"prompts\": [],\n \"schedule\": {\n \"days\": {\n \"Monday\": true,\n \"Wednesday\": true,\n \"Friday\": true\n },\n \"models\": {\n \"chatgpt\": true,\n \"gemini\": true,\n \"perplexity\": true\n },\n \"isActive\": true,\n \"processingHour\": 11\n },\n \"external_id\": \"ws_a7f3b2c9\"\n}"
response = http.request(request)
puts response.read_body{
"website": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"url": "acme.com",
"name": "Acme Corp",
"orgId": "987e6543-e21b-12d3-a456-426614174000",
"promptCount": 2,
"competitorCount": 1,
"hasSchedule": true
},
"billingEntityCreated": true
}Provision Website
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.
curl --request POST \
--url https://api.athenahq.ai/api/v1/websites/provision \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"url": "acme.com",
"name": "Acme Corp",
"description": "Enterprise widgets company",
"country": "United States",
"language": "English",
"industry": "SaaS & Software",
"identifiers": [
"Acme",
"Acme Corp"
],
"competitors": [],
"prompts": [],
"schedule": {
"days": {
"Monday": true,
"Wednesday": true,
"Friday": true
},
"models": {
"chatgpt": true,
"gemini": true,
"perplexity": true
},
"isActive": true,
"processingHour": 11
},
"external_id": "ws_a7f3b2c9"
}
'import requests
url = "https://api.athenahq.ai/api/v1/websites/provision"
payload = {
"url": "acme.com",
"name": "Acme Corp",
"description": "Enterprise widgets company",
"country": "United States",
"language": "English",
"industry": "SaaS & Software",
"identifiers": ["Acme", "Acme Corp"],
"competitors": [],
"prompts": [],
"schedule": {
"days": {
"Monday": True,
"Wednesday": True,
"Friday": True
},
"models": {
"chatgpt": True,
"gemini": True,
"perplexity": True
},
"isActive": True,
"processingHour": 11
},
"external_id": "ws_a7f3b2c9"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
url: 'acme.com',
name: 'Acme Corp',
description: 'Enterprise widgets company',
country: 'United States',
language: 'English',
industry: 'SaaS & Software',
identifiers: ['Acme', 'Acme Corp'],
competitors: [],
prompts: [],
schedule: {
days: {Monday: true, Wednesday: true, Friday: true},
models: {chatgpt: true, gemini: true, perplexity: true},
isActive: true,
processingHour: 11
},
external_id: 'ws_a7f3b2c9'
})
};
fetch('https://api.athenahq.ai/api/v1/websites/provision', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.athenahq.ai/api/v1/websites/provision",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'url' => 'acme.com',
'name' => 'Acme Corp',
'description' => 'Enterprise widgets company',
'country' => 'United States',
'language' => 'English',
'industry' => 'SaaS & Software',
'identifiers' => [
'Acme',
'Acme Corp'
],
'competitors' => [
],
'prompts' => [
],
'schedule' => [
'days' => [
'Monday' => true,
'Wednesday' => true,
'Friday' => true
],
'models' => [
'chatgpt' => true,
'gemini' => true,
'perplexity' => true
],
'isActive' => true,
'processingHour' => 11
],
'external_id' => 'ws_a7f3b2c9'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.athenahq.ai/api/v1/websites/provision"
payload := strings.NewReader("{\n \"url\": \"acme.com\",\n \"name\": \"Acme Corp\",\n \"description\": \"Enterprise widgets company\",\n \"country\": \"United States\",\n \"language\": \"English\",\n \"industry\": \"SaaS & Software\",\n \"identifiers\": [\n \"Acme\",\n \"Acme Corp\"\n ],\n \"competitors\": [],\n \"prompts\": [],\n \"schedule\": {\n \"days\": {\n \"Monday\": true,\n \"Wednesday\": true,\n \"Friday\": true\n },\n \"models\": {\n \"chatgpt\": true,\n \"gemini\": true,\n \"perplexity\": true\n },\n \"isActive\": true,\n \"processingHour\": 11\n },\n \"external_id\": \"ws_a7f3b2c9\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.athenahq.ai/api/v1/websites/provision")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"acme.com\",\n \"name\": \"Acme Corp\",\n \"description\": \"Enterprise widgets company\",\n \"country\": \"United States\",\n \"language\": \"English\",\n \"industry\": \"SaaS & Software\",\n \"identifiers\": [\n \"Acme\",\n \"Acme Corp\"\n ],\n \"competitors\": [],\n \"prompts\": [],\n \"schedule\": {\n \"days\": {\n \"Monday\": true,\n \"Wednesday\": true,\n \"Friday\": true\n },\n \"models\": {\n \"chatgpt\": true,\n \"gemini\": true,\n \"perplexity\": true\n },\n \"isActive\": true,\n \"processingHour\": 11\n },\n \"external_id\": \"ws_a7f3b2c9\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.athenahq.ai/api/v1/websites/provision")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"url\": \"acme.com\",\n \"name\": \"Acme Corp\",\n \"description\": \"Enterprise widgets company\",\n \"country\": \"United States\",\n \"language\": \"English\",\n \"industry\": \"SaaS & Software\",\n \"identifiers\": [\n \"Acme\",\n \"Acme Corp\"\n ],\n \"competitors\": [],\n \"prompts\": [],\n \"schedule\": {\n \"days\": {\n \"Monday\": true,\n \"Wednesday\": true,\n \"Friday\": true\n },\n \"models\": {\n \"chatgpt\": true,\n \"gemini\": true,\n \"perplexity\": true\n },\n \"isActive\": true,\n \"processingHour\": 11\n },\n \"external_id\": \"ws_a7f3b2c9\"\n}"
response = http.request(request)
puts response.read_body{
"website": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"url": "acme.com",
"name": "Acme Corp",
"orgId": "987e6543-e21b-12d3-a456-426614174000",
"promptCount": 2,
"competitorCount": 1,
"hasSchedule": true
},
"billingEntityCreated": true
}Body
Request body for provisioning a fully configured website
Website URL. Protocol (https://) is stripped automatically.
2048"acme.com"
Brand name
255"Acme Corp"
Brand description
"Enterprise widgets company"
Base country for the website
"United States"
Default language. If omitted, derived from country (e.g., Germany → German). Falls back to English.
"English"
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.
"SaaS & Software"
Brand names, aliases, and abbreviations used for mention detection. If empty, auto-generated by AI on the first processing run.
200500["Acme", "Acme Corp"]
Competitors to track. Deduplicated by URL. Entries on the website's own URL, or a path under it, are skipped.
500Show child attributes
Show child attributes
Prompts (queries) to monitor across AI models. Deduplicated by text.
10000Show child attributes
Show child attributes
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.
Show child attributes
Show child attributes
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.
1"ws_a7f3b2c9"
Response
Website provisioned successfully
The provisioned website response
Show child attributes
Show child attributes
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.
Was this page helpful?