Manage websites and the same settings you edit in the dashboard (Websites → your site → Settings). All routes require authentication; writes require websites:manage or integrations:manage.
Website identifiers in URLs are uuid values (not numeric database IDs).
List websites
GET /api/websites
Authorization: Bearer TOKEN
Query parameters
| Parameter | Description |
|---|---|
site_url |
Optional. Normalized URL match (trailing slashes ignored). When provided, the response includes a matched object if a site on your account matches that URL—useful for WordPress and multi-site tooling. |
Example response
{
"data": [
{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"url": "https://www.example.com",
"label": "www.example.com",
"sitemap_index_path": "/sitemap_index.xml",
"post_permalink_structure": "/%postname%/",
"enable_scheduled_generation": true,
"recurrence": { "...": "recurrence rule payload" },
"tone": "professional",
"reading_level": "intermediate",
"region_language": "UK English",
"avoided_phrases": ["synergy", "leverage"],
"legal_disclaimer": "This article is general information only.",
"auto_publish": true,
"generate_cover_images": true,
"generate_audio": false,
"audio_voice": "alloy",
"feed_json_url": "https://auto-blogger.ai/feed/550e8400-e29b-41d4-a716-446655440000/json",
"feed_rss_url": "https://auto-blogger.ai/feed/550e8400-e29b-41d4-a716-446655440000/rss.xml"
}
],
"matched": null,
"site_url": null
}
When site_url matches:
{
"data": [ "..." ],
"matched": { "uuid": "550e8400-e29b-41d4-a716-446655440000", "...": "..." },
"site_url": "https://www.example.com"
}
Create a website
POST /api/websites
Authorization: Bearer TOKEN
Content-Type: application/json
{
"url": "https://new-site.example.com"
}
| Field | Rules |
|---|---|
url |
Required. Valid HTTP/HTTPS URL; normalized (trailing slash handling) before storage. |
Billing: creation follows the same rules as the dashboard—the account must be allowed to add another website (active subscription or billing exempt).
Responses
- 201 Created — new site; body includes
"created": trueand fulldatasettings object. - 200 OK — site already exists for that URL on the account;
"created": falseand existingdata.
New sites inherit generate_cover_images from the account default. A background sitemap fetch starts automatically (same as dashboard create).
Get one website
GET /api/websites/{uuid}
Authorization: Bearer TOKEN
Returns { "data": { ... } } with the full settings object (same fields as list).
Update settings
PATCH /api/websites/{uuid}
Authorization: Bearer TOKEN
Content-Type: application/json
Send only fields you want to change. Omitted fields are left unchanged.
Site details
| Field | Type | Notes |
|---|---|---|
url |
string | Must not redirect to a different registrable domain (same rule as dashboard). Changing URL retriggers sitemap discovery. |
sitemap_index_path |
string or null | e.g. /sitemap_index.xml |
post_permalink_structure |
string or null | WordPress-style structure; null inherits account default. Validated with the same rules as the dashboard. |
Brand voice
| Field | Type | Allowed values |
|---|---|---|
tone |
string or null | professional, conversational, authoritative, friendly, technical |
reading_level |
string or null | simple, intermediate, advanced |
region_language |
string or null | e.g. UK English, US English (see dashboard select options) |
avoided_phrases |
array of strings or null | Phrases the AI should not use |
legal_disclaimer |
string or null | Max 1000 characters |
Empty strings for voice fields are stored as null (inherit account defaults in generation).
Scheduled generation
| Field | Type | Notes |
|---|---|---|
enable_scheduled_generation |
boolean | When false, recurrence is cleared. |
recurrence |
object or null | Schedule rule (same JSON shape as saved from the dashboard). Required when you set enable_scheduled_generation to true in the same request. |
Content generation
| Field | Type | Notes |
|---|---|---|
generate_cover_images |
boolean | When set to false, auto_publish is forced to false. |
generate_audio |
boolean | Enables audio narration for new posts |
audio_voice |
string | alloy, echo, fable, onyx, nova, shimmer |
auto_publish |
boolean | Only meaningful when cover images are generated |
Social cross-posting
When social cross-posting is available for your account, responses also include:
| Field | Type | Notes |
|---|---|---|
cross_post_enabled |
boolean | |
cross_post_platforms |
array of strings or null | facebook, instagram, x, linkedin |
social_image_template |
string | Template enum value from dashboard |
These fields appear in responses only when the feature is enabled; omit them from PATCH requests if your account does not use cross-posting.
Example — enable weekly generation and brand tone
curl -sS -X PATCH \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json" \
-d '{
"tone": "friendly",
"reading_level": "intermediate",
"enable_scheduled_generation": true,
"recurrence": {
"frequency": "WEEKLY",
"interval": 1,
"start_date": "2026-01-01 09:00:00",
"by_day": ["MO", "WE", "FR"],
"timezone": "Europe/London",
"end_type": "never"
},
"auto_publish": true,
"generate_cover_images": true
}' \
https://auto-blogger.ai/api/websites/550e8400-e29b-41d4-a716-446655440000
Use the recurrence object format produced by the dashboard when copying a working schedule.
Example — permalink override
{
"post_permalink_structure": "/%year%/%monthnum%/%postname%/"
}
Delete a website
DELETE /api/websites/{uuid}
Authorization: Bearer TOKEN
Returns 204 No Content on success. Deletes cascade related content (topics, posts, integrations, etc.). Subscription quantity sync runs for billable accounts (same as dashboard delete).
Requires Owner or Admin on the account.
Settings payload reference
Read responses always include:
| Field | Description |
|---|---|
uuid |
Public identifier for URLs and webhooks |
url |
Canonical site URL |
label |
Hostname or URL for display |
feed_json_url / feed_rss_url |
Public feeds (feeds guide) |
enable_scheduled_generation |
Derived: true when recurrence is not null |
Related
- REST API overview — auth, scopes, errors
- Content topics API — enqueue keywords for generation
- Integrations API — register webhook URLs