BKO Ventures · Insights Agent

Insights Reporting API

A token-secured, machine-callable endpoint for revenue, spend, and profit per exchange — the same figures Insights Agent answers in chat, available for programmatic polling.

https://api.bkoventures.com
nexus limelight one_bid visible_measures

Overview

One endpoint, two shapes. Call GET /report with no parameters for a same-day snapshot — revenue today vs. yesterday, plus month-to-date spend and profit — or add start/end for a custom time series. Both return JSON, scoped to the four exchanges Insights Agent already ingests.

This API is separate from the Insights Agent chat UI. It shares no session, cookie, or Google sign-in with it — access is entirely by bearer token, described below.

Authentication

Every route except /health requires a bearer token:

header
Authorization: Bearer ira_<token_id>.<secret>

There's no self-serve signup form. Tokens are issued, listed, and revoked entirely from inside the Insights Agent chat — the same Google-account-gated tool that already has an audit trail, rather than a second admin surface to secure separately.

Generating a token

Open Insights Agent chat and ask in plain language:

chat prompt
Generate a token to the insights reporting API, valid for 30 days

Give it a lifetime in days, or say unlimited for a token that never expires until you revoke it. Add a label — e.g. "...label it '140Proof dashboard'" — to make it easy to identify later.

The raw token appears exactly once, in the response:

response · shown once
{
  "token": "ira_58b23fecaf13.E2goZDFDWQys99Qhx7Omd7jMzpPkfYrdeAnKf-ETgI8",
  "token_id": "58b23fecaf13",
  "label": "140Proof dashboard",
  "expires_at": "2026-10-04T18:00:00+00:00",
  "warning": "This token is shown ONLY ONCE and cannot be retrieved again..."
}

Copy it immediately — only its hash is ever stored server-side. A lost token can't be recovered, only revoked and replaced.

Listing & revoking

"List my reporting API tokens" shows every token — label, creator, dates, revoked/last-used status — never the raw secret. "Revoke token 58b23fecaf13" invalidates it immediately and permanently.

Default report

No query parameters — today's snapshot, per exchange, plus a combined total.

FieldMeaning
revenue_today / _yesterdayWhat demand partners spent through BKO that day.
pct_changeDay-over-day % change. null if yesterday was zero.
mtd_spendSame metric as revenue — summed month-to-date, not a different figure.
mtd_profitMTD spend minus MTD supply payout — BKO's actual margin.

All figures exclude BKO's own cross-platform internal trading and use UTC day/month boundaries.

What it looks like

GET /report

      

Custom range

Add start and end for a flat time series instead — no "vs. yesterday" or MTD framing, since neither generalizes to an arbitrary window.

ParameterRequiredDescription
startwith endISO 8601 timestamp, inclusive.
endwith startISO 8601 timestamp, exclusive.
group_byno — default dayhour, day, or month.

start and end must arrive together — one without the other is a 400, never a silent fallback to the default view.

GET /report?start=2026-09-01T00:00:00&end=2026-09-04T00:00:00&group_by=day

      

(Truncated — a real call returns one row per platform per bucket across the full range, ordered by source, then period.)

Request builder

Build the exact call for your integration. Swap in your own token before running it.


        

Errors

Every error returns {"detail": "..."}.

StatusCauseDetail
401No Authorization headermissing Authorization: Bearer <token> header
401Malformed tokenmalformed token
401Token doesn't existunknown token
401Token was revokedtoken has been revoked
401Lifetime expiredtoken has expired
401Secret doesn't matchinvalid token
400Only one of start/end givenstart and end must both be provided together...
400Bad group_bygroup_by must be one of ('hour','day','month')...

Notes

  • No rate limiting is enforced today — be a reasonable caller regardless; this queries a 150M+-row warehouse table on every call.
  • Tokens are global in scope — any valid token sees all four platforms. There's no per-partner data scoping yet.
  • Revocation is immediate — no grace period.
  • GET /health needs no token and touches no data — use it for uptime checks.