Developer API · v1

One REST API for stats, reviews & reputation.

Pull traffic analytics, reviews, aggregate ratings, phone intelligence and scam blacklist checks from a single JSON endpoint. Simple key auth, CORS-open, generous free tier.

100 calls/day free Key auth CORS-open Quota echoed

Free key · no card, no waiting room

One key for every endpoint

Your code asks, our data answers

Plain GET over HTTPS, JSON back, the same key everywhere. No SDK to install, no OAuth dance, nothing to keep in sync between your build and ours.

Your code

A script, a dashboard, a bot or a static page in the browser — anything that can send an HTTP request.

  • GET /api/v1/stats
  • X-Api-Key: ak_…

astrina.io/api/v1

The key is checked, the quota is counted, the response is assembled and CORS headers are attached.

  • Key auth
  • Quota echoed

The same data the site runs on

Analytics from the counter, reviews and ratings from the catalog, phone intelligence and the threat lists — one source, no export jobs.

  • { "summary": … }
  • { "quota": … }
One call, one clean response

Request in, JSON out

The same request in the language you already write. Pick a tab — the response on the right does not change.

terminal
# authenticated request
curl -s https://astrina.io/api/v1/stats \
  -H "X-Api-Key: ak_9f3c…d21a" \
  -d site=example.com \
  -d period=7d -G
server.mjs
const r = await fetch(
  "https://astrina.io/api/v1/stats?site=example.com&period=7d",
  { headers: { "X-Api-Key": "ak_9f3c…d21a" } });
const { summary, quota } = await r.json();
stats.php
$ch = curl_init('https://astrina.io/api/v1/stats'
    . '?site=example.com&period=7d');
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER    => ['X-Api-Key: ak_9f3c…d21a'],
    CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);
stats.py
import requests

r = requests.get("https://astrina.io/api/v1/stats",
    params={"site": "example.com", "period": "7d"},
    headers={"X-Api-Key": "ak_9f3c…d21a"})
print(r.json()["summary"], r.json()["quota"])
application/json200 OK
{
  "site": "example.com",
  "period": "7d",
  "summary": {
    "visitors": 18432,
    "pageviews": 51209,
    "visits": 22984,
    "online_now": 37
  },
  "quota": { "used": 128, "limit": 5000 }
}

Every response echoes your quota object — no separate metering call, no guesswork about how many requests you have left.

No SDK required

Built to drop straight into your stack

Simple key auth

One key, two ways to send it — the X-Api-Key header or Authorization: Bearer. Never in the URL, so it cannot leak into logs. Rotate it any time from your dashboard.

X-Api-Key: ak_9f3c…d21a
Authorization: Bearer ak_…

Quota echoed, always

Each payload includes used and limit so you can back off gracefully. Over the line? A clean 429 with the numbers attached.

HTTP/2 429  Retry-After: 31400
{ "error": "Daily quota exceeded",
  "limit": 5000, "used": 5000 }

CORS-open by design

Public endpoints return Access-Control-Allow-Origin: *, so reviews, ratings, phone and blacklist checks can be called straight from the browser. Your own /stats stays server-to-server.

/reviews · /rating · /phone · /blacklist
/stats — server-to-server
Start free · upgrade only when you grow

Quotas that scale with you

Free no card
100
/day
€0 forever
Pro
5,000
/day
included with Pro · €19/mo
Business
25,000
/day
included with Business · €59/mo
Business+
100,000
/day
included with Business Plus · €99/mo

API access is bundled with every paid plan — no metered surprises. Cards & crypto via Payora.

Under five minutes

Live in three steps

Grab your key

Create a free account and copy your key from /my/api.php. It looks like ak_… and works instantly.

Call an endpoint

Hit /api/v1/stats, /reviews, /rating, /phone or /blacklist with your key attached. Plain GET, plain JSON.

Read the quota

Parse the quota object on every response and you always know where you stand. No dashboards to babysit.

Before you write the first line

Questions developers ask first

Do I need an account to try it?

Yes — the key is what counts your quota. A free account gives you 100 calls a day on every endpoint, with no card and no trial clock.

What happens when I run out of quota?

The endpoint answers 429 with your limit and used, and a Retry-After header that counts down to 00:00 UTC, when the daily quota resets. Every successful response also carries X-RateLimit-Remaining, so your code can slow down before it hits the line.

Can I call it from the browser?

Reviews, ratings, phone and blacklist checks — yes, they are CORS-open. /stats returns your own analytics and is readable only server-to-server. A key shipped to the browser is visible to anyone who opens the page, so give public widgets their own named key and revoke it the moment you no longer need it.

Is there a sandbox or a separate test key?

Yes. In the dashboard you can create a sandbox key with its own quota of 25 calls a day, independent of your plan. It reaches the stats and tools endpoints and answers from the same live data, so what you see while building is what you ship.

Ship your first request today

Free key, 100 calls a day, every endpoint unlocked. No credit card, no waiting room.

What this page answers

  • website analytics API
  • reviews API
  • phone lookup API
  • free REST API for developers
  • what is web analytics api
  • how web analytics api works
  • web analytics api explained
  • web analytics api guide
  • how to start with web analytics api
  • web analytics api reviews
  • is web analytics api worth it
  • web analytics api pricing
  • web analytics api alternatives
  • web analytics api for beginners
  • why web analytics api
  • web analytics api — what you get