Vortex provides a fully-typed, OpenAPI-compliant REST interface.
- Base URL:
http://localhost:8000(Default) - Data Format:
application/json - Authentication:
Authorization: Bearer <token>orX-API-Key: <token>
POST /v1/workflows/run
Submit a new workflow execution DAG.
Request Body:
{
"dag": {
"name": "research-pipeline",
"version": 1,
"nodes": [
{ "id": "search", "type": "tool", "config": { "tool_name": "web_search" } },
{ "id": "synthesize", "type": "llm", "config": { "prompt": "{search}" }, "dependencies": ["search"] }
]
},
"input": { "query": "AI systems architecture" },
"idempotency_key": "req-12345"
}Responses:
201 Created: Workflow submitted successfully. ReturnsWorkflowRunobject.401 Unauthorized: Invalid or missing API key.422 Unprocessable Entity: Invalid DAG topological structure.
POST /v1/workflows/stream
Same payload as /run, but returns a Server-Sent Events (SSE) stream (text/event-stream).
Stream Event Example:
event: node.started
data: {"node_id": "search", "timestamp": "2026-08-04T10:00:00Z"}
event: node.chunk
data: {"node_id": "synthesize", "content": "The architecture..."}
event: workflow.completed
data: {"run_id": "8f278669...", "status": "COMPLETED"}
GET /v1/workflows/{run_id}
Retrieve the full materialized state of a workflow run, including all node outputs, token counts, and cost metrics.
POST /v1/workflows/{run_id}/nodes/{node_id}/approve
Resume a workflow stuck in AWAITING_APPROVAL state.
Request Body:
{
"approved": true,
"feedback": "Approved for production release"
}POST /v1/models/chat
OpenAI-compatible chat completion endpoint. Supports provider fallbacks, guardrails, and evaluation gates.
Request Body:
{
"model": "anthropic/claude-3-5-sonnet",
"messages": [{"role": "user", "content": "Hello"}],
"temperature": 0.7
}Response Headers (Custom):
X-Vortex-Provider: The provider that ultimately served the request (useful if fallback occurred).X-Vortex-Cache-Hit:trueorfalseX-Vortex-Cost-USD:0.0024
POST /v1/prompts
Store versioned prompt templates in the database.
Request Body:
{
"name": "sales_email_generator",
"template": "Write a sales email for {product} targeting {audience}.",
"default_model": "openai/gpt-4o"
}POST /v1/evals/run
Run deterministic scorers against a dataset to compute regression metrics.
POST /v1/keys
Requires an existing owner role API key.
Request Body:
{
"name": "marketing-team-key",
"role": "member",
"rate_limit_rpm": 120
}Response:
{
"id": "a1b2c3d4...",
"name": "marketing-team-key",
"key_prefix": "vx-live-...",
"raw_key": "vx-live-super-secret-string",
"role": "member"
}(Note: raw_key is only returned once upon creation).