curl --request GET \
--url https://server.promptwatch.com/api/v2/content/{id} \
--header 'X-API-Key: <api-key>'import requests
url = "https://server.promptwatch.com/api/v2/content/{id}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://server.promptwatch.com/api/v2/content/{id}', 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://server.promptwatch.com/api/v2/content/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://server.promptwatch.com/api/v2/content/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://server.promptwatch.com/api/v2/content/{id}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://server.promptwatch.com/api/v2/content/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"id": "6ba7b82c-9dad-11d1-80b4-00c04fd430c8",
"status": "IN_PROGRESS",
"mode": "CREATE",
"type": "ARTICLE",
"title": "Illustrative draft title",
"promptId": "6ba7b823-9dad-11d1-80b4-00c04fd430c8",
"prompt": "Best CRM for 50-person services firms?",
"description": "Short brief for writers (illustrative).",
"featuredImageUrl": "https://pw-static-cdn.com/document-images/org/project/doc/article-image.jpg",
"content": "## Section\n\nPartial markdown body…",
"contentLength": "MEDIUM",
"optimizationLevel": null,
"url": null,
"toneOfVoice": "PROFESSIONAL",
"customToneOfVoice": null,
"languageCode": "en-US",
"imageArtisticStyle": null,
"imagePromptInstructions": null,
"blockedWords": [],
"briefTitle": null,
"briefDescription": null,
"briefObjective": null,
"briefCallToAction": null,
"briefKeyPoints": [],
"briefContext": null,
"createdAt": "2026-03-29T14:00:00.000Z",
"updatedAt": "2026-03-29T14:05:00.000Z",
"startedAt": "2026-03-29T14:00:30.000Z",
"completedAt": null,
"failedAt": null,
"failedReason": null,
"stoppedAt": null
}Get content by id
Returns one content document by id (status, body, and metadata). Use after POST /content/create to poll until generation finishes; see response field descriptions for partial vs final content.
curl --request GET \
--url https://server.promptwatch.com/api/v2/content/{id} \
--header 'X-API-Key: <api-key>'import requests
url = "https://server.promptwatch.com/api/v2/content/{id}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://server.promptwatch.com/api/v2/content/{id}', 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://server.promptwatch.com/api/v2/content/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://server.promptwatch.com/api/v2/content/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://server.promptwatch.com/api/v2/content/{id}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://server.promptwatch.com/api/v2/content/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"id": "6ba7b82c-9dad-11d1-80b4-00c04fd430c8",
"status": "IN_PROGRESS",
"mode": "CREATE",
"type": "ARTICLE",
"title": "Illustrative draft title",
"promptId": "6ba7b823-9dad-11d1-80b4-00c04fd430c8",
"prompt": "Best CRM for 50-person services firms?",
"description": "Short brief for writers (illustrative).",
"featuredImageUrl": "https://pw-static-cdn.com/document-images/org/project/doc/article-image.jpg",
"content": "## Section\n\nPartial markdown body…",
"contentLength": "MEDIUM",
"optimizationLevel": null,
"url": null,
"toneOfVoice": "PROFESSIONAL",
"customToneOfVoice": null,
"languageCode": "en-US",
"imageArtisticStyle": null,
"imagePromptInstructions": null,
"blockedWords": [],
"briefTitle": null,
"briefDescription": null,
"briefObjective": null,
"briefCallToAction": null,
"briefKeyPoints": [],
"briefContext": null,
"createdAt": "2026-03-29T14:00:00.000Z",
"updatedAt": "2026-03-29T14:05:00.000Z",
"startedAt": "2026-03-29T14:00:30.000Z",
"completedAt": null,
"failedAt": null,
"failedReason": null,
"stoppedAt": null
}Authorizations
API key for authentication. Get yours from the Promptwatch dashboard under Settings > API Keys.
Path Parameters
Document id from create response.
Response
Default Response
PENDING: queued for generation; IN_PROGRESS: AI is actively generating content; COMPLETED: generation finished successfully; FAILED: generation encountered an error; STOPPED: generation was manually stopped by the user (may contain partial content).
DRAFT, PENDING, IN_PROGRESS, COMPLETED, FAILED, STOPPED CREATE, OPTIMIZE Set for CREATE mode.
ARTICLE, BLOG_POST, OPINION, LISTICLE, HOW_TO, REVIEW, COMPARISON, CASE_STUDY, INTERVIEW, DOCUMENTATION, WIKI, PRODUCT_PAGE, LANDING_PAGE, PRESS_RELEASE, GENERIC_CONTENT, PRODUCT_COMPARISON Document title. Null while PENDING; may appear during IN_PROGRESS as a partial or working title; final once COMPLETED.
Linked monitor prompt id (same as POST /content/create promptId).
Linked LLM prompt text from GET /prompts; null if the prompt was removed.
Public URL of the generated featured image. Null until image generation completes, or when the generate-article-image tool is disabled. Not embedded in content.
Markdown body. Null while PENDING; partially written during IN_PROGRESS (content streams in progressively and is incomplete); final once COMPLETED. STOPPED documents may contain partial content. Does not include the featured image.
SHORT, MEDIUM, LONG LOW, MEDIUM, HIGH Optimize target URL (OPTIMIZE mode).
PROFESSIONAL, CASUAL, TECHNICAL, CONVERSATIONAL, NEUTRAL, AUTHORITATIVE, FRIENDLY, PERSUASIVE, FORMAL, WITTY, CUSTOM en-US, en-GB, en-IN, en-AU, en-CA, en-NZ, nl-NL, nl-BE, es-ES, es-MX, es-AR, es-CO, es-CL, es-PE, es-VE, ca-ES, fr-FR, fr-BE, fr-CA, de-DE, de-AT, de-CH, cs-CZ, sk-SK, sl-SI, no-NO, sv-SE, da-DK, it-IT, fi-FI, pl-PL, hu-HU, ro-RO, lt-LT, lv-LV, uk-UA, el-GR, tr-TR, ar-SA, ar-EG, ar-AE, he-IL, pt-PT, pt-BR, ja-JP, id-ID, vi-VN, th-TH, km-KH, en-KH, ko-KR, hi-IN, ru-RU, kk-KZ, ms-MY, fil-PH, zh-SG, zh-TW, zh-HK photo-realistic, flat-illustration, watercolor, 3d-render, minimalist, isometric, editorial, abstract Brief: exact title supplied at creation. Null if not provided.
Brief: exact meta description supplied at creation. Null if not provided.
Brief: goal or purpose of the content piece. Null if not provided.
Brief: desired call-to-action. Null if not provided.
Brief: key points the article was instructed to cover. Empty array if not provided.
Brief: additional context or background supplied at creation. Null if not provided.