Developer

API access, keys, usage, and rate limits.

K

Developer Portal

Veritas exposes a small, predictable JSON API. Bearer-token auth (Clerk) in production, dev header fallback in local.

API overview

One base URL

All endpoints share a single base URL and JSON in / JSON out. Bearer-token auth in production; dev header fallback in local.

base_url = "http://localhost:8000"
auth: Bearer <clerk_session_jwt>
        | X-Dev-User-Id: dev_user_local  (dev only)

API keys

Programmatic access

Long-lived API keys are rolling out to Publisher and Enterprise plans. Current deployments authenticate via the same Clerk session token as the dashboard.

  • • Per-key rate limits (separate from dashboard session)
  • • Scoped to read / write / admin
  • • Revocable from this page

Usage

This month

0API calls

Usage tracking ships with API keys. For now, your dashboard quota applies.

Rate limits

Per-session, sliding 60-second window. Authenticated requests only.

Free

5 / min

Sandbox access

Author

30 / min

Daily tools

Agency

120 / min

Team workflows

Publisher

600 / min

Editorial pipelines

Endpoints

Four surfaces. Use the same auth as the dashboard.

Book Opportunity API

Score a topic against demand, growth, competition, and opportunity signals.

Live
POST http://localhost:8000/opportunity/score

Example Request

{
  "topic": "Roman Empire",
  "category": "history"
}

Example Response

{
  "topic": "Roman Empire",
  "category": "history",
  "demand_score": 84,
  "growth_score": 71,
  "competition_score": 62,
  "opportunity_score": 78,
  "confidence": 73,
  "recommendation": "Pursue with a strong narrative frame.",
  "opportunity_window": "Open",
  "book": {
    "title": "The New Rome",
    "subtitle": "Power, Decline, and Legacy",
    "pattern": "empire_arc",
    "category": "history",
    "book_potential": 86,
    "reader_curiosity": 79,
    "commercial_appeal": 74,
    "passes_bookstore_test": true
  }
}
curl -X POST "http://localhost:8000/opportunity/score" \
  -H "Authorization: Bearer $CLERK_JWT" \
  -H "Content-Type: application/json" \
  -d '{"topic":"Roman Empire","category":"history"}'

Trend Intelligence API

Pull rising, falling, emerging, and predicted trends across seventeen categories.

Live
GET http://localhost:8000/trends?category=history&limit=8

Example Request

# No body — query params only

Example Response

{
  "items": [
    {
      "topic": "Late Antiquity",
      "category": "history",
      "change_pct": 38.4,
      "direction": "rising"
    },
    {
      "topic": "Mongol Empire",
      "category": "history",
      "change_pct": 21.7,
      "direction": "rising"
    },
    {
      "topic": "Industrial Revolution",
      "category": "history",
      "change_pct": 12.1,
      "direction": "rising"
    }
  ],
  "plan": "free",
  "limit": 10
}
curl "http://localhost:8000/trends?category=history&limit=8" \
  -H "Authorization: Bearer $CLERK_JWT"

Title Analysis API

Score a working title across five axes with reader-appeal, suggested rewrites, and structured alternatives.

Live
POST http://localhost:8000/title/score

Example Request

{
  "title": "The Roman Empire: A New History",
  "topic": "Roman Empire"
}

Example Response

{
  "title": "The Roman Empire: A New History",
  "overall_score": 87,
  "axes": [
    {
      "label": "SEO",
      "score": 82
    },
    {
      "label": "Curiosity",
      "score": 88
    },
    {
      "label": "Emotion",
      "score": 79
    },
    {
      "label": "Memorability",
      "score": 91
    },
    {
      "label": "Market fit",
      "score": 85
    }
  ],
  "suggested_titles": [
    {
      "title": "The Untold History of Roman Empire",
      "score": 98,
      "pattern": "untold_history"
    },
    {
      "title": "The Secret History of Roman Empire",
      "score": 96,
      "pattern": "secret_history"
    },
    {
      "title": "Roman Empire: The Untold Story",
      "score": 92,
      "pattern": "untold_colon"
    }
  ]
}
curl -X POST "http://localhost:8000/title/score" \
  -H "Authorization: Bearer $CLERK_JWT" \
  -H "Content-Type: application/json" \
  -d '{"title":"The Roman Empire: A New History","topic":"Roman Empire"}'

Publishing Signals API

Streaming publishing-signal feed. Designed for dashboards and trading-style UIs.

Early Access
GET http://localhost:8000/signals/rising?category=finance&horizon=90d

Example Request

# No body — query params only

Example Response

{
  "items": [
    {
      "topic": "Stablecoin Banking",
      "category": "finance",
      "score": 88,
      "change_pct": 32.1
    },
    {
      "topic": "Family Office Mechanics",
      "category": "finance",
      "score": 84,
      "change_pct": 18.4
    },
    {
      "topic": "Tokenized Treasuries",
      "category": "finance",
      "score": 76,
      "change_pct": 12.7
    }
  ]
}
curl "http://localhost:8000/signals/rising?category=finance&horizon=90d" \
  -H "Authorization: Bearer $CLERK_JWT"

Documentation

Full OpenAPI spec generated server-side.

Open interactive API docs →Download openapi.json