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-uuid

curl

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.prisma

Export as Drizzle ORM schema

curl $OWB_BASE_URL/api/v1/models/$MODEL_ID/export/drizzle \
  -H "Authorization: Bearer $OWB_API_KEY" \
  -o schema.ts

Export as SQLAlchemy models

curl $OWB_BASE_URL/api/v1/models/$MODEL_ID/export/sqlalchemy \
  -H "Authorization: Bearer $OWB_API_KEY" \
  -o models.py

TypeScript

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;
}