API Reference
Code Examples
Practical examples for common API operations. Set the following environment variables before running:
export OWB_BASE_URL=https://your-deployment-url.com
export OWB_API_KEY=owb_your_key_here
export MODEL_ID=your-model-uuidcurl
List your models
curl $OWB_BASE_URL/api/v1/models \
-H "Authorization: Bearer $OWB_API_KEY"Get entity types for a model
curl $OWB_BASE_URL/api/v1/models/$MODEL_ID/entity-types \
-H "Authorization: Bearer $OWB_API_KEY"Export as Prisma schema
curl $OWB_BASE_URL/api/v1/models/$MODEL_ID/export/prisma \
-H "Authorization: Bearer $OWB_API_KEY" \
-o schema.prismaExport as Drizzle ORM schema
curl $OWB_BASE_URL/api/v1/models/$MODEL_ID/export/drizzle \
-H "Authorization: Bearer $OWB_API_KEY" \
-o schema.tsExport as SQLAlchemy models
curl $OWB_BASE_URL/api/v1/models/$MODEL_ID/export/sqlalchemy \
-H "Authorization: Bearer $OWB_API_KEY" \
-o models.pyTypeScript
const BASE = `${process.env.OWB_BASE_URL}/api/v1`;
const KEY = process.env.OWB_API_KEY!;
const headers = { Authorization: `Bearer ${KEY}` };
// List models
const { data: models } = await fetch(`${BASE}/models`, { headers })
.then((r) => r.json());
// Get entity types
const modelId = models[0].id;
const { data: entityTypes } = await fetch(
`${BASE}/models/${modelId}/entity-types`,
{ headers }
).then((r) => r.json());
console.log(entityTypes.map((et: { name: string }) => et.name));
// Export as GraphQL SDL
const sdl = await fetch(
`${BASE}/models/${modelId}/export/graphql`,
{ headers }
).then((r) => r.text());
console.log(sdl);Python
import os
import requests
BASE = f"{os.environ['OWB_BASE_URL']}/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['OWB_API_KEY']}"}
# List models
resp = requests.get(f"{BASE}/models", headers=HEADERS)
resp.raise_for_status()
models = resp.json()["data"]
# Get relationships for the first model
model_id = models[0]["id"]
resp = requests.get(f"{BASE}/models/{model_id}/relationships", headers=HEADERS)
resp.raise_for_status()
relationships = resp.json()["data"]
for rel in relationships:
print(f"{rel['name']} ({rel['cardinality']})")
# Export as JSON Schema
resp = requests.get(
f"{BASE}/models/{model_id}/export/json-schema",
headers=HEADERS
)
resp.raise_for_status()
schema = resp.json()Handling rate limits
async function fetchWithRetry(url: string, options: RequestInit, retries = 3) {
const res = await fetch(url, options);
if (res.status === 429 && retries > 0) {
const reset = Number(res.headers.get("X-RateLimit-Reset") ?? 0);
const waitMs = Math.max(0, reset * 1000 - Date.now()) + 100;
await new Promise((r) => setTimeout(r, waitMs));
return fetchWithRetry(url, options, retries - 1);
}
return res;
}