ExaLink API
Build trackable communication experiences with smart links and analytics. Shorten destinations, brand URLs, attach UTM parameters, gate access, and measure every click — from SMS, WhatsApp, email, or any channel.
Smart Short Links
Turn long destinations into clean short URLs on sndx.in with optional custom slugs.
Click Analytics
Track total clicks, unique visitors, countries, devices, referrers, and timeseries — all via API.
UTM Automation
Attach source, medium, campaign, term, and content parameters so every click is attribution-ready.
Access Controls
Password-protect links, set expiry timestamps, and cap max clicks for campaigns and gated content.
Real-time Webhooks
Receive exalink.click and exalink.converted events the moment users engage with your links.
Branded Domains
Serve links from your custom domain (e.g. go.yourbrand.com) once verified in the dashboard.
<50ms
p95 edge redirect
~1s
click to API visibility
100/s
per API key
Unlimited
or set per link
Authentication
Authorization: Basic <token>. Auth guide →Create your first trackable smart link in under a minute. Base URL: https://api.sendexa.co
curl -X POST 'https://api.sendexa.co/v1/exalink/links' \-H 'Content-Type: application/json' \-H 'Authorization: Basic YOUR_DASHBOARD_BASE64_TOKEN' \-d '{"destination": "https://shop.example.com/summer-sale","slug": "summer26","title": "Summer Sale 2026","utm": {"source": "sms","medium": "campaign","campaign": "summer_sale_2026"}}'
Response
{"success": true,"code": "LINK_CREATED","message": "Smart link created successfully.","requestId": "REQ-1782200144001","timestamp": "2026-07-12T10:15:44.001Z","data": {"id": "link_01HZXK9P2M7QVR8N4W3T6Y5B0A","shortUrl": "https://sndx.in/summer26","slug": "summer26","domain": "sndx.in","destination": "https://shop.example.com/summer-sale?utm_source=sms&utm_medium=campaign&utm_campaign=summer_sale_2026","title": "Summer Sale 2026","status": "active","utm": {"source": "sms","medium": "campaign","campaign": "summer_sale_2026","term": null,"content": null},"passwordProtected": false,"maxClicks": null,"expiresAt": null,"clicks": 0,"uniqueClicks": 0,"createdAt": "2026-07-12T10:15:44.001Z","updatedAt": "2026-07-12T10:15:44.001Z"}}
API Endpoints
All paths are relative to https://api.sendexa.co.
/v1/exalink/linksCreate a trackable smart link with destination, slug, UTM, expiry, and access rules.
/v1/exalink/links/:idRetrieve a single link's configuration, short URL, and lifetime counters.
/v1/exalink/links/:idChange destination, title, UTM params, password, expiry, or pause the link.
/v1/exalink/links/:id/analyticsClicks, countries, devices, referrers, and timeseries for a link or date range.
/v1/exalink/links/:idPermanently remove a link. Existing short URLs stop resolving immediately.
WebhooksSubscribe to exalink.click and exalink.converted for real-time engagement data.
Create
POST a destination URL (and optional slug, domain, UTM, password, expiry).
Share
Put the short URL in SMS, WhatsApp, email, QR codes, or ads.
Redirect
Users hit the short URL; ExaLink records the click and 302s to the destination.
Measure
Poll analytics or receive webhooks for every click and conversion.
Keep messages short while tracking which campaign, segment, or sender ID drives the most clicks and conversions.
Password-protect PDF or portal links, expire them after an event, or stop traffic after a max-click budget.
Standardize UTM tagging across channels and pull country/device breakdowns without a separate analytics stack.
| Status | Meaning | User experience |
|---|---|---|
| active | Link is live and accepting clicks | 302 redirect to destination |
| paused | Temporarily disabled via PATCH | Shows paused / unavailable page |
| expired | expiresAt is in the past | Shows expired landing page |
| capped | maxClicks reached | Shows limit-reached page |
| deleted | Removed via DELETE | 404 — link no longer exists |
| HTTP | Code | Cause |
|---|---|---|
| 400 | INVALID_DESTINATION | Destination is missing, not HTTPS/HTTP, or malformed |
| 400 | INVALID_SLUG | Slug has invalid characters or reserved words |
| 401 | UNAUTHORIZED | Missing or invalid Authorization header |
| 403 | DOMAIN_NOT_VERIFIED | Custom domain is not verified for this business |
| 404 | LINK_NOT_FOUND | Link id does not exist or belongs to another account |
| 409 | SLUG_TAKEN | Slug already in use on that domain |
| 429 | RATE_LIMIT_EXCEEDED | Exceeded 100 req/s — use exponential backoff |
Best Practices
- Always store the returned
idandshortUrlso you can update links and pull analytics later - Prefer webhooks (
exalink.click) over polling analytics for real-time dashboards - Use UTM objects on create — ExaLink merges them into the final redirect URL consistently
- Set
expiresAton time-sensitive promos so stale links cannot be reused - Use custom domains for brand trust in consumer-facing SMS and ads
- Implement exponential backoff on
429responses
Beta status
https://sndx.in/…. APIs are usable in production, but fields may gain optional properties before GA. Subscribe to the changelog for breaking-change notices.