Skip to content
RedirHub/API
Sign inGet API key
Links · links.index
GET/linkslinks.index

List links

Returns the workspace links — short links, QR codes, redirects and migrations — inside a data array. Narrow the result with filter[...] (filter[handler] picks one kind) and order it with sort.

Base URL
https://api.redirhub.com/v1
Auth
Bearer token
Idempotent
Yes
Returns
application/json

The request

Call GET /links with your bearer token. Narrow or order the result with the query parameters below.

# List links
curl "https://api.redirhub.com/v1/links" \
  -H "Authorization: Bearer $REDIRHUB_TOKEN"

Query parameters

ParameterDescription
sortoptionalstringSort results by field. Prefix with - for descending order. Available sorts: id, created_at, updated_at, total_clicksid-idcreated_at-created_atupdated_at-updated_attotal_clicks-total_clicks
filteroptionalobjectFilter results by one or more fields. Available filters: id, host, path, tld, handler, type, destination, search, tags, traffic, dns_correct, status, created_after, created_before
filter[id]optionalstring
filter[host]optionalstringA hostname already connected to the workspace. See List hostnames.
filter[path]optionalstring
filter[tld]optionalstring
filter[handler]optionalstringWhat the link is: short-url or qr for a short link on a short-link hostname, redirect or migration for a redirect on the redirected hostname.
filter[type]optionalstringRecord type. List the available types with GET /shared/types.
filter[destination]optionalstringWhere matching traffic is sent.
filter[search]optionalstring
filter[tags]optionalstringFreeform labels. Filter on them with filter[tags].
filter[traffic]optionalstring
filter[dns_correct]optionalstring
filter[status]optionalstringThe HTTP status code used for the redirect response.
filter[created_after]optionalstring
filter[created_before]optionalstring

The response

A 200 carries the payload inside a data array — the same shape the list endpoints return, so one parser handles both.

{
  "data": [
    {
      "id": "9f2a7c31-4b8e-4a02-9d1f-0c6b7e5a1d44",
      "handler": "string",
      "host": "go.acme.com",
      "alias": "spring-sale",
      "url": "https://go.acme.com/spring-sale",
      "https": true,
      "file": null,
      "destination": "https://acme.com/campaigns/spring",
      "destinations": [
        "https://acme.com/campaigns/spring"
      ],
      "destination_routing": "weighted",
      "plugins": [
        "analytics"
      ],
      "has_password": true,
      "total_clicks": 1,
      "type": "link",
      "title": "Spring Sale 2026",
      "description": "Landing page for the spring campaign",
      "status": "301",
      "paused_by": "user",
      "forward_path": true,
      "forward_query": true,
      "utm": {
        "source": "string",
        "medium": "string",
        "campaign": "string",
        "term": "string",
        "content": "string"
      },
      "qr": {
        "theme": "string",
        "color": "string",
        "logo": true,
        "show_url": true,
        "margin": "string"
      },
      "monitor": "false",
      "is_notify": false,
      "is_switch_unbroken_destination": false,
      "tags": [
        "campaign",
        "q2"
      ],
      "created_by": "user@acme.com",
      "creator": {
        "id": "9f2a7c31-4b8e-4a02-9d1f-0c6b7e5a1d44",
        "name": "Acme"
      },
      "created_via": "api",
      "created_at": "2026-08-01T09:14:22Z",
      "updated_at": "2026-08-01T09:14:22Z",
      "expired_at": null
    }
  ],
  "meta": {
    "cursor": {
      "current": null,
      "prev": "string",
      "next": "string",
      "count": 1
    }
  }
}

Status codes

200
SuccessA cursor-paginated page of every record of the workspace. Narrow it with filter[handler] (comma-separated), filter[status] (active or paused), filter[dns_correct], filter[host] and filter[path] (/ for the root page of a hostname, * for the record that answers every other path). Order it with sort: -id (newest, the default), -updated_at (recently updated), -total_clicks (most clicks) or total_clicks (fewest clicks). total_clicks counts every click since the record was created. Follow meta.cursor.next for the next page.
401
UnauthenticatedUnauthenticated
429
Too many requestsToo many requests

What usually comes next

One call is rarely the whole job. These are the endpoints most integrations reach for around this one.