curl --request GET \
--url "https://api.yukoapp.com/api/v1/public/customers/memberships?customer_id=9049402769586" \
--header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
const customerId = "9049402769586";
const response = await fetch(
`https://api.yukoapp.com/api/v1/public/customers/memberships?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/memberships?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": {
"status": "active",
"member_since": "2024-06-01T10:00:00+00:00",
"points": {
"balance": 350,
"earned": 500,
"redeemed": 150
},
"current_tier": {
"id": "7fb39c85-3a3f-4247-8333-2e05a9c8ae28",
"name": "Silver",
"threshold_value": 500,
"multiplier": 1.5,
"icon": null,
"benefits": [
{
"name": "5% Discount on every order",
"benefit_type": "percentage",
"benefit_value": { "reward_type": "percentage", "method": "automatic", "discount_value": 5 }
}
],
"created_at": "2025-09-12T15:44:44+00:00"
},
"next_tier": {
"id": "8ac40d96-4b4e-5358-9444-3f16bab9bf39",
"name": "Gold",
"threshold_value": 1000,
"multiplier": 2.0,
"icon": null,
"benefits": [
{
"name": "10% Discount on every order",
"benefit_type": "percentage",
"benefit_value": { "reward_type": "percentage", "method": "automatic", "discount_value": 10 }
}
],
"created_at": "2025-09-12T15:44:44+00:00"
},
"progress_to_next_tier": {
"current_value": 650,
"required_value": 1000,
"remaining_value": 350,
"progress_percentage": 65.0,
"threshold_type": "total_earned_points"
}
}
}
{
"data": {
"status": "active",
"member_since": "2026-01-10T08:00:00+00:00",
"points": {
"balance": 120,
"earned": 120,
"redeemed": 0
},
"current_tier": null,
"next_tier": {
"id": "7fb39c85-3a3f-4247-8333-2e05a9c8ae28",
"name": "Silver",
"threshold_value": 500,
"multiplier": 1.5,
"icon": null,
"benefits": [],
"created_at": "2025-09-12T15:44:44+00:00"
},
"progress_to_next_tier": {
"current_value": 120,
"required_value": 500,
"remaining_value": 380,
"progress_percentage": 24.0,
"threshold_type": "total_earned_points"
}
}
}
{
"error": {
"code": "not_found",
"message": "Customer not found"
}
}
{
"error": {
"code": "internal_error",
"message": "An unexpected error occurred. Please try again later."
}
}
{
"error": {
"code": "invalid_token",
"message": "Invalid or revoked API token"
}
}
Customers
Get customer membership
Returns a customer’s loyalty membership summary, including points balance, current VIP tier and progress toward the next tier.
GET
/
public
/
customers
/
memberships
curl --request GET \
--url "https://api.yukoapp.com/api/v1/public/customers/memberships?customer_id=9049402769586" \
--header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
const customerId = "9049402769586";
const response = await fetch(
`https://api.yukoapp.com/api/v1/public/customers/memberships?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/memberships?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": {
"status": "active",
"member_since": "2024-06-01T10:00:00+00:00",
"points": {
"balance": 350,
"earned": 500,
"redeemed": 150
},
"current_tier": {
"id": "7fb39c85-3a3f-4247-8333-2e05a9c8ae28",
"name": "Silver",
"threshold_value": 500,
"multiplier": 1.5,
"icon": null,
"benefits": [
{
"name": "5% Discount on every order",
"benefit_type": "percentage",
"benefit_value": { "reward_type": "percentage", "method": "automatic", "discount_value": 5 }
}
],
"created_at": "2025-09-12T15:44:44+00:00"
},
"next_tier": {
"id": "8ac40d96-4b4e-5358-9444-3f16bab9bf39",
"name": "Gold",
"threshold_value": 1000,
"multiplier": 2.0,
"icon": null,
"benefits": [
{
"name": "10% Discount on every order",
"benefit_type": "percentage",
"benefit_value": { "reward_type": "percentage", "method": "automatic", "discount_value": 10 }
}
],
"created_at": "2025-09-12T15:44:44+00:00"
},
"progress_to_next_tier": {
"current_value": 650,
"required_value": 1000,
"remaining_value": 350,
"progress_percentage": 65.0,
"threshold_type": "total_earned_points"
}
}
}
{
"data": {
"status": "active",
"member_since": "2026-01-10T08:00:00+00:00",
"points": {
"balance": 120,
"earned": 120,
"redeemed": 0
},
"current_tier": null,
"next_tier": {
"id": "7fb39c85-3a3f-4247-8333-2e05a9c8ae28",
"name": "Silver",
"threshold_value": 500,
"multiplier": 1.5,
"icon": null,
"benefits": [],
"created_at": "2025-09-12T15:44:44+00:00"
},
"progress_to_next_tier": {
"current_value": 120,
"required_value": 500,
"remaining_value": 380,
"progress_percentage": 24.0,
"threshold_type": "total_earned_points"
}
}
}
{
"error": {
"code": "not_found",
"message": "Customer not found"
}
}
{
"error": {
"code": "internal_error",
"message": "An unexpected error occurred. Please try again later."
}
}
{
"error": {
"code": "invalid_token",
"message": "Invalid or revoked API token"
}
}
If VIP tiers are turned off for the store, the tier fields are
null.
Requires the
read:customers scope. See Scopes.Query parameters
string
required
The platform customer ID (for example, the Shopify customer ID). If you leave it out, this endpoint returns a
500 internal_error rather than a 422 validation error, so always send it.Response
object
The customer’s membership summary.
Show membership properties
Show membership properties
string
The customer’s loyalty membership status. Always
active.string<date-time>
When the customer was created in Yuko (ISO 8601).
object
The customer’s current points summary.
object | null
The customer’s current VIP tier.
null if the customer has not reached any tier threshold or VIP tiers are turned off.Show current_tier properties
Show current_tier properties
string<uuid>
The tier’s unique identifier.
string
The tier’s name.
integer
The qualifying value needed to reach the tier.
number
The tier’s multiplier.
object | null
The tier icon, or
null if none is set. Contains source (default or custom), slug (built-in icons), id (custom uploads) and url (the image URL).object[]
string<date-time>
When the tier was created (ISO 8601).
object | null
The next VIP tier the customer can reach, with the same fields as
current_tier. null if the customer is already at the highest tier, hasn’t been evaluated for tiers yet, or VIP tiers are turned off.Show next_tier properties
Show next_tier properties
string<uuid>
The tier’s unique identifier.
string
The tier’s name.
integer
The qualifying value needed to reach the tier.
number
The tier’s multiplier.
object | null
The tier icon, or
null if none is set. Same shape as current_tier.icon.object[]
The benefits associated with the next tier. Same shape as
current_tier.benefits.string<date-time>
When the tier was created (ISO 8601).
object | null
The customer’s progress toward the next tier.
null if there’s no next_tier or VIP tiers are turned off.Show progress_to_next_tier properties
Show progress_to_next_tier properties
integer
The customer’s current qualifying value (points earned, amount spent or orders placed), rounded down to a whole number.
integer
The value required to reach the next tier.
integer
The remaining value needed to reach the next tier.
number
The percentage of the way to the next tier, rounded to 2 decimal places.
enum<string> | null
The metric used to determine tier progression. One of
total_earned_points, total_amount_spents, total_orders. Can be null even when VIP tiers are set up, so don’t rely on it; the metric is set in your VIP tier settings.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:customers. |
404 | not_found | No customer matches customer_id. Message: “Customer not found”. |
429 | The key exceeded the rate limit. | |
500 | internal_error | customer_id was left out. Message: “An unexpected error occurred. Please try again later.” |
curl --request GET \
--url "https://api.yukoapp.com/api/v1/public/customers/memberships?customer_id=9049402769586" \
--header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
const customerId = "9049402769586";
const response = await fetch(
`https://api.yukoapp.com/api/v1/public/customers/memberships?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/memberships?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": {
"status": "active",
"member_since": "2024-06-01T10:00:00+00:00",
"points": {
"balance": 350,
"earned": 500,
"redeemed": 150
},
"current_tier": {
"id": "7fb39c85-3a3f-4247-8333-2e05a9c8ae28",
"name": "Silver",
"threshold_value": 500,
"multiplier": 1.5,
"icon": null,
"benefits": [
{
"name": "5% Discount on every order",
"benefit_type": "percentage",
"benefit_value": { "reward_type": "percentage", "method": "automatic", "discount_value": 5 }
}
],
"created_at": "2025-09-12T15:44:44+00:00"
},
"next_tier": {
"id": "8ac40d96-4b4e-5358-9444-3f16bab9bf39",
"name": "Gold",
"threshold_value": 1000,
"multiplier": 2.0,
"icon": null,
"benefits": [
{
"name": "10% Discount on every order",
"benefit_type": "percentage",
"benefit_value": { "reward_type": "percentage", "method": "automatic", "discount_value": 10 }
}
],
"created_at": "2025-09-12T15:44:44+00:00"
},
"progress_to_next_tier": {
"current_value": 650,
"required_value": 1000,
"remaining_value": 350,
"progress_percentage": 65.0,
"threshold_type": "total_earned_points"
}
}
}
{
"data": {
"status": "active",
"member_since": "2026-01-10T08:00:00+00:00",
"points": {
"balance": 120,
"earned": 120,
"redeemed": 0
},
"current_tier": null,
"next_tier": {
"id": "7fb39c85-3a3f-4247-8333-2e05a9c8ae28",
"name": "Silver",
"threshold_value": 500,
"multiplier": 1.5,
"icon": null,
"benefits": [],
"created_at": "2025-09-12T15:44:44+00:00"
},
"progress_to_next_tier": {
"current_value": 120,
"required_value": 500,
"remaining_value": 380,
"progress_percentage": 24.0,
"threshold_type": "total_earned_points"
}
}
}
{
"error": {
"code": "not_found",
"message": "Customer not found"
}
}
{
"error": {
"code": "internal_error",
"message": "An unexpected error occurred. Please try again later."
}
}
{
"error": {
"code": "invalid_token",
"message": "Invalid or revoked API token"
}
}