You can interact with refer.is programmatically through its API. The API is organized around REST. Our API has predictable resource-oriented URLs, accepts JSON-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP response codes, authentication, and verbs.
API documentation is available in the OpenAPI specification format. You can find the OpenAPI specification file here.
An API key is required for all requests. Every workspace has its own API key. You can find your API key in the settings page of your workspace under the "API key" section.
To authenticate your requests include the following header:
Authorization: Bearer <API_KEY>Get information about your workspace.
curl -X GET 'https://api.refer.is/v1/me' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <API_KEY>"{
"data": {
"id": "92fc175e-2508-458d-b490-5c78675c8e6b",
"name": "Workspace name"
}
}List domains usable in your workspace (your own plus shared system domains).
curl -X GET 'https://api.refer.is/v1/domains' \
-H "Authorization: Bearer <API_KEY>"| Parameter | Required | Description |
|---|---|---|
page | No | Page number (default 1). |
limit | No | Items per page, up to 100 (default 10). |
{
"data": [
{
"id": "92fc175e-2508-458d-b490-5c78675c8e6b",
"name": "refer.is",
"status": "connected"
}
],
"meta": {
"limit": 10,
"total": 1,
"page": 1
}
}Get a domain in your workspace, including its verification status.
curl -X GET 'https://api.refer.is/v1/domains/92fc175e-2508-458d-b490-5c78675c8e6b' \
-H "Authorization: Bearer <API_KEY>"{
"data": {
"id": "92fc175e-2508-458d-b490-5c78675c8e6b",
"name": "refer.is",
"status": "connected"
}
}Connect a custom domain to your workspace. Verify it afterwards in the workspace settings.
curl -X POST 'https://api.refer.is/v1/domains' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <API_KEY>" \
-d '{
"name": "go.example.com",
"url": "https://example.com"
}'| Parameter | Required | Description |
|---|---|---|
name | Yes | Domain hostname, e.g. go.example.com |
url | Yes | Fallback redirect URL for direct domain visits |
Returns 201 Created.
{
"data": {
"id": "92fc175e-2508-458d-b490-5c78675c8e6b",
"name": "go.example.com",
"status": "disconnected"
}
}Remove a custom domain from your workspace. Shared system domains cannot be removed.
curl -X DELETE 'https://api.refer.is/v1/domains/92fc175e-2508-458d-b490-5c78675c8e6b' \
-H "Authorization: Bearer <API_KEY>"Returns 204 No Content with an empty body.
Create new link in your workspace. List usable domain IDs via List Domains first.
curl -X POST 'https://api.refer.is/v1/links' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <API_KEY>" \
-d '{
"url":"https://google.com",
"domain_id": "<DOMAIN_ID>"
}'| Parameter | Required | Description |
|---|---|---|
url | Yes | Destination URL the short link redirects to |
domain_id | Yes | Domain ID from List Domains |
slug | No | Custom back-half of the link. A random 8-character slug is generated when omitted |
Returns 201 Created.
{
"data": {
"id": "92fc175e-2508-458d-b490-5c78675c8e6b",
"slug": "abc",
"link": "https://refer.is/abc",
"url": "https://google.com",
"domain_id": "92fc175e-2508-458d-b490-5c78675c8e6b",
"created_at": "2024-01-01T00:00:00.000Z"
}
}List links in your workspace.
curl -X GET 'https://api.refer.is/v1/links?query=google&page=1' \
-H "Authorization: Bearer <API_KEY>"| Parameter | Required | Description |
|---|---|---|
query | No | Search slugs and destination URLs |
page | No | Page number (default 1). |
limit | No | Items per page, up to 100 (default 10). |
{
"data": [
{
"id": "92fc175e-2508-458d-b490-5c78675c8e6b",
"slug": "abc",
"link": "https://refer.is/abc",
"url": "https://google.com",
"domain_id": "92fc175e-2508-458d-b490-5c78675c8e6b",
"created_at": "2024-01-01T00:00:00.000Z"
}
],
"meta": {
"limit": 10,
"total": 1,
"page": 1
}
}Get existing link from your workspace.
curl -X GET 'https://api.refer.is/v1/links/92fc175e-2508-458d-b490-5c78675c8e6b' \
-H "Authorization: Bearer <API_KEY>"{
"data": {
"id": "92fc175e-2508-458d-b490-5c78675c8e6b",
"slug": "abc",
"link": "https://refer.is/abc",
"url": "https://google.com",
"domain_id": "92fc175e-2508-458d-b490-5c78675c8e6b",
"created_at": "2024-01-01T00:00:00.000Z"
}
}Update the destination URL of an existing link. The id, slug, and stats stay intact.
curl -X PATCH 'https://api.refer.is/v1/links/92fc175e-2508-458d-b490-5c78675c8e6b' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <API_KEY>" \
-d '{
"url":"https://example.com"
}'| Parameter | Required | Description |
|---|---|---|
url | Yes | New destination URL the short link redirects to |
{
"data": {
"id": "92fc175e-2508-458d-b490-5c78675c8e6b",
"slug": "abc",
"link": "https://refer.is/abc",
"url": "https://example.com",
"domain_id": "92fc175e-2508-458d-b490-5c78675c8e6b",
"created_at": "2024-01-01T00:00:00.000Z"
}
}Delete existing link from your workspace.
curl -X DELETE 'https://api.refer.is/v1/links/92fc175e-2508-458d-b490-5c78675c8e6b' \
-H "Authorization: Bearer <API_KEY>"Returns 204 No Content with an empty body.
Get QR code for a link. Public — no API key required, the code encodes the public short URL.
curl -X GET 'https://api.refer.is/v1/links/92fc175e-2508-458d-b490-5c78675c8e6b/qr?background_color=%23ffffff&dot_color=%23000000'| Parameter | Required | Description |
|---|---|---|
background_color | No | Background color as a 6-digit hex, e.g. #ffffff (URL-encoded as %23ffffff) |
dot_color | No | Dot color as a 6-digit hex, e.g. #000000 |
Returns an SVG image (image/svg+xml).
Get click analytics for browsers.
curl -X GET 'https://api.refer.is/v1/analytics/browsers?start=2024-01-01T00:00:00Z&end=2024-01-31T00:00:00Z' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <API_KEY>"| Parameter | Required | Description |
|---|---|---|
start | Yes | ISO 8601 |
end | Yes | ISO 8601 |
page | No | Page number (default 1). |
limit | No | Items per page, up to 100 (default 10). |
link_id | No | Scope to a single link ID |
domain_id | No | Scope to a single domain ID |
{
"data": [
{
"value": "chrome",
"count": 100
},
{
"value": "safari",
"count": 50
}
],
"meta": {
"limit": 10,
"total": 2,
"page": 1
}
}Get click analytics for countries.
curl -X GET 'https://api.refer.is/v1/analytics/countries?start=2024-01-01T00:00:00Z&end=2024-01-31T00:00:00Z' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <API_KEY>"| Parameter | Required | Description |
|---|---|---|
start | Yes | ISO 8601 |
end | Yes | ISO 8601 |
page | No | Page number (default 1). |
limit | No | Items per page, up to 100 (default 10). |
link_id | No | Scope to a single link ID |
domain_id | No | Scope to a single domain ID |
{
"data": [
{
"value": "US",
"count": 100
},
{
"value": "CA",
"count": 50
}
],
"meta": {
"limit": 10,
"total": 2,
"page": 1
}
}Get click analytics for referrers.
curl -X GET 'https://api.refer.is/v1/analytics/referrers?start=2024-01-01T00:00:00Z&end=2024-01-31T00:00:00Z' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <API_KEY>"| Parameter | Required | Description |
|---|---|---|
start | Yes | ISO 8601 |
end | Yes | ISO 8601 |
page | No | Page number (default 1). |
limit | No | Items per page, up to 100 (default 10). |
link_id | No | Scope to a single link ID |
domain_id | No | Scope to a single domain ID |
{
"data": [
{
"value": "https://m.facebook.com",
"count": 50
},
{
"value": "https://x.com",
"count": 50
},
{
"value": null,
"count": 50
}
],
"meta": {
"limit": 10,
"total": 3,
"page": 1
}
}Get click analytics for urls.
curl -X GET 'https://api.refer.is/v1/analytics/urls?start=2024-01-01T00:00:00Z&end=2024-01-31T00:00:00Z' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <API_KEY>"| Parameter | Required | Description |
|---|---|---|
start | Yes | ISO 8601 |
end | Yes | ISO 8601 |
page | No | Page number (default 1). |
limit | No | Items per page, up to 100 (default 10). |
link_id | No | Scope to a single link ID |
domain_id | No | Scope to a single domain ID |
{
"data": [
{
"value": "https://refer.is",
"count": 20
},
{
"value": "https://refer.is/docs",
"count": 10
},
{
"value": "https://refer.is/pricing",
"count": 5
}
],
"meta": {
"limit": 10,
"total": 3,
"page": 1
}
}1,000 tracked clicks and unlimited redirects every month, free.
No credit card required