400Do not retry unchanged.
Inspect authentication, headers, fields, response codes, and examples without downloading or reading raw OpenAPI JSON.
Keys belong to one environment, carry explicit scopes, and should live only in trusted server infrastructure.
AuthorizationRequiredBearer <key>X-EnvironmentRequiredEnvironment ID that owns the keyIdempotency-KeyMutationsStable business-event identityX-Request-IdOptionalYour trace ID; otherwise Loyumi creates oneOperations are grouped by job. Open one endpoint to see every path, query, and header parameter, the JSON request contract, and the named response schema with its top-level fields.
Earn, return, and offer-evaluation operations
/api/v1/eventsPost a completed purchase and award points⌄Evaluates the selected immutable earn rules, tier multiplier, contextual audiences, campaign caps, pending policy, expiration policy, and member limit in one idempotent transaction. Receipt-time current-configuration evaluation is the default. For a late event, event-time evaluation can explicitly pin a configuration published and effective at occurredAt plus historical member-tier evidence. Currency must match the program, and normalized line references preserve point attribution for later item-selected returns. Requires events:write.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
PurchaseRequesttyperequiredconstant: purchase.completedprogramIdrequiredstringminimum length 1
externalCustomerIdrequiredstringminimum length 1
amountMinorrequiredintegerMerchant-normalized completed order value in the configured program currency's integer minor units.
channeloptionalweb | store | app | partner | marketplace | call_centercurrencyoptionalstringISO 4217 transaction currency. Must match the program's configured currency.
occurredAtoptionalstring · date-timeMerchant business occurrence timestamp. It is audit evidence under the default receipt-time policy and becomes the evaluation clock only when event_time_pinned_configuration is explicitly selected.
storeIdoptionalstringminimum length 1 · maximum length 200
terminalIdoptionalstringminimum length 1 · maximum length 200
marketoptionalstringminimum length 1 · maximum length 100
localeoptionalstringminimum length 1 · maximum length 100
deviceTypeoptionalstringminimum length 1 · maximum length 100
orderTypeoptionalstringminimum length 1 · maximum length 100
salesAssociateIdoptionalstringminimum length 1 · maximum length 200
customerTagsoptionalarray<string>maximum 50 items
attributesoptionalPurchaseAttributescontextoptionalPurchaseNestedContextsubtotalMinoroptionalintegerminimum 0
discountMinoroptionalintegerminimum 0
taxMinoroptionalintegerminimum 0
shippingMinoroptionalintegerminimum 0
eligibleAmountMinoroptionalintegerminimum 0
sourceAmountMinoroptionalintegerOriginal pre-normalization transaction amount; requires the complete FX evidence group.
sourceCurrencyoptionalstringfxRateoptionalstringfxRateSourceoptionalstringminimum length 1 · maximum length 200
fxRateAtoptionalstring · date-timesourceReferencerequiredstringStable order reference from the commerce system.
couponCodeoptionalstringOptional coupon code associated with this purchase.
itemsoptionalarray<CartItem>Normalized order lines whose eligible values feed base earning and whose stable references preserve line-attributed returns. Current built-in purchase rules do not interpret arbitrary line attributes.
{
"type": "purchase.completed",
"programId": "prg_…",
"externalCustomerId": "customer-123",
"amountMinor": 2599,
"channel": "web",
"currency": "USD",
"occurredAt": "2026-08-03T08:00:00.000Z",
"storeId": "store-…",
"sourceReference": "order-10042",
"items": [{
"lineReference": "order-10042-line-1",
"sku": "sku-…",
"quantity": 1,
"unitPriceMinor": 2599
}]
}{
"id": "txn_…",
"status": "committed",
"requestId": "req_…",
"evaluationMode": "receipt_time_current_configuration",
"occurredAt": "2026-08-03T08:00:00.000Z",
"receivedAt": "2026-08-03T08:00:01.000Z",
"evaluatedAt": "2026-08-03T08:00:01.000Z",
"currency": "USD",
"totals": {
"amountMinor": 2599, "subtotalMinor": 2599, "discountMinor": 0,
"taxMinor": 0, "shippingMinor": 0, "eligibleAmountMinor": 2599
},
"linePointAttribution": [
{ "lineReference": "order-10042-line-1", "points": 25 }
],
"member": {
"id": "mem_…",
"externalCustomerId": "customer-123",
"tier": "Member"
},
"award": {
"points": 25,
"basePoints": 25,
"campaignPoints": 0
},
"campaigns": [],
"referral": null,
"coupon": null
}200Existing transaction returned for a repeated idempotency key.
idrequiredstringstatusoptionalstringstateoptionalstringidempotentrequiredconstant: truerequestIdrequiredstring201New award committed.
idrequiredstringstatusrequiredconstant: committedrequestIdrequiredstringevaluationModerequiredreceipt_time_current_configuration | event_time_pinned_configurationoccurredAtrequiredstring · date-timereceivedAtrequiredstring · date-timeevaluatedAtrequiredstring · date-timecurrencyrequiredstringtotalsrequiredCommerceTotalslinePointAttributionrequiredarray<LinePointAttribution>memberrequiredobjectawardrequiredobjectcampaignsrequiredarray<CampaignDecision>referralrequiredvaluecouponrequiredstring | nullevaluationAtrequiredstring · date-timeconfigurationVersionrequiredintegerruleDecisionsrequiredarray<EarnRuleDecision>400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject413The JSON request body exceeds the operation's 128 KiB limit.
errorrequiredobject415Content-Type must be application/json.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/returnsReturn all or part of an order and claw back points⌄Uses the original source reference to derive the related order and program. Item-selected returns validate stable line references and remaining quantities, derive the exact returned line amount, and reverse the points attributed to those lines. Legacy amount-only returns retain bounded proportional clawback semantics. Requires events:write.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
ReturnRequestsourceReferencerequiredstringReference of the original completed order.
returnReferencerequiredstringStable identity for this full or partial return.
returnAmountMinoroptionalintegerLegacy amount-based return value, or an integrity check for an item-selected return.
itemsoptionalarray<object>minimum 1 item · maximum 500 items
{
"sourceReference": "order-10042",
"returnReference": "return-10042-1",
"items": [
{ "lineReference": "order-10042-line-1", "quantity": 1 }
]
}{
"id": "txn_…",
"status": "committed",
"requestId": "req_…",
"return": {
"id": "ret_…",
"sourceReference": "order-10042",
"returnReference": "return-10042-1",
"returnAmountMinor": 2599,
"pointsClawedBack": 25,
"orderStatus": "returned",
"items": [{
"lineReference": "order-10042-line-1", "quantity": 1,
"amountMinor": 2599, "pointsClawedBack": 25
}]
}
}200Existing clawback transaction returned for a repeated idempotency key.
idrequiredstringstatusrequiredstringidempotentrequiredconstant: truerequestIdrequiredstringreturnoptionalvalue201Return and proportional clawback committed.
idrequiredstringstatusrequiredconstant: committedrequestIdrequiredstringreturnrequiredobject400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject413The JSON request body exceeds the operation's 128 KiB limit.
errorrequiredobject415Content-Type must be application/json.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/offers/evaluateEvaluate active cart offers⌄Returns a deterministic contextual discount plan under exclusive, stack, and best-value policies without mutating the cart or consuming a coupon. The request can supply member identity, channel, currency, business occurrence time, market, store, device, order, customer-tag, custom, and normalized line context. New credentials should use offers:evaluate; events:write remains accepted for API 1.7 compatibility.
X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
OfferEvaluationRequestprogramIdoptionalstringRequired to include program-scoped offers.
externalCustomerIdoptionalstringminimum length 1 · maximum length 200
couponCodeoptionalstringamountMinoroptionalintegerOptional reconciled order total. When omitted, the evaluator derives it from normalized items and optional shippingMinor.
channeloptionalweb | store | app | partner | marketplace | call_centercurrencyoptionalstringoccurredAtoptionalstring · date-timeMerchant business timestamp retained as decision context; it does not select a historical offer configuration.
storeIdoptionalstringminimum length 1 · maximum length 200
terminalIdoptionalstringminimum length 1 · maximum length 200
marketoptionalstringminimum length 1 · maximum length 100
localeoptionalstringminimum length 1 · maximum length 100
deviceTypeoptionalstringminimum length 1 · maximum length 100
orderTypeoptionalstringminimum length 1 · maximum length 100
salesAssociateIdoptionalstringminimum length 1 · maximum length 200
customerTagsoptionalarray<string>maximum 50 items
attributesoptionalobjectcontextoptionalobjectsubtotalMinoroptionalintegerminimum 0
discountMinoroptionalintegerminimum 0
taxMinoroptionalintegerminimum 0
shippingMinoroptionalintegerminimum 0
eligibleAmountMinoroptionalintegerminimum 0
sourceAmountMinoroptionalintegerminimum 1
sourceCurrencyoptionalstringfxRateoptionalstringfxRateSourceoptionalstringminimum length 1 · maximum length 200
fxRateAtoptionalstring · date-timeitemsrequiredarray<CartItem>minimum 1 item · maximum 500 items
{
"programId": "prg_…",
"externalCustomerId": "customer-123",
"couponCode": "WELCOME10",
"channel": "web",
"currency": "USD",
"market": "US",
"items": [
{
"lineReference": "cart-line-1", "sku": "SKU-42",
"category": "coffee", "quantity": 2, "unitPriceMinor": 650
}
]
}{
"requestId": "req_…",
"evaluationMode": "receipt_time_current_configuration",
"occurredAt": "2026-08-03T08:00:00.000Z",
"receivedAt": "2026-08-03T08:00:00.000Z",
"evaluatedAt": "2026-08-03T08:00:00.000Z",
"currency": "USD",
"totals": {
"amountMinor": 1300, "subtotalMinor": 1300, "discountMinor": 0,
"taxMinor": 0, "shippingMinor": 0, "eligibleAmountMinor": 1300
},
"subtotalMinor": 1300,
"discountMinor": 130,
"totalMinor": 1170,
"member": { "id": "mem_…", "externalCustomerId": "customer-123", "tier": "Member" },
"effects": [],
"coupon": { "code": "WELCOME10", "valid": true }
}200Contextual effects, eligibility reasons, matched line references, member context, coupon validity, and reconciled totals returned without mutation.
requestIdrequiredstringevaluationModerequiredconstant: receipt_time_current_configurationoccurredAtrequiredstring · date-timereceivedAtrequiredstring · date-timeevaluatedAtrequiredstring · date-timecurrencyrequiredstring | nulltotalsrequiredCommerceTotalssubtotalMinorrequiredintegerdiscountMinorrequiredintegertotalMinorrequiredintegermemberrequiredvalueeffectsrequiredarray<object>couponrequiredvalue400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject413The JSON request body exceeds the operation's 128 KiB limit.
errorrequiredobject415Content-Type must be application/json.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobjectRegistered custom events and milestone benefits
/api/v1/custom-eventsPost a registered engagement event⌄Records a governed event and advances each matching challenge with an atomic database transition. Ledger, balance, and lot writes are conditional on the exact event that wins a completion transition, so concurrent requests cannot double-award or lose progress. Requires events:write.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
CustomEventRequesttyperequiredstringName of an active event definition in the selected environment.
externalCustomerIdrequiredstringminimum length 1 · maximum length 200
sourceReferencerequiredstringminimum length 1 · maximum length 200
occurredAtoptionalstring · date-timemaximum length 64
attributesoptionalobject{
"type": "profile.completed",
"externalCustomerId": "customer-123",
"sourceReference": "profile-customer-123-v1",
"occurredAt": "2026-08-02T08:00:00.000Z",
"attributes": { "source": "account_page" }
}{
"id": "evt_…",
"status": "accepted",
"requestId": "req_…",
"awards": []
}200Durable event and challenge-award outcome replayed for the same Idempotency-Key and exact request payload.
idrequiredstringstatusrequiredconstant: acceptedrequestIdrequiredstringidempotentoptionalbooleanawardsoptionalarray<object>201Event accepted and challenge awards returned.
idrequiredstringstatusrequiredconstant: acceptedrequestIdrequiredstringidempotentoptionalbooleanawardsoptionalarray<object>400Invalid JSON.
errorrequiredobject401Invalid credential or environment.
errorrequiredobject403Credential lacks events:write.
errorrequiredobject404Active event definition or member was not found.
errorrequiredobject409Idempotency-Key payload mismatch, production lock, or sourceReference already belongs to another event in this environment.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject413JSON body exceeds 128 KiB.
errorrequiredobject415Content-Type must be application/json.
errorrequiredobject422Idempotency-Key or a required event field is missing.
errorrequiredobject429Rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error.
errorrequiredobject/api/v1/choice-benefitsClaim a milestone choice benefit⌄Fulfills one eligible reward choice without spending points and decrements the member's remaining selections. Requires events:write.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
ChoiceBenefitRequestexternalCustomerIdrequiredstringminimum length 1
choiceSetIdrequiredstringminimum length 1
rewardIdrequiredstringminimum length 1
sourceReferencerequiredstringminimum length 1
{
"externalCustomerId": "customer-123",
"choiceSetId": "choice_…",
"rewardId": "rwd_…",
"sourceReference": "anniversary-2026-customer-123"
}{
"id": "ful_…",
"state": "fulfilled",
"requestId": "req_…",
"choice": {
"setId": "choice_…",
"rewardId": "rwd_…",
"rewardName": "Anniversary benefit",
"choicesRemaining": 0
}
}200Existing fulfillment returned for a repeated idempotency key.
idrequiredstringstaterequiredstringrequestIdrequiredstringidempotentoptionalbooleanchoiceoptionalobject201Choice fulfilled and remaining selections returned.
idrequiredstringstaterequiredstringrequestIdrequiredstringidempotentoptionalbooleanchoiceoptionalobject400Invalid JSON.
errorrequiredobject401Invalid credential or environment.
errorrequiredobject403Credential lacks events:write.
errorrequiredobject404Member or active choice set was unavailable.
errorrequiredobject409No eligible choice or selected reward inventory remains.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject413JSON body exceeds 128 KiB.
errorrequiredobject415Content-Type must be application/json.
errorrequiredobject422Idempotency-Key or a required choice field is missing.
errorrequiredobject429Rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error.
errorrequiredobjectMember enrollment, profile updates, and balance reads
/api/v1/membersCreate a member identity⌄Creates one environment-scoped member identity and consent record without enrolling any loyalty program. Repeating an existing externalCustomerId returns the existing member. Use PUT /members/{externalId}/programs/{programId} for explicit program enrollment. Legacy non-empty programIds input is rejected with explicit_program_enrollment_required. Requires members:write.
X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
objectexternalCustomerIdrequiredstringminimum length 1 · maximum length 200
displayNamerequiredstringminimum length 1 · maximum length 200
emailoptionalstring · emailmaximum length 320
phoneoptionalstringminimum length 1 · maximum length 64
consentStatusoptionalunknown | opted_in | opted_outdefault unknown
noticeVersionoptionalstringMerchant notice or consent-policy version shown to the member.
{
"externalCustomerId": "<external-customer-id>",
"displayName": "<display-name>",
"email": "<customer-email>",
"consentStatus": "opted_in",
"noticeVersion": "<identity-notice-version>"
}{
"requestId": "req_…",
"member": {
"id": "mem_…",
"externalCustomerId": "<external-customer-id>",
"status": "active",
"consentStatus": "opted_in"
},
"idempotent": false
}200Existing member returned idempotently.
requestIdrequiredstringidempotentrequiredbooleanmemberrequiredobject201Member identity, consent evidence, and audit event created; no program enrollment is created.
requestIdrequiredstringidempotentrequiredbooleanmemberrequiredobject401Invalid credential or environment.
errorrequiredobject403Credential lacks members:write.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject422Member identity or consent fields are invalid, or legacy non-empty programIds requires the explicit program-enrollment operation.
errorrequiredobject429Rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error.
errorrequiredobject/api/v1/membersList and exactly filter members⌄List and exactly filter members. Results are tenant-scoped, ordered deterministically, cursor-paged, and returned with Cache-Control: no-store. Requires members:read.
X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
limitqueryoptionalintegerminimum 1 · maximum 200 · default 50
cursorqueryoptionalstringmaximum length 512
externalIdqueryoptionalstringemailqueryoptionalstring · emailmaximum length 320
statusqueryoptionalactive | suspended | closed | deleted200Request completed.
requestIdrequiredstringmembersrequiredarray<MemberListItem>pagerequiredCursorPage400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/members/{externalId}Get a member, balances, tier, and qualification state⌄Returns the member identity state and consent status plus every program profile and its available, pending, and reserved account balances. Requires members:read.
X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
externalIdpathrequiredstringminimum length 1
GET /api/v1/members/customer-123
Authorization: Bearer <sandbox-key>
X-Environment: <sandbox-environment-id>{
"requestId": "req_…",
"member": {
"id": "mem_…",
"externalCustomerId": "customer-123",
"status": "active",
"consentStatus": "granted"
},
"programs": [
{
"programId": "prg_…",
"tier": "Member",
"qualificationPoints": 25,
"balances": [
{ "accountType": "member", "available": 25, "pending": 0, "reserved": 0 }
]
}
]
}200Member, consent state, program profiles, tiers, qualification totals, and account balances returned with Cache-Control: no-store.
requestIdrequiredstringmemberrequiredobjectprogramsrequiredarray<object>401Invalid credential or environment.
errorrequiredobject403Credential lacks members:read.
errorrequiredobject404Member was not found in the selected environment.
errorrequiredobject429Rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error.
errorrequiredobject/api/v1/members/{externalId}Update a member while preserving consent history⌄Updates supported profile, status, and consent fields without changing the stable external customer identity. Consent changes append evidence instead of overwriting history. Requires members:write. Email changes fail with 409 customer_verification_email_locked while an unexpired customer-link ceremony or pending/active Customer Verification link exists; use customer unlink or governed revoke-only recovery first. Email changes fail with 409 customer_verification_email_locked while an unexpired customer-link ceremony or pending/active Customer Verification link exists; use customer unlink or governed revoke-only recovery first.
X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
externalIdpathrequiredstringminimum length 1
objectdisplayNameoptionalstringminimum length 1 · maximum length 200
emailoptionalstring | null · emailmaximum length 320
phoneoptionalstring | nullminimum length 1 · maximum length 64
statusoptionalactive | suspended | closedconsentStatusoptionalunknown | opted_in | opted_outnoticeVersionoptionalstringminimum length 1 · maximum length 100
PATCH /api/v1/members/customer-123
Authorization: Bearer <sandbox-key>
X-Environment: <sandbox-environment-id>
Content-Type: application/json
{
"displayName": "Jordan Lee",
"consentStatus": "opted_in",
"noticeVersion": "rewards-notice-2026-08"
}{
"requestId": "req_…",
"member": {
"id": "mem_…",
"externalCustomerId": "customer-123",
"displayName": "Jordan Lee",
"status": "active",
"consentStatus": "opted_in"
}
}200Member updated and audit evidence appended.
requestIdrequiredstringmemberrequiredobject401Invalid credential or environment.
errorrequiredobject403Credential lacks members:write.
errorrequiredobject404Member was not found in the selected environment.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject422The member update is invalid.
errorrequiredobject429Rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error.
errorrequiredobject/api/v1/members/{externalId}Anonymize a member under governed retention⌄Tombstones the member profile, withdraws consent, and scrubs known structured identifier copies in operational records. Governed value, transaction, consent, and audit records remain explainable, and merchant-supplied references or evidence remain subject to the merchant's documented legal and financial retention policy. This operation is not a promise that arbitrary merchant-authored text is globally de-identified.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
externalIdpathrequiredstringminimum length 1
objectdeletionReferencerequiredstringMerchant privacy case or erasure request reference.
reasonrequiredstringminimum length 1
200Identity anonymized or original response replayed. Retained record classes are explicit in the response.
requestIdrequiredstringidempotentoptionalbooleanmemberrequiredobjectretainedrequiredstring401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/members/{externalId}/programs/{programId}Explicitly enroll a member in one program⌄Creates the member's program profile and available account under explicit opted-in consent evidence. Existing structurally consistent accounts and balances are preserved during re-enrollment; value is never reset. The member and program must be active and writable. Requires members:write and Idempotency-Key.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
externalIdpathrequiredstringminimum length 1 · maximum length 200
programIdpathrequiredstringminimum length 1 · maximum length 200
MemberProgramEnrollmentRequestconsentStatusrequiredconstant: opted_innoticeVersionrequiredstringminimum length 1 · maximum length 100
evidencerequiredobjectMerchant-controlled consent or withdrawal evidence. Do not place secrets in this object.
200Existing enrollment completed or original result replayed.
requestIdrequiredstringidempotentrequiredbooleanenrollmentrequiredobjectreceiptrequiredMemberProgramEnrollmentReceipt201Program profile or available account created.
requestIdrequiredstringidempotentrequiredbooleanenrollmentrequiredobjectreceiptrequiredMemberProgramEnrollmentReceipt400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject413The JSON request body exceeds the operation's 128 KiB limit.
errorrequiredobject415Content-Type must be application/json.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/members/{externalId}/programs/{programId}Governedly unenroll a member from one program⌄Removes only the program profile after proving available, pending, and reserved balances are zero and no reserved redemption remains. It expires scoped available choice awards and cancels scoped quoted redemption quotes while retaining ledger, transaction, consent, audit, and reward history. An already absent profile returns an idempotent 200 result. This corrective operation remains available while Production is locked. Requires members:write and Idempotency-Key.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
externalIdpathrequiredstringminimum length 1 · maximum length 200
programIdpathrequiredstringminimum length 1 · maximum length 200
MemberProgramUnenrollmentRequestreasonrequiredstringminimum length 1 · maximum length 1000
evidencerequiredobjectMerchant-controlled consent or withdrawal evidence. Do not place secrets in this object.
noticeVersionoptionalstringminimum length 1 · maximum length 100
200Program enrollment removed or confirmed absent.
requestIdrequiredstringidempotentrequiredbooleanenrollmentrequiredobjectreceiptrequiredvalue400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject413The JSON request body exceeds the operation's 128 KiB limit.
errorrequiredobject415Content-Type must be application/json.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobjectQuoted, reserved, committed, released, expired, reversed, fulfilled, and disputed point spends
/api/v1/redemption-quotesQuote a governed point redemption⌄Pins the program version, reward version, point cost, fulfillment type, inventory availability, balance, and point-lot lifetime for 30 to 900 seconds. A quote does not move value.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
objectprogramIdrequiredstringminimum length 1
externalCustomerIdrequiredstringminimum length 1
sourceReferencerequiredstringminimum length 1 · maximum length 200
rewardIdoptionalstringminimum length 1
pointsoptionalintegerminimum 1
ttlSecondsoptionalintegerminimum 30 · maximum 900 · default 300
200Original quote replayed for the same idempotency key and identical payload.
requestIdrequiredstringidempotentoptionalbooleanquoterequiredobject201Bounded quote created without moving points or inventory.
requestIdrequiredstringidempotentoptionalbooleanquoterequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/redemptionsReserve points and reward inventory from a quote⌄Atomically consumes an unexpired quote, moves available points into a reserved account, preserves point-lot provenance, and reserves finite reward inventory.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
objectquoteIdrequiredstringminimum length 1
200Original reservation replayed for the same idempotency key and identical payload.
requestIdrequiredstringidempotentoptionalbooleanredemptionrequiredobject201Points and any finite inventory reserved atomically.
requestIdrequiredstringidempotentoptionalbooleanredemptionrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/redemptionsList and filter redemptions⌄List and filter redemptions. Results are tenant-scoped, ordered deterministically, cursor-paged, and returned with Cache-Control: no-store. Requires redemptions:read.
X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
limitqueryoptionalintegerminimum 1 · maximum 200 · default 50
cursorqueryoptionalstringmaximum length 512
programIdqueryoptionalstringexternalCustomerIdqueryoptionalstringsourceReferencequeryoptionalstringstatequeryoptionalreserved | committed | released | expired | reversed200Request completed.
requestIdrequiredstringredemptionsrequiredarray<RedemptionListItem>pagerequiredCursorPage400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/redemptions/{redemptionId}Get redemption financial, fulfillment, and dispute state⌄X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
redemptionIdpathrequiredstringminimum length 1
200Current financial state, transaction links, fulfillment state, and disputes returned with no-store.
requestIdrequiredstringredemptionrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/redemptions/{redemptionId}/commitCommit a reserved redemption⌄Moves reserved points to program treasury. Coupon and external rewards require a provider and enter pending fulfillment; native entitlements are fulfilled in the same transaction.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
redemptionIdpathrequiredstringobjectfulfillmentReferenceoptionalstringOptional connector reference when it already exists.
provideroptionalstringRequired for coupon and external fulfillment types.
200Original commit replayed.
requestIdrequiredstringidempotentoptionalbooleanredemptionrequiredobject201Redemption committed and fulfillment evidence recorded.
requestIdrequiredstringidempotentoptionalbooleanredemptionrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/redemptions/{redemptionId}/releaseRelease a reservation⌄Returns still-valid reserved point lots to available balance, records expired portions, and releases finite inventory.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
redemptionIdpathrequiredstring200Original release replayed.
requestIdrequiredstringidempotentoptionalbooleanredemptionrequiredobject201Reservation released with point-lot provenance preserved.
requestIdrequiredstringidempotentoptionalbooleanredemptionrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/redemptions/{redemptionId}/expireExpire a reservation after its deadline⌄X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
redemptionIdpathrequiredstring200Original expiration replayed.
requestIdrequiredstringidempotentoptionalbooleanredemptionrequiredobject201Past-due reservation expired; valid points returned and expired points recorded.
requestIdrequiredstringidempotentoptionalbooleanredemptionrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/redemptions/{redemptionId}/reverseReverse a committed redemption⌄Creates a linked compensating transaction. A fulfilled reward also requires a fulfillmentCancellationReference.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
redemptionIdpathrequiredstringobjectreasonCoderequiredstringminimum length 1
descriptionrequiredstringminimum length 1
fulfillmentCancellationReferenceoptionalstringminimum length 1
200Original reversal replayed.
requestIdrequiredstringidempotentoptionalbooleanredemptionrequiredobject201Compensating reversal committed with evidence.
requestIdrequiredstringidempotentoptionalbooleanredemptionrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/redemptions/{redemptionId}/cancelCancel using the safe operation for current state⌄Derives release for a reservation or reversal for a committed redemption. A derived reversal additionally requires redemptions:reverse; fulfilled value may require an explicit dispute instead.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
redemptionIdpathrequiredstringobjectreasonCodeoptionalstringdescriptionoptionalstringfulfillmentCancellationReferenceoptionalstring200Original derived command replayed.
201Safe state-dependent cancellation completed.
401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/redemptions/{redemptionId}/disputesOpen a redemption dispute with evidence⌄Opens a governed redemption dispute using a credential bound to a stable approval principal. Legacy credentials without a stable principal binding are rejected until rotated.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
redemptionIdpathrequiredstringobjectreasonCoderequiredstringminimum length 1
descriptionrequiredstringminimum length 1 · maximum length 2000
evidencerequiredobjectInline JSON evidence metadata retained with the dispute. External files must be stored by the merchant and referenced from this object.
200Original dispute replayed.
requestIdrequiredstringidempotentoptionalbooleandisputerequiredobject201Open dispute recorded and linked to the redemption.
requestIdrequiredstringidempotentoptionalbooleandisputerequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/redemption-disputes/{disputeId}/resolveResolve an open redemption dispute⌄Resolves or rejects an open redemption dispute using maker-checker separation. The resolver credential must be bound to a stable approval principal different from the principal that opened the dispute; legacy unbound disputes and credentials fail closed.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
disputeIdpathrequiredstringobjectdecisionrequiredresolved | rejectedresolutionrequiredstringminimum length 1 · maximum length 2000
200Original resolution replayed or dispute resolved.
requestIdrequiredstringidempotentoptionalbooleandisputerequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/redemptions/{redemptionId}/fulfillment-eventsRecord an idempotent fulfillment connector event⌄Advances the attached fulfillment through allowed states without changing the redemption's financial state. A fulfilled event requires fulfillmentReference, a failed event requires lastError, and moving an existing fulfilled reward to cancelled requires fulfillmentCancellationReference as durable connector cancellation evidence.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
redemptionIdpathrequiredstringobjectstaterequiredpending | fulfilled | failed | cancelledfulfillmentReferenceoptionalstringminimum length 1 · maximum length 500
fulfillmentCancellationReferenceoptionalstringDurable merchant or connector cancellation evidence. Required when the stored fulfillment is fulfilled and the requested state is cancelled.
lastErroroptionalstringminimum length 1 · maximum length 2000
200Original connector event replayed or fulfillment updated.
requestIdrequiredstringidempotentoptionalbooleanfulfillmentrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobjectEvidence-backed, independently approved manual ledger corrections
/api/v1/adjustmentsRequest a governed ledger adjustment⌄Records an evidence-backed credit or debit in pending_approval. The requester’s immutable stable principal is barred from deciding it, including through another credential bound to the same human or service. Legacy credentials without a stable principal fail closed for governed requests.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
objectprogramIdrequiredstringminimum length 1
externalCustomerIdrequiredstringminimum length 1
directionrequiredcredit | debitpointsrequiredintegerminimum 1
reasonCoderequiredstringminimum length 1
descriptionrequiredstringminimum length 1
evidencerequiredobject200Original request replayed.
requestIdrequiredstringidempotentoptionalbooleanadjustmentrequiredobject202Adjustment recorded pending independent approval.
requestIdrequiredstringidempotentoptionalbooleanadjustmentrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/adjustmentsList and filter governed adjustments⌄List and filter governed adjustments. Results are tenant-scoped, ordered deterministically, cursor-paged, and returned with Cache-Control: no-store. Requires adjustments:read.
X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
limitqueryoptionalintegerminimum 1 · maximum 200 · default 50
cursorqueryoptionalstringmaximum length 512
programIdqueryoptionalstringexternalCustomerIdqueryoptionalstringstatequeryoptionalstring200Request completed.
requestIdrequiredstringadjustmentsrequiredarray<AdjustmentListItem>pagerequiredCursorPage400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/adjustments/{adjustmentId}Get adjustment evidence and posting state⌄X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
adjustmentIdpathrequiredstring200Adjustment, evidence, approval, and transaction links returned with no-store.
requestIdrequiredstringadjustmentrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/adjustments/{adjustmentId}/approveIndependently approve and post an adjustment⌄The approver must have a different immutable stable principal from the requester; another credential bound to the same human or service principal cannot self-approve. Legacy credentials without a stable principal fail closed for governed approvals. Posting preserves balanced ledger and point-lot provenance.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
adjustmentIdpathrequiredstringobjectapprovalReferencerequiredstringminimum length 1
decisionNoterequiredstringminimum length 1
200Original decision replayed.
requestIdrequiredstringidempotentoptionalbooleanadjustmentrequiredobject201Adjustment posted to the balanced ledger.
requestIdrequiredstringidempotentoptionalbooleanadjustmentrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/adjustments/{adjustmentId}/rejectIndependently reject an adjustment⌄X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
adjustmentIdpathrequiredstringobjectapprovalReferencerequiredstringminimum length 1
decisionNoterequiredstringminimum length 1
200Adjustment rejected or original rejection replayed.
requestIdrequiredstringidempotentoptionalbooleanadjustmentrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/adjustments/{adjustmentId}/reversePost a compensating reversal for an adjustment⌄X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
adjustmentIdpathrequiredstringobjectapprovalReferencerequiredstringminimum length 1
decisionNoterequiredstringminimum length 1
200Original reversal replayed.
requestIdrequiredstringidempotentoptionalbooleanadjustmentrequiredobject201Linked compensating transaction posted.
requestIdrequiredstringidempotentoptionalbooleanadjustmentrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobjectValidated, immutable program manifests with optimistic concurrency and controlled publishing
/api/v1/program-configurations/validateValidate and normalize a program manifest⌄Returns a checksum, normalized manifest, impact counts, and policy warnings without creating or changing a program.
X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
ProgramManifestInputschemaVersionrequiredconstant: loyumi.program/v1programrequiredobjectrulesrequiredarray<object>minimum 1 item
tiersoptionalarray<object>At most 16 active tier definitions are supported in one program version.
rewardsoptionalarray<object>default
campaignsoptionalarray<object>default
200Manifest is valid and normalized.
requestIdrequiredstringvalidrequiredconstant: truechecksumrequiredstringsummaryrequiredProgramConfigurationSummarynormalizedrequiredProgramManifestwarningsrequiredarray<string>401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/programsList programs and latest managed revisions⌄X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
200Environment programs and their newest immutable configuration revision returned.
requestIdrequiredstringprogramsrequiredarray<object>401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/programsCreate a draft program from a validated manifest⌄Creates version 1 as an immutable draft. It does not publish or activate the program.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
ProgramManifestInputschemaVersionrequiredconstant: loyumi.program/v1programrequiredobjectrulesrequiredarray<object>minimum 1 item
tiersoptionalarray<object>At most 16 active tier definitions are supported in one program version.
rewardsoptionalarray<object>default
campaignsoptionalarray<object>default
200Original create response replayed.
requestIdrequiredstringidempotentoptionalbooleanprogramrequiredobjectrevisionrequiredobject201Draft program and immutable version 1 created.
requestIdrequiredstringidempotentoptionalbooleanprogramrequiredobjectrevisionrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/programs/{programId}/configurationGet the current or a specific immutable program manifest⌄X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
programIdpathrequiredstringversionqueryoptionalintegerminimum 1
200Immutable manifest and checksum returned. The ETag header is required for the next revision mutation.
requestIdrequiredstringprogramrequiredobjectrevisionrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/programs/{programId}/revisionsList immutable program revision history⌄X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
programIdpathrequiredstring200Revision versions, status, checksum, provenance, and timestamps returned.
requestIdrequiredstringrevisionsrequiredarray<object>401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/programs/{programId}/revisionsCreate the next immutable draft revision⌄Requires the latest ETag in If-Match. Returns 428 when absent and 412 when stale.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
If-Matchheaderrequiredstringminimum length 1
programIdpathrequiredstringProgramManifestInputschemaVersionrequiredconstant: loyumi.program/v1programrequiredobjectrulesrequiredarray<object>minimum 1 item
tiersoptionalarray<object>At most 16 active tier definitions are supported in one program version.
rewardsoptionalarray<object>default
campaignsoptionalarray<object>default
200Original revision response replayed.
requestIdrequiredstringidempotentoptionalbooleanrevisionrequiredobject201Next immutable draft created with a new ETag.
requestIdrequiredstringidempotentoptionalbooleanrevisionrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject412If-Match does not equal the latest immutable configuration ETag.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject428If-Match is required for this configuration mutation.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/programs/{programId}/revisions/{version}/publishPublish one exact draft revision⌄Requires the draft's exact ETag, expands its keyed objects into runtime records, archives the prior published version, and advances currentVersion behind a same-transaction monotonic fence. A draft at or behind the current published version is rejected; historical rollback must use restore to create a new draft.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
If-Matchheaderrequiredstringminimum length 1
programIdpathrequiredstringversionpathrequiredintegerminimum 1
objectapprovalReferenceoptionalstringminimum length 1
200Original publish response replayed.
requestIdrequiredstringidempotentoptionalbooleanprogramrequiredobjectrevisionrequiredobject201Exact revision published atomically.
requestIdrequiredstringidempotentoptionalbooleanprogramrequiredobjectrevisionrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject412If-Match does not equal the latest immutable configuration ETag.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject428If-Match is required for this configuration mutation.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/programs/{programId}/revisions/{version}/restoreCopy an old manifest into a new draft revision⌄Restore never mutates history or silently publishes. It copies the selected source version into the next immutable draft and requires the latest ETag.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
If-Matchheaderrequiredstringminimum length 1
programIdpathrequiredstringversionpathrequiredintegerminimum 1
objectreasonrequiredstringminimum length 1
200Original restore response replayed.
requestIdrequiredstringidempotentoptionalbooleanrevisionrequiredobject201Historical manifest copied into a new draft with a new ETag.
requestIdrequiredstringidempotentoptionalbooleanrevisionrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject412If-Match does not equal the latest immutable configuration ETag.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject428If-Match is required for this configuration mutation.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobjectDurable, personalized, recipient-bound catalog-entitlement gifts with readiness/onboarding, one-to-four reward choice, independently verified decisions, purpose-bound delivery evidence, first-party wallets, single-use entitlement evidence, exact restoration, and governed recovery. Reward Gifts never create cash, a transferable balance, or a points-transfer rail.
/api/v1/reward-gift-quotesQuote one recipient-bound catalog reward gift⌄Resolves two active enrolled members, enforces program gift policy, inventory, velocity, open-gift, balance, and point-lot-expiry limits, then returns an immutable exact disclosure. It moves no value and requires gifts:write plus Idempotency-Key on an isolated value credential. If the sender's eligible balance exceeds the bounded reversible source-lot batch, the operation fails before reservation with 409 reward_gift_source_lot_limit_exceeded; compact the point lots and exact-replay the same business operation.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
200Exact quote replayed idempotently.
requestIdrequiredstringrewardGiftQuoterequiredRewardGiftQuoteidempotentoptionalconstant: true201Exact gift quote created without reserving value.
requestIdrequiredstringrewardGiftQuoterequiredRewardGiftQuoteidempotentoptionalconstant: true400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/reward-giftsReserve an independently approved reward gift⌄Atomically revalidates the exact sender approval, immutable disclosure, participants, gift policy, original point lots, and reward inventory before reserving value. The private raw claim token is returned only on create or exact idempotent replay and must remain on the merchant server. If the sender's eligible balance exceeds the bounded reversible source-lot batch, the operation fails before reservation with 409 reward_gift_source_lot_limit_exceeded; compact the point lots and exact-replay the same business operation.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
RewardGiftCreateRequestquoteIdrequiredstringminimum length 1 · maximum length 200
approvalIdrequiredstringminimum length 1 · maximum length 200
200Exact reservation replayed with the same private claim capability.
201Gift value and inventory reserved.
400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/reward-giftsList durable reward gifts for reconciliation⌄Returns tenant-scoped, deterministic cursor pages without claim tokens, browser handoffs, provider fulfillment references, member IDs, or other authority material.
X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
limitqueryoptionalintegerminimum 1 · maximum 200 · default 50
cursorqueryoptionalstringmaximum length 512
statequeryoptionalpending_claim | fulfilled | declined | cancelled | expired | reversedprogramIdqueryoptionalstringminimum length 1 · maximum length 200
senderExternalCustomerIdqueryoptionalstringminimum length 1 · maximum length 320
recipientExternalCustomerIdqueryoptionalstringminimum length 1 · maximum length 320
fromqueryoptionalstring · date-timetoqueryoptionalstring · date-time200Reward gifts returned.
requestIdrequiredstringrewardGiftsrequiredarray<RewardGiftListItem>pagerequiredCursorPage400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/reward-gifts/{giftId}Read the authoritative merchant reward-gift receipt⌄Returns the environment-scoped sender/merchant projection with exact terminal and restoration evidence. It never returns the raw claim token, participant member IDs, provider identity, or browser-session authority.
X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
giftIdpathrequiredstringminimum length 1 · maximum length 200
200Authoritative gift receipt returned with no-store.
requestIdrequiredstringrewardGiftrequiredvalueidempotentoptionalconstant: true400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/reward-gift-claim-handoffsConvert a server-held claim token into a one-use browser handoff⌄Converts a server-held claim capability into a 60-second one-use browser handoff. Requires Idempotency-Key: an exact replay while the code is still live returns the same code with idempotent:true; replay after consumption or expiry is rejected. A new key may issue a new generation only after no live handoff remains. Never place the raw claim token or recipient contact data in the key, browser, URL, analytics, or logs.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
RewardGiftClaimHandoffRequestgiftIdrequiredstringminimum length 1 · maximum length 200
claimTokenrequiredstring200Exact replay returned the same still-live one-use handoff.
requestIdrequiredstringclaimHandoffrequiredobjectidempotentrequiredconstant: true201A new one-use recipient handoff generation was issued.
requestIdrequiredstringclaimHandoffrequiredobjectidempotentoptionalconstant: true400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/reward-gift-claim-handoffs/exchangeExchange a one-use recipient handoff for a closure-only gift session⌄Trusted Loyumi frame only. At the authoritative same origin, the independently member-bound Widget session consumes the handoff once and receives a 10-minute gift session for closure-memory use. The session is no-store and the embedded flow has no third-party-cookie dependency.
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
RewardGiftClaimHandoffExchangeRequestgiftIdrequiredstringhandoffCoderequiredstring201Gift-scoped recipient claim session created.
requestIdrequiredstringclaimSessionrequiredobject400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/reward-gift-approvalsStart or recover exact sender gift approval⌄Starts or recovers a quote-bound sender approval intent from the live Loyumi-hosted frame. Intent issuance never approves the quote; the cooled linked sender must complete a fresh top-level provider authorization and explicit exact-term click.
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
RewardGiftApprovalIntentRequestquoteIdrequiredstringminimum length 1 · maximum length 200
disclosureFingerprintrequiredstringconfirmationNoncerequiredstring200Existing exact approval intent recovered.
requestIdrequiredstringapprovalIntentrequiredRewardGiftApprovalIntentidempotentoptionalconstant: true201Quote-bound sender approval intent created.
requestIdrequiredstringapprovalIntentrequiredRewardGiftApprovalIntentidempotentoptionalconstant: true400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/reward-gift-approvals/{intentId}Poll authoritative sender approval status⌄Returns only the current quote-bound approval status for the verified linked sender.
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
intentIdpathrequiredstringminimum length 1 · maximum length 200
200Approval status returned.
requestIdrequiredstringapprovalIntentrequiredRewardGiftApprovalIntentidempotentoptionalconstant: true400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/reward-gift-approvals/{intentId}/step-upStart fresh provider authorization for sender approval⌄Top-level Loyumi-origin transport operation. It records a one-use intent-bound provider ceremony marker and returns the provider callback; it does not approve or reserve the gift.
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
intentIdpathrequiredstringminimum length 1 · maximum length 200
200Provider authorization callback created with no-store.
requestIdrequiredstringstepUprequiredobject400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/reward-gift-approvals/{intentId}/approveExplicitly approve the exact gift quote after provider step-up⌄Requires the exact cooled linked provider user/account, a fresh intent-bound authorization marker, a current Loyumi customer session, and an explicit CSRF-bound click. Approval does not move value.
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
intentIdpathrequiredstringminimum length 1 · maximum length 200
RewardGiftExplicitActionRequestcsrfrequiredstringminimum length 1 · maximum length 512
200Exact prior approval returned.
requestIdrequiredstringapprovalIntentrequiredRewardGiftApprovalIntentidempotentoptionalconstant: true201Exact immutable gift quote approved.
requestIdrequiredstringapprovalIntentrequiredRewardGiftApprovalIntentidempotentoptionalconstant: true400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/reward-gift-claims/{giftId}Read the intended recipient gift projection⌄Requires both the intended recipient Widget session and the closure-only gift session header. Returns the immutable participant-safe receipt and current accept/decline capabilities; the claim capability itself is never returned.
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
giftIdpathrequiredstringminimum length 1 · maximum length 200
200Private recipient gift projection returned.
requestIdrequiredstringrewardGiftrequiredRewardGiftParticipantReceiptcapabilitiesrequiredobject400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/reward-gift-claims/{giftId}/acceptStart acceptance for the exact recipient gift⌄Starts or recovers a accept intent bound to the verified recipient, closure-only gift session header, and immutable disclosure. It does not itself accept or move value; a fresh provider ceremony and explicit click are still required.
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
giftIdpathrequiredstringminimum length 1 · maximum length 200
RewardGiftAcceptanceRequestdisclosureFingerprintrequiredstringselectedRewardIdoptionalstringminimum length 1 · maximum length 200
200Existing exact decision intent recovered.
requestIdrequiredstringgiftActionIntentrequiredRewardGiftActionIntentidempotentoptionalconstant: true201Recipient decision intent created.
requestIdrequiredstringgiftActionIntentrequiredRewardGiftActionIntentidempotentoptionalconstant: true400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/reward-gift-claims/{giftId}/declineStart decline for the exact recipient gift⌄Starts or recovers a decline intent bound to the verified recipient, closure-only gift session header, and immutable disclosure. It does not itself decline or move value; a fresh provider ceremony and explicit click are still required.
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
giftIdpathrequiredstringminimum length 1 · maximum length 200
RewardGiftDecisionRequestdisclosureFingerprintrequiredstring200Existing exact decision intent recovered.
requestIdrequiredstringgiftActionIntentrequiredRewardGiftActionIntentidempotentoptionalconstant: true201Recipient decision intent created.
requestIdrequiredstringgiftActionIntentrequiredRewardGiftActionIntentidempotentoptionalconstant: true400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/reward-gifts/{giftId}/cancelStart sender cancellation for a pending gift⌄Starts or recovers cancellation bound to the verified sender and immutable pending gift. It does not itself cancel or release value; a fresh provider ceremony and explicit click are still required.
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
giftIdpathrequiredstringminimum length 1 · maximum length 200
RewardGiftDecisionRequestdisclosureFingerprintrequiredstring200Existing exact cancellation intent recovered.
requestIdrequiredstringgiftActionIntentrequiredRewardGiftActionIntentidempotentoptionalconstant: true201Sender cancellation intent created.
requestIdrequiredstringgiftActionIntentrequiredRewardGiftActionIntentidempotentoptionalconstant: true400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/reward-gift-actions/{intentId}Poll authoritative accept, decline, or cancel status⌄Returns only the intent belonging to the verified linked actor. Recipient intents additionally require X-Loyumi-Gift-Session from the trusted frame closure; sender cancellation never sends or accepts recipient claim authority.
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
intentIdpathrequiredstringminimum length 1 · maximum length 200
200Gift action status returned.
requestIdrequiredstringgiftActionIntentrequiredRewardGiftActionIntentidempotentoptionalconstant: true400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/reward-gift-actions/{intentId}/step-upStart fresh provider authorization for a gift decision⌄Top-level Loyumi-origin transport operation. It records a one-use action-intent provider ceremony marker and returns the provider callback; it does not change gift value.
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
intentIdpathrequiredstringminimum length 1 · maximum length 200
200Provider authorization callback created with no-store.
requestIdrequiredstringstepUprequiredobject400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/reward-gift-actions/{intentId}/completeExplicitly complete verified acceptance, decline, or cancellation⌄Requires the exact cooled linked provider user/account, a fresh intent-bound authorization marker, a current Loyumi customer session, and explicit CSRF-bound click. The mutation is atomic: acceptance commits sender value and creates recipient fulfillment; decline or cancellation releases inventory and restores only eligible original lots.
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
intentIdpathrequiredstringminimum length 1 · maximum length 200
RewardGiftExplicitActionRequestcsrfrequiredstringminimum length 1 · maximum length 512
200Exact prior terminal decision returned.
requestIdrequiredstringrewardGiftrequiredRewardGiftParticipantReceiptrestorationoptionalobjectidempotentoptionalconstant: true201Verified terminal gift decision committed.
requestIdrequiredstringrewardGiftrequiredRewardGiftParticipantReceiptrestorationoptionalobjectidempotentoptionalconstant: true400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/reward-gifts/{giftId}/recoverGoverned post-acceptance gift reversal⌄Atomically reverses one fulfilled recipient entitlement only after exact cancellation evidence and a matching resolved dispute. Its isolated gifts:reverse principal must differ from both dispute principals. This is not sender cancellation, retry, or claim recovery.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
giftIdpathrequiredstringminimum length 1 · maximum length 200
RewardGiftRecoveryRequestdisputeIdrequiredstringminimum length 1 · maximum length 200
reasonCoderequiredfraud | fulfillment_failure | recipient_ineligible | merchant_cancellation | legal_requirementdescriptionrequiredstringminimum length 1 · maximum length 2000
fulfillmentCancellationReferencerequiredstringminimum length 1 · maximum length 500
200Exact governed reversal replayed idempotently.
requestIdrequiredstringrewardGiftrequiredRewardGiftParticipantReceiptidempotentoptionalconstant: true201Governed gift reversal committed.
requestIdrequiredstringrewardGiftrequiredRewardGiftParticipantReceiptidempotentoptionalconstant: true400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/reward-gifts/{giftId}/fulfillment-eventsRecord reward-entitlement cancellation evidence⌄Records an exact cancellation reference on an already fulfilled recipient-bound entitlement. The fulfillment and gift remain fulfilled; this evidence-only operation cannot restore points. Governed reversal separately requires an independently opened and resolved dispute plus an isolated gifts:reverse principal. Requires fulfillments:write.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
giftIdpathrequiredstringminimum length 1 · maximum length 200
RewardGiftFulfillmentCancellationRequeststaterequiredconstant: cancelledfulfillmentCancellationReferencerequiredstringminimum length 1 · maximum length 500
200Cancellation evidence recorded or exactly replayed.
requestIdrequiredstringfulfillmentrequiredRewardGiftFulfillmentCancellationidempotentoptionalconstant: true400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/reward-gifts/{giftId}/disputesOpen an independently governed reward-gift dispute⌄Opens a governed recovery case only after an accepted entitlement has exact cancellation evidence. The opener is bound to a stable principal; opening the case does not restore points. Requires disputes:write and an idempotency key.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
giftIdpathrequiredstringminimum length 1 · maximum length 200
RewardGiftDisputeRequestreasonCoderequiredfraud | fulfillment_failure | recipient_ineligible | merchant_cancellation | legal_requirementdescriptionrequiredstringminimum length 1 · maximum length 2000
evidencerequiredRewardGiftDisputeEvidence200Exact dispute replayed idempotently.
requestIdrequiredstringdisputerequiredRewardGiftDisputeidempotentoptionalconstant: true201Reward-gift dispute opened.
requestIdrequiredstringdisputerequiredRewardGiftDisputeidempotentoptionalconstant: true400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/reward-gift-disputes/{disputeId}/resolveResolve or reject an open reward-gift dispute⌄Resolves or rejects an open reward-gift dispute. A different stable principal from the opener is mandatory. Resolution does not restore points. Requires disputes:resolve and an idempotency key.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
disputeIdpathrequiredstringminimum length 1 · maximum length 200
RewardGiftDisputeResolutionRequestdecisionrequiredresolved | rejectedresolutionrequiredstringminimum length 1 · maximum length 2000
200Dispute resolved, rejected, or exactly replayed.
requestIdrequiredstringdisputerequiredRewardGiftDisputeidempotentoptionalconstant: true400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/reward-gift-invitationsCreate a durable personalized reward-gift invitation⌄Creates a pre-value, privacy-safe invitation for one to four catalog-entitlement choices. It may return onboarding readiness, but never promises reward availability or sender cost before reservation. Contact destinations remain opaque merchant vault references.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
RewardGiftInvitationCreateRequestprogramIdrequiredstringminimum length 1 · maximum length 200
senderExternalCustomerIdrequiredstringminimum length 1 · maximum length 320
recipientExternalCustomerIdrequiredstringminimum length 1 · maximum length 320
rewardIdsrequiredarray<string>minimum 1 item · maximum 4 items
sourceReferenceoptionalstringminimum length 1 · maximum length 200
personalizationrequiredRewardGiftInvitationPersonalizationInputdeliveryrequiredobject200Exact invitation replayed.
requestIdrequiredstringrewardGiftInvitationrequiredRewardGiftInvitationeligibilityNoticerequiredvalueidempotentoptionalconstant: true202Invitation durably accepted for readiness or sender approval.
requestIdrequiredstringrewardGiftInvitationrequiredRewardGiftInvitationeligibilityNoticerequiredvalueidempotentoptionalconstant: true400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/reward-gift-invitationsList durable reward-gift invitations⌄Returns cursor-paged invitation, readiness, option, and delivery evidence without member IDs, contact addresses, claim capabilities, provider secrets, or customer-session authority.
X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
limitqueryoptionalintegerminimum 1 · maximum 200 · default 50
cursorqueryoptionalstringmaximum length 512
statequeryoptionalonboarding | ready | quoted | reserved | accepted | declined | cancelled | expired | reversed | revokedprogramIdqueryoptionalstringminimum length 1 · maximum length 200
200Invitations returned.
requestIdrequiredstringrewardGiftInvitationsrequiredarray<RewardGiftInvitation>pagerequiredCursorPage400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/reward-gift-invitations/{invitationId}Read one authoritative reward-gift invitation⌄Returns the current invitation, readiness, choices, and delivery evidence. The response is no-store and contains only opaque destination/provider references.
X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
invitationIdpathrequiredstringminimum length 1 · maximum length 200
200Invitation returned.
requestIdrequiredstringrewardGiftInvitationrequiredRewardGiftInvitationeligibilityNoticerequiredvalueidempotentoptionalconstant: true400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/reward-gift-invitations/{invitationId}/readinessRefresh recipient readiness for an invitation⌄Re-evaluates enrollment, provider verification, identity cooling, and option compatibility without reserving value or promising an outcome.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
invitationIdpathrequiredstringminimum length 1 · maximum length 200
RewardGiftInvitationReadinessRequestrecipientExternalCustomerIdrequiredstringminimum length 1 · maximum length 320
200Readiness returned or exactly replayed.
requestIdrequiredstringinvitationIdrequiredstringstaterequiredonboarding | ready | quoted | reserved | accepted | declined | cancelled | expired | reversed | revokedreadinessrequiredRewardGiftInvitationReadinessidempotentoptionalconstant: true400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/reward-gift-invitations/{invitationId}/deliveriesSchedule a purpose-bound invitation delivery⌄Schedules onboarding or reserved-gift notification evidence. Requires the isolated gifts:delivery authority; a provider worker must re-read authoritative invitation and gift state immediately before sending. The 60-second claim handoff is never notification content.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
invitationIdpathrequiredstringminimum length 1 · maximum length 200
RewardGiftInvitationDeliveryRequestphaserequiredonboarding_notice | gift_readykindrequiredinitial | reminder | resendscheduledForoptionalstring · date-time200Exact delivery schedule replayed.
requestIdrequiredstringdeliveryrequiredRewardGiftInvitationScheduledDeliverycontentBoundaryrequiredRewardGiftInvitationDeliveryContentBoundaryidempotentoptionalconstant: true201Delivery attempt scheduled.
requestIdrequiredstringdeliveryrequiredRewardGiftInvitationScheduledDeliverycontentBoundaryrequiredRewardGiftInvitationDeliveryContentBoundaryidempotentoptionalconstant: true400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/reward-gift-invitations/{invitationId}/arrivalsCreate a just-in-time recipient arrival handoff⌄After the intended recipient authenticates through a delivered gift-ready attempt, issues one 60-second one-use handoff for the trusted Loyumi frame. The handoff is never the durable invitation and must not enter notification content, URLs, logs, analytics, or storage.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
invitationIdpathrequiredstringminimum length 1 · maximum length 200
RewardGiftInvitationArrivalRequestrecipientExternalCustomerIdrequiredstringminimum length 1 · maximum length 320
deliveryIdrequiredstringminimum length 1 · maximum length 200
200Exact still-live arrival generation replayed.
requestIdrequiredstringinvitationIdrequiredstringgiftIdrequiredstringclaimHandoffrequiredobjectidempotentoptionalconstant: true201Just-in-time arrival handoff created.
requestIdrequiredstringinvitationIdrequiredstringgiftIdrequiredstringclaimHandoffrequiredobjectidempotentoptionalconstant: true400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/reward-gift-invitation-deliveries/{deliveryId}/eventsRecord provider delivery outcome evidence⌄Attests sent, delivered, or failed state using only opaque provider evidence under the isolated gifts:delivery authority. Database-time due and live-gift fences prevent stale gift-ready sends; terminal invitation or gift state cancels scheduled attempts.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
deliveryIdpathrequiredstringminimum length 1 · maximum length 200
RewardGiftInvitationDeliveryEventRequeststaterequiredsent | delivered | failedproviderReferenceoptionalstringminimum length 1 · maximum length 500
failureCodeoptionalstring200Delivery outcome recorded or exactly replayed.
requestIdrequiredstringdeliveryrequiredRewardGiftInvitationDeliveryEventidempotentoptionalconstant: true400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/reward-gift-walletRead a participant's first-party sent or received gift wallet⌄Loyumi-hosted popup only. Requires a live member-bound Widget session, a fresh matching provider identity, Sec-Fetch-Site: same-origin, and an exact Loyumi Origin when supplied. No wallet item, one-use Widget code, or customer session crosses to merchant JavaScript or postMessage.
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
viewqueryrequiredsent | receivedlimitqueryoptionalintegerminimum 1 · maximum 200 · default 50
cursorqueryoptionalstringmaximum length 512
200First-party wallet page returned with no-store.
requestIdrequiredstringviewrequiredsent | receiveditemsrequiredarray<value>pagerequiredCursorPage400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/reward-gifts/{giftId}/use-eventsRecord the single recipient-bound entitlement use⌄Records one real-world use under the isolated fulfillment authority. The event time must fall between issuance and expiry and no more than five minutes in the server future. It cannot spend points, transfer value, reload the entitlement, or consume it twice.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
giftIdpathrequiredstringminimum length 1 · maximum length 200
RewardGiftEntitlementUseRequestsourceReferencerequiredstringminimum length 1 · maximum length 500
occurredAtrequiredstring · date-time200Exact entitlement-use replay returned.
requestIdrequiredstringrewardGiftEntitlementrequiredRewardGiftEntitlementuseEventrequiredRewardGiftEntitlementUseEventidempotentoptionalconstant: true201Entitlement use recorded.
requestIdrequiredstringrewardGiftEntitlementrequiredRewardGiftEntitlementuseEventrequiredRewardGiftEntitlementUseEventidempotentoptionalconstant: true400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobjectBilateral exchange agreements, private member links, conversion quotes, exchanges, and settlement evidence
/api/v1/partner-agreementsPropose versioned bilateral exchange terms⌄Creates source-approved terms in proposed state between two different merchants. Before storing any economics, partnerName must confirm the destination's registered merchant name. The immutable terms pin the destination point-expiration policy; no exchange is possible until the destination independently accepts the exact termsHash.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
objectsourceProgramIdrequiredstringminimum length 1
destinationOrganizationIdrequiredstringminimum length 1
destinationEnvironmentIdrequiredstringminimum length 1
destinationProgramIdrequiredstringminimum length 1
partnerNamerequiredstringMust match the destination organization's registered name, ignoring case. The canonical registered name is persisted.
sourceApprovalReferencerequiredstringminimum length 1
sourceRaterequiredintegerminimum 1
destinationRaterequiredintegerminimum 1
settlementMinorPerBlockrequiredintegerminimum 1
settlementCurrencyoptionalstringdefault USD
monthlySettlementCapMinorrequiredintegerminimum 1
minimumSourcePointsoptionalintegerDefaults to sourceRate. Must be at least sourceRate and an exact multiple of sourceRate.
maximumSourcePointsoptionalintegerZero means unlimited; otherwise it must be an exact sourceRate multiple at least minimumSourcePoints.
endsAtoptionalstring · date-timemaximum length 64
destinationExpirationRuleIdoptionalstringCurrent published destination rule to pin when destination rules have different expiration periods. May be omitted only when every current destination rule has one uniform expiration period.
200Original proposal replayed.
requestIdrequiredstringidempotentoptionalbooleanagreementrequiredobject201Version 1 proposed with immutable termsHash.
requestIdrequiredstringidempotentoptionalbooleanagreementrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/partner-agreementsList bilateral agreement corridors and current cap usage⌄Returns only agreements where the credential's current environment is the source or destination participant. Each item includes the exact hash-matched canonical version document and current UTC-month settlement-cap exposure, without credential secrets or member identity. Results are cursor-paged and ordered by creation time then ID descending. Requires partners:read.
X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
limitqueryoptionalintegerminimum 1 · maximum 200 · default 50
cursorqueryoptionalstringmaximum length 512
statusqueryoptionaldraft | proposed | accepted | active | paused | terminatedrolequeryoptionalsource | destinationprogramIdqueryoptionalstringminimum length 1 · maximum length 200
200Participant-scoped agreement corridors and current usage returned.
requestIdrequiredstringagreementsrequiredarray<PartnerAgreementListItem>pagerequiredCursorPage400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/partner-agreements/{agreementId}/acceptAccept the exact bilateral agreement terms⌄Callable only by the destination tenant named in the proposal. Activates only when termsHash matches exactly.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
agreementIdpathrequiredstringobjecttermsHashrequiredstringminimum length 1
acceptanceReferencerequiredstringminimum length 1
200Exact terms accepted or original acceptance replayed.
requestIdrequiredstringidempotentoptionalbooleanagreementrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/partner-member-tokensCreate an opaque one-time destination member link⌄The destination participant consumes a one-time source member-link challenge and supplies its own consent evidence while exchanging its external customer ID for a five-minute opaque token. The resulting token is cryptographically random and server-bound to both merchant member records without disclosing either identifier across the corridor.
X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
objectagreementIdrequiredstringminimum length 1
externalCustomerIdrequiredstringminimum length 1
sourceLinkChallengerequiredstringminimum length 1 · maximum length 256
consentReferencerequiredstringminimum length 1 · maximum length 500
201Single-use 5-minute member token returned once with no-store.
requestIdrequiredstringmemberTokenrequiredstringagreementIdrequiredstringexpiresAtrequiredstring · date-timeexpiresInrequiredconstant: 300noticerequiredstring401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/partner-exchange-quotesQuote conversion and clearing economics⌄Consumes the consent-bound opaque destination member token, requires sourcePoints to be an exact multiple of the agreement's sourceRate, verifies the current destination expiration policy still matches the accepted canonical policy, pins the exact current rule for commit, checks source balance and point-lot lifetime, and returns a quote without moving value. Quote expiry is the earliest of five minutes, agreement end, source Production readiness expiry, and destination Production readiness expiry.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
objectagreementIdrequiredstringminimum length 1
sourceExternalCustomerIdrequiredstringminimum length 1
destinationMemberTokenrequiredstringminimum length 1
sourceReferencerequiredstringminimum length 1
sourcePointsrequiredintegerMust be a positive exact multiple of the selected agreement's sourceRate; this prevents silent fractional destination-point loss.
200Original quote replayed.
requestIdrequiredstringidempotentoptionalbooleanquoterequiredobject201Pinned conversion and settlement quote created without moving value.
requestIdrequiredstringidempotentoptionalbooleanquoterequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/partner-exchangesReserve source points and agreement capacity⌄Reserves source points only after the source value-authority service supplies the exact one-use assertion issued for an approved prelinked-provider intent. No single merchant credential may combine Widget-session authority and value authority. The assertion is atomically consumed and binds the exact quote, both member records, Widget deployment/session, approved intent, fingerprint, nonce, and expiry.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
objectquoteIdrequiredstringminimum length 1
confirmationAssertionrequiredstring200Original reservation replayed.
requestIdrequiredstringidempotentoptionalbooleanexchangerequiredobject201Source points and monthly settlement capacity reserved atomically.
requestIdrequiredstringidempotentoptionalbooleanexchangerequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/partner-exchangesList participant-scoped exchanges for recovery and reconciliation⌄Returns only exchanges where the credential's environment is a source or destination participant. The cursor-paged projection omits member, reservation, lot, and ledger identifiers. Source references are visible and filterable only to the source participant. Partial returns expose exact returnedSourcePoints and expiredSourcePoints evidence. Requires exchanges:read.
X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
limitqueryoptionalintegerminimum 1 · maximum 200 · default 50
cursorqueryoptionalstringmaximum length 512
statequeryoptionalreserved | committed | released | expired | settled | reversedrolequeryoptionalsource | destinationagreementIdqueryoptionalstringminimum length 1 · maximum length 200
programIdqueryoptionalstringminimum length 1 · maximum length 200
sourceReferencequeryoptionalstringminimum length 1 · maximum length 200
200Participant-scoped exchange page returned.
requestIdrequiredstringexchangesrequiredarray<PartnerExchangeListItem>pagerequiredCursorPage400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/partner-exchanges/{exchangeId}Get bilateral exchange and reconciliation state⌄Returns a participant-safe exchange projection to either bilateral participant. sourceReference and confirmationReference are returned only to the source participant and are null for the destination participant; the non-secret quote fingerprint and confirmation time provide shared evidence. Requires exchanges:read.
X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
exchangeIdpathrequiredstring200Exchange state and participant-safe reconciliation evidence returned with no-store.
requestIdrequiredstringexchangerequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/partner-exchanges/{exchangeId}/commitCommit both sides of a reserved exchange⌄Posts separate balanced source debit and destination credit transactions, creates the destination point lot, and converts reserved monthly cap usage into committed usage.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
exchangeIdpathrequiredstring200Exchange committed or original commit replayed.
requestIdrequiredstringidempotentoptionalbooleanexchangerequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/partner-exchanges/{exchangeId}/releaseRelease a reserved exchange⌄Returns still-valid source point lots, records expired portions, and releases reserved monthly settlement capacity. This corrective restoration remains available while Production is locked or readiness evidence is expired.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
exchangeIdpathrequiredstringobjectreasonCodeoptionalstringdefault merchant_release
200Exchange released or original release replayed.
requestIdrequiredstringidempotentoptionalbooleanexchangerequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/partner-exchanges/{exchangeId}/settleRecord external clearing settlement evidence⌄Records the external settlement reference and reconciles settled usage to the committed agreement amount; it does not initiate a bank payment.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
exchangeIdpathrequiredstringobjectsettlementReferencerequiredstringminimum length 1
200Settlement evidence recorded or original settlement replayed.
requestIdrequiredstringidempotentoptionalbooleanexchangerequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/partner-exchanges/{exchangeId}/reverseReverse both program transactions and cap usage⌄Posts linked compensating source and destination transactions. A settled exchange additionally requires settlementReversalReference. This corrective restoration remains available while Production is locked or readiness evidence is expired. Expired source lots are replaced with an expiration window at least as long as their original lifetime and never shorter than 30 days; the exact recovery policy is returned and audited.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
exchangeIdpathrequiredstringobjectreasonCoderequiredstringminimum length 1
descriptionrequiredstringminimum length 1
settlementReversalReferenceoptionalstringminimum length 1
200Exchange reversed or original reversal replayed.
requestIdrequiredstringidempotentoptionalbooleanexchangerequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/partner-member-link-challengesCreate a consent-bound opaque source member challenge⌄The source participant creates a one-time five-minute challenge bound server-side to its active member, agreement, and source consent evidence. The customer carries only the opaque challenge to the destination; neither merchant receives the other's member identifier. Requires exchanges:member-link.
X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
objectagreementIdrequiredstringminimum length 1
sourceExternalCustomerIdrequiredstringminimum length 1
consentReferencerequiredstringminimum length 1 · maximum length 500
201One-time source member-link challenge returned once with no-store.
requestIdrequiredstringsourceLinkChallengerequiredstringagreementIdrequiredstringexpiresAtrequiredstring · date-timeexpiresInrequiredconstant: 300noticerequiredstring401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/partner-agreements/{agreementId}/rejectReject an exact proposed agreement as the destination⌄Destination-only terminal decision for a proposed agreement. Records rejection evidence for both participants and never changes or deletes the canonical terms. Requires partners:approve and Idempotency-Key.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
agreementIdpathrequiredstringminimum length 1 · maximum length 256
PartnerAgreementRejectRequesttermsHashrequiredstringExact SHA-256 hash of the canonical agreement version being acted on.
reasonCoderequiredstringminimum length 1 · maximum length 100
descriptionrequiredstringminimum length 1 · maximum length 2000
rejectionReferencerequiredstringminimum length 1 · maximum length 500
200Exact lifecycle transition committed or replayed idempotently.
requestIdrequiredstringidempotentoptionalbooleanagreementrequiredobject400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/partner-agreements/{agreementId}/withdrawWithdraw an exact proposed agreement as the source⌄Source-only terminal decision for a proposed agreement. Records withdrawal evidence for both participants and never changes or deletes the canonical terms. Requires partners:write and Idempotency-Key.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
agreementIdpathrequiredstringminimum length 1 · maximum length 256
PartnerAgreementWithdrawRequesttermsHashrequiredstringExact SHA-256 hash of the canonical agreement version being acted on.
reasonCoderequiredstringminimum length 1 · maximum length 100
descriptionrequiredstringminimum length 1 · maximum length 2000
withdrawalReferencerequiredstringminimum length 1 · maximum length 500
200Exact lifecycle transition committed or replayed idempotently.
requestIdrequiredstringidempotentoptionalbooleanagreementrequiredobject400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/partner-agreements/{agreementId}/pauseEmergency-pause an active agreement⌄Either participant may add its own independent emergency hold to an active or already-paused agreement with an incident reference. New quotes, reservations, and commits stop while any hold remains; corrective release and reversal paths remain available. Requires partners:manage and Idempotency-Key.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
agreementIdpathrequiredstringminimum length 1 · maximum length 256
PartnerAgreementPauseRequesttermsHashrequiredstringExact SHA-256 hash of the canonical agreement version being acted on.
reasonCoderequiredstringminimum length 1 · maximum length 100
descriptionrequiredstringminimum length 1 · maximum length 2000
incidentReferencerequiredstringminimum length 1 · maximum length 500
200Exact lifecycle transition committed or replayed idempotently.
requestIdrequiredstringidempotentoptionalbooleanagreementrequiredobject400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/partner-agreements/{agreementId}/resumeResume a paused agreement with explicit approval evidence⌄A participant may release only its own hold on the exact paused canonical version with an explicit approvalReference. The agreement becomes active only after every participant hold is released. Current environment readiness, matching Sandbox/Production kinds, and the agreement term are rechecked. Requires partners:manage and Idempotency-Key.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
agreementIdpathrequiredstringminimum length 1 · maximum length 256
PartnerAgreementResumeRequesttermsHashrequiredstringExact SHA-256 hash of the canonical agreement version being acted on.
reasonCoderequiredstringminimum length 1 · maximum length 100
descriptionrequiredstringminimum length 1 · maximum length 2000
approvalReferencerequiredstringminimum length 1 · maximum length 500
200Exact lifecycle transition committed or replayed idempotently.
requestIdrequiredstringidempotentoptionalbooleanagreementrequiredobject400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/partner-agreements/{agreementId}/terminatePermanently terminate an agreement⌄Either participant may permanently terminate a proposed, active, or paused agreement with approval evidence. The versioned terms and audit history remain immutable and discoverable. Requires partners:manage and Idempotency-Key.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
agreementIdpathrequiredstringminimum length 1 · maximum length 256
PartnerAgreementTerminateRequesttermsHashrequiredstringExact SHA-256 hash of the canonical agreement version being acted on.
reasonCoderequiredstringminimum length 1 · maximum length 100
descriptionrequiredstringminimum length 1 · maximum length 2000
approvalReferencerequiredstringminimum length 1 · maximum length 500
200Exact lifecycle transition committed or replayed idempotently.
requestIdrequiredstringidempotentoptionalbooleanagreementrequiredobject400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/partner-exchange-confirmationsIssue the one-use assertion for an approved exchange intent⌄Called only by the Loyumi-hosted frame with a live member-bound Widget session. A Widget token or forged Origin is insufficient: the route atomically requires an approved, one-use intent produced by a new provider authorization ceremony for the durable prelinked Google or Apple account and the customer's explicit top-level approval. The quote, member, deployment, fingerprint, nonce, provider account, and expiry are bound server-side. Exact retries replay the encrypted short-lived response; no merchant API credential is accepted.
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
PartnerExchangeConfirmationRequestquoteIdrequiredstringminimum length 1
approvalIntentIdrequiredstringOpaque, quote-bound intent already approved in the top-level Loyumi customer-verification ceremony.
confirmationFingerprintrequiredstringconfirmationNoncerequiredstring201One short-lived customer assertion returned with no-store.
requestIdrequiredstringidempotentrequiredbooleanconfirmationAssertionrequiredstringexpiresAtrequiredstring · date-timeexpiresInrequiredinteger401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/partner-exchange-receipts/{quoteId}Read a customer-safe authoritative exchange receipt⌄A Loyumi-hosted frame reads the exact member-bound quote and outcome using a live Widget session. The response contains immutable merchant/program/unit labels, conversion and finality disclosures, exact give/get amounts, partial-return evidence, and status. It never contains API credentials, member IDs, ledger IDs, settlement references, or durable customer-link identifiers. Historical final receipts remain readable after a deployment/program lock, while new approval remains fail-closed.
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
quoteIdpathrequiredstringminimum length 1 · maximum length 200
200Customer-safe authoritative receipt returned with no-store.
requestIdrequiredstringreceiptrequiredPartnerExchangeCustomerReceipt400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/partner-exchange-approval-intentsStart or recover an exact quote-approval intent⌄Starts or recovers one quote-wide approval intent for the live member-bound Widget session. The source customer must already have a cooled durable provider link. Creating an intent never approves a quote; approval requires a separate top-level provider authorization ceremony and explicit click.
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
PartnerExchangeApprovalIntentRequestquoteIdrequiredstringminimum length 1 · maximum length 200
confirmationFingerprintrequiredstringconfirmationNoncerequiredstring200Existing exact intent recovered after an ambiguous response or Widget refresh.
requestIdrequiredstringapprovalIntentrequiredPartnerExchangeApprovalIntent201Quote-bound approval intent created.
requestIdrequiredstringapprovalIntentrequiredPartnerExchangeApprovalIntent400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/partner-exchange-approval-intents/{intentId}Poll authoritative quote-approval status⌄X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
intentIdpathrequiredstringminimum length 1 · maximum length 200
200Authoritative approval-intent status returned.
requestIdrequiredstringapprovalIntentrequiredPartnerExchangeApprovalIntent400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/partner-exchange-approval-intents/{intentId}/step-upStart a new provider authorization for an exact quote⌄Top-level Loyumi-origin transport operation. It records a nonce-bound provider ceremony marker but never approves the quote. The exact immutable quote is rendered afterward and requires a separate explicit POST approval.
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
intentIdpathrequiredstringminimum length 1 · maximum length 200
200Provider authorization callback created with no-store.
requestIdrequiredstringstepUprequiredobject400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/partner-exchange-approval-intents/{intentId}/approveExplicitly approve the immutable quote after provider authorization⌄Requires the exact prelinked Google or Apple user/account/provider, the intent-bound completed authorization marker, a Loyumi customer session, and an explicit CSRF-bound click. It approves only the immutable fingerprinted quote and does not move value.
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
intentIdpathrequiredstringminimum length 1 · maximum length 200
PartnerExchangeCustomerActionRequestcsrfrequiredstringminimum length 1 · maximum length 256
200Exact prior approval replayed.
requestIdrequiredstringapprovalIntentrequiredPartnerExchangeApprovalIntent201Exact quote approved without moving value.
requestIdrequiredstringapprovalIntentrequiredPartnerExchangeApprovalIntent400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/partner-exchange-customer-linksStart, recover, or read Customer Verification prelink status⌄Starts the separate member-bound Customer Verification ceremony from a live Loyumi-hosted Widget frame. It cannot approve the current quote. Production links begin a DB-enforced 24-hour cooling period, and the member email is frozen from intent creation until governed revocation.
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
200Current link status or exact existing intent returned.
requestIdrequiredstringcustomerLinkrequiredPartnerExchangeCustomerLink201Customer-link intent created.
requestIdrequiredstringcustomerLinkrequiredPartnerExchangeCustomerLink400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/partner-exchange-customer-links/revocationsStart or recover customer-controlled unlink⌄Starts a one-way unlink ceremony for the exact current linked provider. It cannot create, rebind, or activate a link. A later relink is a brand-new ceremony and repeats the Production cooling period.
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
200Existing exact unlink intent recovered.
requestIdrequiredstringcustomerLinkRevocationrequiredPartnerExchangeCustomerLinkRevocation201Unlink intent created.
requestIdrequiredstringcustomerLinkRevocationrequiredPartnerExchangeCustomerLinkRevocation400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/partner-exchange-customer-links/{intentId}Poll customer-link or unlink status⌄X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
intentIdpathrequiredstringminimum length 1 · maximum length 200
200Authoritative link status returned.
requestIdrequiredstringcustomerLinkrequiredPartnerExchangeCustomerLink400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/partner-exchange-customer-links/{intentId}/step-upStart a new provider authorization for link or unlink⌄Top-level Loyumi-origin transport operation. Link accepts Google or Apple; unlink accepts only the exact current provider. It records a nonce-bound ceremony marker and never creates, revokes, or rebinds a link by itself.
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
intentIdpathrequiredstringminimum length 1 · maximum length 200
PartnerExchangeProviderStepUpRequestproviderrequiredgoogle | apple200Provider authorization callback created with no-store.
requestIdrequiredstringstepUprequiredobject400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/partner-exchange-customer-links/{intentId}/completeCreate a durable Customer Verification link⌄Requires a new Google or Apple authorization ceremony proving control of an unambiguous verified account, an explicit CSRF-bound click, and an exact match to the frozen member email. Production creates a pending link with a DB-time 24-hour cooling fence. It cannot approve a quote.
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
intentIdpathrequiredstringminimum length 1 · maximum length 200
PartnerExchangeCustomerActionRequestcsrfrequiredstringminimum length 1 · maximum length 256
200Exact completed link replayed.
requestIdrequiredstringcustomerLinkrequiredPartnerExchangeCustomerLink201Customer link created; Production activation remains cooling-period gated.
requestIdrequiredstringcustomerLinkrequiredPartnerExchangeCustomerLink400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/partner-exchange-customer-links/{intentId}/revokeCustomer-control unlink the exact provider link⌄Requires a new authorization ceremony for the exact current linked provider account and an explicit CSRF-bound click. Revocation atomically invalidates and scrubs the link, open approval intents, active confirmations, and unreserved quotes. The operation is one-way and exact retries replay the receipt; rebind is impossible here.
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
intentIdpathrequiredstringminimum length 1 · maximum length 200
PartnerExchangeCustomerActionRequestcsrfrequiredstringminimum length 1 · maximum length 256
200Customer link revoked or exact prior result replayed.
requestIdrequiredstringidempotentrequiredbooleancustomerLinkrequiredobject400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject/api/v1/partner-exchange-customer-links/governed-revocationsGoverned revoke-only recovery after the linked provider is lost⌄A narrowly scoped server-side recovery for a customer who can no longer authorize with the exact linked provider. It requires an isolated identity-authority credential, three distinct stable opaque merchant-attested identity-review and customer-notification references, a recent verification time, and Idempotency-Key. Loyumi enforces reference shape and separation and records, but does not certify, the merchant's reviewer identity, review, or customer notification. The transaction only revokes and scrubs the current link, open link/approval intents, active assertions, and unreserved quotes. It cannot create, rebind, activate, or bypass cooling; a future relink is a brand-new customer ceremony with the full Production cooling period. No provider, auth-account, member, or link identifier is returned.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
PartnerExchangeGovernedLinkRevocationRequestexternalCustomerIdrequiredstringminimum length 1 · maximum length 200
programIdrequiredstringminimum length 1 · maximum length 200
reasonrequiredlost_provider_access | provider_account_deleted | provider_access_unrecoverablecustomerNotificationReferencerequiredstringStable opaque merchant-attested reference that the customer was notified. Must differ from both identity-review references. Loyumi records but does not certify the underlying notification.
evidencerequiredobject200Customer Verification revoked or the exact receipt replayed.
requestIdrequiredstringidempotentrequiredbooleancustomerLinkrequiredobject400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobjectValidated, idempotent, resumable member snapshot imports with explicit exception evidence
/api/v1/importsValidate and stage a member snapshot import⌄Validates up to 5,000 member opening-balance records, stores row-level evidence, and returns a checksum-bound batch without changing members or balances. In Production this operation is available only while the environment is locked in its prelaunch migration window. Requesting activation atomically seals the reconciled import set and closes that window permanently. Reusing the Idempotency-Key with the identical payload returns the original batch. Requires imports:write.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
MemberImportRequestprogramIdrequiredstringminimum length 1
schemaVersionoptionalconstant: loyumi.members/v1default loyumi.members/v1
modeoptionalconstant: snapshotThe 1.8 import contract supports snapshot mode only; every other mode is rejected.
recordsrequiredarray<MemberImportRecord>minimum 1 item · maximum 5000 items
{
"programId": "prg_…",
"schemaVersion": "loyumi.members/v1",
"mode": "snapshot",
"records": [{
"externalId": "<external-customer-id>",
"displayName": "<display-name>",
"points": 2400
}]
}{
"requestId": "req_…",
"batch": {
"id": "imp_…", "operationId": "op_…", "programId": "prg_…",
"schemaVersion": "loyumi.members/v1", "mode": "snapshot",
"status": "validated", "checksum": "0000000000000000000000000000000000000000000000000000000000000000",
"totalRows": 1, "validRows": 1, "exceptionRows": 0,
"totalPoints": 2400, "applyAllowed": true
}
}201Member snapshot validated and staged without applying customer value, or the original 201 receipt replayed for an identical idempotent command.
requestIdrequiredstringbatchrequiredMemberImportBatchidempotentoptionalboolean400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject413The member-import JSON body exceeds the 2 MiB staging limit.
errorrequiredobject415Content-Type must be application/json.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/importsList member import batches⌄List member import batches. Results are tenant-scoped, ordered deterministically, cursor-paged, and returned with Cache-Control: no-store. Requires imports:read.
X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
limitqueryoptionalintegerminimum 1 · maximum 200 · default 50
cursorqueryoptionalstringmaximum length 512
programIdqueryoptionalstringstatusqueryoptionalvalidated | exceptions_review | applying | completed200Request completed.
requestIdrequiredstringimportsrequiredarray<ImportListItem>pagerequiredCursorPage400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/imports/{batchId}Inspect a staged or partially applied member import⌄Returns batch progress plus a stable row-number page of all, valid, exception, or applied records. Requires imports:read.
X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
batchIdpathrequiredstringminimum length 1
limitqueryoptionalintegerminimum 1 · maximum 500 · default 100
afterRowqueryoptionalintegerminimum 0 · default 0
statusqueryoptionalvalid | exception | appliedGET /api/v1/imports/imp_…?status=exception&limit=100
Authorization: Bearer <sandbox-key>
X-Environment: <sandbox-environment-id>{
"requestId": "req_…",
"batch": {
"id": "imp_…", "operationId": "op_…", "programId": "prg_…",
"schemaVersion": "loyumi.members/v1", "mode": "snapshot",
"status": "validated", "checksum": "0000000000000000000000000000000000000000000000000000000000000000",
"totalRows": 1, "validRows": 1, "exceptionRows": 0,
"totalPoints": 2400, "appliedRows": 0, "remainingRows": 1,
"applyAllowed": true, "appliedAt": null,
"createdAt": "2026-08-03T08:00:00.000Z",
"updatedAt": "2026-08-03T08:00:00.000Z"
},
"rows": [],
"page": {
"limit": 100, "afterRow": 0, "hasMore": false,
"nextAfterRow": null, "status": "exception"
}
}200Batch progress and row page returned.
requestIdrequiredstringbatchrequiredvaluerowsrequiredarray<MemberImportRow>pagerequiredobject400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/imports/{batchId}/applyApply the next member import chunk⌄Applies the next validated snapshot rows in a bounded, resumable chunk and preserves row-level outcomes for inspection. Apply creates only missing members and never overwrites an existing member; a newly existing member becomes a snapshot_member_exists row exception. Reusing the same Idempotency-Key and body returns the original chunk outcome. Requires imports:apply.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
batchIdpathrequiredstringminimum length 1
ApplyMemberImportRequestlimitoptionalintegerminimum 1 · maximum 100 · default 50
{
"limit": 100
}{
"requestId": "req_…",
"batch": {
"id": "imp_…", "status": "completed", "totalRows": 1,
"appliedRows": 1, "exceptionRows": 0, "remainingRows": 0,
"complete": true
},
"chunk": { "attempted": 1, "applied": 1, "exceptions": 0 }
}200Chunk applied or original idempotent chunk outcome replayed; remaining progress returned.
requestIdrequiredstringidempotentoptionalbooleanbatchrequiredobjectchunkrequiredobject400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject413The JSON request body exceeds the operation's 128 KiB limit.
errorrequiredobject415Content-Type must be application/json.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobjectVersioned, deterministic environment exports for migration and exit
/api/v1/exportsExport a versioned, secret-safe environment bundle⌄Returns 53 migration-critical, environment-scoped collections, including reconstructable reward-gift quote and gift evidence plus participant-safe bilateral exchange records. Gift approval/action intents, provider sessions, claim capabilities, one-use handoffs, and replay secrets are excluded and require explicit cutover actions. Each response is a best-effort request view, not a shared MVCC snapshot or lossless delta. Pause writes for the complete paginated export, drain source obligations, independently reconstruct and reconcile, then switch traffic. Requires exports:read.
X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
collectionqueryoptionalconfiguration | members | memberProfiles | programs | programRules | tiers | rewards | campaigns | campaignRules | campaignMemberUsage | loyaltyEvents | referrals | challengeProgress | memberChoiceAwards | sharedWalletMembers | commerceOrders | commerceOrderLines | commerceReturns | ledgerAccounts | ledgerBalances | pointLots | pointLotAllocations | ledgerTransactions | ledgerEntries | consentEvents | riskCases | approvalRequests | operations | importBatches | importRows | auditEvents | programConfigurations | redemptionQuotes | redemptions | reservationLotAllocations | rewardFulfillments | rewardGiftQuotes | rewardGifts | rewardGiftInvitations | rewardGiftInvitationOptions | rewardGiftInvitationDeliveries | rewardGiftSelections | rewardGiftEntitlements | rewardGiftEntitlementUseEvents | valueDisputes | ledgerAdjustments | partnerAgreements | partnerAgreementVersions | partnerAgreementPauseHolds | partnerUsageWindows | partnerExchangeQuotes | partnerExchanges | partnerSettlementsExport one collection for cursor pagination.
afterqueryoptionalstringmaximum length 256
limitqueryoptionalintegerminimum 1 · maximum 5000 · default 1000
GET /api/v1/exports?collection=members&limit=1000
Authorization: Bearer <sandbox-key>
X-Environment: <sandbox-environment-id>{
"$schema": "https://app.loyumi.com/schemas/portability-export.v1.6.0.json",
"version": "1.6.0",
"requestId": "req_…",
"generatedAt": "2026-08-17T08:00:00.000Z",
"scope": { "organizationId": "org_…", "environmentId": "env_…" },
"environment": {
"id": "env_…", "name": "Sandbox", "kind": "sandbox", "status": "active"
},
"manifest": {
"format": "application/json",
"mode": "collection-page",
"requestedCollection": "members",
"ordering": "stable collection key, ascending",
"consistencyModel": "best-effort-request-view",
"consistency": "One request-time view; pause writes for exact cutover",
"cutoverRequiresPausedWrites": true,
"delta": { "supported": false, "reason": "Full or paged export only" },
"includedCollections": ["members"],
"excludedSensitiveCollections": [
{
"collection": "organizationUsers",
"table": "organization_users",
"category": "access-control",
"transferred": false,
"reason": "Operator role grants require destination approval.",
"requiredAction": "Re-provision least-privilege access and review it."
},
{
"collection": "webhookDeliveries",
"table": "webhook_deliveries",
"category": "transient",
"transferred": false,
"reason": "Delivery jobs remain with the source worker.",
"requiredAction": "Drain and reconcile source deliveries before cutover."
},
{
"collection": "apiIdempotencyRecords",
"table": "api_idempotency_records",
"category": "transient",
"transferred": false,
"reason": "Replay caches are runtime safety material.",
"requiredAction": "Quiesce mutations through the agreed retry horizon."
},
{
"collection": "couponCodes",
"table": "coupon_codes",
"category": "bearer-value",
"transferred": false,
"reason": "Live bearer-like coupons are not transferred.",
"requiredAction": "Reconcile, revoke, and reissue destination codes."
}
],
"recordCounts": { "members": 0 },
"pagination": {
"limitPerCollection": 1000, "complete": true, "next": {},
"instructions": "No next cursor"
}
},
"data": { "members": [] }
}200Versioned portability manifest and requested records. Response is no-store and attachment-ready.
400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobjectServer-created sessions for personalized hosted loyalty widgets
/api/v1/widget-sessionsCreate a short-lived personalized widget session⌄Call this endpoint only from the merchant's server after authenticating the customer. Loyumi validates an active production environment (or sandbox), published program and deployment, active member enrollment, exact allowed origin, and requested least-privilege permissions before issuing an opaque one-time code that expires in 60 seconds. Never call it with a Loyumi API key from browser JavaScript or a mobile binary. Requesting rewards:redeem additionally requires widgets:redemptions on the same credential.
X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
WidgetSessionRequestdeploymentIdrequiredstringPublished Widget Studio deployment ID.
externalCustomerIdrequiredstringCustomer ID from the merchant's authenticated server session.
originrequiredstring · uriExact merchant website origin configured on the widget deployment. Paths, queries, and fragments are rejected. HTTPS is required except for localhost development.
permissionsoptionalarray<string>Least-privilege widget permissions. rewards:redeem is issued only when redemption is enabled on the deployment and the server credential has both widgets:sessions and widgets:redemptions.
{
"deploymentId": "wdg_…",
"externalCustomerId": "customer-123",
"origin": "https://rewards.example.com",
"permissions": ["profile:read"]
}{
"requestId": "req_…",
"sessionCode": "<single-use-opaque-code>",
"expiresAt": "2026-08-02T08:01:00.000Z",
"expiresIn": 60,
"runtimeMajor": 1
}201An opaque single-use 60-second iframe handoff code was created. The response includes Cache-Control: no-store.
requestIdrequiredstringsessionCoderequiredstringexpiresAtrequiredstring · date-timeexpiresInrequiredconstant: 60runtimeMajorrequiredconstant: 1400The deployment ID, external customer ID, origin, or request body is invalid.
errorrequiredobject401Credential or X-Environment is absent, invalid, expired, revoked, or crossed between environments.
errorrequiredobject403Credential lacks widgets:sessions; rewards:redeem additionally lacks widgets:redemptions; or a requested permission is not enabled on the deployment.
errorrequiredobject404The published deployment is unavailable for the exact origin, or the active member is not enrolled in its program.
errorrequiredobject409Production is locked or the deployment's loyalty program is no longer published. No code is issued.
errorrequiredobject413JSON body exceeds the accepted request limit.
errorrequiredobject415Content-Type must be application/json.
errorrequiredobject429Rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Do not reuse or persist failed session material.
errorrequiredobject/api/v1/widget-sessions/exchangeExchange a one-time code inside the hosted iframe⌄This browser endpoint is called only by the same-origin Loyumi hosted iframe. It atomically consumes the exact deployment- and merchant-origin-bound code once, then revalidates the active production environment (or sandbox), published program and deployment, active member, and issuing credential before returning a signed session to iframe memory. A code stays consumed when any mutable authorization check fails, so later re-enabling a resource cannot revive it. Merchant parent pages and backend integrations must not call this endpoint.
WidgetSessionExchangeRequestsessionCoderequiredstringdeploymentIdrequiredstringminimum length 1
originrequiredstring · uriExact merchant origin bound to the one-time code.
201The code was consumed and a signed 10-minute iframe session was created with Cache-Control: no-store.
requestIdrequiredstringsessionTokenrequiredstringexpiresAtrequiredstring · date-timeexpiresInrequiredconstant: 600runtimeMajorrequiredconstant: 1400The request body or exact merchant origin is invalid.
errorrequiredobject401The code is invalid, expired, already consumed, mismatched, or no longer authorized.
errorrequiredobject403The exchange did not originate from the same-origin hosted iframe.
errorrequiredobject413JSON body exceeds 16 KiB.
errorrequiredobject415Content-Type must be application/json.
errorrequiredobject429Iframe exchange velocity exceeded its limit. Honor Retry-After.
errorrequiredobjectCursor-paged ledger transaction search and balanced entry inspection
/api/v1/transactionsList and filter posted ledger transactions⌄List and filter posted ledger transactions. Results are tenant-scoped, ordered deterministically, cursor-paged, and returned with Cache-Control: no-store. Requires transactions:read.
X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
limitqueryoptionalintegerminimum 1 · maximum 200 · default 50
cursorqueryoptionalstringmaximum length 512
programIdqueryoptionalstringexternalCustomerIdqueryoptionalstringeventTypequeryoptionalstringsourceReferencequeryoptionalstringstatequeryoptionalcommitted | reversedfromqueryoptionalstring · date-timetoqueryoptionalstring · date-time200Request completed.
requestIdrequiredstringtransactionsrequiredarray<TransactionListItem>pagerequiredCursorPage400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/transactions/{transactionId}Get a transaction and its balanced entries⌄X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
transactionIdpathrequiredstringminimum length 1 · maximum length 256
200Request completed.
requestIdrequiredstringtransactionrequiredobject400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobjectImport and maintenance operation visibility plus environment-scoped audit evidence
/api/v1/operationsList operational runs⌄List operational runs. Results are tenant-scoped, ordered deterministically, cursor-paged, and returned with Cache-Control: no-store. Requires operations:read.
X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
limitqueryoptionalintegerminimum 1 · maximum 200 · default 50
cursorqueryoptionalstringmaximum length 512
typequeryoptionalstringstatusqueryoptionalstring200Request completed.
requestIdrequiredstringoperationsrequiredarray<OperationItem>pagerequiredCursorPage400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/operations/{operationId}Get operation progress and related import evidence⌄X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
operationIdpathrequiredstringminimum length 1 · maximum length 256
200Request completed.
requestIdrequiredstringoperationrequiredvalue400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/audit-eventsList environment-attributed audit evidence⌄List environment-attributed audit evidence. Results are tenant-scoped, ordered deterministically, cursor-paged, and returned with Cache-Control: no-store. Requires audit:read.
X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
limitqueryoptionalintegerminimum 1 · maximum 200 · default 50
cursorqueryoptionalstringmaximum length 512
actionqueryoptionalstringtargetTypequeryoptionalstringtargetIdqueryoptionalstringactorIdqueryoptionalstring200Request completed.
requestIdrequiredstringauditEventsrequiredarray<AuditEventItem>pagerequiredCursorPage400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobjectBounded, descriptive ledger aggregates without attribution claims
/api/v1/analytics/ledger-summaryGet bounded descriptive ledger analytics⌄Returns real ledger and operational aggregates for a positive window of at most 90 days. programId filters member, transaction, movement, balance, and redemption metrics; webhook delivery counts remain environment-wide because deliveries are not program-attributed. Values are a best-effort request view, not revenue attribution, an incremental-lift claim, or a financial-close report.
X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
programIdqueryoptionalstringfromqueryoptionalstring · date-timetoqueryoptionalstring · date-time200Request completed.
requestIdrequiredstringasOfrequiredstring · date-timewindowrequiredobjectprogramIdrequiredstring | nullconsistencyrequiredobjectmembersCreatedByStatusrequiredobjecttransactionsrequiredobjectmemberAvailableMovementsrequiredobjectcurrentMemberBalancesrequiredobjectredemptionsByStaterequiredobjectwebhookDeliveriesByStatusrequiredobject400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/reports/ledger-closeGenerate exact program-period ledger close evidence⌄Returns a deterministic program-period point roll-forward, movement by event type, double-entry control totals, finance-policy valuation in merchant-currency micros, readiness checks, and a SHA-256 evidence hash. Decimal strings prevent JavaScript precision loss. The report is system-generated evidence, not an independent audit, contractual financial statement, revenue attribution, or proof that upstream commerce data was complete. Requires analytics:read.
X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
programIdqueryrequiredstringminimum length 1 · maximum length 200
fromqueryoptionalstring · date-timeInclusive ISO-8601 start. Defaults to the first instant of the UTC month containing to.
toqueryoptionalstring · date-timeExclusive ISO-8601 end. Defaults to the current instant.
200Exact ledger close control evidence generated.
requestIdrequiredstringreportIdrequiredstringgeneratedAtrequiredstring · date-timeintegrityrequiredobjectevidencerequiredLedgerCloseEvidenceassurancerequiredobject400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobjectSecret-safe endpoint management, delivery inspection, tests, and governed retry
/api/v1/webhook-endpointsList secret-safe webhook endpoints⌄List secret-safe webhook endpoints. Results are tenant-scoped, ordered deterministically, cursor-paged, and returned with Cache-Control: no-store. Requires webhooks:read.
X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
limitqueryoptionalintegerminimum 1 · maximum 200 · default 50
cursorqueryoptionalstringmaximum length 512
200Request completed.
requestIdrequiredstringwebhookEndpointsrequiredarray<WebhookEndpoint>pagerequiredCursorPage400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/webhook-endpointsCreate a disabled webhook endpoint⌄Creates an endpoint disabled and returns its encrypted-at-rest signing secret exactly once. Idempotent replay never returns the secret. URL validation rejects credentials, obvious loopback/private literals, local hostnames, and redirects; production egress and DNS controls remain deployment responsibilities.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
WebhookEndpointCreateRequesturlrequiredstring · urimaximum length 2048
eventTypesrequiredarray<string>minimum 1 item · maximum 33 items
200Idempotent replay without signing secret.
requestIdrequiredstringendpointrequiredWebhookEndpointsigningSecretoptionalstringsigningSecretAvailableoptionalbooleannoticeoptionalstringidempotentoptionalboolean201Endpoint created; signing secret returned once.
requestIdrequiredstringendpointrequiredWebhookEndpointsigningSecretoptionalstringsigningSecretAvailableoptionalbooleannoticeoptionalstringidempotentoptionalboolean400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject413The JSON request body exceeds the operation's 128 KiB limit.
errorrequiredobject415Content-Type must be application/json.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject503Webhook secret encryption is unavailable.
errorrequiredobject/api/v1/webhook-endpoints/{endpointId}Get a secret-safe webhook endpoint⌄X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
endpointIdpathrequiredstringminimum length 1 · maximum length 256
200Request completed.
requestIdrequiredstringendpointrequiredWebhookEndpointsigningSecretoptionalstringsigningSecretAvailableoptionalbooleannoticeoptionalstringidempotentoptionalboolean400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/webhook-endpoints/{endpointId}Update or activate a webhook endpoint⌄Updates URL, supported event types, or state. A URL change forces disabled state. Requires Idempotency-Key.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
endpointIdpathrequiredstringminimum length 1 · maximum length 256
WebhookEndpointUpdateRequesturloptionalstring · urimaximum length 2048
eventTypesoptionalarray<string>minimum 1 item · maximum 33 items
statusoptionalactive | disabled200Request completed.
requestIdrequiredstringendpointrequiredWebhookEndpointsigningSecretoptionalstringsigningSecretAvailableoptionalbooleannoticeoptionalstringidempotentoptionalboolean400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject413The JSON request body exceeds the operation's 128 KiB limit.
errorrequiredobject415Content-Type must be application/json.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/webhook-endpoints/{endpointId}/rotate-secretRotate once-visible signing secret and disable endpoint⌄Replaces the encrypted signing secret, increments its version, disables the endpoint, and returns the new secret only in the original response.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
endpointIdpathrequiredstringminimum length 1 · maximum length 256
EmptyCommand200Request completed.
requestIdrequiredstringendpointrequiredWebhookEndpointsigningSecretoptionalstringsigningSecretAvailableoptionalbooleannoticeoptionalstringidempotentoptionalboolean400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject413The JSON request body exceeds the operation's 128 KiB limit.
errorrequiredobject415Content-Type must be application/json.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject503Webhook secret encryption is unavailable.
errorrequiredobject/api/v1/webhook-endpoints/{endpointId}/testSend an idempotent non-PII test delivery⌄Persists an immutable idempotency receipt and leased delivery record before sending a non-PII test, rejects redirects, and resolves every replay from the current durable delivery state without returning its payload. A post-send finalization failure is recovered after the bounded sending lease with the same eventId and payload, but a fresh timestamp/signature; delivery is at least once, so consumers must deduplicate eventId and must not assume exactly once.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
endpointIdpathrequiredstringminimum length 1 · maximum length 256
EmptyCommand200Request completed.
requestIdrequiredstringdeliveryrequiredWebhookDeliverynoticeoptionalstringidempotentoptionalboolean400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject413The JSON request body exceeds the operation's 128 KiB limit.
errorrequiredobject415Content-Type must be application/json.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject503Webhook secret encryption is unavailable.
errorrequiredobject/api/v1/webhook-deliveriesList PII-safe webhook delivery evidence⌄List PII-safe webhook delivery evidence. Results are tenant-scoped, ordered deterministically, cursor-paged, and returned with Cache-Control: no-store. Requires webhooks:read.
X-Environmentheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
limitqueryoptionalintegerminimum 1 · maximum 200 · default 50
cursorqueryoptionalstringmaximum length 512
endpointIdqueryoptionalstringeventTypequeryoptionalstringstatusqueryoptionalpending | sending | failed | delivered | dead_letter200Request completed.
requestIdrequiredstringwebhookDeliveriesrequiredarray<WebhookDelivery>pagerequiredCursorPage400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject/api/v1/webhook-deliveries/{deliveryId}/retryIdempotently re-queue a failed delivery⌄Re-queues the existing failed or dead-letter record only when its endpoint is active. It does not create a duplicate record or synchronously contact the merchant endpoint.
X-Environmentheaderrequiredstringminimum length 1
Idempotency-Keyheaderrequiredstringminimum length 1
X-Request-IdheaderoptionalstringCaller-provided trace identifier. Loyumi creates one when omitted.
deliveryIdpathrequiredstringminimum length 1 · maximum length 256
EmptyCommand200Request completed.
requestIdrequiredstringdeliveryrequiredWebhookDeliverynoticeoptionalstringidempotentoptionalboolean400Malformed JSON, required header missing, or unsupported command.
errorrequiredobject401Credential, environment, or one-time member token is invalid.
errorrequiredobject403Credential lacks the operation's required scope or violates two-person control.
errorrequiredobject404The environment-scoped resource was not found.
errorrequiredobject409State, balance, inventory, version, approval, or idempotency payload conflicts with the request.
errorrequiredobject410A governed privacy deletion tombstoned the historic response, so this Idempotency-Key can no longer replay it. The deletion supersedes replay; reconcile durable state or begin a genuinely new permitted operation.
errorrequiredobject413The JSON request body exceeds the operation's 128 KiB limit.
errorrequiredobject415Content-Type must be application/json.
errorrequiredobject422The request is well-formed JSON but violates the operation contract.
errorrequiredobject429Credential rate limit exceeded. Honor Retry-After.
errorrequiredobject500Internal processing error. Retry an idempotent mutation with the same key and identical body.
errorrequiredobject{
"error": {
"code": "invalid_event",
"message": "A human-readable explanation",
"requestId": "req_…"
}
}400Do not retry unchanged.
401The credential is absent, invalid, expired, revoked, or crossed between environments.
403The key is valid but not authorized.
404Member, order, event definition, or resource was not found.
409Production lock, limits, balance, inventory, or eligibility blocked the operation.
413 / 415 / 422Keep JSON under 128 KiB, use application/json, and satisfy the contract.
429Honor Retry-After and keep the same idempotency key and body.
5xxUse exponential backoff and preserve requestId for support.