Calling the OpenAI API directly still leaves your prompts as strings in code. Endprompt puts them behind a stable, versioned endpoint — update prompts without touching your application code.
The OpenAI API is straightforward to call. The problem isn't the API — it's what you put in it. Your system instructions and prompt templates are strings in your code. Change the wording, adjust the tone, try a different model — it's a code change, a commit, and a deploy.
Endprompt moves the prompt out of your application and into versioned, observable endpoints. Your code passes in the inputs. Endprompt handles the LLM call and returns the result.
Whether you're using the Chat Completions API:
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "You are a helpful assistant that summarises content concisely."},
{"role": "user", "content": f"Summarise the following in 3 bullet points:\n\n{content}"},
]
)
text = response.choices[0].message.content
Or the newer Responses API:
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-4o",
instructions="You are a helpful assistant that summarises content concisely.",
input=f"Summarise the following in 3 bullet points:\n\n{content}",
)
text = response.output_text
The same problem exists in both: the system instructions and the prompt template are hardcoded strings. Every time something needs to change, someone edits the file, commits, and redeploys. There's no version history for the prompt, no rollback if something breaks, and no visibility into what was actually sent to the model when a production request went wrong.
You define the endpoint in the Endprompt dashboard: input schema, system instructions, prompt template (using Liquid templating), and model. Endprompt executes the OpenAI call and returns the result.
Your application becomes a simple API call:
import os
import requests
response = requests.post(
f"{os.environ['ENDPROMPT_BASE_URL']}/api/v1/summarise",
headers={
"x-api-key": os.environ["ENDPROMPT_API_KEY"],
},
json={"content": content},
timeout=60,
)
data = response.json()
Your system instructions, your prompt template, your model choice — all of it now lives in Endprompt. Your code passes in the inputs and gets back a result. Nothing else to maintain.
ENDPROMPT_API_KEY=ep_live_xxxxxxxxxxxxxxxxxxxx
ENDPROMPT_BASE_URL=https://your-tenant.api.endprompt.ai
Your Endprompt API key is under API Keys in the dashboard sidebar. Your OpenAI API key is added separately under LLM API Keys in the sidebar (under Configuration) — Endprompt calls OpenAI on your behalf using your own key.
Prompts out of code Your system instructions and prompt templates move to the Endprompt dashboard. No more hardcoded strings in your application. No more deploys to change AI behaviour.
Full version history Every prompt change is versioned. See what changed and when. Compare versions side by side.
Instant rollback Promoted a new prompt version and outputs degraded? Roll back in one click. No hotfix deploy required.
Full observability Every request is logged: the rendered prompt, model response, latency, and cost. Replay any request from the dashboard to debug production issues.
Cost tracking per feature The OpenAI API bills at the model level — you can't see what individual features cost. Endprompt tracks spend per endpoint, so you know exactly what each AI feature costs.
Non-technical iteration Domain experts can update prompt behaviour directly in the Endprompt dashboard — no engineering involvement, no PR, no redeploy.
Smart caching Enable caching per endpoint in the dashboard — no code changes required. Up to 67% cost reduction on repeated queries for stable, deterministic outputs.
{{ inputs.content }}), and choose your model.requests.post to your Endprompt endpoint, passing your input fields in the request body.14-day free trial, no card required.
Start free trial · Read the quickstart docs
Related: Prompt Versioning · Prompt Management API · How to Manage Prompts in Production