curl --request GET \
--url "https://api.yukoapp.com/api/v1/public/customers/rewards/redeemable?customer_id=9049402769586" \
--header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
const customerId = "9049402769586";
const response = await fetch(
`https://api.yukoapp.com/api/v1/public/customers/rewards/redeemable?customer_id=${customerId}`,
{
method: "GET",
headers: {
Authorization: "Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
},
}
);
const data = await response.json();
$customerId = "9049402769586";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.yukoapp.com/api/v1/public/customers/rewards/redeemable?customer_id={$customerId}");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
{
"data": {
"points_balance": 650,
"rewards": [
{
"id": "90424fa7-e8a9-4ef4-b43a-72c9b2028db5",
"name": "$5 off your next order",
"description": "Redeem 500 points for a $5 discount.",
"reward_type": "fixed",
"points_cost": 500,
"reward_rule": {
"points_required": 500,
"value": 5
},
"icon": null,
"can_redeem": true,
"points_needed": 0
},
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "10% off your next order",
"description": "Redeem 1000 points for 10% off.",
"reward_type": "percentage",
"points_cost": 1000,
"reward_rule": {
"points_required": 1000,
"value": 10
},
"icon": null,
"can_redeem": false,
"points_needed": 350
}
],
"customer_rewards": [
{
"id": "1fd80ced-326f-4082-951b-21a38632a603",
"customer_id": "63a2c89a-9936-4bc0-9d5f-93db46110b76",
"reward_id": "90424fa7-e8a9-4ef4-b43a-72c9b2028db5",
"reward_type": "fixed",
"status": "active",
"discount_code": "YUKO-TVJ-BL1",
"points_used": 500,
"expires_at": "2026-06-01T00:00:00+00:00",
"used_at": null,
"created_at": "2026-02-15T08:30:00+00:00"
}
]
}
}
{
"error": {
"code": "not_found",
"message": "Customer not found"
}
}
{
"error": {
"code": "invalid_token",
"message": "Invalid or revoked API token"
}
}
Customers
Get redeemable rewards
Retrieves a customer’s points balance, every active online reward with affordability info, and the rewards the customer has already redeemed.
GET
/
public
/
customers
/
rewards
/
redeemable
curl --request GET \
--url "https://api.yukoapp.com/api/v1/public/customers/rewards/redeemable?customer_id=9049402769586" \
--header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
const customerId = "9049402769586";
const response = await fetch(
`https://api.yukoapp.com/api/v1/public/customers/rewards/redeemable?customer_id=${customerId}`,
{
method: "GET",
headers: {
Authorization: "Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
},
}
);
const data = await response.json();
$customerId = "9049402769586";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.yukoapp.com/api/v1/public/customers/rewards/redeemable?customer_id={$customerId}");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
{
"data": {
"points_balance": 650,
"rewards": [
{
"id": "90424fa7-e8a9-4ef4-b43a-72c9b2028db5",
"name": "$5 off your next order",
"description": "Redeem 500 points for a $5 discount.",
"reward_type": "fixed",
"points_cost": 500,
"reward_rule": {
"points_required": 500,
"value": 5
},
"icon": null,
"can_redeem": true,
"points_needed": 0
},
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "10% off your next order",
"description": "Redeem 1000 points for 10% off.",
"reward_type": "percentage",
"points_cost": 1000,
"reward_rule": {
"points_required": 1000,
"value": 10
},
"icon": null,
"can_redeem": false,
"points_needed": 350
}
],
"customer_rewards": [
{
"id": "1fd80ced-326f-4082-951b-21a38632a603",
"customer_id": "63a2c89a-9936-4bc0-9d5f-93db46110b76",
"reward_id": "90424fa7-e8a9-4ef4-b43a-72c9b2028db5",
"reward_type": "fixed",
"status": "active",
"discount_code": "YUKO-TVJ-BL1",
"points_used": 500,
"expires_at": "2026-06-01T00:00:00+00:00",
"used_at": null,
"created_at": "2026-02-15T08:30:00+00:00"
}
]
}
}
{
"error": {
"code": "not_found",
"message": "Customer not found"
}
}
{
"error": {
"code": "invalid_token",
"message": "Invalid or revoked API token"
}
}
Shopify POS rewards aren’t included. This is intended as the primary endpoint for rendering a loyalty redemption UI.
Requires the
read:rewards scope. See Scopes.Query parameters
string
required
The platform customer ID, for example the Shopify customer ID.
Response
object
Show data properties
Show data properties
integer
The customer’s current redeemable points balance. Always
0 for banned customers.object[]
The active reward catalogue for this organisation, enriched with affordability fields for this customer.
Show reward properties
Show reward properties
string<uuid>
The reward’s unique identifier. Pass this as
reward_id to Redeem a reward.string
The reward’s name.
string | null
The reward’s description.
enum<string>
One of
fixed, percentage, free_shipping, free_product, store_credit.integer
The number of points required to redeem this reward.
object
The rule configuration for this reward. Structure varies by
reward_type.object | null
The reward’s storefront icon, or
null if none is set. Contains source (default or custom), slug, id and url. See Retrieve a reward for details.boolean
Whether the customer currently has enough points to redeem this reward.
integer
The additional points needed to redeem this reward.
0 if can_redeem is true.object[]
The customer’s previously redeemed coupons and discounts, sorted by
created_at, newest first. Each item has the same fields as List customer rewards, including customer_id (the customer’s Yuko UUID) and reward_id.Show customer reward properties
Show customer reward properties
string<uuid>
Unique identifier for the customer reward.
string | null
The type of discount issued.
enum<string>
One of
active, used, inactive, expired, deleted, revert.string | null
The discount or coupon code issued to the customer.
integer
The number of points spent on this reward.
string<date-time> | null
When this reward expires.
string<date-time> | null
When the reward was used.
string<date-time>
When the reward was issued.
Errors
| Status | Code | When |
|---|---|---|
401 | missing_token, invalid_token | The API key is missing, wrong or revoked. |
403 | insufficient_scope | The key doesn’t have read:rewards. |
404 | not_found | No customer matches customer_id (Customer not found). |
429 | The key exceeded the rate limit. |
curl --request GET \
--url "https://api.yukoapp.com/api/v1/public/customers/rewards/redeemable?customer_id=9049402769586" \
--header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
const customerId = "9049402769586";
const response = await fetch(
`https://api.yukoapp.com/api/v1/public/customers/rewards/redeemable?customer_id=${customerId}`,
{
method: "GET",
headers: {
Authorization: "Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
},
}
);
const data = await response.json();
$customerId = "9049402769586";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.yukoapp.com/api/v1/public/customers/rewards/redeemable?customer_id={$customerId}");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
{
"data": {
"points_balance": 650,
"rewards": [
{
"id": "90424fa7-e8a9-4ef4-b43a-72c9b2028db5",
"name": "$5 off your next order",
"description": "Redeem 500 points for a $5 discount.",
"reward_type": "fixed",
"points_cost": 500,
"reward_rule": {
"points_required": 500,
"value": 5
},
"icon": null,
"can_redeem": true,
"points_needed": 0
},
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "10% off your next order",
"description": "Redeem 1000 points for 10% off.",
"reward_type": "percentage",
"points_cost": 1000,
"reward_rule": {
"points_required": 1000,
"value": 10
},
"icon": null,
"can_redeem": false,
"points_needed": 350
}
],
"customer_rewards": [
{
"id": "1fd80ced-326f-4082-951b-21a38632a603",
"customer_id": "63a2c89a-9936-4bc0-9d5f-93db46110b76",
"reward_id": "90424fa7-e8a9-4ef4-b43a-72c9b2028db5",
"reward_type": "fixed",
"status": "active",
"discount_code": "YUKO-TVJ-BL1",
"points_used": 500,
"expires_at": "2026-06-01T00:00:00+00:00",
"used_at": null,
"created_at": "2026-02-15T08:30:00+00:00"
}
]
}
}
{
"error": {
"code": "not_found",
"message": "Customer not found"
}
}
{
"error": {
"code": "invalid_token",
"message": "Invalid or revoked API token"
}
}