The Vexo Public API: Query Your Analytics Programmatically

A documented public REST API for your events and aggregates — with an interactive OpenAPI 3 / Swagger reference and API access managed from settings

August 21, 2026

Vexo TeamCo-Founder
Jump to section

TL;DR

  • Public REST API: query your Vexo analytics data programmatically over the /external API — app-scoped, authenticated with your API key.
  • Two read endpoints: list raw events (paginated) and pull bucketed aggregates (counts grouped by a dimension).
  • OpenAPI 3 + Swagger UI: every endpoint, parameter, and response is documented as an interactive OpenAPI 3 reference you can call from the browser.
  • In settings: find your API key, try a live aggregate query, and open the API Reference under each app's Data export & API settings.

Vexo has always been happy to hand your data back to you. Our integrations and data export post covered the batch side of that story — scheduled warehouse exports, prebuilt integrations, and outbound webhooks that push events as they happen. This post is about the piece that was missing: a documented public REST API you can query on demand. When you want to ask a question and get an answer back right now — from a script, a dashboard, a backend job — you now have a real endpoint to call.

A public API for your analytics data

The public API lives under /external and is scoped to a single app. Every request carries your app's API key in the Authorization header — the same key you already use to send data in with the SDK now lets you read data out. There's no separate OAuth dance or token exchange to set up; if you have the key, you can make the call.

Two read endpoints ship today, and they cover the two shapes you usually want:

EndpointWhat it returns
List eventsPaginated raw events for the app, bounded by a time window — the individual rows, for when you want the events themselves rather than a rollup.
AggregateBucketed counts — pick a metric and a dimension to group by (and optionally filter by event type or name), and get back the rolled-up numbers behind a chart without pulling every row.

Both endpoints are rate-limited and each query is bounded to a time window, so a single call can't accidentally try to scan all of history. The exact parameters, limits, and response shapes are all in the interactive reference — which is the next section — so you never have to guess a field name or read it off a blog post that's gone stale.

Documented with OpenAPI 3 and Swagger UI

An API is only as good as its docs, so the public API is described by an OpenAPI 3 specification — a machine-readable contract for every endpoint, parameter, and response. That spec powers two things you can use directly:

  • An interactive Swagger UI reference where you can read each endpoint, expand its parameters, authenticate with your API key, and send a real request from the browser to see the actual response — no client to write first.
  • The raw OpenAPI spec as JSON, so you can generate a typed client in your language of choice, import it into Postman or Insomnia, or wire it into whatever tooling reads OpenAPI.

Because the reference is generated from the API itself, it doesn't drift: the documentation is the same source of truth the server runs on. When we add or change an endpoint, the reference moves with it.

Manage API access and data export in settings

Everything is wired into each app's settings under Data export & API. That one area brings together the ways your data leaves Vexo — outbound webhooks and scheduled exports (covered in the data export post) alongside the new read/aggregate API. For the public API specifically you'll find:

  • Your API key, ready to copy, with the reminder to treat it like a secret.
  • A short reference for the list and aggregate endpoints, with a ready-to-run curl snippet already filled in with your app's ID and key.
  • A “try an aggregate query” panel — pick a metric, a group-by dimension, and an event type, hit run, and see the bucketed results as a live bar chart against your recent events.
  • An API Reference section that links straight out to the Swagger UI and the OpenAPI spec.

So you can go from “I wonder if there's an API” to a working query without leaving the dashboard — try it in the panel, grab the curl, then open the full reference when you're ready to build something real against it.

What you'd build with it

The API is the on-demand complement to export and webhooks. Reach for scheduled export when you want raw events landing in a warehouse on a cadence, and for a webhook when you want an event pushed to you the moment it happens. Reach for the public API when you want to ask the question — pull the aggregate behind a custom internal dashboard, drop a live number into a status page, back a scheduled report with a couple of aggregate calls, or spot-check a metric from a script during a release. It's the “data out” path for whenever the answer needs to be fetched, not waited for.

Frequently Asked Questions

How do I authenticate?

With your app's API key in the Authorization header — the same key the SDK uses. You'll find it under the app's Data export & API settings; treat it like a secret.

Where are the full endpoint docs?

In the interactive OpenAPI 3 / Swagger UI reference linked from the API Reference section in settings. It lists every endpoint, parameter, and response, and lets you send a live request from the browser. There's also a raw OpenAPI spec (JSON) you can feed to a client generator or Postman.

What can I query today?

Two read endpoints: list raw events (paginated, within a time window) and aggregate (bucketed counts by a chosen metric and group-by dimension, with optional event-type or event-name filters). See the reference for the exact parameters and limits.

Is there a limit on how much I can pull?

Yes. The endpoints are rate-limited and each query is bounded to a time window, so a single call is always scoped rather than scanning all of history. The current limits are documented in the reference.

How is this different from export and webhooks?

Export is scheduled batch files to your warehouse; webhooks push each event to you in real time. The public API is pull-based and on demand — you call it when you want an answer. They're complementary; see the data export post for the batch side.

Building on the API? We'd love to hear what you're making. Reach out at hello@vexo.co or join our Discord.

Start today for free

Our free tier is the perfect starting point to try vexo. You can upgrade at any time!