2026-06-26 · 4 min read
The API, built for integrations: analytics, webhooks, full link control.
Pull account-wide analytics, get every click pushed to your site with signed webhooks, and set every link field over the API. Everything new for wiring BLNQ into another product.
We took the developer's-eye view of the API and asked the obvious questions. Can I pull analytics? Can I create links in bulk? If I wanted to wire BLNQ into another product, what's missing? This round closes the gaps: account-wide analytics, writable webhooks so clicks land on your server in real time, and the full set of link fields on create and update. Same bearer-token auth, same JSON, same free read tier.
Account-wide analytics, one call
Per-link stats were already there. What was missing was the bird's-eye view: how is the whole account doing? GET /v1/analytics returns totals (clicks, QR scans, active links) plus by-day, by-country, by-browser, by-device, and by-referrer breakdowns, and your top links, aggregated across every link you own. Build a dashboard on your own site without paging each link and summing it yourself. It's a read, so it works on every plan, capped to your plan's analytics window.
curl 'https://api.blnq.it/v1/analytics?range=30d' \
-H "Authorization: Bearer blnq_live_..."
Webhooks: every click, pushed and signed
The biggest piece for connecting to another site is not pulling data, it's getting pushed. Register a webhook and BLNQ POSTs every click to your endpoint the moment it happens, with the slug, destination, country, device, referrer, and whether it was a QR scan. Each delivery is signed with HMAC-SHA256 in an x-blnq-signature header so you can prove it came from us.
curl -X POST https://api.blnq.it/v1/webhooks \
-H "Authorization: Bearer blnq_live_..." \
-H "Content-Type: application/json" \
-d '{ "url": "https://yoursite.com/blnq", "events": ["click"] }'
The signing secret comes back once in that response, store it. On each delivery, recompute the HMAC over the raw body with the secret and compare it to the header before you trust the event. Manage hooks with PATCH /v1/webhooks?id=<id> and DELETE /v1/webhooks?id=<id>; the list endpoint shows has_secret but never the secret. Webhook delivery already powered the dashboard's integrations; now you can self-register endpoints from code.
Set the whole link, not just the URL
Create and PATCH used to take url, slug, qr_color, and a custom domain. Now single create and update also accept a title (for your own dashboard), an expiry (expires_at) and a go-live time (active_from), a pause switch (active), and a campaign to file it under (campaign_id). They all come back on the link object, so what you read matches what you wrote.
curl -X POST https://api.blnq.it/v1/links \
-H "Authorization: Bearer blnq_live_..." \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/spring",
"slug": "spring",
"title": "Spring sale",
"expires_at": "2026-12-31T23:59:59Z"
}'
Still here: bulk, search, QR, and /me
The rest of the surface is unchanged and still does the heavy lifting: create up to 50 links in one request with a links array, page and sort and search your list, pull a QR image for any link, and read your plan, limits, and remaining headroom from GET /v1/me. Per-link /stats now also carries a by_referer breakdown to match the account view.
The fastest way to wire it up
Everything above is documented at /api with copy-paste curl, there's a machine-readable OpenAPI 3.1 spec at /openapi.yaml, and a downloadable agent skill (SKILL.md, or a .zip for Claude's Skills section) so your AI assistant can write the integration for you. Reads are free on every plan; creating and editing links, and managing webhooks, need any paid plan.