API Reference
Base URL: https://api.veblyn.com/api/v1
All authenticated endpoints require a Bearer token in the Authorization header:
Authorization: Bearer vb_YOUR_KEY
Auth
/otp/requestallSend a one-time password to an email address for sign-in or signup.
{ "email": "you@example.com" }curl -X POST https://api.veblyn.com/api/v1/otp/request \
-H "Content-Type: application/json" \
-d '{"email": "you@example.com"}'{ "ok": true }/otp/verifyallVerify the OTP code and receive an API key.
{ "email": "you@example.com", "code": "482910" }curl -X POST https://api.veblyn.com/api/v1/otp/verify \
-H "Content-Type: application/json" \
-d '{"email": "you@example.com", "code": "482910"}'{ "api_key": "vb_abc123..." }/mefree+Return the authenticated user profile and current API usage.
curl -H "Authorization: Bearer vb_YOUR_KEY" \ https://api.veblyn.com/api/v1/me
{
"email": "you@example.com",
"display_name": "Jane",
"tier": "pro",
"api_call_today": 312,
"api_call_limit": 5000,
"created_at": "2026-01-15T09:00:00Z"
}/key/regeneratefree+Regenerate the API key for the authenticated user.
curl -X POST -H "Authorization: Bearer vb_YOUR_KEY" \ https://api.veblyn.com/api/v1/key/regenerate
{ "api_key": "vb_new789..." }Market
/marketfree+List venue-specific markets. Free tier gets delayed data.
| Name | Type | Required | Description |
|---|---|---|---|
| category | string | no | Filter by category |
| status | string | no | Filter by status |
| venue | string | no | Filter by venue (polymarket, kalshi) |
| limit | integer | no | Results per page, 1-200, default 50 |
| offset | integer | no | Pagination offset, default 0 |
curl -H "Authorization: Bearer vb_YOUR_KEY" \ "https://api.veblyn.com/api/v1/market?category=shipping&limit=2"
{
"market": [
{
"id": "2d4d9d0e-6ed4-57f0-9a90-42c36ff0a7ab",
"title": "Suez Canal disrupted through Q2 2026?",
"venue": "polymarket",
"category": "shipping",
"price": 0.62,
"bid": 0.61,
"ask": 0.63,
"volume": 284000,
"status": "active",
"snapshot_ts": "2026-04-01T14:30:00Z"
}
],
"total": 18
}/market/:idfree+Get one venue-specific market by UUID.
curl -H "Authorization: Bearer vb_YOUR_KEY" \ https://api.veblyn.com/api/v1/market/2d4d9d0e-6ed4-57f0-9a90-42c36ff0a7ab
{
"id": "2d4d9d0e-6ed4-57f0-9a90-42c36ff0a7ab",
"venue": "polymarket",
"title": "Suez Canal disrupted through Q2 2026?",
"category": "shipping",
"price": 0.62,
"bid": 0.61,
"ask": 0.63,
"volume": 284000,
"bid_depth": 12000,
"ask_depth": 9800,
"status": "active",
"outcome_label": "YES",
"resolution_ts": null,
"snapshot_ts": "2026-04-01T14:30:00Z"
}/market/:id/historypro+Get quote history for one market. Returns flat quote points only.
| Name | Type | Required | Description |
|---|---|---|---|
| start | datetime | no | Start of time range (ISO 8601) |
| end | datetime | no | End of time range (ISO 8601) |
| limit | integer | no | Max results, 1-2000, default 500 |
curl -H "Authorization: Bearer vb_YOUR_KEY" \ "https://api.veblyn.com/api/v1/market/2d4d9d0e-6ed4-57f0-9a90-42c36ff0a7ab/history?limit=3"
[
{
"ts": "2026-04-01T14:30:00Z",
"price": 0.62,
"bid": 0.61,
"ask": 0.63,
"volume": 284000,
"bid_depth": 12000,
"ask_depth": 9800,
"status": "active"
}
]Metric
/stream/:stream_id/metricfree+List metric series available under a stream.
curl -H "Authorization: Bearer vb_YOUR_KEY" \ "https://api.veblyn.com/api/v1/stream/portwatch/metric"
[
{
"id": "portwatch:suez:throughput_count",
"stream_id": "portwatch",
"entity_id": "suez",
"metric_name": "throughput_count",
"unit": "count",
"last_ts": "2026-04-01T12:00:00Z",
"latest_value": 42
}
]/metric/:metric_idpro+Get metric metadata.
curl -H "Authorization: Bearer vb_YOUR_KEY" \ "https://api.veblyn.com/api/v1/metric/portwatch:suez:throughput_count"
{
"id": "portwatch:suez:throughput_count",
"stream_id": "portwatch",
"entity_id": "suez",
"metric_name": "throughput_count",
"unit": "count",
"source": "portwatch-chokepoint",
"coverage": "observed",
"first_ts": "2026-03-15T00:00:00Z",
"last_ts": "2026-04-01T12:00:00Z",
"latest_value": 42
}/metric/:metric_id/historypro+Get raw metric history. Returns flat points only.
| Name | Type | Required | Description |
|---|---|---|---|
| start | datetime | no | Start of time range (ISO 8601) |
| end | datetime | no | End of time range (ISO 8601) |
| limit | integer | no | Max results, 1-2000, default 500 |
curl -H "Authorization: Bearer vb_YOUR_KEY" \ "https://api.veblyn.com/api/v1/metric/portwatch:suez:throughput_count/history?limit=3"
[
{
"ts": "2026-04-01T12:00:00Z",
"value": 42,
"unit": "count",
"coverage": "observed"
}
]Stream
/streamfree+List all real-world data streams.
curl -H "Authorization: Bearer vb_YOUR_KEY" \ https://api.veblyn.com/api/v1/stream
[
{
"id": "portwatch",
"name": "PortWatch AIS chokepoint data",
"category": "shipping",
"status": "active",
"metric_count": 30,
"poll_interval_sec": 3600
},
{
"id": "fred",
"name": "FRED macro economic data",
"category": "macro",
"status": "active",
"metric_count": 6,
"poll_interval_sec": 86400
}
]/stream/:stream_idfree+Get one stream summary document.
Billing
/billing/checkoutfree+Create a Stripe Checkout session for upgrading to Pro or Fund.
{ "tier": "pro" }curl -X POST -H "Authorization: Bearer vb_YOUR_KEY" \
-H "Content-Type: application/json" \
https://api.veblyn.com/api/v1/billing/checkout \
-d '{"tier": "pro"}'{ "url": "https://checkout.stripe.com/c/pay_..." }/billing/subscriptionfree+Return current subscription tier, Stripe subscription ID, and today\'s usage.
curl -H "Authorization: Bearer vb_YOUR_KEY" \ https://api.veblyn.com/api/v1/billing/subscription
{
"tier": "pro",
"stripe_subscription_id": "sub_abc123",
"api_call_today": 312,
"api_call_limit": 5000
}/billing/portalfree+Create a Stripe Customer Portal session for managing your subscription.
curl -X POST -H "Authorization: Bearer vb_YOUR_KEY" \ https://api.veblyn.com/api/v1/billing/portal
{ "url": "https://billing.stripe.com/p/session/..." }