Skip to content

Award history

GET /v1/ep/webhook/awards

List all of your own awards in a tenant (across every user), newest first, paginated. Use it to reconcile everything you’ve credited in that tenant.

ParamInRequiredNotes
tenantIdqueryyesMust be one of your allowedTenants.
limitquerynoPage size. Default 20, max 100.
cursorquerynoOpaque nextCursor from a previous page.

Sign over the tenantId (i.e. {X-Timestamp}.{tenantId}, no body). A suspended partner may still read history.

{
"tenantId": "7g1RP3",
"items": [
{
"epTransactionId": "ep_tx_01HX...",
"orderId": "order-2026-0001",
"userEmail": "user@example.com",
"points": 50,
"note": "Order #2026-0001 cashback",
"awardedAt": "2026-06-17T08:21:09.000Z"
}
],
"nextCursor": null
}
FieldTypeNotes
items[].epTransactionIdstringLedger transaction id of the award.
items[].orderIdstring | nullThe orderId you sent on that award.
items[].userEmailstringThe recipient the EP was credited to.
items[].pointsintegerEP credited in that award.
items[].notestring | nullThe note you sent, if any.
items[].awardedAtstringISO-8601 award time.
nextCursorstring | nullPass back as cursor for the next page. null = last page.

Errors use the same contract: 401 INVALID_SIGNATURE / TIMESTAMP_OUT_OF_RANGE, 403 TENANT_NOT_ALLOWED.

async function listAwards(tenantId, { limit = 20, cursor } = {}) {
const timestamp = Date.now().toString();
const signature = crypto
.createHmac("sha256", SECRET)
.update(`${timestamp}.${tenantId}`) // sign the tenantId, no body
.digest("hex");
const qs = new URLSearchParams({ tenantId, limit: String(limit) });
if (cursor) qs.set("cursor", cursor);
const res = await fetch(`${BASE_URL}/v1/ep/webhook/awards?${qs}`, {
headers: { "X-Api-Key": API_KEY, "X-Timestamp": timestamp, "X-Signature": signature },
});
return res.json(); // { tenantId, items, nextCursor }
}
// Page through the full history:
let cursor;
do {
const page = await listAwards("7g1RP3", { cursor });
for (const a of page.items) console.log(a.awardedAt, a.userEmail, a.orderId, a.points);
cursor = page.nextCursor;
} while (cursor);