Skip to content

Endpoints

All endpoints require a Bearer token in the Authorization header. See API Overview for authentication details.

Fetch a single prompt by ID.

ParameterTypeRequiredDescription
promptIdstringYesThe prompt ID from the CMS
ParameterTypeRequiredDescription
versionstringNoSpecific version to fetch (e.g. 1.0.0). Defaults to latest published version.
Terminal window
# Fetch latest version
curl https://api.promptlycms.com/prompts/JPxlUpstuhXB5OwOtKPpj \
-H "Authorization: Bearer pk_live_..."
# Fetch specific version
curl "https://api.promptlycms.com/prompts/JPxlUpstuhXB5OwOtKPpj?version=2.0.0" \
-H "Authorization: Bearer pk_live_..."
{
"promptId": "JPxlUpstuhXB5OwOtKPpj",
"promptName": "Code Review Helper",
"version": "2.0.0",
"systemMessage": "You are a helpful code reviewer.",
"userMessage": "Review this ${language} code:\n${code}",
"config": {
"model": "claude-sonnet-4.5",
"temperature": 0.7,
"schema": [],
"inputData": null,
"inputDataRootName": null
}
}
FieldTypeDescription
promptIdstringThe prompt ID
promptNamestringHuman-readable prompt name
versionstringThe resolved version number
systemMessagestringSystem message content
userMessagestringUser message template with ${variable} placeholders
config.modelstringModel identifier from the CMS
config.temperaturenumberTemperature setting (0-2)
config.schemaSchemaField[]Structured output schema fields (empty if none configured)
config.inputDataunknownInput data configuration
config.inputDataRootNamestring | nullRoot name for input data
publishedVersionsPublishedVersion[]Available published versions (present when include_versions is used on list endpoint)

This example fetches a prompt pinned to a specific version and uses it with generateText() from the Vercel AI SDK:

import { generateText } from 'ai';
import { anthropic } from '@ai-sdk/anthropic';
// Simple helper to replace ${variable} placeholders in template strings
const interpolate = (
template: string,
variables: Record<string, string>,
): string => {
let result = template;
for (const [key, value] of Object.entries(variables)) {
result = result.replaceAll(`\${${key}}`, value);
}
return result;
};
// 1. Fetch a prompt pinned to a specific version
const response = await fetch(
`https://api.promptlycms.com/prompts/${promptId}?version=2.27.0`,
{
headers: {
Authorization: `Bearer ${env.PROMPTLY_API_KEY}`,
},
},
);
const { userMessage, systemMessage, config } = await response.json();
// 2. Pass the prompt content to the AI SDK
const { text } = await generateText({
model: anthropic(config.model),
messages: [
{
role: 'system',
content: systemMessage,
providerOptions: {
anthropic: {
cacheControl: { type: 'ephemeral' },
},
},
},
{
role: 'user',
content: interpolate(userMessage, {
pickupLocation,
movesCount: getMovesCount(),
}),
},
],
temperature: config.temperature,
});

Fetch all prompts for your account.

ParameterTypeRequiredDescription
include_versionsbooleanNoInclude publishedVersions array on each prompt
Terminal window
# List all prompts
curl https://api.promptlycms.com/prompts \
-H "Authorization: Bearer pk_live_..."
# Include version history
curl "https://api.promptlycms.com/prompts?include_versions=true" \
-H "Authorization: Bearer pk_live_..."
[
{
"promptId": "JPxlUpstuhXB5OwOtKPpj",
"promptName": "Code Review Helper",
"version": "2.0.0",
"systemMessage": "You are a helpful code reviewer.",
"userMessage": "Review this ${language} code:\n${code}",
"config": {
"model": "claude-sonnet-4.5",
"temperature": 0.7,
"schema": [],
"inputData": null,
"inputDataRootName": null
}
}
]

When include_versions=true:

[
{
"promptId": "JPxlUpstuhXB5OwOtKPpj",
"promptName": "Code Review Helper",
"version": "2.0.0",
"systemMessage": "You are a helpful code reviewer.",
"userMessage": "Review this ${language} code:\n${code}",
"config": {
"model": "claude-sonnet-4.5",
"temperature": 0.7,
"schema": [],
"inputData": null,
"inputDataRootName": null
},
"publishedVersions": [
{ "version": "1.0.0", "userMessage": "Review this code:\n${code}" },
{ "version": "2.0.0", "userMessage": "Review this ${language} code:\n${code}" }
]
}
]

All endpoints return errors in a consistent format. See Errors for the full reference.

{
"error": "Missing or invalid API key",
"code": "UNAUTHORIZED"
}