Skip to content

Client API

Creates a new Promptly client instance.

import { createPromptlyClient } from '@promptlycms/prompts';
const promptly = createPromptlyClient({
apiKey: process.env.PROMPTLY_API_KEY,
});
OptionTypeRequiredDefaultDescription
apiKeystringNoprocess.env.PROMPTLY_API_KEYYour Promptly API key
baseUrlstringNohttps://api.promptlycms.comAPI base URL
model(modelId: string) => LanguageModelNoAuto-detectionCustom model resolver - overrides built-in auto-detection

Returns a PromptlyClient with two methods: getPrompt() and getPrompts().

  • PromptlyError with code UNAUTHORIZED if no API key is provided and PROMPTLY_API_KEY is not set in the environment.

Fetches a single prompt by ID.

const result = await promptly.getPrompt('my-prompt');
ParameterTypeRequiredDescription
promptIdPromptIdYesThe prompt ID to fetch. Autocompletes known IDs if codegen types are present.
options.versionstringNoSpecific version to fetch (default: latest)
PropertyTypeDescription
promptIdstringThe prompt ID
promptNamestringHuman-readable prompt name
versionstringThe resolved version
systemMessagestringSystem message from the CMS
userMessagePromptMessage<V>Callable function for template interpolation
temperaturenumberTemperature setting
modelLanguageModelAuto-resolved AI SDK model
configPromptConfigFull config including schema fields
publishedVersionsPublishedVersion[]Available published versions (if present)

The userMessage property is both callable and stringifiable:

// Interpolate variables
const text = result.userMessage({ name: 'Alice' });
// Get raw template
const template = String(result.userMessage);
// => 'Hello ${name}!'
client.getPrompt<
T extends string, // Prompt ID
V extends PromptVersion<T> // Version (default: 'latest')
>(promptId: T, options?: GetOptions<V>)
=> Promise<PromptResult<VariablesFor<T, V>>>

When codegen types are present, T narrows to a known prompt ID and VariablesFor<T, V> resolves to the typed variable shape. For unknown IDs, it falls back to Record<string, string>.


Fetches multiple prompts in parallel.

const [first, second] = await promptly.getPrompts([
{ promptId: 'prompt-a' },
{ promptId: 'prompt-b', version: '2.0.0' },
]);
ParameterTypeRequiredDescription
entriesreadonly PromptRequest[]YesArray of prompt requests

Each PromptRequest:

PropertyTypeRequiredDescription
promptIdstringYesThe prompt ID
versionstringNoSpecific version (default: latest)

Returns GetPromptsResults<T> - a mapped tuple where each position is typed to the corresponding request’s prompt variables.

client.getPrompts<const T extends readonly PromptRequest[]>(entries: T)
=> Promise<GetPromptsResults<T>>

The const type parameter preserves literal string types from the input array.