Understanding the building blocks of PromptOps.
A Project is the top-level container in PromptOps — think of it as a workspace or organization. Everything belongs to a project: prompts, versions, deployments, and API keys.
Typically, you'll have one project per application or team. Projects are created via the API or dashboard and return an initial API key.
A Prompt represents a single AI behavior you want to manage — for example, "onboarding-email" or "support-classifier". Each prompt has:
onboarding-email). This is what your SDK uses to fetch the prompt.Prompts don't contain the actual content — that lives in versions.
A Version is an immutable snapshot of a prompt's content and configuration. Every time you change a prompt, you create a new version. Versions contain:
{{variable}} placeholdersgpt-4, claude-3-sonnet)Versions are numbered automatically (v1, v2, v3...) and are immutable once created. To change a prompt, you create a new version.
PromptOps supports three environments, mirroring standard deployment pipelines:
dev — For development and testing. New versions auto-deploy here.staging — For pre-production validation.production — The live environment serving end users.Each environment independently tracks which version is active. This lets you test v5 indev while production safely runs v3.
A Deployment is the link between a prompt version and an environment. It records:
The typical flow is: Create version → Auto-deploys to dev → Promote to staging → Promote to production.
You can also rollback any environment to its previous version with a single API call.
API Keys authenticate requests to the PromptOps API. Each key:
po_live_abc1) for identificationThe full API key is only shown once — at creation time. After that, only the prefix is visible.
The TypeScript SDK includes an in-memory cache with two key behaviors:
getPrompt() returns instantly without an API call.┌─────────────┐
│ Project │ ← Your app / team
├─────────────┤
│ API Keys │ ← Scoped per environment
├─────────────┤
│ Prompts │ ← Identified by slug
│ ┌─────────┐ │
│ │Versions │ │ ← Immutable snapshots (v1, v2, v3...)
│ └─────────┘ │
│ ┌─────────┐ │
│ │Deploys │ │ ← version ↔ environment mapping
│ └─────────┘ │
└─────────────┘
SDK call: getPrompt("slug") → resolves active version for environment