API Access

Automate links & QR with the xengo API

A clean REST API with bearer auth and JSON — create, edit, list and track branded links and dynamic QR in code. Included from the Pro plan.

Built for developers

One key, full control

Everything you do in the console, you can do in code. Mint an API key, call a simple REST endpoint with a bearer token, and create, re-point, list, tag and measure links and QR at scale — wired into your own systems, CI or automations.

  1. 1

    Create a key

    Generate an API key in the console under API Keys (Pro plan and above).

  2. 2

    Call the API

    Send a bearer-authenticated request to api.xengo.io — plain REST and JSON.

  3. 3

    Automate

    Create, re-point, tag and track links and QR in bulk from your own code or tools.

Every link, in code

Create branded links on your own domain, re-point them, tag them and delete them — the same operations you run in the console, over a clean REST API.

  • Create, update, list and delete links
  • Re-point a live link without changing the URL
  • Set tags, expiry and notify channels per link

Bulk-create and automate

Spin up thousands of links in a single call, or wire link creation into your CRM, CI or campaign tooling. The API is the console — scriptable.

  • Bulk endpoint for high-volume jobs
  • Wire into your CRM, CI or automations
  • Pull per-link, bot-filtered click stats
See it in action

The console, in a few lines of code

Bearer-authenticated REST with JSON. Pick an operation:

api.xengo.io
Request
curl -X POST https://api.xengo.io/links \
  -H "Authorization: Bearer $XENGO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "destination": "https://acme.com/spring-sale",
    "domain": "go.acme.com",
    "code": "spring",
    "tags": { "campaign": "spring", "channel": "newsletter" },
    "notifyChannels": ["slack-growth"]
  }'
Response 201 Created
{
  "code": "spring",
  "shortUrl": "https://go.acme.com/spring",
  "destination": "https://acme.com/spring-sale",
  "domain": "go.acme.com",
  "status": "active",
  "tags": { "campaign": "spring", "channel": "newsletter" },
  "notifyChannels": ["slack-growth"],
  "createdAt": "2026-07-03T14:20:00Z",
  "clicks24h": 0
}
Request
curl https://api.xengo.io/links \
  -H "Authorization: Bearer $XENGO_API_KEY"
Response 200 OK
{
  "links": [
    {
      "code": "spring",
      "shortUrl": "https://go.acme.com/spring",
      "destination": "https://acme.com/spring-sale",
      "status": "active",
      "clicks24h": 128,
      "lastClickAt": "2026-07-03T13:59:11Z"
    },
    {
      "code": "ios-app",
      "shortUrl": "https://go.acme.com/ios-app",
      "destination": "https://apps.apple.com/app/acme",
      "status": "active",
      "clicks24h": 64
    }
  ]
}
Request
curl -X PATCH https://api.xengo.io/links/spring \
  -H "Authorization: Bearer $XENGO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "destination": "https://acme.com/summer-sale" }'
Response 200 OK
{
  "code": "spring",
  "shortUrl": "https://go.acme.com/spring",
  "destination": "https://acme.com/summer-sale",
  "status": "active",
  "createdAt": "2026-07-03T14:20:00Z",
  "clicks24h": 128
}
Request
curl -i -X DELETE https://api.xengo.io/links/spring \
  -H "Authorization: Bearer $XENGO_API_KEY"
Response 204 No Content
HTTP/1.1 204 No Content
Request
curl "https://api.xengo.io/links/spring/stats?window=24h" \
  -H "Authorization: Bearer $XENGO_API_KEY"
Response 200 OK
{
  "window": "24h",
  "total": 128,
  "points": [
    { "hour": "2026-07-03T12:00Z", "count": 41 },
    { "hour": "2026-07-03T13:00Z", "count": 87 }
  ]
}

Everything you'd expect — and the parts you wouldn't

Bearer auth

Authenticate with an API key as a bearer token over HTTPS.

Plain REST + JSON

Predictable endpoints under api.xengo.io — JSON in, JSON out.

Full link lifecycle

Create, update, list, delete and re-point links and their QR.

Bulk endpoint

Create many links in a single request.

Per-link stats

Pull bot-filtered click and scan counts per link.

Pro plan

Full API access is included from the Pro tier (£39/mo).

Frequently asked questions

How do I authenticate?

Generate an API key in the console (API Keys), then send it as a bearer token — Authorization: Bearer <key> — over HTTPS.

Which plan includes API access?

The API is included from the Pro plan (£39/mo); Business adds higher rate limits.

What can the API do?

Create, update, list, delete and re-point links, create in bulk, and pull per-link click and scan stats — the same operations as the console.

Can I create links in bulk?

Yes — the bulk endpoint creates many links in one request and returns how many were created, failed and requested.

Can I trigger notifications via the API?

Yes — set notifyChannels on a link and its clicks and scans fire your alerts, exactly as they do in the console.

One platform. Everything a link should do.

Smart URLs, dynamic QR codes and a full API — branded on your own domain, safety-screened, and tracked. Build, re-point and measure it all in one place.

Start free trial
1,284 clicks
go.acme.com/spring
1 London 412
2 Manchester 168
3 Bristol 94

Smart URLs

Branded short links on a domain you control — editable, screened, and tracked.

Popular Smart URLs features

  • Your own custom domain, auto-HTTPS
  • Re-point live links without reprinting
  • Every destination safety-screened
  • Honest, bot-filtered analytics

Dynamic QR

Branded QR codes you can re-point any time — never reprint the poster again.

Popular Dynamic QR features

  • Editable destination behind every code
  • Your brand colours + logo
  • Real-time scan alerts
  • Per-code scan analytics
$ curl -X POST api.xengo.io/v1/links
{
  "domain": "go.acme.com",
  "url": "https://acme.com/…"
}
→ 201 go.acme.com/aB3xK

API

Create and manage links + QR at scale, straight from your own tools.

Popular API features

  • REST API with scoped keys
  • Bulk-create thousands of links
  • Programmatic QR generation
  • Webhooks + click / scan alerts

Build on the xengo API

Create a key and automate branded links and QR in code. Included from Pro.