Lucky Cart · Authentication Profile
Lucky Cart Authentication
Authentication
Lucky Cart secures its APIs with apiKey and custom-hmac-signature across 3 declared security schemes, as derived from its OpenAPI definitions.
CompanyRetail MediaMarTechE-CommerceAdvertisingPersonalizationLoyaltyCPGGroceryPromotionsGamificationShopper MarketingFirst-Party DataFrance
Methods: apiKey, custom-hmac-signature
Schemes: 3
OAuth flows:
API key in: body, path, query
Security Schemes
siteKey apiKey
· in: pathquerybody ()
auth_secret custom
scheme: hmac-sha256-request-signature
· in: body ()
shopperId identifier
· in: pathquerybody ()
Source
Authentication Profile
generated: '2026-08-12'
method: searched
source: https://github.com/lucky-cart/luckycart-js-sdk
sources:
- https://github.com/lucky-cart/luckycart-js-sdk/blob/master/sdk/src/luckycart.js
- https://github.com/lucky-cart/luckycart-js-sdk#initialization
- https://github.com/lucky-cart/lucky-cart-ios#configuration
- https://github.com/lucky-cart/lucky-cart-android#use-in-client-application
note: >-
Lucky Cart publishes no OpenAPI, so nothing here is derived from a machine-readable
contract. Everything below is read from the authentication code and installation
instructions in Lucky Cart's own three first-party SDK repositories. Lucky Cart does
not use OAuth 2.0, OpenID Connect, or HTTP bearer tokens anywhere in the published
client surface. Credentials are issued out of band: the JS SDK README states the key
and secret are "provided by our integration team", so there is no self-service key
issuance. There is no public auth reference page — the Help Centre at
kb.luckycart.com that would carry one is access-restricted (HTTP 403).
summary:
types:
- apiKey
- custom-hmac-signature
api_key_in:
- body
- path
- query
oauth2_flows: []
openid_connect: false
mutual_tls: false
bearer_tokens: false
self_service_key_issuance: false
credential_issuance: manual, via the Lucky Cart integration team
schemes:
- name: siteKey
type: apiKey
aliases:
- AUTH_KEY
- authKey
- siteKey
in:
- path
- query
- body
description: >-
The per-site public identifier. It appears as the first path segment on the
displayer and promo-matching hosts
(/{siteKey}/{shopper}/banner/{subset}/{pageType}/{format}), as the siteKey query
parameter on the Shopper Experience and Game Experience APIs, and as a body field on
the Shopper Events API. Set with `new LuckyCart(AUTH_KEY, AUTH_SECRET)` in
JavaScript, `LuckyCart.shared.setSiteKey("siteKeyToken")` in Swift, and
`LCAuthorization(AUTH_KEY, "")` in Kotlin.
sources:
- luckycart-js-sdk/sdk/src/luckycart.js
- lucky-cart-ios/Sources/LuckyCartSDK/LuckyCart.swift
- name: auth_secret
type: custom
scheme: hmac-sha256-request-signature
in: body
description: >-
A shared secret used to sign write requests to the core API. It is never sent on the
wire. The JS SDK signs the current UNIX timestamp with HMAC-SHA256 keyed by the
secret (CryptoJS.HmacSHA256(ts, this.auth.secret)) and appends four fields to the
request body — auth_ts (the timestamp), auth_key (the site key), auth_v ("2.0", the
signature scheme version) and auth_sign (the hex digest). Only signed calls carry
it; read calls to the banner, experience and game-data endpoints are unsigned. Note
the Android SDK constructs LCAuthorization with an EMPTY secret
(`LCAuthorization(AUTH_KEY, "")`), so the mobile surface appears to exercise only
the unsigned read paths.
signature:
algorithm: HMAC-SHA256
signed_payload: UNIX timestamp in seconds, as a string
version_field: auth_v
version_value: '2.0'
fields:
- auth_ts
- auth_key
- auth_v
- auth_sign
applies_to:
- POST https://api.luckycart.com/cart/ticket
sources:
- luckycart-js-sdk/sdk/src/luckycart.js
- name: shopperId
type: identifier
in:
- path
- query
- body
description: >-
Not a credential, but required alongside the site key on nearly every call. The
retailer's own customer identifier, set with setShopper()/setUser()/setUser(). The
JS SDK README warns that an "automaton" must already be attached to the supplied
shopperUid before cart data will be accepted, which means shopper identifiers are
provisioned on the Lucky Cart side rather than accepted arbitrarily.
transport:
https_required: true
content_type: application/json
observed_headers:
- Content-Type: application/json
- Accept: application/json
note: >-
No Authorization header is used anywhere in the published SDKs. Credentials travel
as path segments, query parameters and body fields, which means the site key is
visible in URLs and therefore in browser history, referrers and intermediary logs.
This is consistent with the product design — the JS SDK is loaded into a retailer's
public storefront pages, so the site key is a public identifier by construction and
the secret is the only real credential.
gaps:
- no published authentication reference page (kb.luckycart.com returns 403)
- no OpenAPI securitySchemes to validate this profile against
- no documented key rotation, revocation or expiry policy
- no scopes or permissions model — access is all-or-nothing per site key
Work with this as data
Every security artifact here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for security posture
4 MCP tools reach this
find_securityBrowse and filter every security artifact in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This security artifact
curl "https://apis.io/api/v1/security/lucky-cart-authentication"
All security posture
curl "https://apis.io/api/v1/security?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.