Membership benefits and personal perks
View .mdRead GET /v1/developer/guest/me through the SDK’s same-origin guest client. The installation credential scopes the collection and the guest session scopes the person. Never accept a guest ID from the browser.
import { createKismetGuestBrowserClient } from '@kismet-tech/sdk/react';
const guest = createKismetGuestBrowserClient();const account = await guest.getSelf();const program = account.membershipProgram;const personalPerks = account.benefits;REST calls from the server require both the Developer credential and the BFF-held guest token:
curl "$KISMET_API_ORIGIN/v1/developer/guest/me" \ -H "Authorization: Bearer $KISMET_DEVELOPER_API_KEY" \ -H "X-Kismet-Guest-Token: $KISMET_GUEST_ACCESS_TOKEN"Program catalog
Section titled “Program catalog”membershipProgram carries programEnabled, collectionId, benefits, and partnerBenefits. Included benefits contain a name, optional description and named items. Partner offers include the headline, promise, provider and award trigger. Copy and conditions come from the canonical collection perks service. Home-scoped benefits are excluded from this collection-wide read.
This is the advertised catalog, not a personal award. Check the returned membership for ACTIVE status before presenting it as the guest’s program. Offer eligibility, consent, availability and fulfillment conditions still apply. Reading the account never enrolls the guest, awards a perk, changes a price or requests fulfillment.
programEnabled: false means disabled. null means the program read was unavailable. An omitted field means that API version does not provide it. Keep these distinct from a successful empty list.
Personal entitlements
Section titled “Personal entitlements”benefits contains the guest’s partner-code COUPON entitlements: perkId, name, headline, promise, provider, state, award date, redeem-by date and email delivery status. An awarded, unexpired benefit can also include guest-owned redemption details. Older responses may omit that field; unavailable details are null.
Recognize an already-saved offer
Section titled “Recognize an already-saved offer”An offer’s id matches the personal benefit’s perkId. Use the authenticated guest account read for the same collection and environment, and compare those identifiers exactly—never names or providers. Only show an actionable saved offer when state is awarded, redemption is present, and its expiry is absent or still in the future.
If capture returns IDEMPOTENCY_CONFLICT, refresh the authenticated account. An exact eligible benefit allows an “Already saved” result linking to the guest’s account. This read does not create a capture, resend email, or prove a new delivery; do not record it as a new conversion. Keep the conflict if no eligible match is returned. The bounded benefits read is not proof that an absent offer was never awarded, and changing an idempotency key must not be used to force another email.
| State | Display meaning |
|---|---|
pending |
Conditions have not yet produced an award |
awarded |
Awarded; check the redeem-by date before showing as available |
redeemed |
Used |
expired |
Expired |
revoked |
No longer available |
failed |
Unavailable |
Keep future states displayable but non-actionable. An omitted benefits field is unsupported, not proof of zero perks. An empty array is a successful read with no returned entitlements. The read scans the latest 50 partner perk events and returns at most one per perk, so it is not a lifetime entitlement ledger. Other personal perk types are not yet projected.
TEST installations see sandbox personal events only. LIVE excludes them. The program catalog is shared public copy; TEST does not manufacture a separate member program. Re-read after login or account changes, and do not cache this private response publicly. This is display data, never redemption authority.