Skip to main content
POST
/
content
/
create
Create content
curl --request POST \
  --url https://server.promptwatch.com/api/v2/content/create \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: <api-key>' \
  --data '
{
  "mode": "CREATE",
  "promptId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "personaId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "type": "ARTICLE",
  "contentLength": "SHORT",
  "contentGapRecommendationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "toneOfVoice": "PROFESSIONAL",
  "customToneOfVoice": "<string>"
}
'
{
  "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "status": "PENDING"
}

Authorizations

X-API-Key
string
header
required

API key for authentication. Get yours from the Promptwatch dashboard under Settings > API Keys.

Body

application/json
mode
enum<string>
required

Create new content from a prompt (not optimizing an existing page).

Available options:
CREATE
promptId
string<uuid>
required

LLM prompt to anchor generation on (list via GET /prompts).

personaId
string<uuid>
required

Persona for voice and audience (list via GET /personas).

type
enum<string>
required

Output format. ARTICLE: in-depth informative; BLOG_POST: conversational; PRODUCT_PAGE: sales-focused; GENERIC_CONTENT: flexible; LISTICLE: list-structured; PRODUCT_COMPARISON: compares products.

Available options:
ARTICLE,
BLOG_POST,
PRODUCT_PAGE,
GENERIC_CONTENT,
LISTICLE,
PRODUCT_COMPARISON
contentLength
enum<string>
required

Target length. SHORT ≈ 200–500 words; MEDIUM ≈ 500–1,000; LONG ≈ 1,000–3,000.

Available options:
SHORT,
MEDIUM,
LONG
contentGapRecommendationId
string<uuid>

Optional recommendation from GET /content-gap/prompts/:promptId/latest/recommendations.

toneOfVoice
enum<string>

Tone override; if omitted, the project default is used. CUSTOM requires customToneOfVoice.

Available options:
PROFESSIONAL,
CASUAL,
TECHNICAL,
CONVERSATIONAL,
NEUTRAL,
AUTHORITATIVE,
FRIENDLY,
PERSUASIVE,
FORMAL,
WITTY,
CUSTOM
customToneOfVoice
string

Required when toneOfVoice is CUSTOM; ignored otherwise.

Response

Default Response

id
string<uuid>
required

Document id; poll GET /content/:id until terminal status.

status
enum<string>
required

Always PENDING immediately after enqueue; use GET /content/:id for updates.

Available options:
PENDING