curl --request GET \
--url https://api.voucher-staging.allride.io/consumer/v1/redemption-links \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.voucher-staging.allride.io/consumer/v1/redemption-links', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.voucher-staging.allride.io/consumer/v1/redemption-links"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)HttpResponse<String> response = Unirest.get("https://api.voucher-staging.allride.io/consumer/v1/redemption-links")
.header("Authorization", "Bearer <token>")
.asString();package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.voucher-staging.allride.io/consumer/v1/redemption-links"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.voucher-staging.allride.io/consumer/v1/redemption-links",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"data": {
"data": [
{
"id": 8017,
"resource": "redemption-link",
"token": "ExampleLinkToken000001",
"url": "https://vouchers.example-transit.example.com/r/ExampleLinkToken000001",
"name": "Jobticket November - employee 42",
"mode": "entity-bound",
"redemptionEntity": {
"id": 9030,
"resource": "redemption-entity",
"refId": "emp-42",
"_links": {
"self": {
"href": "https://api.voucher.allride.io/consumer/v1/redemption-entities/9030",
"type": "application/json"
}
}
},
"requireEmailOtp": false,
"allowedProviderIds": [
1030,
1056
],
"allowedVoucherSetIds": [],
"maxRedemptions": 1,
"maxTotalRedemptions": null,
"redemptionCount": 0,
"metadata": {
"campaign": "jobticket-nov"
},
"expiresAt": "2026-11-30T22:59:59Z",
"customDomainId": 20030,
"defaultLocale": "de",
"status": "active",
"lastRedeemedAt": null,
"revokedAt": null,
"createdBy": {
"type": "partner-user",
"id": 4069,
"label": "ops@example.com"
},
"createdAt": "2026-10-22T09:00:00Z",
"updatedAt": "2026-10-22T09:00:00Z",
"_links": {
"self": {
"href": "https://api.voucher.allride.io/consumer/v1/redemption-links/8017",
"type": "application/json"
},
"catalog": {
"href": "https://api.voucher.allride.io/consumer/v1/redemption-links/8017/catalog",
"type": "application/json"
},
"redemptionEntity": {
"href": "https://api.voucher.allride.io/consumer/v1/redemption-entities/9030",
"type": "application/json"
}
}
}
],
"page": 1,
"perPage": 25,
"totalPages": 1,
"total": 1
}
}List redemption links
Lists your Redemption Links. filter[status]=expired includes active links past expiresAt. See Redemption links.
Required permissions: view-consumer-redemption-links · API keys: allowed
curl --request GET \
--url https://api.voucher-staging.allride.io/consumer/v1/redemption-links \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.voucher-staging.allride.io/consumer/v1/redemption-links', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.voucher-staging.allride.io/consumer/v1/redemption-links"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)HttpResponse<String> response = Unirest.get("https://api.voucher-staging.allride.io/consumer/v1/redemption-links")
.header("Authorization", "Bearer <token>")
.asString();package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.voucher-staging.allride.io/consumer/v1/redemption-links"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.voucher-staging.allride.io/consumer/v1/redemption-links",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"data": {
"data": [
{
"id": 8017,
"resource": "redemption-link",
"token": "ExampleLinkToken000001",
"url": "https://vouchers.example-transit.example.com/r/ExampleLinkToken000001",
"name": "Jobticket November - employee 42",
"mode": "entity-bound",
"redemptionEntity": {
"id": 9030,
"resource": "redemption-entity",
"refId": "emp-42",
"_links": {
"self": {
"href": "https://api.voucher.allride.io/consumer/v1/redemption-entities/9030",
"type": "application/json"
}
}
},
"requireEmailOtp": false,
"allowedProviderIds": [
1030,
1056
],
"allowedVoucherSetIds": [],
"maxRedemptions": 1,
"maxTotalRedemptions": null,
"redemptionCount": 0,
"metadata": {
"campaign": "jobticket-nov"
},
"expiresAt": "2026-11-30T22:59:59Z",
"customDomainId": 20030,
"defaultLocale": "de",
"status": "active",
"lastRedeemedAt": null,
"revokedAt": null,
"createdBy": {
"type": "partner-user",
"id": 4069,
"label": "ops@example.com"
},
"createdAt": "2026-10-22T09:00:00Z",
"updatedAt": "2026-10-22T09:00:00Z",
"_links": {
"self": {
"href": "https://api.voucher.allride.io/consumer/v1/redemption-links/8017",
"type": "application/json"
},
"catalog": {
"href": "https://api.voucher.allride.io/consumer/v1/redemption-links/8017/catalog",
"type": "application/json"
},
"redemptionEntity": {
"href": "https://api.voucher.allride.io/consumer/v1/redemption-entities/9030",
"type": "application/json"
}
}
}
],
"page": 1,
"perPage": 25,
"totalPages": 1,
"total": 1
}
}Authorizations
Your API key in Authorization: Bearer <key>. Use vk_test_… keys against the sandbox and vk_live_… keys against production.
Query Parameters
Page number, 1-100,000 (default 1). Outside the range: 400 data-failed-validation with the constraint invalid-page.
1 <= x <= 100000Items per page, 1-100 (default 25). Outside the range: 400 data-failed-validation with the constraint invalid-page.
1 <= x <= 100One sort field; prefix - for descending (sort=field or sort=-field). Allowed: createdAt, expiresAt, lastRedeemedAt, name. Default -createdAt. The server appends id as a tie-breaker.
"-createdAt"
Case-insensitive search (at most 255 characters) over name.
255Effective status (equals).
active, exhausted, expired, revoked Effective status (one of (comma-separated)). Comma-separated values.
Mode (equals).
entity-bound, email-otp, anonymous Mode (one of (comma-separated)). Comma-separated values.
Bound entity id (equals).
x >= 0Bound entity id (one of (comma-separated)). Comma-separated values.
Custom domain id (equals).
x >= 0Custom domain id (is null (true/false)).
Exact token (equals).
Expiry (greater than or equal).
Expiry (less than).
Expiry (is null (true/false)).
Creation time (download key) (greater than).
Creation time (download key) (greater than or equal).
Creation time (download key) (less than).
Creation time (download key) (less than or equal).
Last redemption (greater than or equal).
Last redemption (less than).
Last redemption (is null (true/false)).
Response
OK
Page envelope of RedemptionLink items.
The page.
Show child attributes
Show child attributes