Docs
API & integrations
Two APIs: the gateway serves models in both major wire formats; the platform API manages agents, sessions and everything around them.
The gateway API
Authenticate with a console-managed key (dpk_…). External keys always call a
routing by name — that's what makes budget rules
enforceable.
# OpenAI dialect
curl http://<gateway>/v1/chat/completions \
-H "Authorization: Bearer dpk_..." \
-d '{"model": "main",
"messages": [{"role": "user", "content": "Summarize this…"}]}'
# Anthropic dialect — same key, same routing
curl http://<gateway>/v1/messages \
-H "Authorization: Bearer dpk_..." \
-H "anthropic-version: 2023-06-01" \
-d '{"model": "main", "max_tokens": 1024,
"messages": [{"role": "user", "content": "Summarize this…"}]}'
Streaming, tool use and structured outputs work in both dialects, subject to what the underlying model supports.
Point existing clients at it
| Client | Change |
|---|---|
| OpenAI SDK (any language) | base_url → your gateway, api_key → dpk_… |
| Anthropic SDK | base_url → your gateway, auth token → dpk_… |
| Claude Code | ANTHROPIC_BASE_URL + ANTHROPIC_AUTH_TOKEN, --model <routing> |
| LangChain / LlamaIndex / Vercel AI SDK | the provider's base-URL setting |
The platform API
A REST API under /v1 on the control plane. Requests are scoped to a
workspace via the X-Devproof-Workspace header (defaults to the default
workspace). The console is built entirely on this API — anything it does, you can
script.
| Area | Endpoints |
|---|---|
| Workspaces | /v1/workspaces |
| Agents | /v1/agents, /v1/agents/:id/versions |
| Sessions | /v1/sessions, …/messages, …/events (SSE), …/interrupt |
| Files | /v1/files (uploads, outputs, checkpoints) |
| Knowledge | /v1/skills, /v1/memory-stores, /v1/wikis |
| Environments & secrets | /v1/environments, /v1/vaults |
| Serving | /v1/deployments, /v1/routings, /v1/pools, catalog |
| Usage & billing | /v1/usage, /v1/settings, API keys |
Python client
A typed Python client (pip install devproofai-client, Apache-2.0)
covers the platform API — workspaces, agents, sessions, files, skills, memory
stores, wikis and vaults. An agent from zero to a streamed session:
from devproof import Devproof
client = Devproof() # DEVPROOF_BASE_URL + DEVPROOF_API_KEY
env = client.environments.create(name="support-sandbox")
agent = client.agents.create(name="support-triage", routing="main",
environment_id=env["id"],
tools=["Bash", "Read", "Write"])
inbox = client.files.upload("inbox-week-30.csv")
log = client.files.upload("m40-0233-diagnostics.log")
session = client.sessions.create(agent=agent["id"],
prompt="Triage this inbox export.",
files=[inbox["id"], log["id"]])
for event in client.sessions.events.stream(session["id"]):
print(event["type"], event.get("payload"))
# collect what the agent produced (reply drafts, summaries, …)
for f in client.sessions.resources(session["id"])["outputFiles"]:
print(f["name"], f["size"])
Follow-up turns are client.sessions.send_message(session_id, prompt=…) —
the session resumes from its checkpoint with full context.
Webhooks & events
Session lifecycle events (session.completed, session.failed, …)
can be delivered to your endpoints per workspace; the same events stream over SSE
for live UIs.