Pixel API overview and quickstart
Pull the website analytics you see in Admaxxer — and send goals, payments and events from your own server — over a small JSON API at https://admaxxer.com/api/v1. Every request carries a workspace API key and only ever sees that workspace's data.
REST + JSON · Bearer API keys · One workspace per key · 60 requests per minute
What you can do with it
- Read reports. Top pages, referrers, UTM campaigns, countries, devices, browsers, operating systems, and visitor or revenue trends for any website in your workspace — built with the same report logic as your dashboard.
- See who's on your site right now. Live visitor and event counts for the last five minutes, overall and by country.
- List your websites and get the website ID that every report and write call needs.
- Send data from your server. Record goal conversions, payments, pageviews and visitor identities where the browser pixel can't run — a checkout backend, a billing webhook, a background job.
- Save filter sets. Store named segments for each website and fetch them back.
Base URL
https://admaxxer.com/api/v1
Pixel API paths sit under /pixel/ — for example https://admaxxer.com/api/v1/pixel/websites. Requests and responses are JSON; send Content-Type: application/json on any request with a body. The API version is part of the path.
Authentication
Send a workspace API key on every request: Authorization: Bearer wk_…. Create keys in Settings › API Keys. A key belongs to one workspace and can only do what its scopes allow — pixel:read to read, pixel:write to send data. Your workspace always comes from the key; there is no workspace parameter. Full details: Authentication.
Keep keys on your server
Anyone who has a key can use it. Call the API from your backend or a scheduled job — never from browser JavaScript or an app bundle — and keep keys out of code repositories.
Your first request
The examples read your key from an environment variable, so you set it once instead of pasting it into every command:
export ADMAXXER_API_KEY="wk_your_key_here"
1. Check the key
GET /me works with any valid key, whatever its scopes. It returns the key's name, its scopes and the workspace it belongs to:
curl https://admaxxer.com/api/v1/me \
-H "Authorization: Bearer $ADMAXXER_API_KEY"
{
"apiKey": {
"id": "…",
"name": "warehouse-etl",
"scopes": ["pixel:read"]
},
"workspace": { "id": "…" }
}
2. Find your website ID
curl https://admaxxer.com/api/v1/pixel/websites \
-H "Authorization: Bearer $ADMAXXER_API_KEY"
Each website in data has a websiteId that starts with admx_ — the same value as data-website-id on your pixel script tag. Report and write calls take it as website_id.
3. Pull a report
curl "https://admaxxer.com/api/v1/pixel/analytics/pages?website_id=admx_your_site_id&from_date=2026-09-01&to_date=2026-09-30" \
-H "Authorization: Bearer $ADMAXXER_API_KEY"
That returns your top pages for September with views, sessions, bounces, bounce rate and average time. Every endpoint and parameter is listed on Endpoints.
How responses look
A successful call returns a status, the payload in data, and a meta.request_id that identifies the response:
{
"status": "success",
"data": { "…": "…" },
"meta": { "request_id": "req_4f8e2c1a-…" }
}
- Reports put their rows in
data.data, with the row count indata.rows, query timing indata.statistics(can benull) anddata.data_statusset took. - Lists add a
paginationobject withhas_moreand, when there is another page,next_cursor. GET /meis the exception: it returns its object directly, without the wrapper.- Errors return an
errorobject with a stablecodeto branch on — see Errors. - Large counts arrive as strings — for example
"views": "4210"— so they keep full precision. Convert them before doing maths.
Limits at a glance
- 60 requests per minute per workspace, shared by every key in the workspace. See Rate limits.
- Up to 1,000 rows per call on reports and lists (
limit), with cursor pagination on the website list. - One record per write. There is no batch endpoint, so the API suits payments, sign-ups and other business events rather than streaming page traffic. Leave page tracking to the pixel — its traffic doesn't count toward the API limit.
- Your plan's data retention applies. A report that starts before the earliest day your plan keeps begins at that day instead.
What the API doesn't do
- Create or edit goals, alerts, scheduled reports or share links — manage those in the dashboard.
- Read another workspace. A key is tied to one workspace, and nothing in a request can point it elsewhere.
- Break traffic down by region or city. Visitor location is recorded at country level.
In this reference
- Authentication — create, scope, rotate and revoke keys.
- Endpoints — every endpoint with its scope, parameters and checked examples.
- Rate limits — the per-minute budget and the headers that track it.
- Errors — every error code, what causes it, and when to retry.
- API keys guide — a step-by-step walkthrough of the Settings screen.
Frequently asked questions
Q: Is the API data the same as my dashboard?
Yes — the report endpoints read the same tracked data with the same report logic the dashboard uses. The API simply returns the rows instead of drawing them.
Q: Where do I find my website ID?
It's the data-website-id value on your pixel script tag (it starts with admx_), and it's returned as websiteId by GET /pixel/websites.
Q: Can I call the API from the browser?
Don't — a key in browser code or an app bundle can be copied by anyone who loads it. Call the API from your server. To connect a browser visitor to a server-side event, read the visitor ID in the browser with window.admaxxer.getVisitorId() and send it to your server along with the order or sign-up.
Q: Which permissions does my key need?
pixel:read covers every GET endpoint. Add pixel:write only for keys that send goals, payments, events or identities, or manage saved segments. See Authentication.
Q: Why is a report empty?
Usually one of three things: the website had no tracked traffic in that range; the range starts before your plan's data retention, so it begins later than you asked; or a filter matched nothing (filter values are case-sensitive). A website_id from another workspace returns 403 forbidden rather than an empty report.
Related guides
- Authentication — Create, scope, rotate and revoke Pixel API keys.
- Endpoints — Every endpoint with scopes, parameters and examples.
- Rate limits — 60 requests per minute per workspace and the headers that track it.
- Errors — Error codes, causes, fixes and retry rules.
- API keys guide — Step-by-step walkthrough of Settings › API Keys.
- Developer reference — The wider developer documentation for Admaxxer.