Links
All endpoints require links:read or links:write as noted.
List links
Section titled “List links”GET /v1/links — scope links:read
curl https://api.neon.xengo.io/v1/links \ -H "Authorization: Bearer $XENGO_API_KEY"{ "links": [ { "code": "spring24", "shortUrl": "https://go.acme.com/spring24", "destination": "https://acme.com/spring-offer", "status": "active", "tags": { "campaign": "spring" }, "lastClickAt": "2026-07-12T11:20:00+00:00" } ]}Create a link
Section titled “Create a link”POST /v1/links — scope links:write
| Field | Type | Notes |
|---|---|---|
destination |
string, required | Screened before the link goes live |
code |
string | Custom stub (≤64 chars); omit for auto |
domain |
string | One of your verified domains; omit for default |
tags |
object | Up to 25 key/value pairs |
expiresAt |
ISO 8601 | Visitors see a branded expiry page after this |
notifyChannels |
string[] | Channel ids to alert for this link |
curl -X POST https://api.neon.xengo.io/v1/links \ -H "Authorization: Bearer $XENGO_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "destination": "https://acme.com/spring-offer", "code": "spring24", "tags": { "campaign": "spring", "site": "leeds" }, "notifyChannels": ["4a0da012e0f56677"] }'Fetch a link
Section titled “Fetch a link”GET /v1/links/{code} — scope links:read
Update / re-point a link
Section titled “Update / re-point a link”PATCH /v1/links/{code} — scope links:write
The headline move: change destination and the live link — and any printed
QR encoding it — re-points instantly. Also accepts status
(active/disabled), tags, expiresAt, notifyChannels.
curl -X PATCH https://api.neon.xengo.io/v1/links/spring24 \ -H "Authorization: Bearer $XENGO_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "destination": "https://acme.com/summer-offer" }'Destination updates are never metered, on any plan.
Delete a link
Section titled “Delete a link”DELETE /v1/links/{code} — scope links:write
curl -X DELETE https://api.neon.xengo.io/v1/links/spring24 \ -H "Authorization: Bearer $XENGO_API_KEY"Deletion is permanent (the code becomes available again). If you just want to
stop traffic, PATCH the status to disabled instead — that’s reversible.
