curl --request GET \
--url "https://api.yukoapp.com/api/v1/public/customers/activities?customer_id=9049402769586&per_page=20" \
--header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
const customerId = "9049402769586";
const params = new URLSearchParams({ per_page: 20 });
const response = await fetch(
`https://api.yukoapp.com/api/v1/public/customers/activities?customer_id=${customerId}&${params}`,
{
method: "GET",
headers: {
Authorization: "Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
},
}
);
const data = await response.json();
$customerId = "9049402769586";
$query = http_build_query(["per_page" => 20]);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.yukoapp.com/api/v1/public/customers/activities?customer_id={$customerId}&{$query}");
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": [
{
"id": "f7a8b9c0-d1e2-3456-fabc-d01234567890",
"customer_id": "63a2c89a-9936-4bc0-9d5f-93db46110b76",
"activity_type": "purchase",
"source_type": "loyalty_campaigns",
"source_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"entry_type": "credit",
"points": 100,
"earning_type": "points",
"metadata": {
"entry_type": "credit",
"earning_type": "points",
"earning_value": 100,
"expire_date": null,
"on_hold_until": null,
"campaign_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"earn_transaction_uuid": "c3d4e5f6-a7b8-9012-cdef-a01234567890"
},
"created_at": "2026-02-15T08:30:00+00:00"
},
{
"id": "e6b7c8d9-e0f1-2345-efab-c01234567890",
"customer_id": "63a2c89a-9936-4bc0-9d5f-93db46110b76",
"activity_type": "point_adjustment",
"source_type": "users",
"source_id": null,
"entry_type": "credit",
"points": 50,
"earning_type": "points",
"metadata": {
"description": "Bonus for completing a survey",
"source": "rest_api",
"transaction_uuid": "b8c9d0e1-f2a3-4567-bcde-f01234567890",
"point_ledger_uuid": "c9d0e1f2-a3b4-5678-cdef-a01234567890",
"entry_type": "credit",
"earning_type": "points",
"earning_value": 50
},
"created_at": "2026-02-10T12:00:00+00:00"
}
],
"meta": {
"pagination": {
"current_page": 1,
"per_page": 20,
"total": 2,
"last_page": 1,
"has_more": false
}
}
}
{
"error": {
"code": "not_found",
"message": "Customer not found"
}
}
{
"error": {
"code": "validation_error",
"message": "The customer id field is required.",
"details": {
"customer_id": ["The customer id field is required."]
}
}
}
{
"error": {
"code": "invalid_token",
"message": "Invalid or revoked API token"
}
}
Customers
List customer activities
Retrieves a paginated list of a customer’s loyalty activities, newest first.
GET
/
public
/
customers
/
activities
curl --request GET \
--url "https://api.yukoapp.com/api/v1/public/customers/activities?customer_id=9049402769586&per_page=20" \
--header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
const customerId = "9049402769586";
const params = new URLSearchParams({ per_page: 20 });
const response = await fetch(
`https://api.yukoapp.com/api/v1/public/customers/activities?customer_id=${customerId}&${params}`,
{
method: "GET",
headers: {
Authorization: "Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
},
}
);
const data = await response.json();
$customerId = "9049402769586";
$query = http_build_query(["per_page" => 20]);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.yukoapp.com/api/v1/public/customers/activities?customer_id={$customerId}&{$query}");
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": [
{
"id": "f7a8b9c0-d1e2-3456-fabc-d01234567890",
"customer_id": "63a2c89a-9936-4bc0-9d5f-93db46110b76",
"activity_type": "purchase",
"source_type": "loyalty_campaigns",
"source_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"entry_type": "credit",
"points": 100,
"earning_type": "points",
"metadata": {
"entry_type": "credit",
"earning_type": "points",
"earning_value": 100,
"expire_date": null,
"on_hold_until": null,
"campaign_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"earn_transaction_uuid": "c3d4e5f6-a7b8-9012-cdef-a01234567890"
},
"created_at": "2026-02-15T08:30:00+00:00"
},
{
"id": "e6b7c8d9-e0f1-2345-efab-c01234567890",
"customer_id": "63a2c89a-9936-4bc0-9d5f-93db46110b76",
"activity_type": "point_adjustment",
"source_type": "users",
"source_id": null,
"entry_type": "credit",
"points": 50,
"earning_type": "points",
"metadata": {
"description": "Bonus for completing a survey",
"source": "rest_api",
"transaction_uuid": "b8c9d0e1-f2a3-4567-bcde-f01234567890",
"point_ledger_uuid": "c9d0e1f2-a3b4-5678-cdef-a01234567890",
"entry_type": "credit",
"earning_type": "points",
"earning_value": 50
},
"created_at": "2026-02-10T12:00:00+00:00"
}
],
"meta": {
"pagination": {
"current_page": 1,
"per_page": 20,
"total": 2,
"last_page": 1,
"has_more": false
}
}
}
{
"error": {
"code": "not_found",
"message": "Customer not found"
}
}
{
"error": {
"code": "validation_error",
"message": "The customer id field is required.",
"details": {
"customer_id": ["The customer id field is required."]
}
}
}
{
"error": {
"code": "invalid_token",
"message": "Invalid or revoked API token"
}
}
Activities include points earned, rewards redeemed, tier changes and manual adjustments. Results are sorted by
created_at, newest first.
Requires the
read:activities scope. See Scopes.Query parameters
string
required
The platform customer ID (for example, the Shopify customer ID).
string
Return only activities from this source. Exact match. Common values include
loyalty_campaigns, loyalty_rewards, loyalty_customer_rewards, loyalty_transactions, loyalty_tiers, loyalty_tier_benefits, events (workflow point awards), referral_transactions, referral_rewards, referral_advocates and users (manual and API point adjustments).string
Return only activities of this type, for example
purchase, point_adjustment, reward_used, point_expiry or vip_tier_upgrade. Exact match.integer
default:20
The number of results per page. Must be between
1 and 100.integer
default:1
The page number to retrieve. See Classic pagination.
Response
object[]
The activities on this page.
Show activity properties
Show activity properties
string<uuid>
Unique identifier for the activity.
string<uuid>
Yuko’s UUID for the customer this activity belongs to.
string
The type of action that occurred.
string
The module or entity that generated this activity.
string<uuid> | null
The UUID of the source record (for example, a campaign or reward) that triggered this activity.
enum<string> | null
Whether the activity resulted in a points credit or debit. One of
credit, debit.integer
The number of points involved in this activity, taken from
metadata.earning_value (or metadata.used_point for redemptions). 0 when no points were involved.string | null
The type of earning, for example
points or store_credit.object
The full activity payload. Structure varies by
activity_type. Returned as an empty array ([]) when the activity has no payload.string<date-time>
When the activity happened (ISO 8601).
object
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:activities. |
404 | not_found | No customer matches customer_id. Message: “Customer not found”. |
422 | validation_error | customer_id is missing. Message: “The customer id field is required.” |
429 | The key exceeded the rate limit. |
curl --request GET \
--url "https://api.yukoapp.com/api/v1/public/customers/activities?customer_id=9049402769586&per_page=20" \
--header "Authorization: Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
const customerId = "9049402769586";
const params = new URLSearchParams({ per_page: 20 });
const response = await fetch(
`https://api.yukoapp.com/api/v1/public/customers/activities?customer_id=${customerId}&${params}`,
{
method: "GET",
headers: {
Authorization: "Bearer py_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
},
}
);
const data = await response.json();
$customerId = "9049402769586";
$query = http_build_query(["per_page" => 20]);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.yukoapp.com/api/v1/public/customers/activities?customer_id={$customerId}&{$query}");
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": [
{
"id": "f7a8b9c0-d1e2-3456-fabc-d01234567890",
"customer_id": "63a2c89a-9936-4bc0-9d5f-93db46110b76",
"activity_type": "purchase",
"source_type": "loyalty_campaigns",
"source_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"entry_type": "credit",
"points": 100,
"earning_type": "points",
"metadata": {
"entry_type": "credit",
"earning_type": "points",
"earning_value": 100,
"expire_date": null,
"on_hold_until": null,
"campaign_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"earn_transaction_uuid": "c3d4e5f6-a7b8-9012-cdef-a01234567890"
},
"created_at": "2026-02-15T08:30:00+00:00"
},
{
"id": "e6b7c8d9-e0f1-2345-efab-c01234567890",
"customer_id": "63a2c89a-9936-4bc0-9d5f-93db46110b76",
"activity_type": "point_adjustment",
"source_type": "users",
"source_id": null,
"entry_type": "credit",
"points": 50,
"earning_type": "points",
"metadata": {
"description": "Bonus for completing a survey",
"source": "rest_api",
"transaction_uuid": "b8c9d0e1-f2a3-4567-bcde-f01234567890",
"point_ledger_uuid": "c9d0e1f2-a3b4-5678-cdef-a01234567890",
"entry_type": "credit",
"earning_type": "points",
"earning_value": 50
},
"created_at": "2026-02-10T12:00:00+00:00"
}
],
"meta": {
"pagination": {
"current_page": 1,
"per_page": 20,
"total": 2,
"last_page": 1,
"has_more": false
}
}
}
{
"error": {
"code": "not_found",
"message": "Customer not found"
}
}
{
"error": {
"code": "validation_error",
"message": "The customer id field is required.",
"details": {
"customer_id": ["The customer id field is required."]
}
}
}
{
"error": {
"code": "invalid_token",
"message": "Invalid or revoked API token"
}
}