Skip to main content

Short Links API

Branded short URLs for messages and campaigns. By default links resolve on the platform host (https://api.orbit.devotel.io/l/abc123); configure a vanity domain in Settings → General to mint links on your own host instead (e.g. https://go.yourbrand.com/abc123). The redirect handler (GET /l/:code) is mounted at the root of the API host and is rate-limited to 60 req/min per IP. Click data is captured asynchronously and exposed via the stats endpoint. Base path: /api/v1/links (management) — public redirect at https://api.orbit.devotel.io/l/{code} Authentication: API key (X-API-Key) or session JWT for management; the redirect itself is anonymous. Every short link resolves through the redirect handler at GET /l/{code}. The host a link is minted on is resolved in this order:
  1. Your tenant’s branded short-link domain, if you’ve set one under Settings → General → Branded short-link domain. It must be a bare https:// host with no path, query, or fragment (for example https://go.yourbrand.com) whose DNS is CNAME’d to Orbit’s redirector. A malformed value falls back to the platform default rather than blocking the send.
  2. The platform default hosthttps://api.orbit.devotel.io — used for every tenant that hasn’t configured a branded domain.
So a link minted for a tenant with no branded domain looks like https://api.orbit.devotel.io/l/abc123, while a tenant on go.yourbrand.com gets https://go.yourbrand.com/l/abc123. Both terminate TLS and serve the same redirect.
The platform default is api.orbit.devotel.io. Set a per-tenant branded domain if you want short, recognisable links your recipients trust.

Operator configuration

Self-hosting operators choose the platform default short-link host through environment variables. Per-tenant branded domains always take precedence over both.
Provision DNS, TLS, and a GET /l/:code ingress rule for the host before setting DEVOTEL_SHORT_LINK_DOMAIN. Point it at a host that does not yet serve the redirect and newly minted links will fail to resolve.

Example — shorten a URL

The response includes the full short URL — embed it directly in outbound messages.

Insights

GET /api/v1/links/insights returns tenant-wide URL-shortener analytics in a single call: summary KPIs, the top links ranked by clicks, and a per-day click timeline. All parameters are optional.

Per-contact clicks

GET /api/v1/links/contacts/{contactId}/clicks resolves tracked short-link clicks back to a single recipient contact and returns the click history newest-first — useful for surfacing per-contact engagement in the CDP.

Landing Pages

No-code landing pages (microsites) are built from a block list and served under the same /links base path. A published page mints a trackable short URL and rolls up per-page visits and conversions by campaign and by originating message. Create a draft, then publish it to mint the trackable short URL:
The list endpoint accepts an optional status filter (draft, published, archived) alongside the standard cursor / limit pagination params. The analytics endpoint accepts top_limit (1–50, default 10) to bound the per-campaign and per-message breakdowns.

See also