Free products can only be refunded on Shopify, and must use Shopify Functions.
If you are still using Shopify Scripts for free products, get in
touch and we’ll switch you over to Shopify
Functions
Use this endpoint to manually refund a free product reward. This will refund the
points used back to the customer, and invalidate the associated free product line discount.This can be used when you detect a shopper has removed a free product reward from
their cart.Note that if you refund a free product reward that is still in the cart, it
won’t be removed automatically, and will not be discounted at checkout. To prevent
confusion for shoppers, you should always ensure that refunded free product rewards
are also removed from the cart.
If you are initializing a customer session regularly (e.g. on each page load, or after
any change to the cart), and you are passing your current serialized cart, you
typically do not need to manually refund free product rewards.The Initialize Customer Session API will use your serialized cart to check if
any active free product rewards are present in the cart. If any are missing, they
will be automatically refunded.
An API key linked to a Program in LoyaltyLion, with a set of permissions (scopes). API keys can be created manually, or acquired through an OAuth2 flow. The API key should be provided as a Bearer token in the Authorization header
The customer object, updated as of the reward refund, i.e. any refunded points will be returned to their points balance. This customer will always have state set to enrolled, as only enrolled customers can redeem rewards
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"LoyaltyLion","colors":{"primary":"#7533f2","light":"#BEAAFF","dark":"#5C18D6"},"logo":{"light":"https://mintcdn.com/loyaltylion/qoWgzO-fbs5_an5D/logo/loyaltylion-logo-black.svg?fit=max\u0026auto=format\u0026n=qoWgzO-fbs5_an5D\u0026q=85\u0026s=a8042001d5f93ef344ce190752bfba7d","dark":"https://mintcdn.com/loyaltylion/qoWgzO-fbs5_an5D/logo/loyaltylion-logo-white.svg?fit=max\u0026auto=format\u0026n=qoWgzO-fbs5_an5D\u0026q=85\u0026s=37ab9b9089a7e1a44d13df2ae9398de1"},"favicon":"https://mintcdn.com/loyaltylion/qoWgzO-fbs5_an5D/images/favicon.svg?fit=max\u0026auto=format\u0026n=qoWgzO-fbs5_an5D\u0026q=85\u0026s=2d71e6cbb2847c7a83d1d3a4abb6d05e","api":{"playground":{"display":"simple"}},"background":{"color":{}},"navbar":{"links":[{"href":"https://status.loyaltylion.com","label":"Status"},{"href":"https://help.loyaltylion.com","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://app.loyaltylion.com"}},"footer":{"socials":{"x":"https://x.com/loyaltylionhq","github":"https://github.com/loyaltylion","linkedin":"https://linkedin.com/company/loyaltylion"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"loyaltylion","hasAudioNarration":false,"actualSubdomain":"loyaltylion","customDomains":["developers.loyaltylion.com"],"gitSource":{"type":"github","owner":"loyaltylion","repo":"dev-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6adf4e85d1c84ec1c21062b7","collectionId":"be2b06ae-a22c-4831-83d5-bac7ea7663ff","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adf4e85d1c84ec1c21062b7"},"feedback":{"issues":true,"edits":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6adf4e85d1c84ec1c21062b7","clientVersion":"0.0.3971","searchFilterCounts":[{"language":"default","tag":"Admin API","count":67},{"language":"default","tag":"Resources","count":56},{"language":"default","tag":"SDK","count":37},{"language":"default","tag":"Headless API","count":34},{"language":"default","tag":"Webhooks","count":25},{"language":"default","tag":"Webhook events","count":21},{"language":"default","tag":"Embeddable components","count":15},{"language":"default","tag":"Customers","count":13},{"language":"default","tag":"LoyaltyLion SDK","count":13},{"language":"default","tag":"Standalone components","count":12}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":".not-prose.mb-6{display:flex;flex-wrap:wrap;gap:0 1.5rem}.not-prose.mb-6>li{margin-left:0!important}"}],"page":{"pagePath":"headless-api/2025-06/reward-refund/free-product","slug":"/headless-api/2025-06/reward-refund/free-product","pageMetadata":{"title":"Free Product","version":"v2","openapi":"headless-api/2025-06/openapi.json POST /headless/2025-06/{site_id}/rewards/product_cart/refund","description":null,"href":"/headless-api/2025-06/reward-refund/free-product"},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,em:`em`,p:`p`,..._provideComponents(),...props.components},{Heading,Info}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);return _jsxs(_Fragment,{children:[_jsx(Info,{children:_jsxs(_components.p,{children:[`Free products can only be refunded on Shopify, and must use Shopify Functions.\nIf you are still using Shopify Scripts for free products, `,_jsx(_components.a,{href:`mailto:support@loyaltylion.com`,children:`get in\ntouch`}),` and we’ll switch you over to Shopify\nFunctions`]})}),`\n`,_jsx(_components.p,{children:`Use this endpoint to manually refund a free product reward. This will refund the\npoints used back to the customer, and invalidate the associated free product line discount.`}),`\n`,_jsx(_components.p,{children:`This can be used when you detect a shopper has removed a free product reward from\ntheir cart.`}),`\n`,_jsxs(_components.p,{children:[`Note that if you refund a free product reward that is `,_jsx(_components.em,{children:`still in the cart`}),`, it\nwon’t be removed automatically, and will not be discounted at checkout. To prevent\nconfusion for shoppers, you should always ensure that refunded free product rewards\nare also removed from the cart.`]}),`\n`,_jsxs(Heading,{level:`3`,id:`interaction-with-the-initialize-customer-session-api`,children:[`Interaction with the `,_jsx(_components.a,{href:`/headless-api/2025-06/customers/initialize-session`,children:`Initialize Customer Session API`})]}),`\n`,_jsxs(_components.p,{children:[`If you are initializing a customer session regularly (e.g. on each page load, or after\nany change to the cart), `,_jsx(_components.em,{children:`and`}),` you are passing your current serialized cart, you\ntypically do not need to manually refund free product rewards.`]}),`\n`,_jsx(_components.p,{children:`The Initialize Customer Session API will use your serialized cart to check if\nany active free product rewards are present in the cart. If any are missing, they\nwill be automatically refunded.`})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Free Product","version":"v2","openapi":"headless-api/2025-06/openapi.json POST /headless/2025-06/{site_id}/rewards/product_cart/refund","description":null,"href":"/headless-api/2025-06/reward-refund/free-product"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Interaction with the Initialize Customer Session API","slug":"interaction-with-the-initialize-customer-session-api","depth":3,"children":[]}],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["rewards"],"security":["f22b8b38-859b-4698-aa68-72c18ad18f4c","8ac1466c-56f1-4faf-8975-abde6b362010"],"parameters":["bf72fc59-7a56-4844-9720-8d61bcc622e9","a4cbd632-5100-4e49-8150-81dbb337a7fd","0bdb65d8-12f3-43c1-ac6a-c9621247c02d","7ceee6c4-a000-495f-8415-81885fa675b8"],"operationId":"rewards.refundProductCart","requestBody":"47040d4e-445e-4015-bb92-5905038bfaf5","responses":{"201":"b352bee9-5541-4a00-943c-aa671e8bfd2a","400":"a395188e-e6dc-496e-a0e4-e51a976ef18c","401":"1da5ba14-5b53-480f-8f45-cd87dc61d819","403":"b644046a-e1b8-49e8-98f3-a2a64b14180d","404":"6aac033b-bc5e-42ab-951c-50882a093a5f","422":"963eedb4-3b84-433d-8d11-1850a3aab267","429":"31630db3-2b9e-4c7e-98d5-aae398badfd6"},"method":"post","type":"path","servers":["5947ccdf-6752-40b7-8a08-71f8c0d385f5"],"path":"/headless/2025-06/{site_id}/rewards/product_cart/refund","baseUrlOptions":["https://api.loyaltylion.com"],"title":"","description":"","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"bf72fc59-7a56-4844-9720-8d61bcc622e9":{"name":"site_id","in":"path","required":true,"schema":{"type":"number","isRequired":true,"description":"Your LoyaltyLion Site ID","uniqueKey":"","typeLabel":"number"},"description":"Your LoyaltyLion Site ID"},"a4cbd632-5100-4e49-8150-81dbb337a7fd":{"name":"channel","in":"query","description":"The sales channel from which this request is made. Must be provided as this query parameter, or the `X-LoyaltyLion-Channel` header","schema":{"type":"string","enum":["web","pos","mobile"],"description":"The sales channel from which this request is made","uniqueKey":"","typeLabel":"enum\u003cstring>"}},"0bdb65d8-12f3-43c1-ac6a-c9621247c02d":{"name":"language","in":"query","description":"The language to use for the request. If not provided, the site's default language will be used","schema":{}},"7ceee6c4-a000-495f-8415-81885fa675b8":{"name":"country","in":"query","description":"ISO 3166-1 alpha-2 country code for the customer. Used to filter rewards by country availability. If not provided, the site default is used","schema":{"type":"string","description":"ISO 3166-1 alpha-2 country code for the customer. Used to filter rewards by country availability. If not provided, the site default is used","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"description":"Body","content":{"application/json":{"schema":{"type":"object","properties":{"claimed_reward_id":{"type":"number","description":"The LoyaltyLion ID of the claimed reward to cancel and refund","isRequired":true,"uniqueKey":"claimed_reward_id","typeLabel":"number"}},"required":["claimed_reward_id"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"claimed_reward_id":123}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"b352bee9-5541-4a00-943c-aa671e8bfd2a":{"description":"201","content":{"application/json":{"schema":{"type":"object","properties":{"claimed_reward":{"type":"object","properties":{"id":{"type":"number","description":"The ID of the claimed reward resource in LoyaltyLion","isRequired":true,"uniqueKey":"claimed_reward.id","typeLabel":"number"},"claimed_at":{"type":"string","description":"`ISO 8601` timestamp indicating when this reward was claimed","isRequired":true,"uniqueKey":"claimed_reward.claimed_at","typeLabel":"string"},"reward_id":{"type":"number","description":"The ID of the reward that was claimed. If a reward with this ID does not exist in the current [Site Configuration](/headless-api/2025-06/configuration/get-configuration), it means the reward has been deleted. The associated redeemable, if any, will usually still be active even after the reward has been deleted","isRequired":true,"uniqueKey":"claimed_reward.reward_id","typeLabel":"number"},"title":{"type":"string","description":"Short, localized title for this claimed reward. For example, '$5 voucher', or 'Free Water Bottle'. This is usually the same title as the associated reward","example":"$5 voucher","isRequired":true,"uniqueKey":"claimed_reward.title","typeLabel":"string"},"state":{"type":"string","enum":["approved","declined","expired","pending","void"],"description":"The state of this claimed reward. Only `active` rewards will have a usable `redeemable`","isRequired":true,"uniqueKey":"claimed_reward.state","typeLabel":"enum\u003cstring>"},"source":{"oneOf":[{"type":"object","title":"Points redemption","description":"The customer used points to claim this reward","required":["kind","points_cost"],"properties":{"kind":{"type":"string","const":"points_redemption","isRequired":true,"uniqueKey":"claimed_reward.source.oneOf.0.kind","typeLabel":"string"},"points_cost":{"type":"number","description":"The number of points the customer used to claim this reward","isRequired":true,"uniqueKey":"claimed_reward.source.oneOf.0.points_cost","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"claimed_reward.source.oneOf.0","typeLabel":"Points redemption · object"},{"type":"object","title":"Rule completion","description":"This reward was provided directly when the customer completed a rule","required":["kind","rule_id"],"properties":{"kind":{"type":"string","const":"rule_completion","isRequired":true,"uniqueKey":"claimed_reward.source.oneOf.1.kind","typeLabel":"string"},"rule_id":{"type":"number","isRequired":true,"uniqueKey":"claimed_reward.source.oneOf.1.rule_id","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"claimed_reward.source.oneOf.1","typeLabel":"Rule completion · object"},{"type":"object","title":"Tier entry","description":"This reward was awarded directly when the customer entered a tier","required":["kind","tier_id"],"properties":{"kind":{"type":"string","const":"tier_entry","isRequired":true,"uniqueKey":"claimed_reward.source.oneOf.2.kind","typeLabel":"string"},"tier_id":{"type":"number","isRequired":true,"uniqueKey":"claimed_reward.source.oneOf.2.tier_id","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"claimed_reward.source.oneOf.2","typeLabel":"Tier entry · object"}],"isRequired":true,"uniqueKey":"claimed_reward.source","typeLabel":"Points redemption · object | Rule completion · object | Tier entry · object"},"auto_refund_at":{"oneOf":[{"description":"`ISO 8601` timestamp indicating when this reward and its associated redeemable will be automatically voided and refunded if it has not yet been used, or `null` if not applicable","type":"string","isRequired":true,"uniqueKey":"claimed_reward.auto_refund_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp indicating when this reward and its associated redeemable will be automatically voided and refunded if it has not yet been used, or `null` if not applicable","type":"null","isRequired":true,"uniqueKey":"claimed_reward.auto_refund_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"claimed_reward.auto_refund_at","typeLabel":"string | null"},"redeemable":{"type":"object","properties":{"usage_status":{"type":"string","enum":["not_used","partially_used","used"],"description":"The usage status of this redeemable. Redeemables that are `used` cannot be used again, e.g. a voucher code that has already been used with an order","isRequired":true,"uniqueKey":"claimed_reward.redeemable.usage_status","typeLabel":"enum\u003cstring>"},"kind":{"type":"string","const":"product_cart","isRequired":true,"uniqueKey":"claimed_reward.redeemable.kind","typeLabel":"string"},"product":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"claimed_reward.redeemable.product.id","typeLabel":"string"},"handle":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"claimed_reward.redeemable.product.handle.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"claimed_reward.redeemable.product.handle.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"claimed_reward.redeemable.product.handle","typeLabel":"string | null"},"title":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"claimed_reward.redeemable.product.title.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"claimed_reward.redeemable.product.title.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"claimed_reward.redeemable.product.title","typeLabel":"string | null"},"url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"claimed_reward.redeemable.product.url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"claimed_reward.redeemable.product.url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"claimed_reward.redeemable.product.url","typeLabel":"string | null"},"image_url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"claimed_reward.redeemable.product.image_url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"claimed_reward.redeemable.product.image_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"claimed_reward.redeemable.product.image_url","typeLabel":"string | null"},"variant":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"claimed_reward.redeemable.product.variant.id","typeLabel":"string"},"title":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"claimed_reward.redeemable.product.variant.title.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"claimed_reward.redeemable.product.variant.title.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"claimed_reward.redeemable.product.variant.title","typeLabel":"string | null"},"inventory_count":{"oneOf":[{"description":"The current inventory count of this product variant, or `null` if inventory is not tracked. If the count is zero, you should ensure it is not selectable by customers when redeeming the reward","type":"integer","isRequired":true,"uniqueKey":"claimed_reward.redeemable.product.variant.inventory_count.oneOf.0","typeLabel":"integer"},{"description":"The current inventory count of this product variant, or `null` if inventory is not tracked. If the count is zero, you should ensure it is not selectable by customers when redeeming the reward","type":"null","isRequired":true,"uniqueKey":"claimed_reward.redeemable.product.variant.inventory_count.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"claimed_reward.redeemable.product.variant.inventory_count","typeLabel":"integer | null"}},"required":["id","title","inventory_count"],"additionalProperties":false,"isRequired":true,"uniqueKey":"claimed_reward.redeemable.product.variant","typeLabel":"object"}},"required":["id","handle","title","url","image_url","variant"],"additionalProperties":false,"description":"The product and variant that should be added to the cart","isRequired":true,"uniqueKey":"claimed_reward.redeemable.product","typeLabel":"object"},"quantity":{"type":"number","description":"The quantity of the product that should be added to the cart","isRequired":true,"uniqueKey":"claimed_reward.redeemable.quantity","typeLabel":"number"},"used_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when the product was used in an order, or `null` if not yet used","type":"string","isRequired":true,"uniqueKey":"claimed_reward.redeemable.used_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when the product was used in an order, or `null` if not yet used","type":"null","isRequired":true,"uniqueKey":"claimed_reward.redeemable.used_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"claimed_reward.redeemable.used_at","typeLabel":"string | null"},"cart_line_identifier":{"type":"string","description":"The unique cart line identifier, which connects this redemption to the line item in the eventual completed order. For Shopify, this identifier is used as the value of the `__lion_sfp_id` attribute on the cart line when the product is added to the cart","isRequired":true,"uniqueKey":"claimed_reward.redeemable.cart_line_identifier","typeLabel":"string"},"grant":{"oneOf":[{"type":"object","description":"Present when the customer was granted this product and has since added it to their cart. `null` for a product the customer redeemed with points or claimed directly","required":["expires_at"],"properties":{"expires_at":{"oneOf":[{"description":"`ISO 8601` timestamp of the deadline the grant had for adding the product to the cart, or `null` if the grant had no deadline","type":"string","isRequired":true,"uniqueKey":"claimed_reward.redeemable.grant.oneOf.0.expires_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp of the deadline the grant had for adding the product to the cart, or `null` if the grant had no deadline","type":"null","isRequired":true,"uniqueKey":"claimed_reward.redeemable.grant.oneOf.0.expires_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"claimed_reward.redeemable.grant.oneOf.0.expires_at","typeLabel":"string | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"claimed_reward.redeemable.grant.oneOf.0","typeLabel":"object"},{"type":"null","description":"Present when the customer was granted this product and has since added it to their cart. `null` for a product the customer redeemed with points or claimed directly","isRequired":true,"uniqueKey":"claimed_reward.redeemable.grant.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"claimed_reward.redeemable.grant","typeLabel":"object | null"},"active_cart_redemption":{"oneOf":[{"type":"object","description":"The active cart redemption associated with this product reward, if any. A product reward will have an active cart redemption if it has been redeemed and has not yet been checked out with an order, or expired","required":["id","claimed_reward_id","expires_at","product","quantity","cart_id","cart_line","current_cart_state"],"properties":{"id":{"type":"string","description":"The unique ID of this cart redemption. This ID needs to be attached to the cart line when the product is added to the cart. For Shopify, this is used as the value of the `__lion_sfp_id` attribute on the cart line","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.id","typeLabel":"string"},"claimed_reward_id":{"type":"number","description":"The ID of the claimed reward that this cart redemption is associated with","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.claimed_reward_id","typeLabel":"number"},"expires_at":{"type":"string","description":"`ISO 8601` timestamp representing when this cart redemption will expire if it has not been checked out, at which point any associated points will be returned to the customer","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.expires_at","typeLabel":"string"},"product":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.product.id","typeLabel":"string"},"handle":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.product.handle.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.product.handle.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.product.handle","typeLabel":"string | null"},"title":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.product.title.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.product.title.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.product.title","typeLabel":"string | null"},"url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.product.url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.product.url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.product.url","typeLabel":"string | null"},"image_url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.product.image_url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.product.image_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.product.image_url","typeLabel":"string | null"},"variant":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.product.variant.id","typeLabel":"string"},"title":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.product.variant.title.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.product.variant.title.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.product.variant.title","typeLabel":"string | null"},"inventory_count":{"oneOf":[{"description":"The current inventory count of this product variant, or `null` if inventory is not tracked. If the count is zero, you should ensure it is not selectable by customers when redeeming the reward","type":"integer","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.product.variant.inventory_count.oneOf.0","typeLabel":"integer"},{"description":"The current inventory count of this product variant, or `null` if inventory is not tracked. If the count is zero, you should ensure it is not selectable by customers when redeeming the reward","type":"null","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.product.variant.inventory_count.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.product.variant.inventory_count","typeLabel":"integer | null"}},"required":["id","title","inventory_count"],"additionalProperties":false,"isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.product.variant","typeLabel":"object"}},"required":["id","handle","title","url","image_url","variant"],"additionalProperties":false,"description":"The product and variant that this cart redemption is for","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.product","typeLabel":"object"},"quantity":{"type":"number","description":"The quantity of the line item in this cart redemption","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.quantity","typeLabel":"number"},"cart_id":{"type":"string","description":"The ID of the cart for which this cart redemption was initially redeemed","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.cart_id","typeLabel":"string"},"cart_line":{"type":"object","title":"Shopify cart line","description":"Details of the cart line that should be added to the Shopify cart. When using the Storefront API, these should be passed into the [cartLinesAdd mutation](https://shopify.dev/docs/api/storefront/latest/mutations/cartLinesAdd)","required":["kind","merchandise_id","product_id","quantity","attributes"],"properties":{"kind":{"type":"string","const":"shopify","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.cart_line.kind","typeLabel":"string"},"merchandise_id":{"type":"string","description":"The merchandise (variant) ID to add to the cart","example":"gid://shopify/ProductVariant/1001","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.cart_line.merchandise_id","typeLabel":"string"},"product_id":{"type":"string","description":"The product ID to add to the cart","example":"gid://shopify/Product/100","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.cart_line.product_id","typeLabel":"string"},"quantity":{"type":"number","description":"The quantity of the cart line to add","example":1,"isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.cart_line.quantity","typeLabel":"number"},"attributes":{"description":"An array of key-value attributes that should be included with the cart line","example":[{"key":"__lion_sfp_id","value":"19fdf4cb"}],"type":"array","items":{"type":"object","properties":{"key":{"type":"string","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.cart_line.attributes.items.[INDEX].key","typeLabel":"string"},"value":{"type":"string","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.cart_line.attributes.items.[INDEX].value","typeLabel":"string"}},"required":["key","value"],"additionalProperties":false,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.cart_line.attributes.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.cart_line.attributes","typeLabel":"object[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.cart_line","typeLabel":"Shopify cart line · object"},"current_cart_state":{"oneOf":[{"type":"object","description":"If this request included a serialized `cart` object whose `id` matches the `cart_id` of this redemption, this object includes information about this redemption's state in the current cart. It will be `null` if the request did not include a serialized cart or its `id` does not match","required":["in_cart","cart_requirements_met","cart_requirements_detail"],"properties":{"in_cart":{"type":"boolean","description":"Indicates if the redemption is currently in the cart","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.in_cart","typeLabel":"boolean"},"cart_requirements_met":{"type":"boolean","description":"Indicates if all this redemption's requirements are currently met by the cart, such as a required minimum cart total or number of line items","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_met","typeLabel":"boolean"},"cart_requirements_detail":{"type":"object","properties":{"minimum_cart_total":{"oneOf":[{"type":"object","title":"No requirement","required":["state"],"properties":{"state":{"type":"string","const":"no_requirement","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_cart_total.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_cart_total.oneOf.0","typeLabel":"No requirement · object"},{"type":"object","title":"Requirement met","required":["state"],"properties":{"state":{"type":"string","const":"requirement_met","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_cart_total.oneOf.1.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_cart_total.oneOf.1","typeLabel":"Requirement met · object"},{"type":"object","title":"Requirement not met","required":["state","additional_amount_required"],"properties":{"state":{"type":"string","const":"requirement_not_met","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_cart_total.oneOf.2.state","typeLabel":"string"},"additional_amount_required":{"type":"object","properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required.formatted","typeLabel":"string"}},"required":["amount","formatted"],"additionalProperties":false,"isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_cart_total.oneOf.2","typeLabel":"Requirement not met · object"}],"isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_cart_total","typeLabel":"No requirement · object | Requirement met · object | Requirement not met · object"},"minimum_line_item_quantity":{"oneOf":[{"type":"object","title":"No requirement","required":["state"],"properties":{"state":{"type":"string","const":"no_requirement","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_line_item_quantity.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_line_item_quantity.oneOf.0","typeLabel":"No requirement · object"},{"type":"object","title":"Requirement met","required":["state"],"properties":{"state":{"type":"string","const":"requirement_met","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_line_item_quantity.oneOf.1.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_line_item_quantity.oneOf.1","typeLabel":"Requirement met · object"},{"type":"object","title":"Requirement not met","required":["state","additional_quantity_required"],"properties":{"state":{"type":"string","const":"requirement_not_met","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_line_item_quantity.oneOf.2.state","typeLabel":"string"},"additional_quantity_required":{"type":"number","description":"The number of additional line items required before this requirement is met","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_line_item_quantity.oneOf.2.additional_quantity_required","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_line_item_quantity.oneOf.2","typeLabel":"Requirement not met · object"}],"isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_line_item_quantity","typeLabel":"No requirement · object | Requirement met · object | Requirement not met · object"}},"required":["minimum_cart_total","minimum_line_item_quantity"],"additionalProperties":false,"isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0","typeLabel":"object"},{"type":"null","description":"If this request included a serialized `cart` object whose `id` matches the `cart_id` of this redemption, this object includes information about this redemption's state in the current cart. It will be `null` if the request did not include a serialized cart or its `id` does not match","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.current_cart_state.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0.current_cart_state","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.0","typeLabel":"object"},{"type":"null","description":"The active cart redemption associated with this product reward, if any. A product reward will have an active cart redemption if it has been redeemed and has not yet been checked out with an order, or expired","isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"claimed_reward.redeemable.active_cart_redemption","typeLabel":"object | null"}},"required":["usage_status","kind","product","quantity","used_at","cart_line_identifier","grant","active_cart_redemption"],"additionalProperties":false,"isRequired":true,"uniqueKey":"claimed_reward.redeemable","typeLabel":"object"}},"required":["id","claimed_at","reward_id","title","state","source","auto_refund_at","redeemable"],"additionalProperties":false,"description":"The updated claimed reward that was refunded","isRequired":true,"uniqueKey":"claimed_reward","typeLabel":"object"},"customer":{"type":"object","properties":{"state":{"type":"string","const":"enrolled","isRequired":true,"uniqueKey":"customer.state","typeLabel":"string"},"id":{"type":"number","description":"The ID of the customer in LoyaltyLion","isRequired":true,"uniqueKey":"customer.id","typeLabel":"number"},"merchant_id":{"type":"string","description":"The ID of the customer in your platform or ecommerce store","isRequired":true,"uniqueKey":"customer.merchant_id","typeLabel":"string"},"email":{"oneOf":[{"description":"The email address of the customer. May be `null`, e.g. for POS customers who have never provided an email address","type":"string","isRequired":true,"uniqueKey":"customer.email.oneOf.0","typeLabel":"string"},{"description":"The email address of the customer. May be `null`, e.g. for POS customers who have never provided an email address","type":"null","isRequired":true,"uniqueKey":"customer.email.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.email","typeLabel":"string | null"},"phone":{"oneOf":[{"description":"The customer's phone number in E.164 format, or `null` if we don't have one","example":"+447700900123","type":"string","isRequired":true,"uniqueKey":"customer.phone.oneOf.0","typeLabel":"string"},{"description":"The customer's phone number in E.164 format, or `null` if we don't have one","example":"+447700900123","type":"null","isRequired":true,"uniqueKey":"customer.phone.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.phone","typeLabel":"string | null"},"first_name":{"oneOf":[{"description":"The first name of the customer, if available","type":"string","isRequired":true,"uniqueKey":"customer.first_name.oneOf.0","typeLabel":"string"},{"description":"The first name of the customer, if available","type":"null","isRequired":true,"uniqueKey":"customer.first_name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.first_name","typeLabel":"string | null"},"last_name":{"oneOf":[{"description":"The last name of the customer, if available","type":"string","isRequired":true,"uniqueKey":"customer.last_name.oneOf.0","typeLabel":"string"},{"description":"The last name of the customer, if available","type":"null","isRequired":true,"uniqueKey":"customer.last_name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.last_name","typeLabel":"string | null"},"points_approved":{"type":"number","description":"The number of approved points the customer can redeem for rewards","isRequired":true,"uniqueKey":"customer.points_approved","typeLabel":"number"},"points_pending":{"type":"number","description":"The number of pending points the customer has. Pending points will be approved or declined at a later date","isRequired":true,"uniqueKey":"customer.points_pending","typeLabel":"number"},"points_spent":{"type":"number","description":"The number of points the customer has spent to date","isRequired":true,"uniqueKey":"customer.points_spent","typeLabel":"number"},"enrolled_at":{"type":"string","description":"`ISO 8601` timestamp representing when the customer enrolled in the program","isRequired":true,"uniqueKey":"customer.enrolled_at","typeLabel":"string"},"tier_membership":{"oneOf":[{"type":"object","description":"Details about this customer's current tier membership, or `null` if tiers are not enabled","required":["tier_id","started_at","expires_at","progress"],"properties":{"tier_id":{"type":"number","description":"The ID of the tier this customer is currently in","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.tier_id","typeLabel":"number"},"started_at":{"type":"string","description":"`ISO 8601` timestamp when this tier membership started","example":"2025-01-01T12:00:00Z","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.started_at","typeLabel":"string"},"expires_at":{"oneOf":[{"description":"`ISO 8601` timestamp when this tier membership expires. Will be `null` if the membership never expires","example":"2026-01-01T12:00:00Z","type":"string","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.expires_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp when this tier membership expires. Will be `null` if the membership never expires","example":"2026-01-01T12:00:00Z","type":"null","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.expires_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.expires_at","typeLabel":"string | null"},"progress":{"oneOf":[{"type":"object","title":"Points","description":"Information about the customer's tier progress, which can be used to inform a customer how close they are to reaching the next tier, or what they they need to do to maintain their current tier when it expires. Note that tier progress changes over time, as we use a sliding evaluation window to calculate progress, so it is only guaranteed to be correct as of the time of the response","required":["kind","valid_until","points_needed_for_renewal","upgrade_tier_id","points_needed_for_upgrade","tier_points","forecasted_tier_id"],"properties":{"kind":{"type":"string","const":"points","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.0.kind","typeLabel":"string"},"valid_until":{"oneOf":[{"description":"`ISO 8601` timestamp representing the date at which the calculated progress is no longer accurate. Tier evaluation uses a sliding evaluation window, so as time passes, contributing points, spend, or qualifying orders will no longer be counted if they are outside of the evaluation window. This will be `null` for lifetime tiers","type":"string","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.0.valid_until.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing the date at which the calculated progress is no longer accurate. Tier evaluation uses a sliding evaluation window, so as time passes, contributing points, spend, or qualifying orders will no longer be counted if they are outside of the evaluation window. This will be `null` for lifetime tiers","type":"null","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.0.valid_until.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.0.valid_until","typeLabel":"string | null"},"points_needed_for_renewal":{"oneOf":[{"description":"The number of additional points required to renew the current tier when the current membership expires. This will be `null` if the membership does not expire (e.g. a lifetime tier), or if the current membership is already for the bottom (default) tier","type":"number","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.0.points_needed_for_renewal.oneOf.0","typeLabel":"number"},{"description":"The number of additional points required to renew the current tier when the current membership expires. This will be `null` if the membership does not expire (e.g. a lifetime tier), or if the current membership is already for the bottom (default) tier","type":"null","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.0.points_needed_for_renewal.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.0.points_needed_for_renewal","typeLabel":"number | null"},"upgrade_tier_id":{"oneOf":[{"description":"The ID of the next tier that this customer could upgrade to from their current tier. Will be `null` if the customer's current tier is already the highest tier in the program, a conditional tier, or a hidden tier","type":"number","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.0.upgrade_tier_id.oneOf.0","typeLabel":"number"},{"description":"The ID of the next tier that this customer could upgrade to from their current tier. Will be `null` if the customer's current tier is already the highest tier in the program, a conditional tier, or a hidden tier","type":"null","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.0.upgrade_tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.0.upgrade_tier_id","typeLabel":"number | null"},"points_needed_for_upgrade":{"oneOf":[{"description":"The number of additional points required to move into the next tier. Will be `null` if there is no eligible next tier (see `upgrade_tier_id`)","type":"number","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.0.points_needed_for_upgrade.oneOf.0","typeLabel":"number"},{"description":"The number of additional points required to move into the next tier. Will be `null` if there is no eligible next tier (see `upgrade_tier_id`)","type":"null","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.0.points_needed_for_upgrade.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.0.points_needed_for_upgrade","typeLabel":"number | null"},"tier_points":{"type":"object","properties":{"now":{"type":"number","description":"The number of points contributing to tier progress as of right now. This is equivalent to the number of eligible points from now, back to the start of the evaluation window.","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.0.tier_points.now","typeLabel":"number"},"at_expiration":{"oneOf":[{"description":"The predicted number of points contributing to tier progress as of the current tier's expiration date. This is similar to the `now` value, but instead of the window ending at `now`, it ends at the current tier expiration date. This can be used to determine if a customer would be able to renew their current tier when it expires This will be `null` if the membership never expires (e.g. lifetime tiers)","type":"number","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.0.tier_points.at_expiration.oneOf.0","typeLabel":"number"},{"description":"The predicted number of points contributing to tier progress as of the current tier's expiration date. This is similar to the `now` value, but instead of the window ending at `now`, it ends at the current tier expiration date. This can be used to determine if a customer would be able to renew their current tier when it expires This will be `null` if the membership never expires (e.g. lifetime tiers)","type":"null","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.0.tier_points.at_expiration.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.0.tier_points.at_expiration","typeLabel":"number | null"}},"required":["now","at_expiration"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.0.tier_points","typeLabel":"object"},"forecasted_tier_id":{"oneOf":[{"description":"The ID of the tier the customer is forecasted to be in at their membership expiration, based on their predicted progress at that time. This can be used to warn customers if they are at risk of being downgraded. Will be `null` if the membership never expires (e.g. lifetime tiers, default tier memberships, or conditional tier memberships)","type":"number","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.0.forecasted_tier_id.oneOf.0","typeLabel":"number"},{"description":"The ID of the tier the customer is forecasted to be in at their membership expiration, based on their predicted progress at that time. This can be used to warn customers if they are at risk of being downgraded. Will be `null` if the membership never expires (e.g. lifetime tiers, default tier memberships, or conditional tier memberships)","type":"null","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.0.forecasted_tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.0.forecasted_tier_id","typeLabel":"number | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.0","typeLabel":"Points · object"},{"type":"object","title":"Spend","description":"Information about the customer's tier progress, which can be used to inform a customer how close they are to reaching the next tier, or what they they need to do to maintain their current tier when it expires. Note that tier progress changes over time, as we use a sliding evaluation window to calculate progress, so it is only guaranteed to be correct as of the time of the response","required":["kind","valid_until","spend_needed_for_renewal","upgrade_tier_id","spend_needed_for_upgrade","tier_spend","forecasted_tier_id"],"properties":{"kind":{"type":"string","const":"spend","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.1.kind","typeLabel":"string"},"valid_until":{"oneOf":[{"description":"`ISO 8601` timestamp representing the date at which the calculated progress is no longer accurate. Tier evaluation uses a sliding evaluation window, so as time passes, contributing points, spend, or qualifying orders will no longer be counted if they are outside of the evaluation window. This will be `null` for lifetime tiers","type":"string","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.1.valid_until.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing the date at which the calculated progress is no longer accurate. Tier evaluation uses a sliding evaluation window, so as time passes, contributing points, spend, or qualifying orders will no longer be counted if they are outside of the evaluation window. This will be `null` for lifetime tiers","type":"null","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.1.valid_until.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.1.valid_until","typeLabel":"string | null"},"spend_needed_for_renewal":{"oneOf":[{"type":"object","description":"The amount of additional spend required to renew the current tier when the current membership expires. Will be `null` if the membership does not expire (e.g. a lifetime tier), or if the current membership is already for the bottom (default) tier","required":["amount","formatted"],"properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.1.spend_needed_for_renewal.oneOf.0.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.1.spend_needed_for_renewal.oneOf.0.formatted","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.1.spend_needed_for_renewal.oneOf.0","typeLabel":"object"},{"type":"null","description":"The amount of additional spend required to renew the current tier when the current membership expires. Will be `null` if the membership does not expire (e.g. a lifetime tier), or if the current membership is already for the bottom (default) tier","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.1.spend_needed_for_renewal.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.1.spend_needed_for_renewal","typeLabel":"object | null"},"upgrade_tier_id":{"oneOf":[{"description":"The ID of the next tier that this customer could upgrade to from their current tier. Will be `null` if the customer's current tier is already the highest tier in the program, a conditional tier, or a hidden tier","type":"number","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.1.upgrade_tier_id.oneOf.0","typeLabel":"number"},{"description":"The ID of the next tier that this customer could upgrade to from their current tier. Will be `null` if the customer's current tier is already the highest tier in the program, a conditional tier, or a hidden tier","type":"null","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.1.upgrade_tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.1.upgrade_tier_id","typeLabel":"number | null"},"spend_needed_for_upgrade":{"oneOf":[{"type":"object","description":"The amount of additional spend required to move into the next tier. Will be `null` if there is no eligible next tier (see `upgrade_tier_id`)","required":["amount","formatted"],"properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.1.spend_needed_for_upgrade.oneOf.0.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.1.spend_needed_for_upgrade.oneOf.0.formatted","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.1.spend_needed_for_upgrade.oneOf.0","typeLabel":"object"},{"type":"null","description":"The amount of additional spend required to move into the next tier. Will be `null` if there is no eligible next tier (see `upgrade_tier_id`)","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.1.spend_needed_for_upgrade.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.1.spend_needed_for_upgrade","typeLabel":"object | null"},"tier_spend":{"type":"object","properties":{"now":{"type":"object","properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.1.tier_spend.now.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.1.tier_spend.now.formatted","typeLabel":"string"}},"required":["amount","formatted"],"additionalProperties":false,"description":"The amount of spend contributing to tier progress as of right now. This is equivalent to the amount of eligible spend from now, back to the start of the evaluation window.","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.1.tier_spend.now","typeLabel":"object"},"at_expiration":{"oneOf":[{"type":"object","description":"The predicted amount of spend contributing to tier progress as of the current tier's expiration date. This is similar to the `now` value, but instead of the window ending at `now`, it ends at the current tier expiration date. This can be used to determine if a customer would be able to renew their current tier when it expires This will be `null` if the membership never expires (e.g. lifetime tiers)","required":["amount","formatted"],"properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.1.tier_spend.at_expiration.oneOf.0.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.1.tier_spend.at_expiration.oneOf.0.formatted","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.1.tier_spend.at_expiration.oneOf.0","typeLabel":"object"},{"type":"null","description":"The predicted amount of spend contributing to tier progress as of the current tier's expiration date. This is similar to the `now` value, but instead of the window ending at `now`, it ends at the current tier expiration date. This can be used to determine if a customer would be able to renew their current tier when it expires This will be `null` if the membership never expires (e.g. lifetime tiers)","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.1.tier_spend.at_expiration.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.1.tier_spend.at_expiration","typeLabel":"object | null"}},"required":["now","at_expiration"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.1.tier_spend","typeLabel":"object"},"forecasted_tier_id":{"oneOf":[{"description":"The ID of the tier the customer is forecasted to be in at their membership expiration, based on their predicted progress at that time. This can be used to warn customers if they are at risk of being downgraded. Will be `null` if the membership never expires (e.g. lifetime tiers, default tier memberships, or conditional tier memberships)","type":"number","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.1.forecasted_tier_id.oneOf.0","typeLabel":"number"},{"description":"The ID of the tier the customer is forecasted to be in at their membership expiration, based on their predicted progress at that time. This can be used to warn customers if they are at risk of being downgraded. Will be `null` if the membership never expires (e.g. lifetime tiers, default tier memberships, or conditional tier memberships)","type":"null","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.1.forecasted_tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.1.forecasted_tier_id","typeLabel":"number | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.1","typeLabel":"Spend · object"},{"type":"object","title":"Orders","description":"Information about the customer's tier progress, which can be used to inform a customer how close they are to reaching the next tier, or what they they need to do to maintain their current tier when it expires. Note that tier progress changes over time, as we use a sliding evaluation window to calculate progress, so it is only guaranteed to be correct as of the time of the response","required":["kind","valid_until","orders_needed_for_renewal","upgrade_tier_id","orders_needed_for_upgrade","tier_orders","forecasted_tier_id"],"properties":{"kind":{"type":"string","const":"orders","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.2.kind","typeLabel":"string"},"valid_until":{"oneOf":[{"description":"`ISO 8601` timestamp representing the date at which the calculated progress is no longer accurate. Tier evaluation uses a sliding evaluation window, so as time passes, contributing points, spend, or qualifying orders will no longer be counted if they are outside of the evaluation window. This will be `null` for lifetime tiers","type":"string","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.2.valid_until.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing the date at which the calculated progress is no longer accurate. Tier evaluation uses a sliding evaluation window, so as time passes, contributing points, spend, or qualifying orders will no longer be counted if they are outside of the evaluation window. This will be `null` for lifetime tiers","type":"null","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.2.valid_until.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.2.valid_until","typeLabel":"string | null"},"orders_needed_for_renewal":{"oneOf":[{"description":"The number of additional orders required to renew the current tier when the current membership expires. This will be `null` if the membership does not expire (e.g. a lifetime tier), or if the current membership is already for the bottom (default) tier","type":"number","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.2.orders_needed_for_renewal.oneOf.0","typeLabel":"number"},{"description":"The number of additional orders required to renew the current tier when the current membership expires. This will be `null` if the membership does not expire (e.g. a lifetime tier), or if the current membership is already for the bottom (default) tier","type":"null","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.2.orders_needed_for_renewal.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.2.orders_needed_for_renewal","typeLabel":"number | null"},"upgrade_tier_id":{"oneOf":[{"description":"The ID of the next tier that this customer could upgrade to from their current tier. Will be `null` if the customer's current tier is already the highest tier in the program, a conditional tier, or a hidden tier","type":"number","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.2.upgrade_tier_id.oneOf.0","typeLabel":"number"},{"description":"The ID of the next tier that this customer could upgrade to from their current tier. Will be `null` if the customer's current tier is already the highest tier in the program, a conditional tier, or a hidden tier","type":"null","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.2.upgrade_tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.2.upgrade_tier_id","typeLabel":"number | null"},"orders_needed_for_upgrade":{"oneOf":[{"description":"The number of additional orders required to move into the next tier. Will be `null` if there is no eligible next tier (see `upgrade_tier_id`)","type":"number","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.2.orders_needed_for_upgrade.oneOf.0","typeLabel":"number"},{"description":"The number of additional orders required to move into the next tier. Will be `null` if there is no eligible next tier (see `upgrade_tier_id`)","type":"null","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.2.orders_needed_for_upgrade.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.2.orders_needed_for_upgrade","typeLabel":"number | null"},"tier_orders":{"type":"object","properties":{"now":{"type":"number","description":"The number of orders contributing to tier progress as of right now. This is equivalent to the number of eligible orders from now, back to the start of the evaluation window.","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.2.tier_orders.now","typeLabel":"number"},"at_expiration":{"oneOf":[{"description":"The predicted number of orders contributing to tier progress as of the current tier's expiration date. This is similar to the `now` value, but instead of the window ending at `now`, it ends at the current tier expiration date. This can be used to determine if a customer would be able to renew their current tier when it expires This will be `null` if the membership never expires (e.g. lifetime tiers)","type":"number","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.2.tier_orders.at_expiration.oneOf.0","typeLabel":"number"},{"description":"The predicted number of orders contributing to tier progress as of the current tier's expiration date. This is similar to the `now` value, but instead of the window ending at `now`, it ends at the current tier expiration date. This can be used to determine if a customer would be able to renew their current tier when it expires This will be `null` if the membership never expires (e.g. lifetime tiers)","type":"null","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.2.tier_orders.at_expiration.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.2.tier_orders.at_expiration","typeLabel":"number | null"}},"required":["now","at_expiration"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.2.tier_orders","typeLabel":"object"},"forecasted_tier_id":{"oneOf":[{"description":"The ID of the tier the customer is forecasted to be in at their membership expiration, based on their predicted progress at that time. This can be used to warn customers if they are at risk of being downgraded. Will be `null` if the membership never expires (e.g. lifetime tiers, default tier memberships, or conditional tier memberships)","type":"number","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.2.forecasted_tier_id.oneOf.0","typeLabel":"number"},{"description":"The ID of the tier the customer is forecasted to be in at their membership expiration, based on their predicted progress at that time. This can be used to warn customers if they are at risk of being downgraded. Will be `null` if the membership never expires (e.g. lifetime tiers, default tier memberships, or conditional tier memberships)","type":"null","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.2.forecasted_tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.2.forecasted_tier_id","typeLabel":"number | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress.oneOf.2","typeLabel":"Orders · object"}],"isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0.progress","typeLabel":"Points · object | Spend · object | Orders · object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.0","typeLabel":"object"},{"type":"null","description":"Details about this customer's current tier membership, or `null` if tiers are not enabled","isRequired":true,"uniqueKey":"customer.tier_membership.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.tier_membership","typeLabel":"object | null"},"birthday":{"oneOf":[{"type":"object","description":"The customer's birthday, if one has been provided. Depending on how the program is configured, the `year` may or may not be included","required":["month","day"],"example":{"month":6,"day":25},"properties":{"month":{"type":"number","example":9,"isRequired":true,"uniqueKey":"customer.birthday.oneOf.0.month","typeLabel":"number"},"day":{"type":"number","example":20,"isRequired":true,"uniqueKey":"customer.birthday.oneOf.0.day","typeLabel":"number"},"year":{"example":1993,"type":"number","uniqueKey":"customer.birthday.oneOf.0.year","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.birthday.oneOf.0","typeLabel":"object"},{"type":"null","description":"The customer's birthday, if one has been provided. Depending on how the program is configured, the `year` may or may not be included","example":{"month":6,"day":25},"isRequired":true,"uniqueKey":"customer.birthday.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.birthday","typeLabel":"object | null"},"next_birthday":{"oneOf":[{"type":"string","description":"If the customer has provided their birthday, this will be an `ISO 8601` timestamp representing the date of their next (upcoming) birthday","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","example":"2025-06-25","isRequired":true,"uniqueKey":"customer.next_birthday.oneOf.0","typeLabel":"string\u003cdate>"},{"type":"null","description":"If the customer has provided their birthday, this will be an `ISO 8601` timestamp representing the date of their next (upcoming) birthday","example":"2025-06-25","isRequired":true,"uniqueKey":"customer.next_birthday.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.next_birthday","typeLabel":"string\u003cdate> | null"},"claimed_rewards":{"description":"The most recent 20 claimed rewards that belong to this customer. Claimed rewards can include a `redeemable`, which can be used to provide the reward to the customer. For example, voucher-based rewards will include a voucher code that could be displayed to the customer so they can apply it during checkout","type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"The ID of the claimed reward resource in LoyaltyLion","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].id","typeLabel":"number"},"claimed_at":{"type":"string","description":"`ISO 8601` timestamp indicating when this reward was claimed","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].claimed_at","typeLabel":"string"},"reward_id":{"type":"number","description":"The ID of the reward that was claimed. If a reward with this ID does not exist in the current [Site Configuration](/headless-api/2025-06/configuration/get-configuration), it means the reward has been deleted. The associated redeemable, if any, will usually still be active even after the reward has been deleted","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].reward_id","typeLabel":"number"},"title":{"type":"string","description":"Short, localized title for this claimed reward. For example, '$5 voucher', or 'Free Water Bottle'. This is usually the same title as the associated reward","example":"$5 voucher","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].title","typeLabel":"string"},"state":{"type":"string","enum":["approved","declined","expired","pending","void"],"description":"The state of this claimed reward. Only `active` rewards will have a usable `redeemable`","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].state","typeLabel":"enum\u003cstring>"},"source":{"oneOf":[{"type":"object","title":"Points redemption","description":"The customer used points to claim this reward","required":["kind","points_cost"],"properties":{"kind":{"type":"string","const":"points_redemption","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].source.oneOf.0.kind","typeLabel":"string"},"points_cost":{"type":"number","description":"The number of points the customer used to claim this reward","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].source.oneOf.0.points_cost","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].source.oneOf.0","typeLabel":"Points redemption · object"},{"type":"object","title":"Rule completion","description":"This reward was provided directly when the customer completed a rule","required":["kind","rule_id"],"properties":{"kind":{"type":"string","const":"rule_completion","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].source.oneOf.1.kind","typeLabel":"string"},"rule_id":{"type":"number","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].source.oneOf.1.rule_id","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].source.oneOf.1","typeLabel":"Rule completion · object"},{"type":"object","title":"Tier entry","description":"This reward was awarded directly when the customer entered a tier","required":["kind","tier_id"],"properties":{"kind":{"type":"string","const":"tier_entry","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].source.oneOf.2.kind","typeLabel":"string"},"tier_id":{"type":"number","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].source.oneOf.2.tier_id","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].source.oneOf.2","typeLabel":"Tier entry · object"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].source","typeLabel":"Points redemption · object | Rule completion · object | Tier entry · object"},"auto_refund_at":{"oneOf":[{"description":"`ISO 8601` timestamp indicating when this reward and its associated redeemable will be automatically voided and refunded if it has not yet been used, or `null` if not applicable","type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].auto_refund_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp indicating when this reward and its associated redeemable will be automatically voided and refunded if it has not yet been used, or `null` if not applicable","type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].auto_refund_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].auto_refund_at","typeLabel":"string | null"},"redeemable":{"oneOf":[{"type":"object","title":"Gift card","description":"The redeemable linked to this claimed reward, if any. If present, the redeemable can usually be used to provide the reward to the customer. For example, it may include a voucher code that can be shown to the customer, or details of a free product that can be added to the customer's cart directly. A free product granted to the customer, rather than redeemed with points, has no redeemable until they add it to their cart on a storefront running the LoyaltyLion SDK, which the Headless API cannot do","required":["usage_status","kind","code_last_characters","initial_balance","current_balance","expires_at"],"properties":{"usage_status":{"type":"string","enum":["not_used","partially_used","used"],"description":"The usage status of this redeemable. Redeemables that are `used` cannot be used again, e.g. a voucher code that has already been used with an order","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.0.usage_status","typeLabel":"enum\u003cstring>"},"kind":{"type":"string","const":"gift_card","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.0.kind","typeLabel":"string"},"code_last_characters":{"type":"string","description":"The last few characters of the gift card code. Note that the full gift card code is only shown once when the gift card reward is redeemed","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.0.code_last_characters","typeLabel":"string"},"initial_balance":{"type":"object","properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.0.initial_balance.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.0.initial_balance.formatted","typeLabel":"string"}},"required":["amount","formatted"],"additionalProperties":false,"description":"The initial balance of the gift card","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.0.initial_balance","typeLabel":"object"},"current_balance":{"type":"object","properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.0.current_balance.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.0.current_balance.formatted","typeLabel":"string"}},"required":["amount","formatted"],"additionalProperties":false,"description":"The current balance of the gift card","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.0.current_balance","typeLabel":"object"},"expires_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when the gift card will expire, or `null` if it does not expire","type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.0.expires_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when the gift card will expire, or `null` if it does not expire","type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.0.expires_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.0.expires_at","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.0","typeLabel":"Gift card · object"},{"type":"object","title":"Cart discount voucher","description":"The redeemable linked to this claimed reward, if any. If present, the redeemable can usually be used to provide the reward to the customer. For example, it may include a voucher code that can be shown to the customer, or details of a free product that can be added to the customer's cart directly. A free product granted to the customer, rather than redeemed with points, has no redeemable until they add it to their cart on a storefront running the LoyaltyLion SDK, which the Headless API cannot do","required":["usage_status","kind","code","discount_type","discount","applies_to_order_type","recurring_cycle_limit","minimum_spend","expires_at","used_at"],"properties":{"usage_status":{"type":"string","enum":["not_used","partially_used","used"],"description":"The usage status of this redeemable. Redeemables that are `used` cannot be used again, e.g. a voucher code that has already been used with an order","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.1.usage_status","typeLabel":"enum\u003cstring>"},"kind":{"type":"string","const":"cart_discount_voucher","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.1.kind","typeLabel":"string"},"code":{"type":"string","description":"The discount voucher code","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.1.code","typeLabel":"string"},"discount_type":{"type":"string","enum":["fixed","percentage"],"description":"The type of discount this voucher will apply to the cart","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.1.discount_type","typeLabel":"enum\u003cstring>"},"discount":{"oneOf":[{"type":"object","description":"The discount that will apply to the cart. For `fixed` discounts this will be the currency amount. For `percentage` discounts, it will be a number from `1-100`","required":["amount","formatted"],"properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.1.discount.oneOf.0.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.1.discount.oneOf.0.formatted","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.1.discount.oneOf.0","typeLabel":"object"},{"type":"object","description":"The discount that will apply to the cart. For `fixed` discounts this will be the currency amount. For `percentage` discounts, it will be a number from `1-100`","required":["percentage","formatted"],"properties":{"percentage":{"type":"number","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.1.discount.oneOf.1.percentage","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.1.discount.oneOf.1.formatted","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.1.discount.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.1.discount","typeLabel":"object"},"applies_to_order_type":{"type":"string","enum":["all","one_time","subscription"],"description":"The type of order that this voucher will apply to. One of: `all` (applies to all types of order), `one_time` (applies to one-time orders), `subscription` (applies to subscription orders)","example":"one_time","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.1.applies_to_order_type","typeLabel":"enum\u003cstring>"},"recurring_cycle_limit":{"oneOf":[{"description":"The number of orders this discount will apply to, for discounts that can apply to subscription orders. If it's `1`, it means the discount will apply only to the first order with which it is used. If `null`, the discount will be applied to any number of orders for as long as it is active","example":1,"type":"number","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.1.recurring_cycle_limit.oneOf.0","typeLabel":"number"},{"description":"The number of orders this discount will apply to, for discounts that can apply to subscription orders. If it's `1`, it means the discount will apply only to the first order with which it is used. If `null`, the discount will be applied to any number of orders for as long as it is active","example":1,"type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.1.recurring_cycle_limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.1.recurring_cycle_limit","typeLabel":"number | null"},"minimum_spend":{"oneOf":[{"type":"object","description":"The minimum spend, if any, for the voucher to apply to the cart","required":["amount","formatted"],"example":{"amount":10,"formatted":"$10"},"properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.1.minimum_spend.oneOf.0.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.1.minimum_spend.oneOf.0.formatted","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.1.minimum_spend.oneOf.0","typeLabel":"object"},{"type":"null","description":"The minimum spend, if any, for the voucher to apply to the cart","example":{"amount":10,"formatted":"$10"},"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.1.minimum_spend.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.1.minimum_spend","typeLabel":"object | null"},"expires_at":{"oneOf":[{"description":"ISO 8601 timestamp representing when the voucher will expire, or `null` if it does not expire","type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.1.expires_at.oneOf.0","typeLabel":"string"},{"description":"ISO 8601 timestamp representing when the voucher will expire, or `null` if it does not expire","type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.1.expires_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.1.expires_at","typeLabel":"string | null"},"used_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when the voucher was used, or `null` if not yet used","type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.1.used_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when the voucher was used, or `null` if not yet used","type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.1.used_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.1.used_at","typeLabel":"string | null"},"supports_active_subscriptions":{"description":"Whether or not this discount will also be able to be applied to active subscriptions in Recharge. If true, we will create a Recharge discount in addition to a Shopify discount whenever this reward is claimed.","type":"boolean","uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.1.supports_active_subscriptions","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.1","typeLabel":"Cart discount voucher · object"},{"type":"object","title":"Cart variable discount","description":"The redeemable linked to this claimed reward, if any. If present, the redeemable can usually be used to provide the reward to the customer. For example, it may include a voucher code that can be shown to the customer, or details of a free product that can be added to the customer's cart directly. A free product granted to the customer, rather than redeemed with points, has no redeemable until they add it to their cart on a storefront running the LoyaltyLion SDK, which the Headless API cannot do","required":["usage_status","kind","discount","code","applies_to_order_type","expires_at","used_at"],"properties":{"usage_status":{"type":"string","enum":["not_used","partially_used","used"],"description":"The usage status of this redeemable. Redeemables that are `used` cannot be used again, e.g. a voucher code that has already been used with an order","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.2.usage_status","typeLabel":"enum\u003cstring>"},"kind":{"type":"string","const":"cart_variable_discount_voucher","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.2.kind","typeLabel":"string"},"discount":{"type":"object","properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.2.discount.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.2.discount.formatted","typeLabel":"string"}},"required":["amount","formatted"],"additionalProperties":false,"description":"The discount amount that was redeemed","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.2.discount","typeLabel":"object"},"code":{"type":"string","description":"The discount voucher code","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.2.code","typeLabel":"string"},"applies_to_order_type":{"type":"string","enum":["all","one_time","subscription"],"description":"The type of order that this voucher will apply to. One of: `all` (applies to all types of order), `one_time` (applies to one-time orders), `subscription` (applies to subscription orders)","example":"one_time","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.2.applies_to_order_type","typeLabel":"enum\u003cstring>"},"expires_at":{"oneOf":[{"description":"ISO 8601 timestamp representing when the voucher will expire, or `null` if it does not expire","type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.2.expires_at.oneOf.0","typeLabel":"string"},{"description":"ISO 8601 timestamp representing when the voucher will expire, or `null` if it does not expire","type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.2.expires_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.2.expires_at","typeLabel":"string | null"},"used_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when the voucher was used, or `null` if not yet used","type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.2.used_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when the voucher was used, or `null` if not yet used","type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.2.used_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.2.used_at","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.2","typeLabel":"Cart variable discount · object"},{"type":"object","title":"Product discount voucher","description":"The redeemable linked to this claimed reward, if any. If present, the redeemable can usually be used to provide the reward to the customer. For example, it may include a voucher code that can be shown to the customer, or details of a free product that can be added to the customer's cart directly. A free product granted to the customer, rather than redeemed with points, has no redeemable until they add it to their cart on a storefront running the LoyaltyLion SDK, which the Headless API cannot do","required":["usage_status","kind","code","product","discount","expires_at","used_at"],"properties":{"usage_status":{"type":"string","enum":["not_used","partially_used","used"],"description":"The usage status of this redeemable. Redeemables that are `used` cannot be used again, e.g. a voucher code that has already been used with an order","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.3.usage_status","typeLabel":"enum\u003cstring>"},"kind":{"type":"string","const":"product_discount_voucher","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.3.kind","typeLabel":"string"},"code":{"type":"string","description":"The discount voucher code","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.3.code","typeLabel":"string"},"product":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.3.product.id","typeLabel":"string"},"image_url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.3.product.image_url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.3.product.image_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.3.product.image_url","typeLabel":"string | null"},"variant_id":{"oneOf":[{"description":"The variant ID to apply the discount to. If `null`, the discount can be applied to all this product's variants","type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.3.product.variant_id.oneOf.0","typeLabel":"string"},{"description":"The variant ID to apply the discount to. If `null`, the discount can be applied to all this product's variants","type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.3.product.variant_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.3.product.variant_id","typeLabel":"string | null"}},"required":["id","image_url","variant_id"],"additionalProperties":false,"description":"The product that this discount applies to","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.3.product","typeLabel":"object"},"discount":{"type":"object","properties":{"percentage":{"type":"number","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.3.discount.percentage","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.3.discount.formatted","typeLabel":"string"}},"required":["percentage","formatted"],"additionalProperties":false,"description":"The discount that will apply to the product. Product discounts are always percentage based, so this will be a number from `1-100`","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.3.discount","typeLabel":"object"},"expires_at":{"oneOf":[{"description":"ISO 8601 timestamp representing when the voucher will expire, or `null` if it does not expire","type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.3.expires_at.oneOf.0","typeLabel":"string"},{"description":"ISO 8601 timestamp representing when the voucher will expire, or `null` if it does not expire","type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.3.expires_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.3.expires_at","typeLabel":"string | null"},"used_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when the voucher was used, or `null` if not yet used","type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.3.used_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when the voucher was used, or `null` if not yet used","type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.3.used_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.3.used_at","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.3","typeLabel":"Product discount voucher · object"},{"type":"object","title":"Free shipping voucher","description":"The redeemable linked to this claimed reward, if any. If present, the redeemable can usually be used to provide the reward to the customer. For example, it may include a voucher code that can be shown to the customer, or details of a free product that can be added to the customer's cart directly. A free product granted to the customer, rather than redeemed with points, has no redeemable until they add it to their cart on a storefront running the LoyaltyLion SDK, which the Headless API cannot do","required":["usage_status","kind","code","max_shipping","expires_at","used_at"],"properties":{"usage_status":{"type":"string","enum":["not_used","partially_used","used"],"description":"The usage status of this redeemable. Redeemables that are `used` cannot be used again, e.g. a voucher code that has already been used with an order","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.4.usage_status","typeLabel":"enum\u003cstring>"},"kind":{"type":"string","const":"free_shipping_voucher","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.4.kind","typeLabel":"string"},"code":{"type":"string","description":"The discount voucher code","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.4.code","typeLabel":"string"},"max_shipping":{"oneOf":[{"type":"object","description":"Free shipping will only be applied if the shipping rate is equal to or less than this amount, or `null` if there is no maximum","required":["amount","formatted"],"properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.4.max_shipping.oneOf.0.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.4.max_shipping.oneOf.0.formatted","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.4.max_shipping.oneOf.0","typeLabel":"object"},{"type":"null","description":"Free shipping will only be applied if the shipping rate is equal to or less than this amount, or `null` if there is no maximum","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.4.max_shipping.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.4.max_shipping","typeLabel":"object | null"},"expires_at":{"oneOf":[{"description":"ISO 8601 timestamp representing when the voucher will expire, or `null` if it does not expire","type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.4.expires_at.oneOf.0","typeLabel":"string"},{"description":"ISO 8601 timestamp representing when the voucher will expire, or `null` if it does not expire","type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.4.expires_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.4.expires_at","typeLabel":"string | null"},"used_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when the voucher was used, or `null` if not yet used","type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.4.used_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when the voucher was used, or `null` if not yet used","type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.4.used_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.4.used_at","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.4","typeLabel":"Free shipping voucher · object"},{"type":"object","title":"Collection discount voucher","description":"The redeemable linked to this claimed reward, if any. If present, the redeemable can usually be used to provide the reward to the customer. For example, it may include a voucher code that can be shown to the customer, or details of a free product that can be added to the customer's cart directly. A free product granted to the customer, rather than redeemed with points, has no redeemable until they add it to their cart on a storefront running the LoyaltyLion SDK, which the Headless API cannot do","required":["usage_status","kind","code","collection","discount_type","discount","minimum_spend","expires_at","used_at"],"properties":{"usage_status":{"type":"string","enum":["not_used","partially_used","used"],"description":"The usage status of this redeemable. Redeemables that are `used` cannot be used again, e.g. a voucher code that has already been used with an order","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5.usage_status","typeLabel":"enum\u003cstring>"},"kind":{"type":"string","const":"collection_discount_voucher","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5.kind","typeLabel":"string"},"code":{"type":"string","description":"The discount voucher code","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5.code","typeLabel":"string"},"collection":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5.collection.id","typeLabel":"string"},"title":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5.collection.title.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5.collection.title.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5.collection.title","typeLabel":"string | null"},"url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5.collection.url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5.collection.url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5.collection.url","typeLabel":"string | null"}},"required":["id","title","url"],"additionalProperties":false,"description":"The collection that this discount applies to","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5.collection","typeLabel":"object"},"discount_type":{"type":"string","enum":["fixed","percentage"],"description":"The type of discount this voucher will apply to items in the collection","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5.discount_type","typeLabel":"enum\u003cstring>"},"discount":{"oneOf":[{"type":"object","description":"The discount that will apply to items in the collection. For `fixed` discounts this will be the currency amount. For `percentage` discounts, it will be a number from `1-100`","required":["amount","formatted"],"properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5.discount.oneOf.0.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5.discount.oneOf.0.formatted","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5.discount.oneOf.0","typeLabel":"object"},{"type":"object","description":"The discount that will apply to items in the collection. For `fixed` discounts this will be the currency amount. For `percentage` discounts, it will be a number from `1-100`","required":["percentage","formatted"],"properties":{"percentage":{"type":"number","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5.discount.oneOf.1.percentage","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5.discount.oneOf.1.formatted","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5.discount.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5.discount","typeLabel":"object"},"minimum_spend":{"oneOf":[{"type":"object","description":"The minimum spend, if any, for the voucher to apply to the cart","required":["amount","formatted"],"example":{"amount":10,"formatted":"$10"},"properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5.minimum_spend.oneOf.0.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5.minimum_spend.oneOf.0.formatted","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5.minimum_spend.oneOf.0","typeLabel":"object"},{"type":"null","description":"The minimum spend, if any, for the voucher to apply to the cart","example":{"amount":10,"formatted":"$10"},"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5.minimum_spend.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5.minimum_spend","typeLabel":"object | null"},"expires_at":{"oneOf":[{"description":"ISO 8601 timestamp representing when the voucher will expire, or `null` if it does not expire","type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5.expires_at.oneOf.0","typeLabel":"string"},{"description":"ISO 8601 timestamp representing when the voucher will expire, or `null` if it does not expire","type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5.expires_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5.expires_at","typeLabel":"string | null"},"used_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when the voucher was used, or `null` if not yet used","type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5.used_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when the voucher was used, or `null` if not yet used","type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5.used_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5.used_at","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.5","typeLabel":"Collection discount voucher · object"},{"type":"object","title":"Active subscription discount voucher","description":"The redeemable linked to this claimed reward, if any. If present, the redeemable can usually be used to provide the reward to the customer. For example, it may include a voucher code that can be shown to the customer, or details of a free product that can be added to the customer's cart directly. A free product granted to the customer, rather than redeemed with points, has no redeemable until they add it to their cart on a storefront running the LoyaltyLion SDK, which the Headless API cannot do","required":["usage_status","kind","code","discount_type","discount","recurring_cycle_limit"],"properties":{"usage_status":{"type":"string","enum":["not_used","partially_used","used"],"description":"The usage status of this redeemable. Redeemables that are `used` cannot be used again, e.g. a voucher code that has already been used with an order","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.6.usage_status","typeLabel":"enum\u003cstring>"},"kind":{"type":"string","const":"active_subscription_discount_voucher","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.6.kind","typeLabel":"string"},"code":{"type":"string","description":"The discount voucher code","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.6.code","typeLabel":"string"},"discount_type":{"type":"string","enum":["fixed","percentage"],"description":"The type of discount this voucher will apply to next order","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.6.discount_type","typeLabel":"enum\u003cstring>"},"discount":{"oneOf":[{"type":"object","description":"The discount that will apply to the next order. For `fixed` discounts this will be the currency amount. For `percentage` discounts, it will be a number from `1-100`","required":["amount","formatted"],"properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.6.discount.oneOf.0.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.6.discount.oneOf.0.formatted","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.6.discount.oneOf.0","typeLabel":"object"},{"type":"object","description":"The discount that will apply to the next order. For `fixed` discounts this will be the currency amount. For `percentage` discounts, it will be a number from `1-100`","required":["percentage","formatted"],"properties":{"percentage":{"type":"number","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.6.discount.oneOf.1.percentage","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.6.discount.oneOf.1.formatted","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.6.discount.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.6.discount","typeLabel":"object"},"recurring_cycle_limit":{"oneOf":[{"description":"The number of recurring orders this discount will apply to. If `null`, the discount will be applied to any number of orders for as long as it is active","type":"number","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.6.recurring_cycle_limit.oneOf.0","typeLabel":"number"},{"description":"The number of recurring orders this discount will apply to. If `null`, the discount will be applied to any number of orders for as long as it is active","type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.6.recurring_cycle_limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.6.recurring_cycle_limit","typeLabel":"number | null"}},"additionalProperties":false,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.6","typeLabel":"Active subscription discount voucher · object"},{"type":"object","title":"Active subscription product","description":"The redeemable linked to this claimed reward, if any. If present, the redeemable can usually be used to provide the reward to the customer. For example, it may include a voucher code that can be shown to the customer, or details of a free product that can be added to the customer's cart directly. A free product granted to the customer, rather than redeemed with points, has no redeemable until they add it to their cart on a storefront running the LoyaltyLion SDK, which the Headless API cannot do","required":["usage_status","kind","product","quantity","subscription_details"],"properties":{"usage_status":{"type":"string","enum":["not_used","partially_used","used"],"description":"The usage status of this redeemable. Redeemables that are `used` cannot be used again, e.g. a voucher code that has already been used with an order","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7.usage_status","typeLabel":"enum\u003cstring>"},"kind":{"type":"string","const":"active_subscription_product","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7.kind","typeLabel":"string"},"product":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7.product.id","typeLabel":"string"},"handle":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7.product.handle.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7.product.handle.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7.product.handle","typeLabel":"string | null"},"title":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7.product.title.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7.product.title.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7.product.title","typeLabel":"string | null"},"url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7.product.url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7.product.url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7.product.url","typeLabel":"string | null"},"image_url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7.product.image_url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7.product.image_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7.product.image_url","typeLabel":"string | null"},"variant":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7.product.variant.id","typeLabel":"string"},"title":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7.product.variant.title.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7.product.variant.title.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7.product.variant.title","typeLabel":"string | null"},"inventory_count":{"oneOf":[{"description":"The current inventory count of this product variant, or `null` if inventory is not tracked. If the count is zero, you should ensure it is not selectable by customers when redeeming the reward","type":"integer","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7.product.variant.inventory_count.oneOf.0","typeLabel":"integer"},{"description":"The current inventory count of this product variant, or `null` if inventory is not tracked. If the count is zero, you should ensure it is not selectable by customers when redeeming the reward","type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7.product.variant.inventory_count.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7.product.variant.inventory_count","typeLabel":"integer | null"}},"required":["id","title","inventory_count"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7.product.variant","typeLabel":"object"}},"required":["id","handle","title","url","image_url","variant"],"additionalProperties":false,"description":"The product and variant that will be included in the next subscription","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7.product","typeLabel":"object"},"quantity":{"type":"number","description":"The quantity of the product that will be included in the next subscription","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7.quantity","typeLabel":"number"},"subscription_details":{"type":"object","required":["kind","address_id","onetime_id","next_subscription_scheduled_at"],"properties":{"kind":{"type":"string","const":"recharge","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7.subscription_details.kind","typeLabel":"string"},"address_id":{"type":"number","description":"The ID of the address in ReCharge that this free product will be sent to","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7.subscription_details.address_id","typeLabel":"number"},"onetime_id":{"type":"number","description":"The ID of the \"onetime\" line item created for this free product in ReCharge","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7.subscription_details.onetime_id","typeLabel":"number"},"next_subscription_scheduled_at":{"type":"string","description":"`ISO 8601` timestamp indicating when the next subscription containing this free product is scheduled","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7.subscription_details.next_subscription_scheduled_at","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7.subscription_details","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.7","typeLabel":"Active subscription product · object"},{"type":"object","title":"Product cart","description":"The redeemable linked to this claimed reward, if any. If present, the redeemable can usually be used to provide the reward to the customer. For example, it may include a voucher code that can be shown to the customer, or details of a free product that can be added to the customer's cart directly. A free product granted to the customer, rather than redeemed with points, has no redeemable until they add it to their cart on a storefront running the LoyaltyLion SDK, which the Headless API cannot do","required":["usage_status","kind","product","quantity","used_at","cart_line_identifier","grant","active_cart_redemption"],"properties":{"usage_status":{"type":"string","enum":["not_used","partially_used","used"],"description":"The usage status of this redeemable. Redeemables that are `used` cannot be used again, e.g. a voucher code that has already been used with an order","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.usage_status","typeLabel":"enum\u003cstring>"},"kind":{"type":"string","const":"product_cart","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.kind","typeLabel":"string"},"product":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.product.id","typeLabel":"string"},"handle":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.product.handle.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.product.handle.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.product.handle","typeLabel":"string | null"},"title":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.product.title.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.product.title.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.product.title","typeLabel":"string | null"},"url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.product.url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.product.url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.product.url","typeLabel":"string | null"},"image_url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.product.image_url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.product.image_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.product.image_url","typeLabel":"string | null"},"variant":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.product.variant.id","typeLabel":"string"},"title":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.product.variant.title.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.product.variant.title.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.product.variant.title","typeLabel":"string | null"},"inventory_count":{"oneOf":[{"description":"The current inventory count of this product variant, or `null` if inventory is not tracked. If the count is zero, you should ensure it is not selectable by customers when redeeming the reward","type":"integer","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.product.variant.inventory_count.oneOf.0","typeLabel":"integer"},{"description":"The current inventory count of this product variant, or `null` if inventory is not tracked. If the count is zero, you should ensure it is not selectable by customers when redeeming the reward","type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.product.variant.inventory_count.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.product.variant.inventory_count","typeLabel":"integer | null"}},"required":["id","title","inventory_count"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.product.variant","typeLabel":"object"}},"required":["id","handle","title","url","image_url","variant"],"additionalProperties":false,"description":"The product and variant that should be added to the cart","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.product","typeLabel":"object"},"quantity":{"type":"number","description":"The quantity of the product that should be added to the cart","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.quantity","typeLabel":"number"},"used_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when the product was used in an order, or `null` if not yet used","type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.used_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when the product was used in an order, or `null` if not yet used","type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.used_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.used_at","typeLabel":"string | null"},"cart_line_identifier":{"type":"string","description":"The unique cart line identifier, which connects this redemption to the line item in the eventual completed order. For Shopify, this identifier is used as the value of the `__lion_sfp_id` attribute on the cart line when the product is added to the cart","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.cart_line_identifier","typeLabel":"string"},"grant":{"oneOf":[{"type":"object","description":"Present when the customer was granted this product and has since added it to their cart. `null` for a product the customer redeemed with points or claimed directly","required":["expires_at"],"properties":{"expires_at":{"oneOf":[{"description":"`ISO 8601` timestamp of the deadline the grant had for adding the product to the cart, or `null` if the grant had no deadline","type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.grant.oneOf.0.expires_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp of the deadline the grant had for adding the product to the cart, or `null` if the grant had no deadline","type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.grant.oneOf.0.expires_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.grant.oneOf.0.expires_at","typeLabel":"string | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.grant.oneOf.0","typeLabel":"object"},{"type":"null","description":"Present when the customer was granted this product and has since added it to their cart. `null` for a product the customer redeemed with points or claimed directly","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.grant.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.grant","typeLabel":"object | null"},"active_cart_redemption":{"oneOf":[{"type":"object","description":"The active cart redemption associated with this product reward, if any. A product reward will have an active cart redemption if it has been redeemed and has not yet been checked out with an order, or expired","required":["id","claimed_reward_id","expires_at","product","quantity","cart_id","cart_line","current_cart_state"],"properties":{"id":{"type":"string","description":"The unique ID of this cart redemption. This ID needs to be attached to the cart line when the product is added to the cart. For Shopify, this is used as the value of the `__lion_sfp_id` attribute on the cart line","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.id","typeLabel":"string"},"claimed_reward_id":{"type":"number","description":"The ID of the claimed reward that this cart redemption is associated with","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.claimed_reward_id","typeLabel":"number"},"expires_at":{"type":"string","description":"`ISO 8601` timestamp representing when this cart redemption will expire if it has not been checked out, at which point any associated points will be returned to the customer","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.expires_at","typeLabel":"string"},"product":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.product.id","typeLabel":"string"},"handle":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.product.handle.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.product.handle.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.product.handle","typeLabel":"string | null"},"title":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.product.title.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.product.title.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.product.title","typeLabel":"string | null"},"url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.product.url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.product.url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.product.url","typeLabel":"string | null"},"image_url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.product.image_url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.product.image_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.product.image_url","typeLabel":"string | null"},"variant":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.product.variant.id","typeLabel":"string"},"title":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.product.variant.title.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.product.variant.title.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.product.variant.title","typeLabel":"string | null"},"inventory_count":{"oneOf":[{"description":"The current inventory count of this product variant, or `null` if inventory is not tracked. If the count is zero, you should ensure it is not selectable by customers when redeeming the reward","type":"integer","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.product.variant.inventory_count.oneOf.0","typeLabel":"integer"},{"description":"The current inventory count of this product variant, or `null` if inventory is not tracked. If the count is zero, you should ensure it is not selectable by customers when redeeming the reward","type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.product.variant.inventory_count.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.product.variant.inventory_count","typeLabel":"integer | null"}},"required":["id","title","inventory_count"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.product.variant","typeLabel":"object"}},"required":["id","handle","title","url","image_url","variant"],"additionalProperties":false,"description":"The product and variant that this cart redemption is for","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.product","typeLabel":"object"},"quantity":{"type":"number","description":"The quantity of the line item in this cart redemption","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.quantity","typeLabel":"number"},"cart_id":{"type":"string","description":"The ID of the cart for which this cart redemption was initially redeemed","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.cart_id","typeLabel":"string"},"cart_line":{"type":"object","title":"Shopify cart line","description":"Details of the cart line that should be added to the Shopify cart. When using the Storefront API, these should be passed into the [cartLinesAdd mutation](https://shopify.dev/docs/api/storefront/latest/mutations/cartLinesAdd)","required":["kind","merchandise_id","product_id","quantity","attributes"],"properties":{"kind":{"type":"string","const":"shopify","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.cart_line.kind","typeLabel":"string"},"merchandise_id":{"type":"string","description":"The merchandise (variant) ID to add to the cart","example":"gid://shopify/ProductVariant/1001","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.cart_line.merchandise_id","typeLabel":"string"},"product_id":{"type":"string","description":"The product ID to add to the cart","example":"gid://shopify/Product/100","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.cart_line.product_id","typeLabel":"string"},"quantity":{"type":"number","description":"The quantity of the cart line to add","example":1,"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.cart_line.quantity","typeLabel":"number"},"attributes":{"description":"An array of key-value attributes that should be included with the cart line","example":[{"key":"__lion_sfp_id","value":"19fdf4cb"}],"type":"array","items":{"type":"object","properties":{"key":{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.cart_line.attributes.items.[INDEX].key","typeLabel":"string"},"value":{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.cart_line.attributes.items.[INDEX].value","typeLabel":"string"}},"required":["key","value"],"additionalProperties":false,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.cart_line.attributes.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.cart_line.attributes","typeLabel":"object[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.cart_line","typeLabel":"Shopify cart line · object"},"current_cart_state":{"oneOf":[{"type":"object","description":"If this request included a serialized `cart` object whose `id` matches the `cart_id` of this redemption, this object includes information about this redemption's state in the current cart. It will be `null` if the request did not include a serialized cart or its `id` does not match","required":["in_cart","cart_requirements_met","cart_requirements_detail"],"properties":{"in_cart":{"type":"boolean","description":"Indicates if the redemption is currently in the cart","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.in_cart","typeLabel":"boolean"},"cart_requirements_met":{"type":"boolean","description":"Indicates if all this redemption's requirements are currently met by the cart, such as a required minimum cart total or number of line items","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_met","typeLabel":"boolean"},"cart_requirements_detail":{"type":"object","properties":{"minimum_cart_total":{"oneOf":[{"type":"object","title":"No requirement","required":["state"],"properties":{"state":{"type":"string","const":"no_requirement","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_cart_total.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_cart_total.oneOf.0","typeLabel":"No requirement · object"},{"type":"object","title":"Requirement met","required":["state"],"properties":{"state":{"type":"string","const":"requirement_met","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_cart_total.oneOf.1.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_cart_total.oneOf.1","typeLabel":"Requirement met · object"},{"type":"object","title":"Requirement not met","required":["state","additional_amount_required"],"properties":{"state":{"type":"string","const":"requirement_not_met","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_cart_total.oneOf.2.state","typeLabel":"string"},"additional_amount_required":{"type":"object","properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required.formatted","typeLabel":"string"}},"required":["amount","formatted"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_cart_total.oneOf.2","typeLabel":"Requirement not met · object"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_cart_total","typeLabel":"No requirement · object | Requirement met · object | Requirement not met · object"},"minimum_line_item_quantity":{"oneOf":[{"type":"object","title":"No requirement","required":["state"],"properties":{"state":{"type":"string","const":"no_requirement","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_line_item_quantity.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_line_item_quantity.oneOf.0","typeLabel":"No requirement · object"},{"type":"object","title":"Requirement met","required":["state"],"properties":{"state":{"type":"string","const":"requirement_met","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_line_item_quantity.oneOf.1.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_line_item_quantity.oneOf.1","typeLabel":"Requirement met · object"},{"type":"object","title":"Requirement not met","required":["state","additional_quantity_required"],"properties":{"state":{"type":"string","const":"requirement_not_met","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_line_item_quantity.oneOf.2.state","typeLabel":"string"},"additional_quantity_required":{"type":"number","description":"The number of additional line items required before this requirement is met","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_line_item_quantity.oneOf.2.additional_quantity_required","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_line_item_quantity.oneOf.2","typeLabel":"Requirement not met · object"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail.minimum_line_item_quantity","typeLabel":"No requirement · object | Requirement met · object | Requirement not met · object"}},"required":["minimum_cart_total","minimum_line_item_quantity"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0.cart_requirements_detail","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.current_cart_state.oneOf.0","typeLabel":"object"},{"type":"null","description":"If this request included a serialized `cart` object whose `id` matches the `cart_id` of this redemption, this object includes information about this redemption's state in the current cart. It will be `null` if the request did not include a serialized cart or its `id` does not match","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.current_cart_state.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0.current_cart_state","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.0","typeLabel":"object"},{"type":"null","description":"The active cart redemption associated with this product reward, if any. A product reward will have an active cart redemption if it has been redeemed and has not yet been checked out with an order, or expired","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8.active_cart_redemption","typeLabel":"object | null"}},"additionalProperties":false,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.8","typeLabel":"Product cart · object"},{"type":"object","title":"Custom","description":"The redeemable linked to this claimed reward, if any. If present, the redeemable can usually be used to provide the reward to the customer. For example, it may include a voucher code that can be shown to the customer, or details of a free product that can be added to the customer's cart directly. A free product granted to the customer, rather than redeemed with points, has no redeemable until they add it to their cart on a storefront running the LoyaltyLion SDK, which the Headless API cannot do","required":["usage_status","kind","fulfilment_explanation","fulfilled_at"],"properties":{"usage_status":{"type":"string","enum":["not_used","partially_used","used"],"description":"The usage status of this redeemable. Redeemables that are `used` cannot be used again, e.g. a voucher code that has already been used with an order","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.9.usage_status","typeLabel":"enum\u003cstring>"},"kind":{"type":"string","const":"custom","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.9.kind","typeLabel":"string"},"fulfilment_explanation":{"oneOf":[{"description":"Optional fulfillment explanation as a short, plaintext string. If present, this will explain to the customer how and when the reward will be fulfilled","type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.9.fulfilment_explanation.oneOf.0","typeLabel":"string"},{"description":"Optional fulfillment explanation as a short, plaintext string. If present, this will explain to the customer how and when the reward will be fulfilled","type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.9.fulfilment_explanation.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.9.fulfilment_explanation","typeLabel":"string | null"},"fulfilled_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this custom redeemable was fulfilled, or `null` if it is not yet fulfilled","type":"string","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.9.fulfilled_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this custom redeemable was fulfilled, or `null` if it is not yet fulfilled","type":"null","isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.9.fulfilled_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.9.fulfilled_at","typeLabel":"string | null"},"code":{"description":"The voucher code issued to the customer. Present only for custom rewards that issue codes from a merchant-uploaded pool; absent for other custom rewards (e.g. those fulfilled manually or by webhook).","type":"string","uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.9.code","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable.oneOf.9","typeLabel":"Custom · object"}],"uniqueKey":"customer.claimed_rewards.items.[INDEX].redeemable","typeLabel":"Gift card · object | Cart discount voucher · object | Cart variable discount · object | Product discount voucher · object | Free shipping voucher · object | Collection discount voucher · object | Active subscription discount voucher · object | Active subscription product · object | Product cart · object | Custom · object"}},"required":["id","claimed_at","reward_id","title","state","source","auto_refund_at"],"additionalProperties":false,"uniqueKey":"customer.claimed_rewards.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"customer.claimed_rewards","typeLabel":"object[]"},"available_rewards":{"description":"A list of rewards that are enabled for this customer, based on their tier. This is the same as the list of rewards returned from [Get Configuration](/headless-api/2025-06/configuration/get-configuration), with a few differences:\n\n- instead of `variants`, each reward will have a `variant` property, which represents the applicable variant for this customer based on their tier. If there is no applicable enabled variant, the reward will not be included in this list, e.g. if it's disabled for the customer's current tier\n- each reward will have a `context` property, which includes information about the reward specific to this customer, such as the number of times they have claimed it, and if any limit is in effect. The `can_redeem` property is a quick way to determine if the customer is able to redeem the reward\n\nNote that the inclusion of a reward here does not mean it the customer can redeem it: they must have enough points, and it must not have reached its claim limit. You can determine this yourself, or use the `context.can_redeem` property","type":"array","items":{"oneOf":[{"type":"object","title":"Gift card","description":"A gift card that can be used for future orders until its balance runs out","required":["id","limit","kind","properties","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this reward, which is applied per customer. Rewards with a limit set may only be claimed a set number of times in a given interval. The limit may be `null` if the reward has no limit and can therefore be claimed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this reward can be claimed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this reward, which is applied per customer. Rewards with a limit set may only be claimed a set number of times in a given interval. The limit may be `null` if the reward has no limit and can therefore be claimed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"gift_card","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.kind","typeLabel":"string"},"properties":{"type":"object","properties":{"initial_balance":{"type":"object","properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.properties.initial_balance.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.properties.initial_balance.formatted","typeLabel":"string"}},"required":["amount","formatted"],"additionalProperties":false,"description":"The initial balance of the gift card","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.properties.initial_balance","typeLabel":"object"}},"required":["initial_balance"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.properties","typeLabel":"object"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this reward variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this reward variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this reward. For example, '$5 voucher', 'Free Water Bottle', or '$5 off next 3 subscription orders'","example":"$5 voucher","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this reward, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Spend your points on $5 off your next order","type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this reward, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Spend your points on $5 off your next order","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this reward variant is enabled. For example, some rewards are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.variant.enabled","typeLabel":"boolean"},"cost":{"oneOf":[{"type":"object","title":"Fixed cost","description":"The cost of this reward in points. Will be one of `fixed` (costs a fixed number of points) or `variable` (cost is multiplied by unit, e.g. 100 points per $1 discount)","required":["kind","points"],"properties":{"kind":{"type":"string","const":"fixed","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.variant.cost.oneOf.0.kind","typeLabel":"string"},"points":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.variant.cost.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.variant.cost.oneOf.0","typeLabel":"Fixed cost · object"},{"type":"object","title":"Variable cost","description":"The cost of this reward in points. Will be one of `fixed` (costs a fixed number of points) or `variable` (cost is multiplied by unit, e.g. 100 points per $1 discount)","required":["kind","unit","points_per_unit"],"properties":{"kind":{"type":"string","const":"variable","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.variant.cost.oneOf.1.kind","typeLabel":"string"},"unit":{"type":"string","const":"discount_amount","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.variant.cost.oneOf.1.unit","typeLabel":"string"},"points_per_unit":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.variant.cost.oneOf.1.points_per_unit","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.variant.cost.oneOf.1","typeLabel":"Variable cost · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.variant.cost","typeLabel":"Fixed cost · object | Variable cost · object"},"cost_text":{"type":"string","description":"Short, localized text indicating the cost of this reward. For example, '100 points' or '10 points per $1'","example":"100 points","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.variant.cost_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","cost","cost_text"],"additionalProperties":false,"description":"The reward variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.variant","typeLabel":"object"},"context":{"type":"object","properties":{"can_redeem":{"oneOf":[{"type":"object","title":"Redeemable","description":"An object that indicates if this reward can be redeemed by this customer. The `state` property indicates if it can be redeemed. If `state == \"redeemable\"`, the reward can be redeemed by the customer","required":["state"],"properties":{"state":{"type":"string","const":"redeemable","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.0","typeLabel":"Redeemable · object"},{"type":"object","title":"Insufficient points","description":"An object that indicates if this reward can be redeemed by this customer. The `state` property indicates if it can be redeemed. If `state == \"redeemable\"`, the reward can be redeemed by the customer","required":["state","additional_points_required"],"properties":{"state":{"type":"string","const":"insufficient_points","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.1.state","typeLabel":"string"},"additional_points_required":{"type":"number","description":"The number of additional points required before this customer can afford the reward","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.1.additional_points_required","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.1","typeLabel":"Insufficient points · object"},{"type":"object","title":"Claim limit reached","description":"An object that indicates if this reward can be redeemed by this customer. The `state` property indicates if it can be redeemed. If `state == \"redeemable\"`, the reward can be redeemed by the customer","required":["state"],"properties":{"state":{"type":"string","const":"claim_limit_reached","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.2","typeLabel":"Claim limit reached · object"},{"type":"object","title":"Cart requirements not met","description":"For rewards that have requirements based on the customer's current cart, this indicates that the customer's current cart does not meet the requirements. This can only be determined if the request included a serialized `cart` object","required":["state","cart_requirements_detail"],"properties":{"state":{"type":"string","const":"cart_requirements_not_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.3.state","typeLabel":"string"},"cart_requirements_detail":{"type":"object","properties":{"minimum_cart_total":{"oneOf":[{"type":"object","title":"No requirement","required":["state"],"properties":{"state":{"type":"string","const":"no_requirement","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.0","typeLabel":"No requirement · object"},{"type":"object","title":"Requirement met","required":["state"],"properties":{"state":{"type":"string","const":"requirement_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.1.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.1","typeLabel":"Requirement met · object"},{"type":"object","title":"Requirement not met","required":["state","additional_amount_required"],"properties":{"state":{"type":"string","const":"requirement_not_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.state","typeLabel":"string"},"additional_amount_required":{"type":"object","properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required.formatted","typeLabel":"string"}},"required":["amount","formatted"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2","typeLabel":"Requirement not met · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total","typeLabel":"No requirement · object | Requirement met · object | Requirement not met · object"},"minimum_line_item_quantity":{"oneOf":[{"type":"object","title":"No requirement","required":["state"],"properties":{"state":{"type":"string","const":"no_requirement","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.0","typeLabel":"No requirement · object"},{"type":"object","title":"Requirement met","required":["state"],"properties":{"state":{"type":"string","const":"requirement_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.1.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.1","typeLabel":"Requirement met · object"},{"type":"object","title":"Requirement not met","required":["state","additional_quantity_required"],"properties":{"state":{"type":"string","const":"requirement_not_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.2.state","typeLabel":"string"},"additional_quantity_required":{"type":"number","description":"The number of additional line items required before this requirement is met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.2.additional_quantity_required","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.2","typeLabel":"Requirement not met · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity","typeLabel":"No requirement · object | Requirement met · object | Requirement not met · object"}},"required":["minimum_cart_total","minimum_line_item_quantity"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.3.cart_requirements_detail","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.3","typeLabel":"Cart requirements not met · object"},{"type":"object","title":"Max redemptions for cart reached","description":"For rewards that have limits on how many times they can be redeemed per cart, this indicates that the customer has reached the maximum number of redemptions for the current cart","required":["state"],"properties":{"state":{"type":"string","const":"max_redemptions_for_cart_reached","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.4.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.4","typeLabel":"Max redemptions for cart reached · object"},{"type":"object","title":"Out of stock","description":"For rewards that have managed inventory, or are linked to an external inventory, this indicates that the reward is out of stock. For rewards with multiple options (e.g. product variants), this means that all options are out of stock","required":["state"],"properties":{"state":{"type":"string","const":"out_of_stock","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.5.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.5","typeLabel":"Out of stock · object"},{"type":"object","title":"Unknown","description":"The redeemable state of this reward cannot be determined. For example, `product_cart` rewards where the request does not include a current cart will have this state, since we cannot determine if applicable cart requirements are met. It may be safe to treat this reward as redeemable if you perform your own checks","required":["state"],"properties":{"state":{"type":"string","const":"unknown","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.6.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem.oneOf.6","typeLabel":"Unknown · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.can_redeem","typeLabel":"Redeemable · object | Insufficient points · object | Claim limit reached · object | Cart requirements not met · object | Max redemptions for cart reached · object | Out of stock · object | Unknown · object"},"last_claimed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this reward was last claimed by the customer, or `null` if the reward has never been claimed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.last_claimed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this reward was last claimed by the customer, or `null` if the reward has never been claimed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.last_claimed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.last_claimed_at","typeLabel":"string | null"},"claim_count":{"type":"number","description":"The number of times this reward has been claimed by the customer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.claim_count","typeLabel":"number"},"claim_limit":{"oneOf":[{"type":"object","title":"No limit","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated reward has no limit, so this customer can claim it any number of times","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.claim_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.claim_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_claims_within_interval","claim_count_within_interval","remaining_claims_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated reward has a claim limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.claim_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.claim_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.claim_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.claim_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_claims_within_interval":{"type":"integer","description":"The number of times this reward can be claimed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.claim_limit.oneOf.1.allowed_claims_within_interval","typeLabel":"integer"},"claim_count_within_interval":{"type":"integer","description":"The number of times this reward has been claimed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.claim_limit.oneOf.1.claim_count_within_interval","typeLabel":"integer"},"remaining_claims_within_interval":{"type":"integer","description":"The number of times this reward can still be claimed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.claim_limit.oneOf.1.remaining_claims_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.claim_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated reward has a limit, the customer has reached it, and the limit will never reset. This means the reward can never be claimed again by this customer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.claim_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.claim_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated reward has a limit and the customer has reached it. The customer will be able to claim the reward again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.claim_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.claim_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can claim the reward again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.claim_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.claim_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.claim_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context.claim_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["can_redeem","last_claimed_at","claim_count","claim_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this reward, such as the number of times they have claimed it, or any limit that is in effect, and if they are currently able to redeem it","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this reward, when the merchant has set one: either an image they uploaded or chose for the reward itself, or the reward's product or collection catalog image. `null` when no image is set","type":"string","uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this reward, when the merchant has set one: either an image they uploaded or chose for the reward itself, or the reward's product or collection catalog image. `null` when no image is set","type":"null","uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.0","typeLabel":"Gift card · object"},{"type":"object","title":"Cart discount voucher","description":"A discount voucher that applies a reduction to the total cost of an order","required":["id","limit","kind","properties","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this reward, which is applied per customer. Rewards with a limit set may only be claimed a set number of times in a given interval. The limit may be `null` if the reward has no limit and can therefore be claimed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this reward can be claimed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this reward, which is applied per customer. Rewards with a limit set may only be claimed a set number of times in a given interval. The limit may be `null` if the reward has no limit and can therefore be claimed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"cart_discount_voucher","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.kind","typeLabel":"string"},"properties":{"type":"object","properties":{"discount_type":{"type":"string","enum":["fixed","percentage"],"description":"The type of discount this voucher will apply to the cart","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.properties.discount_type","typeLabel":"enum\u003cstring>"},"discount":{"oneOf":[{"type":"object","description":"The discount that will apply to the cart. For `fixed` discounts this will be the currency amount. For `percentage` discounts, it will be a number from `1-100`","required":["amount","formatted"],"properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.properties.discount.oneOf.0.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.properties.discount.oneOf.0.formatted","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.properties.discount.oneOf.0","typeLabel":"object"},{"type":"object","description":"The discount that will apply to the cart. For `fixed` discounts this will be the currency amount. For `percentage` discounts, it will be a number from `1-100`","required":["percentage","formatted"],"properties":{"percentage":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.properties.discount.oneOf.1.percentage","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.properties.discount.oneOf.1.formatted","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.properties.discount.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.properties.discount","typeLabel":"object"},"applies_to_order_type":{"type":"string","enum":["all","one_time","subscription"],"description":"The type of order that this voucher will apply to. One of: `all` (applies to all types of order), `one_time` (applies to one-time orders), `subscription` (applies to subscription orders)","example":"one_time","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.properties.applies_to_order_type","typeLabel":"enum\u003cstring>"},"recurring_cycle_limit":{"oneOf":[{"description":"The number of orders this discount will apply to, for discounts that can apply to subscription orders. If it's `1`, it means the discount will apply only to the first order with which it is used. If `null`, the discount will be applied to any number of orders for as long as it is active","example":1,"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.properties.recurring_cycle_limit.oneOf.0","typeLabel":"number"},{"description":"The number of orders this discount will apply to, for discounts that can apply to subscription orders. If it's `1`, it means the discount will apply only to the first order with which it is used. If `null`, the discount will be applied to any number of orders for as long as it is active","example":1,"type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.properties.recurring_cycle_limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.properties.recurring_cycle_limit","typeLabel":"number | null"},"minimum_spend":{"oneOf":[{"type":"object","description":"The minimum spend, if any, for the voucher to apply to the cart","required":["amount","formatted"],"example":{"amount":10,"formatted":"$10"},"properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.properties.minimum_spend.oneOf.0.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.properties.minimum_spend.oneOf.0.formatted","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.properties.minimum_spend.oneOf.0","typeLabel":"object"},{"type":"null","description":"The minimum spend, if any, for the voucher to apply to the cart","example":{"amount":10,"formatted":"$10"},"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.properties.minimum_spend.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.properties.minimum_spend","typeLabel":"object | null"},"supports_active_subscriptions":{"description":"Whether or not this discount will also be able to be applied to active subscriptions in Recharge. If true, we will create a Recharge discount in addition to a Shopify discount whenever this reward is claimed.","type":"boolean","uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.properties.supports_active_subscriptions","typeLabel":"boolean"}},"required":["discount_type","discount","applies_to_order_type","recurring_cycle_limit","minimum_spend"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.properties","typeLabel":"object"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this reward variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this reward variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this reward. For example, '$5 voucher', 'Free Water Bottle', or '$5 off next 3 subscription orders'","example":"$5 voucher","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this reward, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Spend your points on $5 off your next order","type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this reward, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Spend your points on $5 off your next order","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this reward variant is enabled. For example, some rewards are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.variant.enabled","typeLabel":"boolean"},"cost":{"oneOf":[{"type":"object","title":"Fixed cost","description":"The cost of this reward in points. Will be one of `fixed` (costs a fixed number of points) or `variable` (cost is multiplied by unit, e.g. 100 points per $1 discount)","required":["kind","points"],"properties":{"kind":{"type":"string","const":"fixed","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.variant.cost.oneOf.0.kind","typeLabel":"string"},"points":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.variant.cost.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.variant.cost.oneOf.0","typeLabel":"Fixed cost · object"},{"type":"object","title":"Variable cost","description":"The cost of this reward in points. Will be one of `fixed` (costs a fixed number of points) or `variable` (cost is multiplied by unit, e.g. 100 points per $1 discount)","required":["kind","unit","points_per_unit"],"properties":{"kind":{"type":"string","const":"variable","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.variant.cost.oneOf.1.kind","typeLabel":"string"},"unit":{"type":"string","const":"discount_amount","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.variant.cost.oneOf.1.unit","typeLabel":"string"},"points_per_unit":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.variant.cost.oneOf.1.points_per_unit","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.variant.cost.oneOf.1","typeLabel":"Variable cost · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.variant.cost","typeLabel":"Fixed cost · object | Variable cost · object"},"cost_text":{"type":"string","description":"Short, localized text indicating the cost of this reward. For example, '100 points' or '10 points per $1'","example":"100 points","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.variant.cost_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","cost","cost_text"],"additionalProperties":false,"description":"The reward variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.variant","typeLabel":"object"},"context":{"type":"object","properties":{"can_redeem":{"oneOf":[{"type":"object","title":"Redeemable","description":"An object that indicates if this reward can be redeemed by this customer. The `state` property indicates if it can be redeemed. If `state == \"redeemable\"`, the reward can be redeemed by the customer","required":["state"],"properties":{"state":{"type":"string","const":"redeemable","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.0","typeLabel":"Redeemable · object"},{"type":"object","title":"Insufficient points","description":"An object that indicates if this reward can be redeemed by this customer. The `state` property indicates if it can be redeemed. If `state == \"redeemable\"`, the reward can be redeemed by the customer","required":["state","additional_points_required"],"properties":{"state":{"type":"string","const":"insufficient_points","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.1.state","typeLabel":"string"},"additional_points_required":{"type":"number","description":"The number of additional points required before this customer can afford the reward","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.1.additional_points_required","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.1","typeLabel":"Insufficient points · object"},{"type":"object","title":"Claim limit reached","description":"An object that indicates if this reward can be redeemed by this customer. The `state` property indicates if it can be redeemed. If `state == \"redeemable\"`, the reward can be redeemed by the customer","required":["state"],"properties":{"state":{"type":"string","const":"claim_limit_reached","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.2","typeLabel":"Claim limit reached · object"},{"type":"object","title":"Cart requirements not met","description":"For rewards that have requirements based on the customer's current cart, this indicates that the customer's current cart does not meet the requirements. This can only be determined if the request included a serialized `cart` object","required":["state","cart_requirements_detail"],"properties":{"state":{"type":"string","const":"cart_requirements_not_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.3.state","typeLabel":"string"},"cart_requirements_detail":{"type":"object","properties":{"minimum_cart_total":{"oneOf":[{"type":"object","title":"No requirement","required":["state"],"properties":{"state":{"type":"string","const":"no_requirement","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.0","typeLabel":"No requirement · object"},{"type":"object","title":"Requirement met","required":["state"],"properties":{"state":{"type":"string","const":"requirement_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.1.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.1","typeLabel":"Requirement met · object"},{"type":"object","title":"Requirement not met","required":["state","additional_amount_required"],"properties":{"state":{"type":"string","const":"requirement_not_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.state","typeLabel":"string"},"additional_amount_required":{"type":"object","properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required.formatted","typeLabel":"string"}},"required":["amount","formatted"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2","typeLabel":"Requirement not met · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total","typeLabel":"No requirement · object | Requirement met · object | Requirement not met · object"},"minimum_line_item_quantity":{"oneOf":[{"type":"object","title":"No requirement","required":["state"],"properties":{"state":{"type":"string","const":"no_requirement","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.0","typeLabel":"No requirement · object"},{"type":"object","title":"Requirement met","required":["state"],"properties":{"state":{"type":"string","const":"requirement_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.1.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.1","typeLabel":"Requirement met · object"},{"type":"object","title":"Requirement not met","required":["state","additional_quantity_required"],"properties":{"state":{"type":"string","const":"requirement_not_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.2.state","typeLabel":"string"},"additional_quantity_required":{"type":"number","description":"The number of additional line items required before this requirement is met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.2.additional_quantity_required","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.2","typeLabel":"Requirement not met · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity","typeLabel":"No requirement · object | Requirement met · object | Requirement not met · object"}},"required":["minimum_cart_total","minimum_line_item_quantity"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.3.cart_requirements_detail","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.3","typeLabel":"Cart requirements not met · object"},{"type":"object","title":"Max redemptions for cart reached","description":"For rewards that have limits on how many times they can be redeemed per cart, this indicates that the customer has reached the maximum number of redemptions for the current cart","required":["state"],"properties":{"state":{"type":"string","const":"max_redemptions_for_cart_reached","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.4.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.4","typeLabel":"Max redemptions for cart reached · object"},{"type":"object","title":"Out of stock","description":"For rewards that have managed inventory, or are linked to an external inventory, this indicates that the reward is out of stock. For rewards with multiple options (e.g. product variants), this means that all options are out of stock","required":["state"],"properties":{"state":{"type":"string","const":"out_of_stock","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.5.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.5","typeLabel":"Out of stock · object"},{"type":"object","title":"Unknown","description":"The redeemable state of this reward cannot be determined. For example, `product_cart` rewards where the request does not include a current cart will have this state, since we cannot determine if applicable cart requirements are met. It may be safe to treat this reward as redeemable if you perform your own checks","required":["state"],"properties":{"state":{"type":"string","const":"unknown","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.6.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem.oneOf.6","typeLabel":"Unknown · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.can_redeem","typeLabel":"Redeemable · object | Insufficient points · object | Claim limit reached · object | Cart requirements not met · object | Max redemptions for cart reached · object | Out of stock · object | Unknown · object"},"last_claimed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this reward was last claimed by the customer, or `null` if the reward has never been claimed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.last_claimed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this reward was last claimed by the customer, or `null` if the reward has never been claimed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.last_claimed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.last_claimed_at","typeLabel":"string | null"},"claim_count":{"type":"number","description":"The number of times this reward has been claimed by the customer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.claim_count","typeLabel":"number"},"claim_limit":{"oneOf":[{"type":"object","title":"No limit","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated reward has no limit, so this customer can claim it any number of times","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.claim_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.claim_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_claims_within_interval","claim_count_within_interval","remaining_claims_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated reward has a claim limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.claim_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.claim_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.claim_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.claim_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_claims_within_interval":{"type":"integer","description":"The number of times this reward can be claimed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.claim_limit.oneOf.1.allowed_claims_within_interval","typeLabel":"integer"},"claim_count_within_interval":{"type":"integer","description":"The number of times this reward has been claimed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.claim_limit.oneOf.1.claim_count_within_interval","typeLabel":"integer"},"remaining_claims_within_interval":{"type":"integer","description":"The number of times this reward can still be claimed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.claim_limit.oneOf.1.remaining_claims_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.claim_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated reward has a limit, the customer has reached it, and the limit will never reset. This means the reward can never be claimed again by this customer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.claim_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.claim_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated reward has a limit and the customer has reached it. The customer will be able to claim the reward again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.claim_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.claim_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can claim the reward again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.claim_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.claim_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.claim_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context.claim_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["can_redeem","last_claimed_at","claim_count","claim_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this reward, such as the number of times they have claimed it, or any limit that is in effect, and if they are currently able to redeem it","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this reward, when the merchant has set one: either an image they uploaded or chose for the reward itself, or the reward's product or collection catalog image. `null` when no image is set","type":"string","uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this reward, when the merchant has set one: either an image they uploaded or chose for the reward itself, or the reward's product or collection catalog image. `null` when no image is set","type":"null","uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.1","typeLabel":"Cart discount voucher · object"},{"type":"object","title":"Cart variable discount","description":"A variable-amount discount, e.g. 100 points per $1 discount. This is typically used during checkout to allow shoppers to use points to apply a discount to their cart","required":["id","limit","kind","properties","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this reward, which is applied per customer. Rewards with a limit set may only be claimed a set number of times in a given interval. The limit may be `null` if the reward has no limit and can therefore be claimed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this reward can be claimed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this reward, which is applied per customer. Rewards with a limit set may only be claimed a set number of times in a given interval. The limit may be `null` if the reward has no limit and can therefore be claimed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"cart_variable_discount_voucher","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.kind","typeLabel":"string"},"properties":{"type":"object","properties":{"minimum_discount":{"type":"object","properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.properties.minimum_discount.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.properties.minimum_discount.formatted","typeLabel":"string"}},"required":["amount","formatted"],"additionalProperties":false,"description":"The minimum discount that can be selected, e.g. 1 for a minimum of $1","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.properties.minimum_discount","typeLabel":"object"},"maximum_discount":{"type":"object","properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.properties.maximum_discount.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.properties.maximum_discount.formatted","typeLabel":"string"}},"required":["amount","formatted"],"additionalProperties":false,"description":"The maximum discount that can be selected, e.g. 5 for a maximum of $5","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.properties.maximum_discount","typeLabel":"object"},"minimum_spend_before_discount":{"oneOf":[{"type":"object","description":"The required minimum spend in cart before the reward can be redeemed","required":["amount","formatted"],"example":{"amount":10,"formatted":"$10"},"properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.properties.minimum_spend_before_discount.oneOf.0.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.properties.minimum_spend_before_discount.oneOf.0.formatted","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.properties.minimum_spend_before_discount.oneOf.0","typeLabel":"object"},{"type":"null","description":"The required minimum spend in cart before the reward can be redeemed","example":{"amount":10,"formatted":"$10"},"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.properties.minimum_spend_before_discount.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.properties.minimum_spend_before_discount","typeLabel":"object | null"},"minimum_spend_after_discount":{"oneOf":[{"type":"object","description":"Only allow redemption of a discount value that would leave the cart total above this amount","required":["amount","formatted"],"example":{"amount":10,"formatted":"$10"},"properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.properties.minimum_spend_after_discount.oneOf.0.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.properties.minimum_spend_after_discount.oneOf.0.formatted","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.properties.minimum_spend_after_discount.oneOf.0","typeLabel":"object"},{"type":"null","description":"Only allow redemption of a discount value that would leave the cart total above this amount","example":{"amount":10,"formatted":"$10"},"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.properties.minimum_spend_after_discount.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.properties.minimum_spend_after_discount","typeLabel":"object | null"},"applies_to_order_type":{"type":"string","enum":["all","one_time","subscription"],"description":"The type of order that this voucher will apply to. One of: `all` (applies to all types of order), `one_time` (applies to one-time orders), `subscription` (applies to subscription orders)","example":"one_time","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.properties.applies_to_order_type","typeLabel":"enum\u003cstring>"}},"required":["minimum_discount","maximum_discount","minimum_spend_before_discount","minimum_spend_after_discount","applies_to_order_type"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.properties","typeLabel":"object"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this reward variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this reward variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this reward. For example, '$5 voucher', 'Free Water Bottle', or '$5 off next 3 subscription orders'","example":"$5 voucher","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this reward, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Spend your points on $5 off your next order","type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this reward, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Spend your points on $5 off your next order","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this reward variant is enabled. For example, some rewards are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.variant.enabled","typeLabel":"boolean"},"cost":{"oneOf":[{"type":"object","title":"Fixed cost","description":"The cost of this reward in points. Will be one of `fixed` (costs a fixed number of points) or `variable` (cost is multiplied by unit, e.g. 100 points per $1 discount)","required":["kind","points"],"properties":{"kind":{"type":"string","const":"fixed","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.variant.cost.oneOf.0.kind","typeLabel":"string"},"points":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.variant.cost.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.variant.cost.oneOf.0","typeLabel":"Fixed cost · object"},{"type":"object","title":"Variable cost","description":"The cost of this reward in points. Will be one of `fixed` (costs a fixed number of points) or `variable` (cost is multiplied by unit, e.g. 100 points per $1 discount)","required":["kind","unit","points_per_unit"],"properties":{"kind":{"type":"string","const":"variable","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.variant.cost.oneOf.1.kind","typeLabel":"string"},"unit":{"type":"string","const":"discount_amount","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.variant.cost.oneOf.1.unit","typeLabel":"string"},"points_per_unit":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.variant.cost.oneOf.1.points_per_unit","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.variant.cost.oneOf.1","typeLabel":"Variable cost · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.variant.cost","typeLabel":"Fixed cost · object | Variable cost · object"},"cost_text":{"type":"string","description":"Short, localized text indicating the cost of this reward. For example, '100 points' or '10 points per $1'","example":"100 points","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.variant.cost_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","cost","cost_text"],"additionalProperties":false,"description":"The reward variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.variant","typeLabel":"object"},"context":{"type":"object","properties":{"can_redeem":{"oneOf":[{"type":"object","title":"Redeemable","description":"An object that indicates if this reward can be redeemed by this customer. The `state` property indicates if it can be redeemed. If `state == \"redeemable\"`, the reward can be redeemed by the customer","required":["state"],"properties":{"state":{"type":"string","const":"redeemable","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.0","typeLabel":"Redeemable · object"},{"type":"object","title":"Insufficient points","description":"An object that indicates if this reward can be redeemed by this customer. The `state` property indicates if it can be redeemed. If `state == \"redeemable\"`, the reward can be redeemed by the customer","required":["state","additional_points_required"],"properties":{"state":{"type":"string","const":"insufficient_points","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.1.state","typeLabel":"string"},"additional_points_required":{"type":"number","description":"The number of additional points required before this customer can afford the reward","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.1.additional_points_required","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.1","typeLabel":"Insufficient points · object"},{"type":"object","title":"Claim limit reached","description":"An object that indicates if this reward can be redeemed by this customer. The `state` property indicates if it can be redeemed. If `state == \"redeemable\"`, the reward can be redeemed by the customer","required":["state"],"properties":{"state":{"type":"string","const":"claim_limit_reached","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.2","typeLabel":"Claim limit reached · object"},{"type":"object","title":"Cart requirements not met","description":"For rewards that have requirements based on the customer's current cart, this indicates that the customer's current cart does not meet the requirements. This can only be determined if the request included a serialized `cart` object","required":["state","cart_requirements_detail"],"properties":{"state":{"type":"string","const":"cart_requirements_not_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.3.state","typeLabel":"string"},"cart_requirements_detail":{"type":"object","properties":{"minimum_cart_total":{"oneOf":[{"type":"object","title":"No requirement","required":["state"],"properties":{"state":{"type":"string","const":"no_requirement","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.0","typeLabel":"No requirement · object"},{"type":"object","title":"Requirement met","required":["state"],"properties":{"state":{"type":"string","const":"requirement_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.1.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.1","typeLabel":"Requirement met · object"},{"type":"object","title":"Requirement not met","required":["state","additional_amount_required"],"properties":{"state":{"type":"string","const":"requirement_not_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.state","typeLabel":"string"},"additional_amount_required":{"type":"object","properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required.formatted","typeLabel":"string"}},"required":["amount","formatted"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2","typeLabel":"Requirement not met · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total","typeLabel":"No requirement · object | Requirement met · object | Requirement not met · object"},"minimum_line_item_quantity":{"oneOf":[{"type":"object","title":"No requirement","required":["state"],"properties":{"state":{"type":"string","const":"no_requirement","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.0","typeLabel":"No requirement · object"},{"type":"object","title":"Requirement met","required":["state"],"properties":{"state":{"type":"string","const":"requirement_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.1.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.1","typeLabel":"Requirement met · object"},{"type":"object","title":"Requirement not met","required":["state","additional_quantity_required"],"properties":{"state":{"type":"string","const":"requirement_not_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.2.state","typeLabel":"string"},"additional_quantity_required":{"type":"number","description":"The number of additional line items required before this requirement is met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.2.additional_quantity_required","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.2","typeLabel":"Requirement not met · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity","typeLabel":"No requirement · object | Requirement met · object | Requirement not met · object"}},"required":["minimum_cart_total","minimum_line_item_quantity"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.3.cart_requirements_detail","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.3","typeLabel":"Cart requirements not met · object"},{"type":"object","title":"Max redemptions for cart reached","description":"For rewards that have limits on how many times they can be redeemed per cart, this indicates that the customer has reached the maximum number of redemptions for the current cart","required":["state"],"properties":{"state":{"type":"string","const":"max_redemptions_for_cart_reached","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.4.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.4","typeLabel":"Max redemptions for cart reached · object"},{"type":"object","title":"Out of stock","description":"For rewards that have managed inventory, or are linked to an external inventory, this indicates that the reward is out of stock. For rewards with multiple options (e.g. product variants), this means that all options are out of stock","required":["state"],"properties":{"state":{"type":"string","const":"out_of_stock","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.5.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.5","typeLabel":"Out of stock · object"},{"type":"object","title":"Unknown","description":"The redeemable state of this reward cannot be determined. For example, `product_cart` rewards where the request does not include a current cart will have this state, since we cannot determine if applicable cart requirements are met. It may be safe to treat this reward as redeemable if you perform your own checks","required":["state"],"properties":{"state":{"type":"string","const":"unknown","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.6.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem.oneOf.6","typeLabel":"Unknown · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.can_redeem","typeLabel":"Redeemable · object | Insufficient points · object | Claim limit reached · object | Cart requirements not met · object | Max redemptions for cart reached · object | Out of stock · object | Unknown · object"},"last_claimed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this reward was last claimed by the customer, or `null` if the reward has never been claimed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.last_claimed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this reward was last claimed by the customer, or `null` if the reward has never been claimed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.last_claimed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.last_claimed_at","typeLabel":"string | null"},"claim_count":{"type":"number","description":"The number of times this reward has been claimed by the customer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.claim_count","typeLabel":"number"},"claim_limit":{"oneOf":[{"type":"object","title":"No limit","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated reward has no limit, so this customer can claim it any number of times","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.claim_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.claim_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_claims_within_interval","claim_count_within_interval","remaining_claims_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated reward has a claim limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.claim_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.claim_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.claim_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.claim_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_claims_within_interval":{"type":"integer","description":"The number of times this reward can be claimed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.claim_limit.oneOf.1.allowed_claims_within_interval","typeLabel":"integer"},"claim_count_within_interval":{"type":"integer","description":"The number of times this reward has been claimed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.claim_limit.oneOf.1.claim_count_within_interval","typeLabel":"integer"},"remaining_claims_within_interval":{"type":"integer","description":"The number of times this reward can still be claimed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.claim_limit.oneOf.1.remaining_claims_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.claim_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated reward has a limit, the customer has reached it, and the limit will never reset. This means the reward can never be claimed again by this customer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.claim_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.claim_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated reward has a limit and the customer has reached it. The customer will be able to claim the reward again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.claim_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.claim_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can claim the reward again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.claim_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.claim_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.claim_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context.claim_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["can_redeem","last_claimed_at","claim_count","claim_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this reward, such as the number of times they have claimed it, or any limit that is in effect, and if they are currently able to redeem it","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this reward, when the merchant has set one: either an image they uploaded or chose for the reward itself, or the reward's product or collection catalog image. `null` when no image is set","type":"string","uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this reward, when the merchant has set one: either an image they uploaded or chose for the reward itself, or the reward's product or collection catalog image. `null` when no image is set","type":"null","uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.2","typeLabel":"Cart variable discount · object"},{"type":"object","title":"Free shipping voucher","description":"A voucher that applies free shipping to an order","required":["id","limit","kind","properties","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this reward, which is applied per customer. Rewards with a limit set may only be claimed a set number of times in a given interval. The limit may be `null` if the reward has no limit and can therefore be claimed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this reward can be claimed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this reward, which is applied per customer. Rewards with a limit set may only be claimed a set number of times in a given interval. The limit may be `null` if the reward has no limit and can therefore be claimed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"free_shipping_voucher","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.kind","typeLabel":"string"},"properties":{"type":"object","properties":{"max_shipping":{"oneOf":[{"type":"object","description":"Free shipping will only be applied if the shipping rate is equal to or less than this amount, or `null` if there is no maximum","required":["amount","formatted"],"properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.properties.max_shipping.oneOf.0.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.properties.max_shipping.oneOf.0.formatted","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.properties.max_shipping.oneOf.0","typeLabel":"object"},{"type":"null","description":"Free shipping will only be applied if the shipping rate is equal to or less than this amount, or `null` if there is no maximum","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.properties.max_shipping.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.properties.max_shipping","typeLabel":"object | null"}},"required":["max_shipping"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.properties","typeLabel":"object"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this reward variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this reward variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this reward. For example, '$5 voucher', 'Free Water Bottle', or '$5 off next 3 subscription orders'","example":"$5 voucher","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this reward, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Spend your points on $5 off your next order","type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this reward, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Spend your points on $5 off your next order","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this reward variant is enabled. For example, some rewards are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.variant.enabled","typeLabel":"boolean"},"cost":{"oneOf":[{"type":"object","title":"Fixed cost","description":"The cost of this reward in points. Will be one of `fixed` (costs a fixed number of points) or `variable` (cost is multiplied by unit, e.g. 100 points per $1 discount)","required":["kind","points"],"properties":{"kind":{"type":"string","const":"fixed","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.variant.cost.oneOf.0.kind","typeLabel":"string"},"points":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.variant.cost.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.variant.cost.oneOf.0","typeLabel":"Fixed cost · object"},{"type":"object","title":"Variable cost","description":"The cost of this reward in points. Will be one of `fixed` (costs a fixed number of points) or `variable` (cost is multiplied by unit, e.g. 100 points per $1 discount)","required":["kind","unit","points_per_unit"],"properties":{"kind":{"type":"string","const":"variable","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.variant.cost.oneOf.1.kind","typeLabel":"string"},"unit":{"type":"string","const":"discount_amount","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.variant.cost.oneOf.1.unit","typeLabel":"string"},"points_per_unit":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.variant.cost.oneOf.1.points_per_unit","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.variant.cost.oneOf.1","typeLabel":"Variable cost · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.variant.cost","typeLabel":"Fixed cost · object | Variable cost · object"},"cost_text":{"type":"string","description":"Short, localized text indicating the cost of this reward. For example, '100 points' or '10 points per $1'","example":"100 points","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.variant.cost_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","cost","cost_text"],"additionalProperties":false,"description":"The reward variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.variant","typeLabel":"object"},"context":{"type":"object","properties":{"can_redeem":{"oneOf":[{"type":"object","title":"Redeemable","description":"An object that indicates if this reward can be redeemed by this customer. The `state` property indicates if it can be redeemed. If `state == \"redeemable\"`, the reward can be redeemed by the customer","required":["state"],"properties":{"state":{"type":"string","const":"redeemable","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.0","typeLabel":"Redeemable · object"},{"type":"object","title":"Insufficient points","description":"An object that indicates if this reward can be redeemed by this customer. The `state` property indicates if it can be redeemed. If `state == \"redeemable\"`, the reward can be redeemed by the customer","required":["state","additional_points_required"],"properties":{"state":{"type":"string","const":"insufficient_points","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.1.state","typeLabel":"string"},"additional_points_required":{"type":"number","description":"The number of additional points required before this customer can afford the reward","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.1.additional_points_required","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.1","typeLabel":"Insufficient points · object"},{"type":"object","title":"Claim limit reached","description":"An object that indicates if this reward can be redeemed by this customer. The `state` property indicates if it can be redeemed. If `state == \"redeemable\"`, the reward can be redeemed by the customer","required":["state"],"properties":{"state":{"type":"string","const":"claim_limit_reached","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.2","typeLabel":"Claim limit reached · object"},{"type":"object","title":"Cart requirements not met","description":"For rewards that have requirements based on the customer's current cart, this indicates that the customer's current cart does not meet the requirements. This can only be determined if the request included a serialized `cart` object","required":["state","cart_requirements_detail"],"properties":{"state":{"type":"string","const":"cart_requirements_not_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.3.state","typeLabel":"string"},"cart_requirements_detail":{"type":"object","properties":{"minimum_cart_total":{"oneOf":[{"type":"object","title":"No requirement","required":["state"],"properties":{"state":{"type":"string","const":"no_requirement","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.0","typeLabel":"No requirement · object"},{"type":"object","title":"Requirement met","required":["state"],"properties":{"state":{"type":"string","const":"requirement_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.1.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.1","typeLabel":"Requirement met · object"},{"type":"object","title":"Requirement not met","required":["state","additional_amount_required"],"properties":{"state":{"type":"string","const":"requirement_not_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.state","typeLabel":"string"},"additional_amount_required":{"type":"object","properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required.formatted","typeLabel":"string"}},"required":["amount","formatted"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2","typeLabel":"Requirement not met · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total","typeLabel":"No requirement · object | Requirement met · object | Requirement not met · object"},"minimum_line_item_quantity":{"oneOf":[{"type":"object","title":"No requirement","required":["state"],"properties":{"state":{"type":"string","const":"no_requirement","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.0","typeLabel":"No requirement · object"},{"type":"object","title":"Requirement met","required":["state"],"properties":{"state":{"type":"string","const":"requirement_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.1.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.1","typeLabel":"Requirement met · object"},{"type":"object","title":"Requirement not met","required":["state","additional_quantity_required"],"properties":{"state":{"type":"string","const":"requirement_not_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.2.state","typeLabel":"string"},"additional_quantity_required":{"type":"number","description":"The number of additional line items required before this requirement is met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.2.additional_quantity_required","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.2","typeLabel":"Requirement not met · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity","typeLabel":"No requirement · object | Requirement met · object | Requirement not met · object"}},"required":["minimum_cart_total","minimum_line_item_quantity"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.3.cart_requirements_detail","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.3","typeLabel":"Cart requirements not met · object"},{"type":"object","title":"Max redemptions for cart reached","description":"For rewards that have limits on how many times they can be redeemed per cart, this indicates that the customer has reached the maximum number of redemptions for the current cart","required":["state"],"properties":{"state":{"type":"string","const":"max_redemptions_for_cart_reached","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.4.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.4","typeLabel":"Max redemptions for cart reached · object"},{"type":"object","title":"Out of stock","description":"For rewards that have managed inventory, or are linked to an external inventory, this indicates that the reward is out of stock. For rewards with multiple options (e.g. product variants), this means that all options are out of stock","required":["state"],"properties":{"state":{"type":"string","const":"out_of_stock","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.5.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.5","typeLabel":"Out of stock · object"},{"type":"object","title":"Unknown","description":"The redeemable state of this reward cannot be determined. For example, `product_cart` rewards where the request does not include a current cart will have this state, since we cannot determine if applicable cart requirements are met. It may be safe to treat this reward as redeemable if you perform your own checks","required":["state"],"properties":{"state":{"type":"string","const":"unknown","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.6.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem.oneOf.6","typeLabel":"Unknown · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.can_redeem","typeLabel":"Redeemable · object | Insufficient points · object | Claim limit reached · object | Cart requirements not met · object | Max redemptions for cart reached · object | Out of stock · object | Unknown · object"},"last_claimed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this reward was last claimed by the customer, or `null` if the reward has never been claimed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.last_claimed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this reward was last claimed by the customer, or `null` if the reward has never been claimed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.last_claimed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.last_claimed_at","typeLabel":"string | null"},"claim_count":{"type":"number","description":"The number of times this reward has been claimed by the customer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.claim_count","typeLabel":"number"},"claim_limit":{"oneOf":[{"type":"object","title":"No limit","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated reward has no limit, so this customer can claim it any number of times","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.claim_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.claim_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_claims_within_interval","claim_count_within_interval","remaining_claims_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated reward has a claim limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.claim_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.claim_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.claim_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.claim_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_claims_within_interval":{"type":"integer","description":"The number of times this reward can be claimed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.claim_limit.oneOf.1.allowed_claims_within_interval","typeLabel":"integer"},"claim_count_within_interval":{"type":"integer","description":"The number of times this reward has been claimed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.claim_limit.oneOf.1.claim_count_within_interval","typeLabel":"integer"},"remaining_claims_within_interval":{"type":"integer","description":"The number of times this reward can still be claimed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.claim_limit.oneOf.1.remaining_claims_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.claim_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated reward has a limit, the customer has reached it, and the limit will never reset. This means the reward can never be claimed again by this customer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.claim_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.claim_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated reward has a limit and the customer has reached it. The customer will be able to claim the reward again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.claim_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.claim_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can claim the reward again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.claim_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.claim_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.claim_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context.claim_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["can_redeem","last_claimed_at","claim_count","claim_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this reward, such as the number of times they have claimed it, or any limit that is in effect, and if they are currently able to redeem it","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this reward, when the merchant has set one: either an image they uploaded or chose for the reward itself, or the reward's product or collection catalog image. `null` when no image is set","type":"string","uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this reward, when the merchant has set one: either an image they uploaded or chose for the reward itself, or the reward's product or collection catalog image. `null` when no image is set","type":"null","uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.3","typeLabel":"Free shipping voucher · object"},{"type":"object","title":"Product discount voucher","description":"A discount voucher that applies a reduction to a specific product","required":["id","limit","kind","properties","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this reward, which is applied per customer. Rewards with a limit set may only be claimed a set number of times in a given interval. The limit may be `null` if the reward has no limit and can therefore be claimed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this reward can be claimed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this reward, which is applied per customer. Rewards with a limit set may only be claimed a set number of times in a given interval. The limit may be `null` if the reward has no limit and can therefore be claimed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"product_discount_voucher","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.kind","typeLabel":"string"},"properties":{"type":"object","properties":{"product":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.properties.product.id","typeLabel":"string"},"image_url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.properties.product.image_url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.properties.product.image_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.properties.product.image_url","typeLabel":"string | null"},"variant_id":{"oneOf":[{"description":"The variant ID to apply the discount to. If `null`, the discount can be applied to all this product's variants","type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.properties.product.variant_id.oneOf.0","typeLabel":"string"},{"description":"The variant ID to apply the discount to. If `null`, the discount can be applied to all this product's variants","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.properties.product.variant_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.properties.product.variant_id","typeLabel":"string | null"}},"required":["id","image_url","variant_id"],"additionalProperties":false,"description":"The product that this discount applies to","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.properties.product","typeLabel":"object"},"discount":{"type":"object","properties":{"percentage":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.properties.discount.percentage","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.properties.discount.formatted","typeLabel":"string"}},"required":["percentage","formatted"],"additionalProperties":false,"description":"The discount that will apply to the product. Product discounts are always percentage based, so this will be a number from `1-100`","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.properties.discount","typeLabel":"object"}},"required":["product","discount"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.properties","typeLabel":"object"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this reward variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this reward variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this reward. For example, '$5 voucher', 'Free Water Bottle', or '$5 off next 3 subscription orders'","example":"$5 voucher","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this reward, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Spend your points on $5 off your next order","type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this reward, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Spend your points on $5 off your next order","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this reward variant is enabled. For example, some rewards are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.variant.enabled","typeLabel":"boolean"},"cost":{"oneOf":[{"type":"object","title":"Fixed cost","description":"The cost of this reward in points. Will be one of `fixed` (costs a fixed number of points) or `variable` (cost is multiplied by unit, e.g. 100 points per $1 discount)","required":["kind","points"],"properties":{"kind":{"type":"string","const":"fixed","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.variant.cost.oneOf.0.kind","typeLabel":"string"},"points":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.variant.cost.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.variant.cost.oneOf.0","typeLabel":"Fixed cost · object"},{"type":"object","title":"Variable cost","description":"The cost of this reward in points. Will be one of `fixed` (costs a fixed number of points) or `variable` (cost is multiplied by unit, e.g. 100 points per $1 discount)","required":["kind","unit","points_per_unit"],"properties":{"kind":{"type":"string","const":"variable","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.variant.cost.oneOf.1.kind","typeLabel":"string"},"unit":{"type":"string","const":"discount_amount","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.variant.cost.oneOf.1.unit","typeLabel":"string"},"points_per_unit":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.variant.cost.oneOf.1.points_per_unit","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.variant.cost.oneOf.1","typeLabel":"Variable cost · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.variant.cost","typeLabel":"Fixed cost · object | Variable cost · object"},"cost_text":{"type":"string","description":"Short, localized text indicating the cost of this reward. For example, '100 points' or '10 points per $1'","example":"100 points","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.variant.cost_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","cost","cost_text"],"additionalProperties":false,"description":"The reward variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.variant","typeLabel":"object"},"context":{"type":"object","properties":{"can_redeem":{"oneOf":[{"type":"object","title":"Redeemable","description":"An object that indicates if this reward can be redeemed by this customer. The `state` property indicates if it can be redeemed. If `state == \"redeemable\"`, the reward can be redeemed by the customer","required":["state"],"properties":{"state":{"type":"string","const":"redeemable","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.0","typeLabel":"Redeemable · object"},{"type":"object","title":"Insufficient points","description":"An object that indicates if this reward can be redeemed by this customer. The `state` property indicates if it can be redeemed. If `state == \"redeemable\"`, the reward can be redeemed by the customer","required":["state","additional_points_required"],"properties":{"state":{"type":"string","const":"insufficient_points","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.1.state","typeLabel":"string"},"additional_points_required":{"type":"number","description":"The number of additional points required before this customer can afford the reward","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.1.additional_points_required","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.1","typeLabel":"Insufficient points · object"},{"type":"object","title":"Claim limit reached","description":"An object that indicates if this reward can be redeemed by this customer. The `state` property indicates if it can be redeemed. If `state == \"redeemable\"`, the reward can be redeemed by the customer","required":["state"],"properties":{"state":{"type":"string","const":"claim_limit_reached","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.2","typeLabel":"Claim limit reached · object"},{"type":"object","title":"Cart requirements not met","description":"For rewards that have requirements based on the customer's current cart, this indicates that the customer's current cart does not meet the requirements. This can only be determined if the request included a serialized `cart` object","required":["state","cart_requirements_detail"],"properties":{"state":{"type":"string","const":"cart_requirements_not_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.3.state","typeLabel":"string"},"cart_requirements_detail":{"type":"object","properties":{"minimum_cart_total":{"oneOf":[{"type":"object","title":"No requirement","required":["state"],"properties":{"state":{"type":"string","const":"no_requirement","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.0","typeLabel":"No requirement · object"},{"type":"object","title":"Requirement met","required":["state"],"properties":{"state":{"type":"string","const":"requirement_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.1.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.1","typeLabel":"Requirement met · object"},{"type":"object","title":"Requirement not met","required":["state","additional_amount_required"],"properties":{"state":{"type":"string","const":"requirement_not_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.state","typeLabel":"string"},"additional_amount_required":{"type":"object","properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required.formatted","typeLabel":"string"}},"required":["amount","formatted"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2","typeLabel":"Requirement not met · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total","typeLabel":"No requirement · object | Requirement met · object | Requirement not met · object"},"minimum_line_item_quantity":{"oneOf":[{"type":"object","title":"No requirement","required":["state"],"properties":{"state":{"type":"string","const":"no_requirement","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.0","typeLabel":"No requirement · object"},{"type":"object","title":"Requirement met","required":["state"],"properties":{"state":{"type":"string","const":"requirement_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.1.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.1","typeLabel":"Requirement met · object"},{"type":"object","title":"Requirement not met","required":["state","additional_quantity_required"],"properties":{"state":{"type":"string","const":"requirement_not_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.2.state","typeLabel":"string"},"additional_quantity_required":{"type":"number","description":"The number of additional line items required before this requirement is met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.2.additional_quantity_required","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.2","typeLabel":"Requirement not met · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity","typeLabel":"No requirement · object | Requirement met · object | Requirement not met · object"}},"required":["minimum_cart_total","minimum_line_item_quantity"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.3.cart_requirements_detail","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.3","typeLabel":"Cart requirements not met · object"},{"type":"object","title":"Max redemptions for cart reached","description":"For rewards that have limits on how many times they can be redeemed per cart, this indicates that the customer has reached the maximum number of redemptions for the current cart","required":["state"],"properties":{"state":{"type":"string","const":"max_redemptions_for_cart_reached","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.4.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.4","typeLabel":"Max redemptions for cart reached · object"},{"type":"object","title":"Out of stock","description":"For rewards that have managed inventory, or are linked to an external inventory, this indicates that the reward is out of stock. For rewards with multiple options (e.g. product variants), this means that all options are out of stock","required":["state"],"properties":{"state":{"type":"string","const":"out_of_stock","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.5.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.5","typeLabel":"Out of stock · object"},{"type":"object","title":"Unknown","description":"The redeemable state of this reward cannot be determined. For example, `product_cart` rewards where the request does not include a current cart will have this state, since we cannot determine if applicable cart requirements are met. It may be safe to treat this reward as redeemable if you perform your own checks","required":["state"],"properties":{"state":{"type":"string","const":"unknown","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.6.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem.oneOf.6","typeLabel":"Unknown · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.can_redeem","typeLabel":"Redeemable · object | Insufficient points · object | Claim limit reached · object | Cart requirements not met · object | Max redemptions for cart reached · object | Out of stock · object | Unknown · object"},"last_claimed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this reward was last claimed by the customer, or `null` if the reward has never been claimed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.last_claimed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this reward was last claimed by the customer, or `null` if the reward has never been claimed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.last_claimed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.last_claimed_at","typeLabel":"string | null"},"claim_count":{"type":"number","description":"The number of times this reward has been claimed by the customer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.claim_count","typeLabel":"number"},"claim_limit":{"oneOf":[{"type":"object","title":"No limit","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated reward has no limit, so this customer can claim it any number of times","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.claim_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.claim_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_claims_within_interval","claim_count_within_interval","remaining_claims_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated reward has a claim limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.claim_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.claim_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.claim_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.claim_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_claims_within_interval":{"type":"integer","description":"The number of times this reward can be claimed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.claim_limit.oneOf.1.allowed_claims_within_interval","typeLabel":"integer"},"claim_count_within_interval":{"type":"integer","description":"The number of times this reward has been claimed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.claim_limit.oneOf.1.claim_count_within_interval","typeLabel":"integer"},"remaining_claims_within_interval":{"type":"integer","description":"The number of times this reward can still be claimed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.claim_limit.oneOf.1.remaining_claims_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.claim_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated reward has a limit, the customer has reached it, and the limit will never reset. This means the reward can never be claimed again by this customer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.claim_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.claim_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated reward has a limit and the customer has reached it. The customer will be able to claim the reward again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.claim_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.claim_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can claim the reward again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.claim_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.claim_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.claim_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context.claim_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["can_redeem","last_claimed_at","claim_count","claim_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this reward, such as the number of times they have claimed it, or any limit that is in effect, and if they are currently able to redeem it","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this reward, when the merchant has set one: either an image they uploaded or chose for the reward itself, or the reward's product or collection catalog image. `null` when no image is set","type":"string","uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this reward, when the merchant has set one: either an image they uploaded or chose for the reward itself, or the reward's product or collection catalog image. `null` when no image is set","type":"null","uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.4","typeLabel":"Product discount voucher · object"},{"type":"object","title":"Collection discount voucher","description":"A discount voucher that applies a reduction to one or more items in a collection","required":["id","limit","kind","properties","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this reward, which is applied per customer. Rewards with a limit set may only be claimed a set number of times in a given interval. The limit may be `null` if the reward has no limit and can therefore be claimed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this reward can be claimed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this reward, which is applied per customer. Rewards with a limit set may only be claimed a set number of times in a given interval. The limit may be `null` if the reward has no limit and can therefore be claimed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"collection_discount_voucher","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.kind","typeLabel":"string"},"properties":{"type":"object","properties":{"collection":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.properties.collection.id","typeLabel":"string"},"title":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.properties.collection.title.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.properties.collection.title.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.properties.collection.title","typeLabel":"string | null"},"url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.properties.collection.url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.properties.collection.url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.properties.collection.url","typeLabel":"string | null"}},"required":["id","title","url"],"additionalProperties":false,"description":"The collection that this discount applies to","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.properties.collection","typeLabel":"object"},"discount_type":{"type":"string","enum":["fixed","percentage"],"description":"The type of discount this voucher will apply to items in the collection","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.properties.discount_type","typeLabel":"enum\u003cstring>"},"discount":{"oneOf":[{"type":"object","description":"The discount that will apply to items in the collection. For `fixed` discounts this will be the currency amount. For `percentage` discounts, it will be a number from `1-100`","required":["amount","formatted"],"properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.properties.discount.oneOf.0.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.properties.discount.oneOf.0.formatted","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.properties.discount.oneOf.0","typeLabel":"object"},{"type":"object","description":"The discount that will apply to items in the collection. For `fixed` discounts this will be the currency amount. For `percentage` discounts, it will be a number from `1-100`","required":["percentage","formatted"],"properties":{"percentage":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.properties.discount.oneOf.1.percentage","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.properties.discount.oneOf.1.formatted","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.properties.discount.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.properties.discount","typeLabel":"object"},"minimum_spend":{"oneOf":[{"type":"object","description":"The minimum spend, if any, for the voucher to apply to the cart","required":["amount","formatted"],"example":{"amount":10,"formatted":"$10"},"properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.properties.minimum_spend.oneOf.0.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.properties.minimum_spend.oneOf.0.formatted","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.properties.minimum_spend.oneOf.0","typeLabel":"object"},{"type":"null","description":"The minimum spend, if any, for the voucher to apply to the cart","example":{"amount":10,"formatted":"$10"},"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.properties.minimum_spend.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.properties.minimum_spend","typeLabel":"object | null"}},"required":["collection","discount_type","discount","minimum_spend"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.properties","typeLabel":"object"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this reward variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this reward variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this reward. For example, '$5 voucher', 'Free Water Bottle', or '$5 off next 3 subscription orders'","example":"$5 voucher","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this reward, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Spend your points on $5 off your next order","type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this reward, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Spend your points on $5 off your next order","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this reward variant is enabled. For example, some rewards are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.variant.enabled","typeLabel":"boolean"},"cost":{"oneOf":[{"type":"object","title":"Fixed cost","description":"The cost of this reward in points. Will be one of `fixed` (costs a fixed number of points) or `variable` (cost is multiplied by unit, e.g. 100 points per $1 discount)","required":["kind","points"],"properties":{"kind":{"type":"string","const":"fixed","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.variant.cost.oneOf.0.kind","typeLabel":"string"},"points":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.variant.cost.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.variant.cost.oneOf.0","typeLabel":"Fixed cost · object"},{"type":"object","title":"Variable cost","description":"The cost of this reward in points. Will be one of `fixed` (costs a fixed number of points) or `variable` (cost is multiplied by unit, e.g. 100 points per $1 discount)","required":["kind","unit","points_per_unit"],"properties":{"kind":{"type":"string","const":"variable","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.variant.cost.oneOf.1.kind","typeLabel":"string"},"unit":{"type":"string","const":"discount_amount","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.variant.cost.oneOf.1.unit","typeLabel":"string"},"points_per_unit":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.variant.cost.oneOf.1.points_per_unit","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.variant.cost.oneOf.1","typeLabel":"Variable cost · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.variant.cost","typeLabel":"Fixed cost · object | Variable cost · object"},"cost_text":{"type":"string","description":"Short, localized text indicating the cost of this reward. For example, '100 points' or '10 points per $1'","example":"100 points","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.variant.cost_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","cost","cost_text"],"additionalProperties":false,"description":"The reward variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.variant","typeLabel":"object"},"context":{"type":"object","properties":{"can_redeem":{"oneOf":[{"type":"object","title":"Redeemable","description":"An object that indicates if this reward can be redeemed by this customer. The `state` property indicates if it can be redeemed. If `state == \"redeemable\"`, the reward can be redeemed by the customer","required":["state"],"properties":{"state":{"type":"string","const":"redeemable","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.0","typeLabel":"Redeemable · object"},{"type":"object","title":"Insufficient points","description":"An object that indicates if this reward can be redeemed by this customer. The `state` property indicates if it can be redeemed. If `state == \"redeemable\"`, the reward can be redeemed by the customer","required":["state","additional_points_required"],"properties":{"state":{"type":"string","const":"insufficient_points","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.1.state","typeLabel":"string"},"additional_points_required":{"type":"number","description":"The number of additional points required before this customer can afford the reward","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.1.additional_points_required","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.1","typeLabel":"Insufficient points · object"},{"type":"object","title":"Claim limit reached","description":"An object that indicates if this reward can be redeemed by this customer. The `state` property indicates if it can be redeemed. If `state == \"redeemable\"`, the reward can be redeemed by the customer","required":["state"],"properties":{"state":{"type":"string","const":"claim_limit_reached","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.2","typeLabel":"Claim limit reached · object"},{"type":"object","title":"Cart requirements not met","description":"For rewards that have requirements based on the customer's current cart, this indicates that the customer's current cart does not meet the requirements. This can only be determined if the request included a serialized `cart` object","required":["state","cart_requirements_detail"],"properties":{"state":{"type":"string","const":"cart_requirements_not_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.3.state","typeLabel":"string"},"cart_requirements_detail":{"type":"object","properties":{"minimum_cart_total":{"oneOf":[{"type":"object","title":"No requirement","required":["state"],"properties":{"state":{"type":"string","const":"no_requirement","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.0","typeLabel":"No requirement · object"},{"type":"object","title":"Requirement met","required":["state"],"properties":{"state":{"type":"string","const":"requirement_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.1.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.1","typeLabel":"Requirement met · object"},{"type":"object","title":"Requirement not met","required":["state","additional_amount_required"],"properties":{"state":{"type":"string","const":"requirement_not_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.state","typeLabel":"string"},"additional_amount_required":{"type":"object","properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required.formatted","typeLabel":"string"}},"required":["amount","formatted"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2","typeLabel":"Requirement not met · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total","typeLabel":"No requirement · object | Requirement met · object | Requirement not met · object"},"minimum_line_item_quantity":{"oneOf":[{"type":"object","title":"No requirement","required":["state"],"properties":{"state":{"type":"string","const":"no_requirement","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.0","typeLabel":"No requirement · object"},{"type":"object","title":"Requirement met","required":["state"],"properties":{"state":{"type":"string","const":"requirement_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.1.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.1","typeLabel":"Requirement met · object"},{"type":"object","title":"Requirement not met","required":["state","additional_quantity_required"],"properties":{"state":{"type":"string","const":"requirement_not_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.2.state","typeLabel":"string"},"additional_quantity_required":{"type":"number","description":"The number of additional line items required before this requirement is met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.2.additional_quantity_required","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.2","typeLabel":"Requirement not met · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity","typeLabel":"No requirement · object | Requirement met · object | Requirement not met · object"}},"required":["minimum_cart_total","minimum_line_item_quantity"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.3.cart_requirements_detail","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.3","typeLabel":"Cart requirements not met · object"},{"type":"object","title":"Max redemptions for cart reached","description":"For rewards that have limits on how many times they can be redeemed per cart, this indicates that the customer has reached the maximum number of redemptions for the current cart","required":["state"],"properties":{"state":{"type":"string","const":"max_redemptions_for_cart_reached","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.4.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.4","typeLabel":"Max redemptions for cart reached · object"},{"type":"object","title":"Out of stock","description":"For rewards that have managed inventory, or are linked to an external inventory, this indicates that the reward is out of stock. For rewards with multiple options (e.g. product variants), this means that all options are out of stock","required":["state"],"properties":{"state":{"type":"string","const":"out_of_stock","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.5.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.5","typeLabel":"Out of stock · object"},{"type":"object","title":"Unknown","description":"The redeemable state of this reward cannot be determined. For example, `product_cart` rewards where the request does not include a current cart will have this state, since we cannot determine if applicable cart requirements are met. It may be safe to treat this reward as redeemable if you perform your own checks","required":["state"],"properties":{"state":{"type":"string","const":"unknown","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.6.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem.oneOf.6","typeLabel":"Unknown · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.can_redeem","typeLabel":"Redeemable · object | Insufficient points · object | Claim limit reached · object | Cart requirements not met · object | Max redemptions for cart reached · object | Out of stock · object | Unknown · object"},"last_claimed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this reward was last claimed by the customer, or `null` if the reward has never been claimed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.last_claimed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this reward was last claimed by the customer, or `null` if the reward has never been claimed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.last_claimed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.last_claimed_at","typeLabel":"string | null"},"claim_count":{"type":"number","description":"The number of times this reward has been claimed by the customer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.claim_count","typeLabel":"number"},"claim_limit":{"oneOf":[{"type":"object","title":"No limit","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated reward has no limit, so this customer can claim it any number of times","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.claim_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.claim_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_claims_within_interval","claim_count_within_interval","remaining_claims_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated reward has a claim limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.claim_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.claim_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.claim_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.claim_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_claims_within_interval":{"type":"integer","description":"The number of times this reward can be claimed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.claim_limit.oneOf.1.allowed_claims_within_interval","typeLabel":"integer"},"claim_count_within_interval":{"type":"integer","description":"The number of times this reward has been claimed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.claim_limit.oneOf.1.claim_count_within_interval","typeLabel":"integer"},"remaining_claims_within_interval":{"type":"integer","description":"The number of times this reward can still be claimed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.claim_limit.oneOf.1.remaining_claims_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.claim_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated reward has a limit, the customer has reached it, and the limit will never reset. This means the reward can never be claimed again by this customer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.claim_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.claim_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated reward has a limit and the customer has reached it. The customer will be able to claim the reward again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.claim_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.claim_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can claim the reward again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.claim_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.claim_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.claim_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context.claim_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["can_redeem","last_claimed_at","claim_count","claim_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this reward, such as the number of times they have claimed it, or any limit that is in effect, and if they are currently able to redeem it","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this reward, when the merchant has set one: either an image they uploaded or chose for the reward itself, or the reward's product or collection catalog image. `null` when no image is set","type":"string","uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this reward, when the merchant has set one: either an image they uploaded or chose for the reward itself, or the reward's product or collection catalog image. `null` when no image is set","type":"null","uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.5","typeLabel":"Collection discount voucher · object"},{"type":"object","title":"Product cart","description":"A free product that is added to the cart","required":["id","limit","kind","properties","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this reward, which is applied per customer. Rewards with a limit set may only be claimed a set number of times in a given interval. The limit may be `null` if the reward has no limit and can therefore be claimed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this reward can be claimed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this reward, which is applied per customer. Rewards with a limit set may only be claimed a set number of times in a given interval. The limit may be `null` if the reward has no limit and can therefore be claimed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"product_cart","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.kind","typeLabel":"string"},"properties":{"type":"object","properties":{"product":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.product.id","typeLabel":"string"},"handle":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.product.handle.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.product.handle.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.product.handle","typeLabel":"string | null"},"title":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.product.title.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.product.title.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.product.title","typeLabel":"string | null"},"url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.product.url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.product.url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.product.url","typeLabel":"string | null"},"image_url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.product.image_url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.product.image_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.product.image_url","typeLabel":"string | null"},"variants":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.product.variants.items.[INDEX].id","typeLabel":"string"},"title":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.product.variants.items.[INDEX].title.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.product.variants.items.[INDEX].title.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.product.variants.items.[INDEX].title","typeLabel":"string | null"},"inventory_count":{"oneOf":[{"description":"The current inventory count of this product variant, or `null` if inventory is not tracked. If the count is zero, you should ensure it is not selectable by customers when redeeming the reward","type":"integer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.product.variants.items.[INDEX].inventory_count.oneOf.0","typeLabel":"integer"},{"description":"The current inventory count of this product variant, or `null` if inventory is not tracked. If the count is zero, you should ensure it is not selectable by customers when redeeming the reward","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.product.variants.items.[INDEX].inventory_count.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.product.variants.items.[INDEX].inventory_count","typeLabel":"integer | null"},"sort_key":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.product.variants.items.[INDEX].sort_key","typeLabel":"number"}},"required":["id","title","inventory_count","sort_key"],"additionalProperties":false,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.product.variants.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.product.variants","typeLabel":"object[]"}},"required":["id","handle","title","url","image_url","variants"],"additionalProperties":false,"description":"The product that can be added to the cart. If the product has more than one variant, the shopper should be able to choose which one to redeem","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.product","typeLabel":"object"},"max_redemptions_per_cart":{"oneOf":[{"description":"The maximum number of times this product can be redeemed per cart, or `null` if there is no limit","type":"integer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.max_redemptions_per_cart.oneOf.0","typeLabel":"integer"},{"description":"The maximum number of times this product can be redeemed per cart, or `null` if there is no limit","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.max_redemptions_per_cart.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.max_redemptions_per_cart","typeLabel":"integer | null"},"cart_requirements":{"type":"object","properties":{"minimum_cart_total":{"oneOf":[{"type":"object","description":"The cart total must be equal to or greater than this amount, or `null` if there is no minimum total","required":["amount","formatted"],"properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.cart_requirements.minimum_cart_total.oneOf.0.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.cart_requirements.minimum_cart_total.oneOf.0.formatted","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.cart_requirements.minimum_cart_total.oneOf.0","typeLabel":"object"},{"type":"null","description":"The cart total must be equal to or greater than this amount, or `null` if there is no minimum total","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.cart_requirements.minimum_cart_total.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.cart_requirements.minimum_cart_total","typeLabel":"object | null"},"minimum_line_item_count":{"oneOf":[{"description":"The cart must contain at least this number of line items, or `null` if there is no required line item count","type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.cart_requirements.minimum_line_item_count.oneOf.0","typeLabel":"number"},{"description":"The cart must contain at least this number of line items, or `null` if there is no required line item count","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.cart_requirements.minimum_line_item_count.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.cart_requirements.minimum_line_item_count","typeLabel":"number | null"}},"required":["minimum_cart_total","minimum_line_item_count"],"additionalProperties":false,"description":"Cart requirements that must be met before the reward can be redeemed","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties.cart_requirements","typeLabel":"object"}},"required":["product","max_redemptions_per_cart","cart_requirements"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.properties","typeLabel":"object"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this reward variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this reward variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this reward. For example, '$5 voucher', 'Free Water Bottle', or '$5 off next 3 subscription orders'","example":"$5 voucher","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this reward, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Spend your points on $5 off your next order","type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this reward, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Spend your points on $5 off your next order","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this reward variant is enabled. For example, some rewards are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.variant.enabled","typeLabel":"boolean"},"cost":{"oneOf":[{"type":"object","title":"Fixed cost","description":"The cost of this reward in points. Will be one of `fixed` (costs a fixed number of points) or `variable` (cost is multiplied by unit, e.g. 100 points per $1 discount)","required":["kind","points"],"properties":{"kind":{"type":"string","const":"fixed","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.variant.cost.oneOf.0.kind","typeLabel":"string"},"points":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.variant.cost.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.variant.cost.oneOf.0","typeLabel":"Fixed cost · object"},{"type":"object","title":"Variable cost","description":"The cost of this reward in points. Will be one of `fixed` (costs a fixed number of points) or `variable` (cost is multiplied by unit, e.g. 100 points per $1 discount)","required":["kind","unit","points_per_unit"],"properties":{"kind":{"type":"string","const":"variable","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.variant.cost.oneOf.1.kind","typeLabel":"string"},"unit":{"type":"string","const":"discount_amount","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.variant.cost.oneOf.1.unit","typeLabel":"string"},"points_per_unit":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.variant.cost.oneOf.1.points_per_unit","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.variant.cost.oneOf.1","typeLabel":"Variable cost · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.variant.cost","typeLabel":"Fixed cost · object | Variable cost · object"},"cost_text":{"type":"string","description":"Short, localized text indicating the cost of this reward. For example, '100 points' or '10 points per $1'","example":"100 points","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.variant.cost_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","cost","cost_text"],"additionalProperties":false,"description":"The reward variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.variant","typeLabel":"object"},"context":{"type":"object","properties":{"can_redeem":{"oneOf":[{"type":"object","title":"Redeemable","description":"An object that indicates if this reward can be redeemed by this customer. The `state` property indicates if it can be redeemed. If `state == \"redeemable\"`, the reward can be redeemed by the customer","required":["state"],"properties":{"state":{"type":"string","const":"redeemable","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.0","typeLabel":"Redeemable · object"},{"type":"object","title":"Insufficient points","description":"An object that indicates if this reward can be redeemed by this customer. The `state` property indicates if it can be redeemed. If `state == \"redeemable\"`, the reward can be redeemed by the customer","required":["state","additional_points_required"],"properties":{"state":{"type":"string","const":"insufficient_points","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.1.state","typeLabel":"string"},"additional_points_required":{"type":"number","description":"The number of additional points required before this customer can afford the reward","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.1.additional_points_required","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.1","typeLabel":"Insufficient points · object"},{"type":"object","title":"Claim limit reached","description":"An object that indicates if this reward can be redeemed by this customer. The `state` property indicates if it can be redeemed. If `state == \"redeemable\"`, the reward can be redeemed by the customer","required":["state"],"properties":{"state":{"type":"string","const":"claim_limit_reached","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.2","typeLabel":"Claim limit reached · object"},{"type":"object","title":"Cart requirements not met","description":"For rewards that have requirements based on the customer's current cart, this indicates that the customer's current cart does not meet the requirements. This can only be determined if the request included a serialized `cart` object","required":["state","cart_requirements_detail"],"properties":{"state":{"type":"string","const":"cart_requirements_not_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.3.state","typeLabel":"string"},"cart_requirements_detail":{"type":"object","properties":{"minimum_cart_total":{"oneOf":[{"type":"object","title":"No requirement","required":["state"],"properties":{"state":{"type":"string","const":"no_requirement","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.0","typeLabel":"No requirement · object"},{"type":"object","title":"Requirement met","required":["state"],"properties":{"state":{"type":"string","const":"requirement_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.1.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.1","typeLabel":"Requirement met · object"},{"type":"object","title":"Requirement not met","required":["state","additional_amount_required"],"properties":{"state":{"type":"string","const":"requirement_not_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.state","typeLabel":"string"},"additional_amount_required":{"type":"object","properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required.formatted","typeLabel":"string"}},"required":["amount","formatted"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2","typeLabel":"Requirement not met · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total","typeLabel":"No requirement · object | Requirement met · object | Requirement not met · object"},"minimum_line_item_quantity":{"oneOf":[{"type":"object","title":"No requirement","required":["state"],"properties":{"state":{"type":"string","const":"no_requirement","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.0","typeLabel":"No requirement · object"},{"type":"object","title":"Requirement met","required":["state"],"properties":{"state":{"type":"string","const":"requirement_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.1.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.1","typeLabel":"Requirement met · object"},{"type":"object","title":"Requirement not met","required":["state","additional_quantity_required"],"properties":{"state":{"type":"string","const":"requirement_not_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.2.state","typeLabel":"string"},"additional_quantity_required":{"type":"number","description":"The number of additional line items required before this requirement is met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.2.additional_quantity_required","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.2","typeLabel":"Requirement not met · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity","typeLabel":"No requirement · object | Requirement met · object | Requirement not met · object"}},"required":["minimum_cart_total","minimum_line_item_quantity"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.3.cart_requirements_detail","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.3","typeLabel":"Cart requirements not met · object"},{"type":"object","title":"Max redemptions for cart reached","description":"For rewards that have limits on how many times they can be redeemed per cart, this indicates that the customer has reached the maximum number of redemptions for the current cart","required":["state"],"properties":{"state":{"type":"string","const":"max_redemptions_for_cart_reached","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.4.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.4","typeLabel":"Max redemptions for cart reached · object"},{"type":"object","title":"Out of stock","description":"For rewards that have managed inventory, or are linked to an external inventory, this indicates that the reward is out of stock. For rewards with multiple options (e.g. product variants), this means that all options are out of stock","required":["state"],"properties":{"state":{"type":"string","const":"out_of_stock","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.5.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.5","typeLabel":"Out of stock · object"},{"type":"object","title":"Unknown","description":"The redeemable state of this reward cannot be determined. For example, `product_cart` rewards where the request does not include a current cart will have this state, since we cannot determine if applicable cart requirements are met. It may be safe to treat this reward as redeemable if you perform your own checks","required":["state"],"properties":{"state":{"type":"string","const":"unknown","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.6.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem.oneOf.6","typeLabel":"Unknown · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.can_redeem","typeLabel":"Redeemable · object | Insufficient points · object | Claim limit reached · object | Cart requirements not met · object | Max redemptions for cart reached · object | Out of stock · object | Unknown · object"},"last_claimed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this reward was last claimed by the customer, or `null` if the reward has never been claimed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.last_claimed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this reward was last claimed by the customer, or `null` if the reward has never been claimed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.last_claimed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.last_claimed_at","typeLabel":"string | null"},"claim_count":{"type":"number","description":"The number of times this reward has been claimed by the customer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.claim_count","typeLabel":"number"},"claim_limit":{"oneOf":[{"type":"object","title":"No limit","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated reward has no limit, so this customer can claim it any number of times","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.claim_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.claim_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_claims_within_interval","claim_count_within_interval","remaining_claims_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated reward has a claim limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.claim_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.claim_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.claim_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.claim_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_claims_within_interval":{"type":"integer","description":"The number of times this reward can be claimed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.claim_limit.oneOf.1.allowed_claims_within_interval","typeLabel":"integer"},"claim_count_within_interval":{"type":"integer","description":"The number of times this reward has been claimed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.claim_limit.oneOf.1.claim_count_within_interval","typeLabel":"integer"},"remaining_claims_within_interval":{"type":"integer","description":"The number of times this reward can still be claimed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.claim_limit.oneOf.1.remaining_claims_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.claim_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated reward has a limit, the customer has reached it, and the limit will never reset. This means the reward can never be claimed again by this customer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.claim_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.claim_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated reward has a limit and the customer has reached it. The customer will be able to claim the reward again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.claim_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.claim_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can claim the reward again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.claim_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.claim_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.claim_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context.claim_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["can_redeem","last_claimed_at","claim_count","claim_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this reward, such as the number of times they have claimed it, or any limit that is in effect, and if they are currently able to redeem it","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this reward, when the merchant has set one: either an image they uploaded or chose for the reward itself, or the reward's product or collection catalog image. `null` when no image is set","type":"string","uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this reward, when the merchant has set one: either an image they uploaded or chose for the reward itself, or the reward's product or collection catalog image. `null` when no image is set","type":"null","uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.6","typeLabel":"Product cart · object"},{"type":"object","title":"Active subscription discount voucher","description":"A discount that is applied to one or more upcoming recurring subscription orders","required":["id","limit","kind","properties","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this reward, which is applied per customer. Rewards with a limit set may only be claimed a set number of times in a given interval. The limit may be `null` if the reward has no limit and can therefore be claimed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this reward can be claimed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this reward, which is applied per customer. Rewards with a limit set may only be claimed a set number of times in a given interval. The limit may be `null` if the reward has no limit and can therefore be claimed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"active_subscription_discount_voucher","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.kind","typeLabel":"string"},"properties":{"type":"object","properties":{"discount_type":{"type":"string","enum":["fixed","percentage"],"description":"The type of discount this voucher will apply to next order","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.properties.discount_type","typeLabel":"enum\u003cstring>"},"discount":{"oneOf":[{"type":"object","description":"The discount that will apply to the next order. For `fixed` discounts this will be the currency amount. For `percentage` discounts, it will be a number from `1-100`","required":["amount","formatted"],"properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.properties.discount.oneOf.0.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.properties.discount.oneOf.0.formatted","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.properties.discount.oneOf.0","typeLabel":"object"},{"type":"object","description":"The discount that will apply to the next order. For `fixed` discounts this will be the currency amount. For `percentage` discounts, it will be a number from `1-100`","required":["percentage","formatted"],"properties":{"percentage":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.properties.discount.oneOf.1.percentage","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.properties.discount.oneOf.1.formatted","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.properties.discount.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.properties.discount","typeLabel":"object"},"recurring_cycle_limit":{"oneOf":[{"description":"The number of recurring orders this discount will apply to. If `null`, the discount will be applied to any number of orders for as long as it is active","type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.properties.recurring_cycle_limit.oneOf.0","typeLabel":"number"},{"description":"The number of recurring orders this discount will apply to. If `null`, the discount will be applied to any number of orders for as long as it is active","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.properties.recurring_cycle_limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.properties.recurring_cycle_limit","typeLabel":"number | null"}},"required":["discount_type","discount","recurring_cycle_limit"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.properties","typeLabel":"object"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this reward variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this reward variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this reward. For example, '$5 voucher', 'Free Water Bottle', or '$5 off next 3 subscription orders'","example":"$5 voucher","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this reward, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Spend your points on $5 off your next order","type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this reward, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Spend your points on $5 off your next order","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this reward variant is enabled. For example, some rewards are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.variant.enabled","typeLabel":"boolean"},"cost":{"oneOf":[{"type":"object","title":"Fixed cost","description":"The cost of this reward in points. Will be one of `fixed` (costs a fixed number of points) or `variable` (cost is multiplied by unit, e.g. 100 points per $1 discount)","required":["kind","points"],"properties":{"kind":{"type":"string","const":"fixed","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.variant.cost.oneOf.0.kind","typeLabel":"string"},"points":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.variant.cost.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.variant.cost.oneOf.0","typeLabel":"Fixed cost · object"},{"type":"object","title":"Variable cost","description":"The cost of this reward in points. Will be one of `fixed` (costs a fixed number of points) or `variable` (cost is multiplied by unit, e.g. 100 points per $1 discount)","required":["kind","unit","points_per_unit"],"properties":{"kind":{"type":"string","const":"variable","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.variant.cost.oneOf.1.kind","typeLabel":"string"},"unit":{"type":"string","const":"discount_amount","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.variant.cost.oneOf.1.unit","typeLabel":"string"},"points_per_unit":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.variant.cost.oneOf.1.points_per_unit","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.variant.cost.oneOf.1","typeLabel":"Variable cost · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.variant.cost","typeLabel":"Fixed cost · object | Variable cost · object"},"cost_text":{"type":"string","description":"Short, localized text indicating the cost of this reward. For example, '100 points' or '10 points per $1'","example":"100 points","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.variant.cost_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","cost","cost_text"],"additionalProperties":false,"description":"The reward variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.variant","typeLabel":"object"},"context":{"type":"object","properties":{"can_redeem":{"oneOf":[{"type":"object","title":"Redeemable","description":"An object that indicates if this reward can be redeemed by this customer. The `state` property indicates if it can be redeemed. If `state == \"redeemable\"`, the reward can be redeemed by the customer","required":["state"],"properties":{"state":{"type":"string","const":"redeemable","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.0","typeLabel":"Redeemable · object"},{"type":"object","title":"Insufficient points","description":"An object that indicates if this reward can be redeemed by this customer. The `state` property indicates if it can be redeemed. If `state == \"redeemable\"`, the reward can be redeemed by the customer","required":["state","additional_points_required"],"properties":{"state":{"type":"string","const":"insufficient_points","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.1.state","typeLabel":"string"},"additional_points_required":{"type":"number","description":"The number of additional points required before this customer can afford the reward","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.1.additional_points_required","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.1","typeLabel":"Insufficient points · object"},{"type":"object","title":"Claim limit reached","description":"An object that indicates if this reward can be redeemed by this customer. The `state` property indicates if it can be redeemed. If `state == \"redeemable\"`, the reward can be redeemed by the customer","required":["state"],"properties":{"state":{"type":"string","const":"claim_limit_reached","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.2","typeLabel":"Claim limit reached · object"},{"type":"object","title":"Cart requirements not met","description":"For rewards that have requirements based on the customer's current cart, this indicates that the customer's current cart does not meet the requirements. This can only be determined if the request included a serialized `cart` object","required":["state","cart_requirements_detail"],"properties":{"state":{"type":"string","const":"cart_requirements_not_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.3.state","typeLabel":"string"},"cart_requirements_detail":{"type":"object","properties":{"minimum_cart_total":{"oneOf":[{"type":"object","title":"No requirement","required":["state"],"properties":{"state":{"type":"string","const":"no_requirement","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.0","typeLabel":"No requirement · object"},{"type":"object","title":"Requirement met","required":["state"],"properties":{"state":{"type":"string","const":"requirement_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.1.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.1","typeLabel":"Requirement met · object"},{"type":"object","title":"Requirement not met","required":["state","additional_amount_required"],"properties":{"state":{"type":"string","const":"requirement_not_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.state","typeLabel":"string"},"additional_amount_required":{"type":"object","properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required.formatted","typeLabel":"string"}},"required":["amount","formatted"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2","typeLabel":"Requirement not met · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total","typeLabel":"No requirement · object | Requirement met · object | Requirement not met · object"},"minimum_line_item_quantity":{"oneOf":[{"type":"object","title":"No requirement","required":["state"],"properties":{"state":{"type":"string","const":"no_requirement","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.0","typeLabel":"No requirement · object"},{"type":"object","title":"Requirement met","required":["state"],"properties":{"state":{"type":"string","const":"requirement_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.1.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.1","typeLabel":"Requirement met · object"},{"type":"object","title":"Requirement not met","required":["state","additional_quantity_required"],"properties":{"state":{"type":"string","const":"requirement_not_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.2.state","typeLabel":"string"},"additional_quantity_required":{"type":"number","description":"The number of additional line items required before this requirement is met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.2.additional_quantity_required","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.2","typeLabel":"Requirement not met · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity","typeLabel":"No requirement · object | Requirement met · object | Requirement not met · object"}},"required":["minimum_cart_total","minimum_line_item_quantity"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.3.cart_requirements_detail","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.3","typeLabel":"Cart requirements not met · object"},{"type":"object","title":"Max redemptions for cart reached","description":"For rewards that have limits on how many times they can be redeemed per cart, this indicates that the customer has reached the maximum number of redemptions for the current cart","required":["state"],"properties":{"state":{"type":"string","const":"max_redemptions_for_cart_reached","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.4.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.4","typeLabel":"Max redemptions for cart reached · object"},{"type":"object","title":"Out of stock","description":"For rewards that have managed inventory, or are linked to an external inventory, this indicates that the reward is out of stock. For rewards with multiple options (e.g. product variants), this means that all options are out of stock","required":["state"],"properties":{"state":{"type":"string","const":"out_of_stock","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.5.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.5","typeLabel":"Out of stock · object"},{"type":"object","title":"Unknown","description":"The redeemable state of this reward cannot be determined. For example, `product_cart` rewards where the request does not include a current cart will have this state, since we cannot determine if applicable cart requirements are met. It may be safe to treat this reward as redeemable if you perform your own checks","required":["state"],"properties":{"state":{"type":"string","const":"unknown","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.6.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem.oneOf.6","typeLabel":"Unknown · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.can_redeem","typeLabel":"Redeemable · object | Insufficient points · object | Claim limit reached · object | Cart requirements not met · object | Max redemptions for cart reached · object | Out of stock · object | Unknown · object"},"last_claimed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this reward was last claimed by the customer, or `null` if the reward has never been claimed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.last_claimed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this reward was last claimed by the customer, or `null` if the reward has never been claimed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.last_claimed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.last_claimed_at","typeLabel":"string | null"},"claim_count":{"type":"number","description":"The number of times this reward has been claimed by the customer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.claim_count","typeLabel":"number"},"claim_limit":{"oneOf":[{"type":"object","title":"No limit","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated reward has no limit, so this customer can claim it any number of times","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.claim_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.claim_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_claims_within_interval","claim_count_within_interval","remaining_claims_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated reward has a claim limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.claim_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.claim_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.claim_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.claim_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_claims_within_interval":{"type":"integer","description":"The number of times this reward can be claimed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.claim_limit.oneOf.1.allowed_claims_within_interval","typeLabel":"integer"},"claim_count_within_interval":{"type":"integer","description":"The number of times this reward has been claimed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.claim_limit.oneOf.1.claim_count_within_interval","typeLabel":"integer"},"remaining_claims_within_interval":{"type":"integer","description":"The number of times this reward can still be claimed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.claim_limit.oneOf.1.remaining_claims_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.claim_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated reward has a limit, the customer has reached it, and the limit will never reset. This means the reward can never be claimed again by this customer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.claim_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.claim_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated reward has a limit and the customer has reached it. The customer will be able to claim the reward again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.claim_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.claim_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can claim the reward again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.claim_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.claim_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.claim_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context.claim_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["can_redeem","last_claimed_at","claim_count","claim_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this reward, such as the number of times they have claimed it, or any limit that is in effect, and if they are currently able to redeem it","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this reward, when the merchant has set one: either an image they uploaded or chose for the reward itself, or the reward's product or collection catalog image. `null` when no image is set","type":"string","uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this reward, when the merchant has set one: either an image they uploaded or chose for the reward itself, or the reward's product or collection catalog image. `null` when no image is set","type":"null","uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.7","typeLabel":"Active subscription discount voucher · object"},{"type":"object","title":"Active subscription product","description":"A free product that is added to the next recurring subscription order","required":["id","limit","kind","properties","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this reward, which is applied per customer. Rewards with a limit set may only be claimed a set number of times in a given interval. The limit may be `null` if the reward has no limit and can therefore be claimed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this reward can be claimed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this reward, which is applied per customer. Rewards with a limit set may only be claimed a set number of times in a given interval. The limit may be `null` if the reward has no limit and can therefore be claimed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"active_subscription_product","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.kind","typeLabel":"string"},"properties":{"type":"object","properties":{"product":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.properties.product.id","typeLabel":"string"},"handle":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.properties.product.handle.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.properties.product.handle.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.properties.product.handle","typeLabel":"string | null"},"title":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.properties.product.title.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.properties.product.title.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.properties.product.title","typeLabel":"string | null"},"url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.properties.product.url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.properties.product.url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.properties.product.url","typeLabel":"string | null"},"image_url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.properties.product.image_url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.properties.product.image_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.properties.product.image_url","typeLabel":"string | null"},"variants":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.properties.product.variants.items.[INDEX].id","typeLabel":"string"},"title":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.properties.product.variants.items.[INDEX].title.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.properties.product.variants.items.[INDEX].title.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.properties.product.variants.items.[INDEX].title","typeLabel":"string | null"},"inventory_count":{"oneOf":[{"description":"The current inventory count of this product variant, or `null` if inventory is not tracked. If the count is zero, you should ensure it is not selectable by customers when redeeming the reward","type":"integer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.properties.product.variants.items.[INDEX].inventory_count.oneOf.0","typeLabel":"integer"},{"description":"The current inventory count of this product variant, or `null` if inventory is not tracked. If the count is zero, you should ensure it is not selectable by customers when redeeming the reward","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.properties.product.variants.items.[INDEX].inventory_count.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.properties.product.variants.items.[INDEX].inventory_count","typeLabel":"integer | null"},"sort_key":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.properties.product.variants.items.[INDEX].sort_key","typeLabel":"number"}},"required":["id","title","inventory_count","sort_key"],"additionalProperties":false,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.properties.product.variants.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.properties.product.variants","typeLabel":"object[]"}},"required":["id","handle","title","url","image_url","variants"],"additionalProperties":false,"description":"The product that can be added to an active subscription. If the product has more than one variant, the shopper should be able to choose which one to redeem","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.properties.product","typeLabel":"object"}},"required":["product"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.properties","typeLabel":"object"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this reward variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this reward variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this reward. For example, '$5 voucher', 'Free Water Bottle', or '$5 off next 3 subscription orders'","example":"$5 voucher","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this reward, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Spend your points on $5 off your next order","type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this reward, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Spend your points on $5 off your next order","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this reward variant is enabled. For example, some rewards are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.variant.enabled","typeLabel":"boolean"},"cost":{"oneOf":[{"type":"object","title":"Fixed cost","description":"The cost of this reward in points. Will be one of `fixed` (costs a fixed number of points) or `variable` (cost is multiplied by unit, e.g. 100 points per $1 discount)","required":["kind","points"],"properties":{"kind":{"type":"string","const":"fixed","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.variant.cost.oneOf.0.kind","typeLabel":"string"},"points":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.variant.cost.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.variant.cost.oneOf.0","typeLabel":"Fixed cost · object"},{"type":"object","title":"Variable cost","description":"The cost of this reward in points. Will be one of `fixed` (costs a fixed number of points) or `variable` (cost is multiplied by unit, e.g. 100 points per $1 discount)","required":["kind","unit","points_per_unit"],"properties":{"kind":{"type":"string","const":"variable","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.variant.cost.oneOf.1.kind","typeLabel":"string"},"unit":{"type":"string","const":"discount_amount","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.variant.cost.oneOf.1.unit","typeLabel":"string"},"points_per_unit":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.variant.cost.oneOf.1.points_per_unit","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.variant.cost.oneOf.1","typeLabel":"Variable cost · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.variant.cost","typeLabel":"Fixed cost · object | Variable cost · object"},"cost_text":{"type":"string","description":"Short, localized text indicating the cost of this reward. For example, '100 points' or '10 points per $1'","example":"100 points","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.variant.cost_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","cost","cost_text"],"additionalProperties":false,"description":"The reward variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.variant","typeLabel":"object"},"context":{"type":"object","properties":{"can_redeem":{"oneOf":[{"type":"object","title":"Redeemable","description":"An object that indicates if this reward can be redeemed by this customer. The `state` property indicates if it can be redeemed. If `state == \"redeemable\"`, the reward can be redeemed by the customer","required":["state"],"properties":{"state":{"type":"string","const":"redeemable","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.0","typeLabel":"Redeemable · object"},{"type":"object","title":"Insufficient points","description":"An object that indicates if this reward can be redeemed by this customer. The `state` property indicates if it can be redeemed. If `state == \"redeemable\"`, the reward can be redeemed by the customer","required":["state","additional_points_required"],"properties":{"state":{"type":"string","const":"insufficient_points","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.1.state","typeLabel":"string"},"additional_points_required":{"type":"number","description":"The number of additional points required before this customer can afford the reward","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.1.additional_points_required","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.1","typeLabel":"Insufficient points · object"},{"type":"object","title":"Claim limit reached","description":"An object that indicates if this reward can be redeemed by this customer. The `state` property indicates if it can be redeemed. If `state == \"redeemable\"`, the reward can be redeemed by the customer","required":["state"],"properties":{"state":{"type":"string","const":"claim_limit_reached","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.2","typeLabel":"Claim limit reached · object"},{"type":"object","title":"Cart requirements not met","description":"For rewards that have requirements based on the customer's current cart, this indicates that the customer's current cart does not meet the requirements. This can only be determined if the request included a serialized `cart` object","required":["state","cart_requirements_detail"],"properties":{"state":{"type":"string","const":"cart_requirements_not_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.3.state","typeLabel":"string"},"cart_requirements_detail":{"type":"object","properties":{"minimum_cart_total":{"oneOf":[{"type":"object","title":"No requirement","required":["state"],"properties":{"state":{"type":"string","const":"no_requirement","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.0","typeLabel":"No requirement · object"},{"type":"object","title":"Requirement met","required":["state"],"properties":{"state":{"type":"string","const":"requirement_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.1.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.1","typeLabel":"Requirement met · object"},{"type":"object","title":"Requirement not met","required":["state","additional_amount_required"],"properties":{"state":{"type":"string","const":"requirement_not_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.state","typeLabel":"string"},"additional_amount_required":{"type":"object","properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required.formatted","typeLabel":"string"}},"required":["amount","formatted"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2","typeLabel":"Requirement not met · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total","typeLabel":"No requirement · object | Requirement met · object | Requirement not met · object"},"minimum_line_item_quantity":{"oneOf":[{"type":"object","title":"No requirement","required":["state"],"properties":{"state":{"type":"string","const":"no_requirement","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.0","typeLabel":"No requirement · object"},{"type":"object","title":"Requirement met","required":["state"],"properties":{"state":{"type":"string","const":"requirement_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.1.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.1","typeLabel":"Requirement met · object"},{"type":"object","title":"Requirement not met","required":["state","additional_quantity_required"],"properties":{"state":{"type":"string","const":"requirement_not_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.2.state","typeLabel":"string"},"additional_quantity_required":{"type":"number","description":"The number of additional line items required before this requirement is met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.2.additional_quantity_required","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.2","typeLabel":"Requirement not met · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity","typeLabel":"No requirement · object | Requirement met · object | Requirement not met · object"}},"required":["minimum_cart_total","minimum_line_item_quantity"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.3.cart_requirements_detail","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.3","typeLabel":"Cart requirements not met · object"},{"type":"object","title":"Max redemptions for cart reached","description":"For rewards that have limits on how many times they can be redeemed per cart, this indicates that the customer has reached the maximum number of redemptions for the current cart","required":["state"],"properties":{"state":{"type":"string","const":"max_redemptions_for_cart_reached","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.4.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.4","typeLabel":"Max redemptions for cart reached · object"},{"type":"object","title":"Out of stock","description":"For rewards that have managed inventory, or are linked to an external inventory, this indicates that the reward is out of stock. For rewards with multiple options (e.g. product variants), this means that all options are out of stock","required":["state"],"properties":{"state":{"type":"string","const":"out_of_stock","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.5.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.5","typeLabel":"Out of stock · object"},{"type":"object","title":"Unknown","description":"The redeemable state of this reward cannot be determined. For example, `product_cart` rewards where the request does not include a current cart will have this state, since we cannot determine if applicable cart requirements are met. It may be safe to treat this reward as redeemable if you perform your own checks","required":["state"],"properties":{"state":{"type":"string","const":"unknown","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.6.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem.oneOf.6","typeLabel":"Unknown · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.can_redeem","typeLabel":"Redeemable · object | Insufficient points · object | Claim limit reached · object | Cart requirements not met · object | Max redemptions for cart reached · object | Out of stock · object | Unknown · object"},"last_claimed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this reward was last claimed by the customer, or `null` if the reward has never been claimed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.last_claimed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this reward was last claimed by the customer, or `null` if the reward has never been claimed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.last_claimed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.last_claimed_at","typeLabel":"string | null"},"claim_count":{"type":"number","description":"The number of times this reward has been claimed by the customer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.claim_count","typeLabel":"number"},"claim_limit":{"oneOf":[{"type":"object","title":"No limit","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated reward has no limit, so this customer can claim it any number of times","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.claim_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.claim_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_claims_within_interval","claim_count_within_interval","remaining_claims_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated reward has a claim limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.claim_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.claim_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.claim_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.claim_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_claims_within_interval":{"type":"integer","description":"The number of times this reward can be claimed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.claim_limit.oneOf.1.allowed_claims_within_interval","typeLabel":"integer"},"claim_count_within_interval":{"type":"integer","description":"The number of times this reward has been claimed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.claim_limit.oneOf.1.claim_count_within_interval","typeLabel":"integer"},"remaining_claims_within_interval":{"type":"integer","description":"The number of times this reward can still be claimed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.claim_limit.oneOf.1.remaining_claims_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.claim_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated reward has a limit, the customer has reached it, and the limit will never reset. This means the reward can never be claimed again by this customer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.claim_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.claim_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated reward has a limit and the customer has reached it. The customer will be able to claim the reward again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.claim_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.claim_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can claim the reward again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.claim_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.claim_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.claim_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context.claim_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["can_redeem","last_claimed_at","claim_count","claim_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this reward, such as the number of times they have claimed it, or any limit that is in effect, and if they are currently able to redeem it","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this reward, when the merchant has set one: either an image they uploaded or chose for the reward itself, or the reward's product or collection catalog image. `null` when no image is set","type":"string","uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this reward, when the merchant has set one: either an image they uploaded or chose for the reward itself, or the reward's product or collection catalog image. `null` when no image is set","type":"null","uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.8","typeLabel":"Active subscription product · object"},{"type":"object","title":"Custom","description":"A custom reward that is fulfilled by the merchant manually or using a webhook, or by issuing a code from a merchant-uploaded pool","required":["id","limit","kind","properties","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this reward, which is applied per customer. Rewards with a limit set may only be claimed a set number of times in a given interval. The limit may be `null` if the reward has no limit and can therefore be claimed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this reward can be claimed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this reward, which is applied per customer. Rewards with a limit set may only be claimed a set number of times in a given interval. The limit may be `null` if the reward has no limit and can therefore be claimed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"custom","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.kind","typeLabel":"string"},"properties":{"oneOf":[{"type":"object","required":["fulfillment_type","fulfillment_method","fulfillment_webhook_url"],"properties":{"fulfillment_type":{"type":"string","const":"store_fulfillment","description":"Fulfilled by the merchant — manually or via webhook (see `fulfillment_method`).","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.properties.oneOf.0.fulfillment_type","typeLabel":"string"},"fulfillment_method":{"type":"string","enum":["manual","webhook"],"description":"How the merchant fulfils this custom reward.","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.properties.oneOf.0.fulfillment_method","typeLabel":"enum\u003cstring>"},"fulfillment_webhook_url":{"oneOf":[{"description":"The URL to which we'll send a webhook for reward fulfillment, if one is configured","type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.properties.oneOf.0.fulfillment_webhook_url.oneOf.0","typeLabel":"string"},{"description":"The URL to which we'll send a webhook for reward fulfillment, if one is configured","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.properties.oneOf.0.fulfillment_webhook_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.properties.oneOf.0.fulfillment_webhook_url","typeLabel":"string | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.properties.oneOf.0","typeLabel":"object"},{"type":"object","required":["fulfillment_type"],"properties":{"fulfillment_type":{"type":"string","const":"voucher","description":"Fulfilled by issuing a code from a merchant-uploaded pool to the customer at claim time.","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.properties.oneOf.1.fulfillment_type","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.properties.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.properties","typeLabel":"object"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this reward variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this reward variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this reward. For example, '$5 voucher', 'Free Water Bottle', or '$5 off next 3 subscription orders'","example":"$5 voucher","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this reward, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Spend your points on $5 off your next order","type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this reward, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Spend your points on $5 off your next order","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this reward variant is enabled. For example, some rewards are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.variant.enabled","typeLabel":"boolean"},"cost":{"oneOf":[{"type":"object","title":"Fixed cost","description":"The cost of this reward in points. Will be one of `fixed` (costs a fixed number of points) or `variable` (cost is multiplied by unit, e.g. 100 points per $1 discount)","required":["kind","points"],"properties":{"kind":{"type":"string","const":"fixed","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.variant.cost.oneOf.0.kind","typeLabel":"string"},"points":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.variant.cost.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.variant.cost.oneOf.0","typeLabel":"Fixed cost · object"},{"type":"object","title":"Variable cost","description":"The cost of this reward in points. Will be one of `fixed` (costs a fixed number of points) or `variable` (cost is multiplied by unit, e.g. 100 points per $1 discount)","required":["kind","unit","points_per_unit"],"properties":{"kind":{"type":"string","const":"variable","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.variant.cost.oneOf.1.kind","typeLabel":"string"},"unit":{"type":"string","const":"discount_amount","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.variant.cost.oneOf.1.unit","typeLabel":"string"},"points_per_unit":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.variant.cost.oneOf.1.points_per_unit","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.variant.cost.oneOf.1","typeLabel":"Variable cost · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.variant.cost","typeLabel":"Fixed cost · object | Variable cost · object"},"cost_text":{"type":"string","description":"Short, localized text indicating the cost of this reward. For example, '100 points' or '10 points per $1'","example":"100 points","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.variant.cost_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","cost","cost_text"],"additionalProperties":false,"description":"The reward variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.variant","typeLabel":"object"},"context":{"type":"object","properties":{"can_redeem":{"oneOf":[{"type":"object","title":"Redeemable","description":"An object that indicates if this reward can be redeemed by this customer. The `state` property indicates if it can be redeemed. If `state == \"redeemable\"`, the reward can be redeemed by the customer","required":["state"],"properties":{"state":{"type":"string","const":"redeemable","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.0","typeLabel":"Redeemable · object"},{"type":"object","title":"Insufficient points","description":"An object that indicates if this reward can be redeemed by this customer. The `state` property indicates if it can be redeemed. If `state == \"redeemable\"`, the reward can be redeemed by the customer","required":["state","additional_points_required"],"properties":{"state":{"type":"string","const":"insufficient_points","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.1.state","typeLabel":"string"},"additional_points_required":{"type":"number","description":"The number of additional points required before this customer can afford the reward","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.1.additional_points_required","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.1","typeLabel":"Insufficient points · object"},{"type":"object","title":"Claim limit reached","description":"An object that indicates if this reward can be redeemed by this customer. The `state` property indicates if it can be redeemed. If `state == \"redeemable\"`, the reward can be redeemed by the customer","required":["state"],"properties":{"state":{"type":"string","const":"claim_limit_reached","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.2","typeLabel":"Claim limit reached · object"},{"type":"object","title":"Cart requirements not met","description":"For rewards that have requirements based on the customer's current cart, this indicates that the customer's current cart does not meet the requirements. This can only be determined if the request included a serialized `cart` object","required":["state","cart_requirements_detail"],"properties":{"state":{"type":"string","const":"cart_requirements_not_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.3.state","typeLabel":"string"},"cart_requirements_detail":{"type":"object","properties":{"minimum_cart_total":{"oneOf":[{"type":"object","title":"No requirement","required":["state"],"properties":{"state":{"type":"string","const":"no_requirement","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.0","typeLabel":"No requirement · object"},{"type":"object","title":"Requirement met","required":["state"],"properties":{"state":{"type":"string","const":"requirement_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.1.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.1","typeLabel":"Requirement met · object"},{"type":"object","title":"Requirement not met","required":["state","additional_amount_required"],"properties":{"state":{"type":"string","const":"requirement_not_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.state","typeLabel":"string"},"additional_amount_required":{"type":"object","properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required.formatted","typeLabel":"string"}},"required":["amount","formatted"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total.oneOf.2","typeLabel":"Requirement not met · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_cart_total","typeLabel":"No requirement · object | Requirement met · object | Requirement not met · object"},"minimum_line_item_quantity":{"oneOf":[{"type":"object","title":"No requirement","required":["state"],"properties":{"state":{"type":"string","const":"no_requirement","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.0","typeLabel":"No requirement · object"},{"type":"object","title":"Requirement met","required":["state"],"properties":{"state":{"type":"string","const":"requirement_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.1.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.1","typeLabel":"Requirement met · object"},{"type":"object","title":"Requirement not met","required":["state","additional_quantity_required"],"properties":{"state":{"type":"string","const":"requirement_not_met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.2.state","typeLabel":"string"},"additional_quantity_required":{"type":"number","description":"The number of additional line items required before this requirement is met","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.2.additional_quantity_required","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity.oneOf.2","typeLabel":"Requirement not met · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.3.cart_requirements_detail.minimum_line_item_quantity","typeLabel":"No requirement · object | Requirement met · object | Requirement not met · object"}},"required":["minimum_cart_total","minimum_line_item_quantity"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.3.cart_requirements_detail","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.3","typeLabel":"Cart requirements not met · object"},{"type":"object","title":"Max redemptions for cart reached","description":"For rewards that have limits on how many times they can be redeemed per cart, this indicates that the customer has reached the maximum number of redemptions for the current cart","required":["state"],"properties":{"state":{"type":"string","const":"max_redemptions_for_cart_reached","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.4.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.4","typeLabel":"Max redemptions for cart reached · object"},{"type":"object","title":"Out of stock","description":"For rewards that have managed inventory, or are linked to an external inventory, this indicates that the reward is out of stock. For rewards with multiple options (e.g. product variants), this means that all options are out of stock","required":["state"],"properties":{"state":{"type":"string","const":"out_of_stock","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.5.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.5","typeLabel":"Out of stock · object"},{"type":"object","title":"Unknown","description":"The redeemable state of this reward cannot be determined. For example, `product_cart` rewards where the request does not include a current cart will have this state, since we cannot determine if applicable cart requirements are met. It may be safe to treat this reward as redeemable if you perform your own checks","required":["state"],"properties":{"state":{"type":"string","const":"unknown","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.6.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem.oneOf.6","typeLabel":"Unknown · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.can_redeem","typeLabel":"Redeemable · object | Insufficient points · object | Claim limit reached · object | Cart requirements not met · object | Max redemptions for cart reached · object | Out of stock · object | Unknown · object"},"last_claimed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this reward was last claimed by the customer, or `null` if the reward has never been claimed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.last_claimed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this reward was last claimed by the customer, or `null` if the reward has never been claimed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.last_claimed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.last_claimed_at","typeLabel":"string | null"},"claim_count":{"type":"number","description":"The number of times this reward has been claimed by the customer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.claim_count","typeLabel":"number"},"claim_limit":{"oneOf":[{"type":"object","title":"No limit","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated reward has no limit, so this customer can claim it any number of times","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.claim_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.claim_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_claims_within_interval","claim_count_within_interval","remaining_claims_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated reward has a claim limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.claim_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.claim_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the reward can only ever be claimed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.claim_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.claim_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_claims_within_interval":{"type":"integer","description":"The number of times this reward can be claimed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.claim_limit.oneOf.1.allowed_claims_within_interval","typeLabel":"integer"},"claim_count_within_interval":{"type":"integer","description":"The number of times this reward has been claimed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.claim_limit.oneOf.1.claim_count_within_interval","typeLabel":"integer"},"remaining_claims_within_interval":{"type":"integer","description":"The number of times this reward can still be claimed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.claim_limit.oneOf.1.remaining_claims_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.claim_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated reward has a limit, the customer has reached it, and the limit will never reset. This means the reward can never be claimed again by this customer","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.claim_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.claim_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this reward's claim limit specific to this customer. When rewards are limited, they can only be claimed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated reward has a limit and the customer has reached it. The customer will be able to claim the reward again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.claim_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.claim_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can claim the reward again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.claim_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.claim_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.claim_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context.claim_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["can_redeem","last_claimed_at","claim_count","claim_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this reward, such as the number of times they have claimed it, or any limit that is in effect, and if they are currently able to redeem it","isRequired":true,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this reward, when the merchant has set one: either an image they uploaded or chose for the reward itself, or the reward's product or collection catalog image. `null` when no image is set","type":"string","uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this reward, when the merchant has set one: either an image they uploaded or chose for the reward itself, or the reward's product or collection catalog image. `null` when no image is set","type":"null","uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rewards.items.[INDEX].oneOf.9","typeLabel":"Custom · object"}],"uniqueKey":"customer.available_rewards.items.[INDEX]","typeLabel":"Gift card · object | Cart discount voucher · object | Cart variable discount · object | Free shipping voucher · object | Product discount voucher · object | Collection discount voucher · object | Product cart · object | Active subscription discount voucher · object | Active subscription product · object | Custom · object"},"isRequired":true,"uniqueKey":"customer.available_rewards","typeLabel":"(Gift card · object | Cart discount voucher · object | Cart variable discount · object | Free shipping voucher · object | Product discount voucher · object | Collection discount voucher · object | Product cart · object | Active subscription discount voucher · object | Active subscription product · object | Custom · object)[]"},"available_rules":{"description":"A list of rules that are enabled for this customer, based on their tier. This is the same as the list of rules returned from [Get Configuration](/headless-api/2025-06/configuration/get-configuration), with a few differences:\n\n- instead of `variants`, each rule will have a `variant` property, which represents the applicable variant for this customer based on their tier. If there is no applicable enabled variant, the rule will not be included in this list, e.g. if it's disabled for the customer's current tier\n- each rule will have a `context` property, which includes information about this customer's interaction with the rule, such as the number of times they have completed it, and if any limit is in effect","type":"array","items":{"oneOf":[{"type":"object","title":"Birthday","required":["id","limit","kind","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this rule can be completed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"birthday","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.kind","typeLabel":"string"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this rule. For example, 'Make a purchase' or 'Refer a friend'","example":"Make a purchase","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this rule variant is enabled. For example, some rules are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.variant.enabled","typeLabel":"boolean"},"result":{"oneOf":[{"type":"object","title":"Points","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","per_currency_unit","points"],"properties":{"kind":{"type":"string","const":"points","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.variant.result.oneOf.0.kind","typeLabel":"string"},"per_currency_unit":{"oneOf":[{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.variant.result.oneOf.0.per_currency_unit.oneOf.0","typeLabel":"number"},{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.variant.result.oneOf.0.per_currency_unit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.variant.result.oneOf.0.per_currency_unit","typeLabel":"number | null"},"points":{"type":"number","description":"The number of points provided when this rule variant is completed. If `per_currency_unit` is not null, this will be the number of points per currency unit (e.g. 5 points per $1)","example":5,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.variant.result.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.variant.result.oneOf.0","typeLabel":"Points · object"},{"type":"object","title":"Reward","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","reward"],"properties":{"kind":{"type":"string","const":"reward","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.variant.result.oneOf.1.kind","typeLabel":"string"},"reward":{"type":"object","properties":{"kind":{"type":"string","enum":["gift_card","cart_discount_voucher","cart_variable_discount_voucher","free_shipping_voucher","product_discount_voucher","collection_discount_voucher","product_cart","active_subscription_discount_voucher","active_subscription_product","custom"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.variant.result.oneOf.1.reward.kind","typeLabel":"enum\u003cstring>"},"title":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.variant.result.oneOf.1.reward.title","typeLabel":"string"}},"required":["kind","title"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.variant.result.oneOf.1.reward","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.variant.result.oneOf.1","typeLabel":"Reward · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.variant.result","typeLabel":"Points · object | Reward · object"},"result_short_text":{"type":"string","description":"Short, localized text indicating the result of completing this rule variant. For example: '100 points', '5 points per $1', or '$5 voucher'","example":"5 points per $1","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.variant.result_short_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","result","result_short_text"],"additionalProperties":false,"description":"The rule variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.variant","typeLabel":"object"},"context":{"type":"object","properties":{"last_completed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.context.last_completed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.context.last_completed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.context.last_completed_at","typeLabel":"string | null"},"completion_count":{"type":"number","description":"The number of times this rule has been completed by the customer in total","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.context.completion_count","typeLabel":"number"},"completion_limit":{"oneOf":[{"type":"object","title":"No limit","description":"no limit","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated rule has no limit, so this customer can complete it any number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.context.completion_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.context.completion_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_completions_within_interval","completion_count_within_interval","remaining_completions_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated rule has a limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.context.completion_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.context.completion_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.context.completion_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.context.completion_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_completions_within_interval":{"type":"integer","description":"The number of times this rule can be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.context.completion_limit.oneOf.1.allowed_completions_within_interval","typeLabel":"integer"},"completion_count_within_interval":{"type":"integer","description":"The number of times this rule has been completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.context.completion_limit.oneOf.1.completion_count_within_interval","typeLabel":"integer"},"remaining_completions_within_interval":{"type":"integer","description":"The number of times this rule can still be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.context.completion_limit.oneOf.1.remaining_completions_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.context.completion_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated rule has a limit, the customer has reached it, and the limit will never reset. This means the rule can never be completed again by this customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.context.completion_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.context.completion_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated rule has a limit and the customer has reached it. The customer will be able to complete the rule again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.context.completion_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.context.completion_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can complete the rule again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.context.completion_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.context.completion_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.context.completion_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.context.completion_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["last_completed_at","completion_count","completion_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this rule, such as the number of times they have completed it, or any limit that is in effect","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"string","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"null","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.0","typeLabel":"Birthday · object"},{"type":"object","title":"Loyalty pass install","required":["id","limit","kind","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this rule can be completed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"loyalty_pass_install","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.kind","typeLabel":"string"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this rule. For example, 'Make a purchase' or 'Refer a friend'","example":"Make a purchase","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this rule variant is enabled. For example, some rules are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.variant.enabled","typeLabel":"boolean"},"result":{"oneOf":[{"type":"object","title":"Points","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","per_currency_unit","points"],"properties":{"kind":{"type":"string","const":"points","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.variant.result.oneOf.0.kind","typeLabel":"string"},"per_currency_unit":{"oneOf":[{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.variant.result.oneOf.0.per_currency_unit.oneOf.0","typeLabel":"number"},{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.variant.result.oneOf.0.per_currency_unit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.variant.result.oneOf.0.per_currency_unit","typeLabel":"number | null"},"points":{"type":"number","description":"The number of points provided when this rule variant is completed. If `per_currency_unit` is not null, this will be the number of points per currency unit (e.g. 5 points per $1)","example":5,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.variant.result.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.variant.result.oneOf.0","typeLabel":"Points · object"},{"type":"object","title":"Reward","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","reward"],"properties":{"kind":{"type":"string","const":"reward","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.variant.result.oneOf.1.kind","typeLabel":"string"},"reward":{"type":"object","properties":{"kind":{"type":"string","enum":["gift_card","cart_discount_voucher","cart_variable_discount_voucher","free_shipping_voucher","product_discount_voucher","collection_discount_voucher","product_cart","active_subscription_discount_voucher","active_subscription_product","custom"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.variant.result.oneOf.1.reward.kind","typeLabel":"enum\u003cstring>"},"title":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.variant.result.oneOf.1.reward.title","typeLabel":"string"}},"required":["kind","title"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.variant.result.oneOf.1.reward","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.variant.result.oneOf.1","typeLabel":"Reward · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.variant.result","typeLabel":"Points · object | Reward · object"},"result_short_text":{"type":"string","description":"Short, localized text indicating the result of completing this rule variant. For example: '100 points', '5 points per $1', or '$5 voucher'","example":"5 points per $1","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.variant.result_short_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","result","result_short_text"],"additionalProperties":false,"description":"The rule variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.variant","typeLabel":"object"},"context":{"type":"object","properties":{"last_completed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.context.last_completed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.context.last_completed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.context.last_completed_at","typeLabel":"string | null"},"completion_count":{"type":"number","description":"The number of times this rule has been completed by the customer in total","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.context.completion_count","typeLabel":"number"},"completion_limit":{"oneOf":[{"type":"object","title":"No limit","description":"no limit","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated rule has no limit, so this customer can complete it any number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.context.completion_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.context.completion_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_completions_within_interval","completion_count_within_interval","remaining_completions_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated rule has a limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.context.completion_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.context.completion_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.context.completion_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.context.completion_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_completions_within_interval":{"type":"integer","description":"The number of times this rule can be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.context.completion_limit.oneOf.1.allowed_completions_within_interval","typeLabel":"integer"},"completion_count_within_interval":{"type":"integer","description":"The number of times this rule has been completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.context.completion_limit.oneOf.1.completion_count_within_interval","typeLabel":"integer"},"remaining_completions_within_interval":{"type":"integer","description":"The number of times this rule can still be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.context.completion_limit.oneOf.1.remaining_completions_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.context.completion_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated rule has a limit, the customer has reached it, and the limit will never reset. This means the rule can never be completed again by this customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.context.completion_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.context.completion_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated rule has a limit and the customer has reached it. The customer will be able to complete the rule again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.context.completion_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.context.completion_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can complete the rule again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.context.completion_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.context.completion_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.context.completion_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.context.completion_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["last_completed_at","completion_count","completion_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this rule, such as the number of times they have completed it, or any limit that is in effect","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"string","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"null","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.1","typeLabel":"Loyalty pass install · object"},{"type":"object","title":"Collection purchase","required":["id","limit","kind","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this rule can be completed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"collection_purchase","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.kind","typeLabel":"string"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this rule. For example, 'Make a purchase' or 'Refer a friend'","example":"Make a purchase","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this rule variant is enabled. For example, some rules are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.variant.enabled","typeLabel":"boolean"},"result":{"oneOf":[{"type":"object","title":"Points","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","per_currency_unit","points"],"properties":{"kind":{"type":"string","const":"points","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.variant.result.oneOf.0.kind","typeLabel":"string"},"per_currency_unit":{"oneOf":[{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.variant.result.oneOf.0.per_currency_unit.oneOf.0","typeLabel":"number"},{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.variant.result.oneOf.0.per_currency_unit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.variant.result.oneOf.0.per_currency_unit","typeLabel":"number | null"},"points":{"type":"number","description":"The number of points provided when this rule variant is completed. If `per_currency_unit` is not null, this will be the number of points per currency unit (e.g. 5 points per $1)","example":5,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.variant.result.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.variant.result.oneOf.0","typeLabel":"Points · object"},{"type":"object","title":"Reward","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","reward"],"properties":{"kind":{"type":"string","const":"reward","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.variant.result.oneOf.1.kind","typeLabel":"string"},"reward":{"type":"object","properties":{"kind":{"type":"string","enum":["gift_card","cart_discount_voucher","cart_variable_discount_voucher","free_shipping_voucher","product_discount_voucher","collection_discount_voucher","product_cart","active_subscription_discount_voucher","active_subscription_product","custom"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.variant.result.oneOf.1.reward.kind","typeLabel":"enum\u003cstring>"},"title":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.variant.result.oneOf.1.reward.title","typeLabel":"string"}},"required":["kind","title"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.variant.result.oneOf.1.reward","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.variant.result.oneOf.1","typeLabel":"Reward · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.variant.result","typeLabel":"Points · object | Reward · object"},"result_short_text":{"type":"string","description":"Short, localized text indicating the result of completing this rule variant. For example: '100 points', '5 points per $1', or '$5 voucher'","example":"5 points per $1","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.variant.result_short_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","result","result_short_text"],"additionalProperties":false,"description":"The rule variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.variant","typeLabel":"object"},"context":{"type":"object","properties":{"last_completed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.context.last_completed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.context.last_completed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.context.last_completed_at","typeLabel":"string | null"},"completion_count":{"type":"number","description":"The number of times this rule has been completed by the customer in total","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.context.completion_count","typeLabel":"number"},"completion_limit":{"oneOf":[{"type":"object","title":"No limit","description":"no limit","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated rule has no limit, so this customer can complete it any number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.context.completion_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.context.completion_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_completions_within_interval","completion_count_within_interval","remaining_completions_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated rule has a limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.context.completion_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.context.completion_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.context.completion_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.context.completion_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_completions_within_interval":{"type":"integer","description":"The number of times this rule can be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.context.completion_limit.oneOf.1.allowed_completions_within_interval","typeLabel":"integer"},"completion_count_within_interval":{"type":"integer","description":"The number of times this rule has been completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.context.completion_limit.oneOf.1.completion_count_within_interval","typeLabel":"integer"},"remaining_completions_within_interval":{"type":"integer","description":"The number of times this rule can still be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.context.completion_limit.oneOf.1.remaining_completions_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.context.completion_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated rule has a limit, the customer has reached it, and the limit will never reset. This means the rule can never be completed again by this customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.context.completion_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.context.completion_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated rule has a limit and the customer has reached it. The customer will be able to complete the rule again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.context.completion_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.context.completion_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can complete the rule again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.context.completion_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.context.completion_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.context.completion_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.context.completion_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["last_completed_at","completion_count","completion_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this rule, such as the number of times they have completed it, or any limit that is in effect","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"string","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"null","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.2","typeLabel":"Collection purchase · object"},{"type":"object","title":"Newsletter signup","required":["id","limit","kind","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this rule can be completed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"newsletter_signup","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.kind","typeLabel":"string"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this rule. For example, 'Make a purchase' or 'Refer a friend'","example":"Make a purchase","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this rule variant is enabled. For example, some rules are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.variant.enabled","typeLabel":"boolean"},"result":{"oneOf":[{"type":"object","title":"Points","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","per_currency_unit","points"],"properties":{"kind":{"type":"string","const":"points","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.variant.result.oneOf.0.kind","typeLabel":"string"},"per_currency_unit":{"oneOf":[{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.variant.result.oneOf.0.per_currency_unit.oneOf.0","typeLabel":"number"},{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.variant.result.oneOf.0.per_currency_unit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.variant.result.oneOf.0.per_currency_unit","typeLabel":"number | null"},"points":{"type":"number","description":"The number of points provided when this rule variant is completed. If `per_currency_unit` is not null, this will be the number of points per currency unit (e.g. 5 points per $1)","example":5,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.variant.result.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.variant.result.oneOf.0","typeLabel":"Points · object"},{"type":"object","title":"Reward","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","reward"],"properties":{"kind":{"type":"string","const":"reward","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.variant.result.oneOf.1.kind","typeLabel":"string"},"reward":{"type":"object","properties":{"kind":{"type":"string","enum":["gift_card","cart_discount_voucher","cart_variable_discount_voucher","free_shipping_voucher","product_discount_voucher","collection_discount_voucher","product_cart","active_subscription_discount_voucher","active_subscription_product","custom"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.variant.result.oneOf.1.reward.kind","typeLabel":"enum\u003cstring>"},"title":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.variant.result.oneOf.1.reward.title","typeLabel":"string"}},"required":["kind","title"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.variant.result.oneOf.1.reward","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.variant.result.oneOf.1","typeLabel":"Reward · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.variant.result","typeLabel":"Points · object | Reward · object"},"result_short_text":{"type":"string","description":"Short, localized text indicating the result of completing this rule variant. For example: '100 points', '5 points per $1', or '$5 voucher'","example":"5 points per $1","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.variant.result_short_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","result","result_short_text"],"additionalProperties":false,"description":"The rule variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.variant","typeLabel":"object"},"context":{"type":"object","properties":{"last_completed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.context.last_completed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.context.last_completed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.context.last_completed_at","typeLabel":"string | null"},"completion_count":{"type":"number","description":"The number of times this rule has been completed by the customer in total","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.context.completion_count","typeLabel":"number"},"completion_limit":{"oneOf":[{"type":"object","title":"No limit","description":"no limit","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated rule has no limit, so this customer can complete it any number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.context.completion_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.context.completion_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_completions_within_interval","completion_count_within_interval","remaining_completions_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated rule has a limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.context.completion_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.context.completion_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.context.completion_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.context.completion_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_completions_within_interval":{"type":"integer","description":"The number of times this rule can be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.context.completion_limit.oneOf.1.allowed_completions_within_interval","typeLabel":"integer"},"completion_count_within_interval":{"type":"integer","description":"The number of times this rule has been completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.context.completion_limit.oneOf.1.completion_count_within_interval","typeLabel":"integer"},"remaining_completions_within_interval":{"type":"integer","description":"The number of times this rule can still be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.context.completion_limit.oneOf.1.remaining_completions_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.context.completion_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated rule has a limit, the customer has reached it, and the limit will never reset. This means the rule can never be completed again by this customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.context.completion_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.context.completion_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated rule has a limit and the customer has reached it. The customer will be able to complete the rule again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.context.completion_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.context.completion_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can complete the rule again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.context.completion_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.context.completion_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.context.completion_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.context.completion_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["last_completed_at","completion_count","completion_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this rule, such as the number of times they have completed it, or any limit that is in effect","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"string","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"null","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.3","typeLabel":"Newsletter signup · object"},{"type":"object","title":"Pageview","required":["id","limit","kind","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this rule can be completed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"pageview","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.kind","typeLabel":"string"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this rule. For example, 'Make a purchase' or 'Refer a friend'","example":"Make a purchase","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this rule variant is enabled. For example, some rules are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.variant.enabled","typeLabel":"boolean"},"result":{"oneOf":[{"type":"object","title":"Points","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","per_currency_unit","points"],"properties":{"kind":{"type":"string","const":"points","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.variant.result.oneOf.0.kind","typeLabel":"string"},"per_currency_unit":{"oneOf":[{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.variant.result.oneOf.0.per_currency_unit.oneOf.0","typeLabel":"number"},{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.variant.result.oneOf.0.per_currency_unit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.variant.result.oneOf.0.per_currency_unit","typeLabel":"number | null"},"points":{"type":"number","description":"The number of points provided when this rule variant is completed. If `per_currency_unit` is not null, this will be the number of points per currency unit (e.g. 5 points per $1)","example":5,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.variant.result.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.variant.result.oneOf.0","typeLabel":"Points · object"},{"type":"object","title":"Reward","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","reward"],"properties":{"kind":{"type":"string","const":"reward","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.variant.result.oneOf.1.kind","typeLabel":"string"},"reward":{"type":"object","properties":{"kind":{"type":"string","enum":["gift_card","cart_discount_voucher","cart_variable_discount_voucher","free_shipping_voucher","product_discount_voucher","collection_discount_voucher","product_cart","active_subscription_discount_voucher","active_subscription_product","custom"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.variant.result.oneOf.1.reward.kind","typeLabel":"enum\u003cstring>"},"title":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.variant.result.oneOf.1.reward.title","typeLabel":"string"}},"required":["kind","title"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.variant.result.oneOf.1.reward","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.variant.result.oneOf.1","typeLabel":"Reward · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.variant.result","typeLabel":"Points · object | Reward · object"},"result_short_text":{"type":"string","description":"Short, localized text indicating the result of completing this rule variant. For example: '100 points', '5 points per $1', or '$5 voucher'","example":"5 points per $1","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.variant.result_short_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","result","result_short_text"],"additionalProperties":false,"description":"The rule variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.variant","typeLabel":"object"},"context":{"type":"object","properties":{"last_completed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.context.last_completed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.context.last_completed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.context.last_completed_at","typeLabel":"string | null"},"completion_count":{"type":"number","description":"The number of times this rule has been completed by the customer in total","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.context.completion_count","typeLabel":"number"},"completion_limit":{"oneOf":[{"type":"object","title":"No limit","description":"no limit","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated rule has no limit, so this customer can complete it any number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.context.completion_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.context.completion_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_completions_within_interval","completion_count_within_interval","remaining_completions_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated rule has a limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.context.completion_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.context.completion_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.context.completion_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.context.completion_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_completions_within_interval":{"type":"integer","description":"The number of times this rule can be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.context.completion_limit.oneOf.1.allowed_completions_within_interval","typeLabel":"integer"},"completion_count_within_interval":{"type":"integer","description":"The number of times this rule has been completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.context.completion_limit.oneOf.1.completion_count_within_interval","typeLabel":"integer"},"remaining_completions_within_interval":{"type":"integer","description":"The number of times this rule can still be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.context.completion_limit.oneOf.1.remaining_completions_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.context.completion_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated rule has a limit, the customer has reached it, and the limit will never reset. This means the rule can never be completed again by this customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.context.completion_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.context.completion_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated rule has a limit and the customer has reached it. The customer will be able to complete the rule again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.context.completion_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.context.completion_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can complete the rule again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.context.completion_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.context.completion_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.context.completion_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.context.completion_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["last_completed_at","completion_count","completion_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this rule, such as the number of times they have completed it, or any limit that is in effect","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"string","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"null","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.4","typeLabel":"Pageview · object"},{"type":"object","title":"Product purchase","required":["id","limit","kind","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this rule can be completed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"product_purchase","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.kind","typeLabel":"string"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this rule. For example, 'Make a purchase' or 'Refer a friend'","example":"Make a purchase","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this rule variant is enabled. For example, some rules are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.variant.enabled","typeLabel":"boolean"},"result":{"oneOf":[{"type":"object","title":"Points","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","per_currency_unit","points"],"properties":{"kind":{"type":"string","const":"points","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.variant.result.oneOf.0.kind","typeLabel":"string"},"per_currency_unit":{"oneOf":[{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.variant.result.oneOf.0.per_currency_unit.oneOf.0","typeLabel":"number"},{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.variant.result.oneOf.0.per_currency_unit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.variant.result.oneOf.0.per_currency_unit","typeLabel":"number | null"},"points":{"type":"number","description":"The number of points provided when this rule variant is completed. If `per_currency_unit` is not null, this will be the number of points per currency unit (e.g. 5 points per $1)","example":5,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.variant.result.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.variant.result.oneOf.0","typeLabel":"Points · object"},{"type":"object","title":"Reward","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","reward"],"properties":{"kind":{"type":"string","const":"reward","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.variant.result.oneOf.1.kind","typeLabel":"string"},"reward":{"type":"object","properties":{"kind":{"type":"string","enum":["gift_card","cart_discount_voucher","cart_variable_discount_voucher","free_shipping_voucher","product_discount_voucher","collection_discount_voucher","product_cart","active_subscription_discount_voucher","active_subscription_product","custom"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.variant.result.oneOf.1.reward.kind","typeLabel":"enum\u003cstring>"},"title":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.variant.result.oneOf.1.reward.title","typeLabel":"string"}},"required":["kind","title"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.variant.result.oneOf.1.reward","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.variant.result.oneOf.1","typeLabel":"Reward · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.variant.result","typeLabel":"Points · object | Reward · object"},"result_short_text":{"type":"string","description":"Short, localized text indicating the result of completing this rule variant. For example: '100 points', '5 points per $1', or '$5 voucher'","example":"5 points per $1","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.variant.result_short_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","result","result_short_text"],"additionalProperties":false,"description":"The rule variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.variant","typeLabel":"object"},"context":{"type":"object","properties":{"last_completed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.context.last_completed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.context.last_completed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.context.last_completed_at","typeLabel":"string | null"},"completion_count":{"type":"number","description":"The number of times this rule has been completed by the customer in total","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.context.completion_count","typeLabel":"number"},"completion_limit":{"oneOf":[{"type":"object","title":"No limit","description":"no limit","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated rule has no limit, so this customer can complete it any number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.context.completion_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.context.completion_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_completions_within_interval","completion_count_within_interval","remaining_completions_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated rule has a limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.context.completion_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.context.completion_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.context.completion_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.context.completion_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_completions_within_interval":{"type":"integer","description":"The number of times this rule can be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.context.completion_limit.oneOf.1.allowed_completions_within_interval","typeLabel":"integer"},"completion_count_within_interval":{"type":"integer","description":"The number of times this rule has been completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.context.completion_limit.oneOf.1.completion_count_within_interval","typeLabel":"integer"},"remaining_completions_within_interval":{"type":"integer","description":"The number of times this rule can still be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.context.completion_limit.oneOf.1.remaining_completions_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.context.completion_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated rule has a limit, the customer has reached it, and the limit will never reset. This means the rule can never be completed again by this customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.context.completion_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.context.completion_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated rule has a limit and the customer has reached it. The customer will be able to complete the rule again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.context.completion_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.context.completion_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can complete the rule again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.context.completion_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.context.completion_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.context.completion_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.context.completion_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["last_completed_at","completion_count","completion_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this rule, such as the number of times they have completed it, or any limit that is in effect","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"string","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"null","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.5","typeLabel":"Product purchase · object"},{"type":"object","title":"Purchase","required":["id","limit","kind","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this rule can be completed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"purchase","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.kind","typeLabel":"string"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this rule. For example, 'Make a purchase' or 'Refer a friend'","example":"Make a purchase","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this rule variant is enabled. For example, some rules are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.variant.enabled","typeLabel":"boolean"},"result":{"oneOf":[{"type":"object","title":"Points","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","per_currency_unit","points"],"properties":{"kind":{"type":"string","const":"points","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.variant.result.oneOf.0.kind","typeLabel":"string"},"per_currency_unit":{"oneOf":[{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.variant.result.oneOf.0.per_currency_unit.oneOf.0","typeLabel":"number"},{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.variant.result.oneOf.0.per_currency_unit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.variant.result.oneOf.0.per_currency_unit","typeLabel":"number | null"},"points":{"type":"number","description":"The number of points provided when this rule variant is completed. If `per_currency_unit` is not null, this will be the number of points per currency unit (e.g. 5 points per $1)","example":5,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.variant.result.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.variant.result.oneOf.0","typeLabel":"Points · object"},{"type":"object","title":"Reward","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","reward"],"properties":{"kind":{"type":"string","const":"reward","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.variant.result.oneOf.1.kind","typeLabel":"string"},"reward":{"type":"object","properties":{"kind":{"type":"string","enum":["gift_card","cart_discount_voucher","cart_variable_discount_voucher","free_shipping_voucher","product_discount_voucher","collection_discount_voucher","product_cart","active_subscription_discount_voucher","active_subscription_product","custom"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.variant.result.oneOf.1.reward.kind","typeLabel":"enum\u003cstring>"},"title":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.variant.result.oneOf.1.reward.title","typeLabel":"string"}},"required":["kind","title"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.variant.result.oneOf.1.reward","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.variant.result.oneOf.1","typeLabel":"Reward · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.variant.result","typeLabel":"Points · object | Reward · object"},"result_short_text":{"type":"string","description":"Short, localized text indicating the result of completing this rule variant. For example: '100 points', '5 points per $1', or '$5 voucher'","example":"5 points per $1","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.variant.result_short_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","result","result_short_text"],"additionalProperties":false,"description":"The rule variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.variant","typeLabel":"object"},"context":{"type":"object","properties":{"last_completed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.context.last_completed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.context.last_completed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.context.last_completed_at","typeLabel":"string | null"},"completion_count":{"type":"number","description":"The number of times this rule has been completed by the customer in total","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.context.completion_count","typeLabel":"number"},"completion_limit":{"oneOf":[{"type":"object","title":"No limit","description":"no limit","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated rule has no limit, so this customer can complete it any number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.context.completion_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.context.completion_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_completions_within_interval","completion_count_within_interval","remaining_completions_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated rule has a limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.context.completion_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.context.completion_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.context.completion_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.context.completion_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_completions_within_interval":{"type":"integer","description":"The number of times this rule can be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.context.completion_limit.oneOf.1.allowed_completions_within_interval","typeLabel":"integer"},"completion_count_within_interval":{"type":"integer","description":"The number of times this rule has been completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.context.completion_limit.oneOf.1.completion_count_within_interval","typeLabel":"integer"},"remaining_completions_within_interval":{"type":"integer","description":"The number of times this rule can still be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.context.completion_limit.oneOf.1.remaining_completions_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.context.completion_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated rule has a limit, the customer has reached it, and the limit will never reset. This means the rule can never be completed again by this customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.context.completion_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.context.completion_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated rule has a limit and the customer has reached it. The customer will be able to complete the rule again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.context.completion_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.context.completion_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can complete the rule again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.context.completion_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.context.completion_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.context.completion_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.context.completion_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["last_completed_at","completion_count","completion_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this rule, such as the number of times they have completed it, or any limit that is in effect","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"string","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"null","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.6","typeLabel":"Purchase · object"},{"type":"object","title":"Join program","required":["id","limit","kind","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this rule can be completed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"join_program","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.kind","typeLabel":"string"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this rule. For example, 'Make a purchase' or 'Refer a friend'","example":"Make a purchase","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this rule variant is enabled. For example, some rules are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.variant.enabled","typeLabel":"boolean"},"result":{"oneOf":[{"type":"object","title":"Points","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","per_currency_unit","points"],"properties":{"kind":{"type":"string","const":"points","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.variant.result.oneOf.0.kind","typeLabel":"string"},"per_currency_unit":{"oneOf":[{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.variant.result.oneOf.0.per_currency_unit.oneOf.0","typeLabel":"number"},{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.variant.result.oneOf.0.per_currency_unit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.variant.result.oneOf.0.per_currency_unit","typeLabel":"number | null"},"points":{"type":"number","description":"The number of points provided when this rule variant is completed. If `per_currency_unit` is not null, this will be the number of points per currency unit (e.g. 5 points per $1)","example":5,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.variant.result.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.variant.result.oneOf.0","typeLabel":"Points · object"},{"type":"object","title":"Reward","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","reward"],"properties":{"kind":{"type":"string","const":"reward","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.variant.result.oneOf.1.kind","typeLabel":"string"},"reward":{"type":"object","properties":{"kind":{"type":"string","enum":["gift_card","cart_discount_voucher","cart_variable_discount_voucher","free_shipping_voucher","product_discount_voucher","collection_discount_voucher","product_cart","active_subscription_discount_voucher","active_subscription_product","custom"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.variant.result.oneOf.1.reward.kind","typeLabel":"enum\u003cstring>"},"title":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.variant.result.oneOf.1.reward.title","typeLabel":"string"}},"required":["kind","title"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.variant.result.oneOf.1.reward","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.variant.result.oneOf.1","typeLabel":"Reward · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.variant.result","typeLabel":"Points · object | Reward · object"},"result_short_text":{"type":"string","description":"Short, localized text indicating the result of completing this rule variant. For example: '100 points', '5 points per $1', or '$5 voucher'","example":"5 points per $1","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.variant.result_short_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","result","result_short_text"],"additionalProperties":false,"description":"The rule variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.variant","typeLabel":"object"},"context":{"type":"object","properties":{"last_completed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.context.last_completed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.context.last_completed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.context.last_completed_at","typeLabel":"string | null"},"completion_count":{"type":"number","description":"The number of times this rule has been completed by the customer in total","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.context.completion_count","typeLabel":"number"},"completion_limit":{"oneOf":[{"type":"object","title":"No limit","description":"no limit","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated rule has no limit, so this customer can complete it any number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.context.completion_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.context.completion_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_completions_within_interval","completion_count_within_interval","remaining_completions_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated rule has a limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.context.completion_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.context.completion_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.context.completion_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.context.completion_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_completions_within_interval":{"type":"integer","description":"The number of times this rule can be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.context.completion_limit.oneOf.1.allowed_completions_within_interval","typeLabel":"integer"},"completion_count_within_interval":{"type":"integer","description":"The number of times this rule has been completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.context.completion_limit.oneOf.1.completion_count_within_interval","typeLabel":"integer"},"remaining_completions_within_interval":{"type":"integer","description":"The number of times this rule can still be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.context.completion_limit.oneOf.1.remaining_completions_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.context.completion_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated rule has a limit, the customer has reached it, and the limit will never reset. This means the rule can never be completed again by this customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.context.completion_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.context.completion_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated rule has a limit and the customer has reached it. The customer will be able to complete the rule again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.context.completion_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.context.completion_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can complete the rule again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.context.completion_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.context.completion_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.context.completion_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.context.completion_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["last_completed_at","completion_count","completion_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this rule, such as the number of times they have completed it, or any limit that is in effect","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"string","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"null","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.7","typeLabel":"Join program · object"},{"type":"object","title":"Review","required":["id","limit","kind","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this rule can be completed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"review","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.kind","typeLabel":"string"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this rule. For example, 'Make a purchase' or 'Refer a friend'","example":"Make a purchase","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this rule variant is enabled. For example, some rules are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.enabled","typeLabel":"boolean"},"result":{"oneOf":[{"type":"object","title":"Points","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","per_currency_unit","points"],"properties":{"kind":{"type":"string","const":"points","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.result.oneOf.0.kind","typeLabel":"string"},"per_currency_unit":{"oneOf":[{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.result.oneOf.0.per_currency_unit.oneOf.0","typeLabel":"number"},{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.result.oneOf.0.per_currency_unit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.result.oneOf.0.per_currency_unit","typeLabel":"number | null"},"points":{"type":"number","description":"The number of points provided when this rule variant is completed. If `per_currency_unit` is not null, this will be the number of points per currency unit (e.g. 5 points per $1)","example":5,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.result.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.result.oneOf.0","typeLabel":"Points · object"},{"type":"object","title":"Reward","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","reward"],"properties":{"kind":{"type":"string","const":"reward","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.result.oneOf.1.kind","typeLabel":"string"},"reward":{"type":"object","properties":{"kind":{"type":"string","enum":["gift_card","cart_discount_voucher","cart_variable_discount_voucher","free_shipping_voucher","product_discount_voucher","collection_discount_voucher","product_cart","active_subscription_discount_voucher","active_subscription_product","custom"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.result.oneOf.1.reward.kind","typeLabel":"enum\u003cstring>"},"title":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.result.oneOf.1.reward.title","typeLabel":"string"}},"required":["kind","title"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.result.oneOf.1.reward","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.result.oneOf.1","typeLabel":"Reward · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.result","typeLabel":"Points · object | Reward · object"},"result_short_text":{"type":"string","description":"Short, localized text indicating the result of completing this rule variant. For example: '100 points', '5 points per $1', or '$5 voucher'","example":"5 points per $1","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.result_short_text","typeLabel":"string"},"requirements":{"description":"Conditions the review must meet for this rule variant to be completed. Empty when any review counts","type":"array","items":{"oneOf":[{"type":"object","title":"Includes photo","description":"A condition the review must meet for this rule to be completed. A review that fails any requirement earns nothing from this rule","required":["kind","min_count","text"],"properties":{"kind":{"type":"string","const":"includes_photo","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.requirements.items.[INDEX].oneOf.0.kind","typeLabel":"string"},"min_count":{"type":"number","description":"The minimum number of photos the review must include","example":1,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.requirements.items.[INDEX].oneOf.0.min_count","typeLabel":"number"},"text":{"type":"string","description":"Short, localized text describing this requirement to the shopper, in the requested language and including any wording the store has customized. Where the text has no translation in the requested language, the English text is returned","example":"Review must be at least 50 characters","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.requirements.items.[INDEX].oneOf.0.text","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.requirements.items.[INDEX].oneOf.0","typeLabel":"Includes photo · object"},{"type":"object","title":"Includes video","description":"A condition the review must meet for this rule to be completed. A review that fails any requirement earns nothing from this rule","required":["kind","min_count","text"],"properties":{"kind":{"type":"string","const":"includes_video","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.requirements.items.[INDEX].oneOf.1.kind","typeLabel":"string"},"min_count":{"type":"number","description":"The minimum number of videos the review must include","example":1,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.requirements.items.[INDEX].oneOf.1.min_count","typeLabel":"number"},"text":{"type":"string","description":"Short, localized text describing this requirement to the shopper, in the requested language and including any wording the store has customized. Where the text has no translation in the requested language, the English text is returned","example":"Review must be at least 50 characters","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.requirements.items.[INDEX].oneOf.1.text","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.requirements.items.[INDEX].oneOf.1","typeLabel":"Includes video · object"},{"type":"object","title":"Text length","description":"A condition the review must meet for this rule to be completed. A review that fails any requirement earns nothing from this rule","required":["kind","min_length","text"],"properties":{"kind":{"type":"string","const":"text_length","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.requirements.items.[INDEX].oneOf.2.kind","typeLabel":"string"},"min_length":{"type":"number","description":"The minimum number of characters the review text must contain","example":100,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.requirements.items.[INDEX].oneOf.2.min_length","typeLabel":"number"},"text":{"type":"string","description":"Short, localized text describing this requirement to the shopper, in the requested language and including any wording the store has customized. Where the text has no translation in the requested language, the English text is returned","example":"Review must be at least 50 characters","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.requirements.items.[INDEX].oneOf.2.text","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.requirements.items.[INDEX].oneOf.2","typeLabel":"Text length · object"},{"type":"object","title":"Matching product","description":"A condition the review must meet for this rule to be completed. A review that fails any requirement earns nothing from this rule","required":["kind","product_ids","text"],"properties":{"kind":{"type":"string","const":"matching_product","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.requirements.items.[INDEX].oneOf.3.kind","typeLabel":"string"},"product_ids":{"description":"The reviewed product must be one of these products. Each ID is the product's ID in the store's ecommerce platform","example":["8146810290418"],"type":"array","items":{"type":"string","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.requirements.items.[INDEX].oneOf.3.product_ids.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.requirements.items.[INDEX].oneOf.3.product_ids","typeLabel":"string[]"},"text":{"type":"string","description":"Short, localized text describing this requirement to the shopper, in the requested language and including any wording the store has customized. Where the text has no translation in the requested language, the English text is returned","example":"Review must be at least 50 characters","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.requirements.items.[INDEX].oneOf.3.text","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.requirements.items.[INDEX].oneOf.3","typeLabel":"Matching product · object"}],"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.requirements.items.[INDEX]","typeLabel":"Includes photo · object | Includes video · object | Text length · object | Matching product · object"},"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.requirements","typeLabel":"(Includes photo · object | Includes video · object | Text length · object | Matching product · object)[]"},"modifiers":{"description":"Extra points available for a review that meets each modifier condition, added to the result of this rule variant. A review earns the bonus of every modifier it meets. Only modifiers that award points are listed, and the list is always empty when the result is a `reward`","type":"array","items":{"oneOf":[{"type":"object","title":"Includes photo","description":"Extra points awarded when the review meets a condition, such as including a photo","required":["kind","min_count","bonus","text"],"properties":{"kind":{"type":"string","const":"includes_photo","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.0.kind","typeLabel":"string"},"min_count":{"type":"number","description":"The minimum number of photos the review must include","example":1,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.0.min_count","typeLabel":"number"},"bonus":{"oneOf":[{"type":"object","title":"Fixed","description":"The extra points awarded, on top of the rule variant result, when the review meets the modifier condition. Either a `fixed` number of points, or a number of points `per_count` of photos, videos or characters, where a matching product counts as one","required":["kind","points"],"properties":{"kind":{"type":"string","const":"fixed","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.0.bonus.oneOf.0.kind","typeLabel":"string"},"points":{"type":"number","description":"The number of extra points awarded","example":10,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.0.bonus.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.0.bonus.oneOf.0","typeLabel":"Fixed · object"},{"type":"object","title":"Per count","description":"The extra points awarded, on top of the rule variant result, when the review meets the modifier condition. Either a `fixed` number of points, or a number of points `per_count` of photos, videos or characters, where a matching product counts as one","required":["kind","points","max_points"],"properties":{"kind":{"type":"string","const":"per_count","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.0.bonus.oneOf.1.kind","typeLabel":"string"},"points":{"type":"number","description":"The number of extra points awarded for each photo, video or character in the review, depending on the modifier `kind`. A `matching_product` modifier counts a matching product as one","example":5,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.0.bonus.oneOf.1.points","typeLabel":"number"},"max_points":{"oneOf":[{"description":"The most extra points this modifier can award for one review. `null` means there is no cap","example":20,"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.0.bonus.oneOf.1.max_points.oneOf.0","typeLabel":"number"},{"description":"The most extra points this modifier can award for one review. `null` means there is no cap","example":20,"type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.0.bonus.oneOf.1.max_points.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.0.bonus.oneOf.1.max_points","typeLabel":"number | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.0.bonus.oneOf.1","typeLabel":"Per count · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.0.bonus","typeLabel":"Fixed · object | Per count · object"},"text":{"type":"string","description":"Short, localized text describing this modifier to the shopper, in the requested language and including any wording the store has customized. Where the text has no translation in the requested language, the English text is returned","example":"Include a photo for 10 bonus points","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.0.text","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.0","typeLabel":"Includes photo · object"},{"type":"object","title":"Includes video","description":"Extra points awarded when the review meets a condition, such as including a photo","required":["kind","min_count","bonus","text"],"properties":{"kind":{"type":"string","const":"includes_video","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.1.kind","typeLabel":"string"},"min_count":{"type":"number","description":"The minimum number of videos the review must include","example":1,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.1.min_count","typeLabel":"number"},"bonus":{"oneOf":[{"type":"object","title":"Fixed","description":"The extra points awarded, on top of the rule variant result, when the review meets the modifier condition. Either a `fixed` number of points, or a number of points `per_count` of photos, videos or characters, where a matching product counts as one","required":["kind","points"],"properties":{"kind":{"type":"string","const":"fixed","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.1.bonus.oneOf.0.kind","typeLabel":"string"},"points":{"type":"number","description":"The number of extra points awarded","example":10,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.1.bonus.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.1.bonus.oneOf.0","typeLabel":"Fixed · object"},{"type":"object","title":"Per count","description":"The extra points awarded, on top of the rule variant result, when the review meets the modifier condition. Either a `fixed` number of points, or a number of points `per_count` of photos, videos or characters, where a matching product counts as one","required":["kind","points","max_points"],"properties":{"kind":{"type":"string","const":"per_count","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.1.bonus.oneOf.1.kind","typeLabel":"string"},"points":{"type":"number","description":"The number of extra points awarded for each photo, video or character in the review, depending on the modifier `kind`. A `matching_product` modifier counts a matching product as one","example":5,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.1.bonus.oneOf.1.points","typeLabel":"number"},"max_points":{"oneOf":[{"description":"The most extra points this modifier can award for one review. `null` means there is no cap","example":20,"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.1.bonus.oneOf.1.max_points.oneOf.0","typeLabel":"number"},{"description":"The most extra points this modifier can award for one review. `null` means there is no cap","example":20,"type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.1.bonus.oneOf.1.max_points.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.1.bonus.oneOf.1.max_points","typeLabel":"number | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.1.bonus.oneOf.1","typeLabel":"Per count · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.1.bonus","typeLabel":"Fixed · object | Per count · object"},"text":{"type":"string","description":"Short, localized text describing this modifier to the shopper, in the requested language and including any wording the store has customized. Where the text has no translation in the requested language, the English text is returned","example":"Include a photo for 10 bonus points","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.1.text","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.1","typeLabel":"Includes video · object"},{"type":"object","title":"Text length","description":"Extra points awarded when the review meets a condition, such as including a photo","required":["kind","min_length","bonus","text"],"properties":{"kind":{"type":"string","const":"text_length","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.2.kind","typeLabel":"string"},"min_length":{"type":"number","description":"The minimum number of characters the review text must contain","example":100,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.2.min_length","typeLabel":"number"},"bonus":{"oneOf":[{"type":"object","title":"Fixed","description":"The extra points awarded, on top of the rule variant result, when the review meets the modifier condition. Either a `fixed` number of points, or a number of points `per_count` of photos, videos or characters, where a matching product counts as one","required":["kind","points"],"properties":{"kind":{"type":"string","const":"fixed","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.2.bonus.oneOf.0.kind","typeLabel":"string"},"points":{"type":"number","description":"The number of extra points awarded","example":10,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.2.bonus.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.2.bonus.oneOf.0","typeLabel":"Fixed · object"},{"type":"object","title":"Per count","description":"The extra points awarded, on top of the rule variant result, when the review meets the modifier condition. Either a `fixed` number of points, or a number of points `per_count` of photos, videos or characters, where a matching product counts as one","required":["kind","points","max_points"],"properties":{"kind":{"type":"string","const":"per_count","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.2.bonus.oneOf.1.kind","typeLabel":"string"},"points":{"type":"number","description":"The number of extra points awarded for each photo, video or character in the review, depending on the modifier `kind`. A `matching_product` modifier counts a matching product as one","example":5,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.2.bonus.oneOf.1.points","typeLabel":"number"},"max_points":{"oneOf":[{"description":"The most extra points this modifier can award for one review. `null` means there is no cap","example":20,"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.2.bonus.oneOf.1.max_points.oneOf.0","typeLabel":"number"},{"description":"The most extra points this modifier can award for one review. `null` means there is no cap","example":20,"type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.2.bonus.oneOf.1.max_points.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.2.bonus.oneOf.1.max_points","typeLabel":"number | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.2.bonus.oneOf.1","typeLabel":"Per count · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.2.bonus","typeLabel":"Fixed · object | Per count · object"},"text":{"type":"string","description":"Short, localized text describing this modifier to the shopper, in the requested language and including any wording the store has customized. Where the text has no translation in the requested language, the English text is returned","example":"Include a photo for 10 bonus points","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.2.text","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.2","typeLabel":"Text length · object"},{"type":"object","title":"Matching product","description":"Extra points awarded when the review meets a condition, such as including a photo","required":["kind","product_ids","bonus","text"],"properties":{"kind":{"type":"string","const":"matching_product","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.3.kind","typeLabel":"string"},"product_ids":{"description":"The reviewed product must be one of these products. Each ID is the product's ID in the store's ecommerce platform","example":["8146810290418"],"type":"array","items":{"type":"string","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.3.product_ids.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.3.product_ids","typeLabel":"string[]"},"bonus":{"oneOf":[{"type":"object","title":"Fixed","description":"The extra points awarded, on top of the rule variant result, when the review meets the modifier condition. Either a `fixed` number of points, or a number of points `per_count` of photos, videos or characters, where a matching product counts as one","required":["kind","points"],"properties":{"kind":{"type":"string","const":"fixed","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.3.bonus.oneOf.0.kind","typeLabel":"string"},"points":{"type":"number","description":"The number of extra points awarded","example":10,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.3.bonus.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.3.bonus.oneOf.0","typeLabel":"Fixed · object"},{"type":"object","title":"Per count","description":"The extra points awarded, on top of the rule variant result, when the review meets the modifier condition. Either a `fixed` number of points, or a number of points `per_count` of photos, videos or characters, where a matching product counts as one","required":["kind","points","max_points"],"properties":{"kind":{"type":"string","const":"per_count","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.3.bonus.oneOf.1.kind","typeLabel":"string"},"points":{"type":"number","description":"The number of extra points awarded for each photo, video or character in the review, depending on the modifier `kind`. A `matching_product` modifier counts a matching product as one","example":5,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.3.bonus.oneOf.1.points","typeLabel":"number"},"max_points":{"oneOf":[{"description":"The most extra points this modifier can award for one review. `null` means there is no cap","example":20,"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.3.bonus.oneOf.1.max_points.oneOf.0","typeLabel":"number"},{"description":"The most extra points this modifier can award for one review. `null` means there is no cap","example":20,"type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.3.bonus.oneOf.1.max_points.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.3.bonus.oneOf.1.max_points","typeLabel":"number | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.3.bonus.oneOf.1","typeLabel":"Per count · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.3.bonus","typeLabel":"Fixed · object | Per count · object"},"text":{"type":"string","description":"Short, localized text describing this modifier to the shopper, in the requested language and including any wording the store has customized. Where the text has no translation in the requested language, the English text is returned","example":"Include a photo for 10 bonus points","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.3.text","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX].oneOf.3","typeLabel":"Matching product · object"}],"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers.items.[INDEX]","typeLabel":"Includes photo · object | Includes video · object | Text length · object | Matching product · object"},"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant.modifiers","typeLabel":"(Includes photo · object | Includes video · object | Text length · object | Matching product · object)[]"}},"required":["tier_id","title","description","enabled","result","result_short_text","requirements","modifiers"],"additionalProperties":false,"description":"The rule variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.variant","typeLabel":"object"},"context":{"type":"object","properties":{"last_completed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.context.last_completed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.context.last_completed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.context.last_completed_at","typeLabel":"string | null"},"completion_count":{"type":"number","description":"The number of times this rule has been completed by the customer in total","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.context.completion_count","typeLabel":"number"},"completion_limit":{"oneOf":[{"type":"object","title":"No limit","description":"no limit","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated rule has no limit, so this customer can complete it any number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.context.completion_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.context.completion_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_completions_within_interval","completion_count_within_interval","remaining_completions_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated rule has a limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.context.completion_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.context.completion_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.context.completion_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.context.completion_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_completions_within_interval":{"type":"integer","description":"The number of times this rule can be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.context.completion_limit.oneOf.1.allowed_completions_within_interval","typeLabel":"integer"},"completion_count_within_interval":{"type":"integer","description":"The number of times this rule has been completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.context.completion_limit.oneOf.1.completion_count_within_interval","typeLabel":"integer"},"remaining_completions_within_interval":{"type":"integer","description":"The number of times this rule can still be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.context.completion_limit.oneOf.1.remaining_completions_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.context.completion_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated rule has a limit, the customer has reached it, and the limit will never reset. This means the rule can never be completed again by this customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.context.completion_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.context.completion_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated rule has a limit and the customer has reached it. The customer will be able to complete the rule again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.context.completion_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.context.completion_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can complete the rule again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.context.completion_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.context.completion_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.context.completion_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.context.completion_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["last_completed_at","completion_count","completion_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this rule, such as the number of times they have completed it, or any limit that is in effect","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"string","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"null","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.8","typeLabel":"Review · object"},{"type":"object","title":"Custom","required":["id","limit","kind","properties","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this rule can be completed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"custom","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.kind","typeLabel":"string"},"properties":{"type":"object","properties":{"name":{"type":"string","description":"The name of this custom rule, as set by the merchant","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.properties.name","typeLabel":"string"}},"required":["name"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.properties","typeLabel":"object"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this rule. For example, 'Make a purchase' or 'Refer a friend'","example":"Make a purchase","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this rule variant is enabled. For example, some rules are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.variant.enabled","typeLabel":"boolean"},"result":{"oneOf":[{"type":"object","title":"Points","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","per_currency_unit","points"],"properties":{"kind":{"type":"string","const":"points","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.variant.result.oneOf.0.kind","typeLabel":"string"},"per_currency_unit":{"oneOf":[{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.variant.result.oneOf.0.per_currency_unit.oneOf.0","typeLabel":"number"},{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.variant.result.oneOf.0.per_currency_unit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.variant.result.oneOf.0.per_currency_unit","typeLabel":"number | null"},"points":{"type":"number","description":"The number of points provided when this rule variant is completed. If `per_currency_unit` is not null, this will be the number of points per currency unit (e.g. 5 points per $1)","example":5,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.variant.result.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.variant.result.oneOf.0","typeLabel":"Points · object"},{"type":"object","title":"Reward","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","reward"],"properties":{"kind":{"type":"string","const":"reward","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.variant.result.oneOf.1.kind","typeLabel":"string"},"reward":{"type":"object","properties":{"kind":{"type":"string","enum":["gift_card","cart_discount_voucher","cart_variable_discount_voucher","free_shipping_voucher","product_discount_voucher","collection_discount_voucher","product_cart","active_subscription_discount_voucher","active_subscription_product","custom"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.variant.result.oneOf.1.reward.kind","typeLabel":"enum\u003cstring>"},"title":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.variant.result.oneOf.1.reward.title","typeLabel":"string"}},"required":["kind","title"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.variant.result.oneOf.1.reward","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.variant.result.oneOf.1","typeLabel":"Reward · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.variant.result","typeLabel":"Points · object | Reward · object"},"result_short_text":{"type":"string","description":"Short, localized text indicating the result of completing this rule variant. For example: '100 points', '5 points per $1', or '$5 voucher'","example":"5 points per $1","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.variant.result_short_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","result","result_short_text"],"additionalProperties":false,"description":"The rule variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.variant","typeLabel":"object"},"context":{"type":"object","properties":{"last_completed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.context.last_completed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.context.last_completed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.context.last_completed_at","typeLabel":"string | null"},"completion_count":{"type":"number","description":"The number of times this rule has been completed by the customer in total","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.context.completion_count","typeLabel":"number"},"completion_limit":{"oneOf":[{"type":"object","title":"No limit","description":"no limit","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated rule has no limit, so this customer can complete it any number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.context.completion_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.context.completion_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_completions_within_interval","completion_count_within_interval","remaining_completions_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated rule has a limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.context.completion_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.context.completion_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.context.completion_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.context.completion_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_completions_within_interval":{"type":"integer","description":"The number of times this rule can be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.context.completion_limit.oneOf.1.allowed_completions_within_interval","typeLabel":"integer"},"completion_count_within_interval":{"type":"integer","description":"The number of times this rule has been completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.context.completion_limit.oneOf.1.completion_count_within_interval","typeLabel":"integer"},"remaining_completions_within_interval":{"type":"integer","description":"The number of times this rule can still be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.context.completion_limit.oneOf.1.remaining_completions_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.context.completion_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated rule has a limit, the customer has reached it, and the limit will never reset. This means the rule can never be completed again by this customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.context.completion_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.context.completion_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated rule has a limit and the customer has reached it. The customer will be able to complete the rule again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.context.completion_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.context.completion_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can complete the rule again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.context.completion_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.context.completion_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.context.completion_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.context.completion_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["last_completed_at","completion_count","completion_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this rule, such as the number of times they have completed it, or any limit that is in effect","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"string","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"null","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.9","typeLabel":"Custom · object"},{"type":"object","title":"Facebook Like","required":["id","limit","kind","properties","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this rule can be completed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"facebook_like","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.kind","typeLabel":"string"},"properties":{"type":"object","properties":{"facebook_like_url":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.properties.facebook_like_url","typeLabel":"string"}},"required":["facebook_like_url"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.properties","typeLabel":"object"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this rule. For example, 'Make a purchase' or 'Refer a friend'","example":"Make a purchase","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this rule variant is enabled. For example, some rules are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.variant.enabled","typeLabel":"boolean"},"result":{"oneOf":[{"type":"object","title":"Points","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","per_currency_unit","points"],"properties":{"kind":{"type":"string","const":"points","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.variant.result.oneOf.0.kind","typeLabel":"string"},"per_currency_unit":{"oneOf":[{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.variant.result.oneOf.0.per_currency_unit.oneOf.0","typeLabel":"number"},{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.variant.result.oneOf.0.per_currency_unit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.variant.result.oneOf.0.per_currency_unit","typeLabel":"number | null"},"points":{"type":"number","description":"The number of points provided when this rule variant is completed. If `per_currency_unit` is not null, this will be the number of points per currency unit (e.g. 5 points per $1)","example":5,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.variant.result.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.variant.result.oneOf.0","typeLabel":"Points · object"},{"type":"object","title":"Reward","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","reward"],"properties":{"kind":{"type":"string","const":"reward","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.variant.result.oneOf.1.kind","typeLabel":"string"},"reward":{"type":"object","properties":{"kind":{"type":"string","enum":["gift_card","cart_discount_voucher","cart_variable_discount_voucher","free_shipping_voucher","product_discount_voucher","collection_discount_voucher","product_cart","active_subscription_discount_voucher","active_subscription_product","custom"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.variant.result.oneOf.1.reward.kind","typeLabel":"enum\u003cstring>"},"title":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.variant.result.oneOf.1.reward.title","typeLabel":"string"}},"required":["kind","title"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.variant.result.oneOf.1.reward","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.variant.result.oneOf.1","typeLabel":"Reward · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.variant.result","typeLabel":"Points · object | Reward · object"},"result_short_text":{"type":"string","description":"Short, localized text indicating the result of completing this rule variant. For example: '100 points', '5 points per $1', or '$5 voucher'","example":"5 points per $1","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.variant.result_short_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","result","result_short_text"],"additionalProperties":false,"description":"The rule variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.variant","typeLabel":"object"},"context":{"type":"object","properties":{"last_completed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.context.last_completed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.context.last_completed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.context.last_completed_at","typeLabel":"string | null"},"completion_count":{"type":"number","description":"The number of times this rule has been completed by the customer in total","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.context.completion_count","typeLabel":"number"},"completion_limit":{"oneOf":[{"type":"object","title":"No limit","description":"no limit","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated rule has no limit, so this customer can complete it any number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.context.completion_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.context.completion_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_completions_within_interval","completion_count_within_interval","remaining_completions_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated rule has a limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.context.completion_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.context.completion_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.context.completion_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.context.completion_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_completions_within_interval":{"type":"integer","description":"The number of times this rule can be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.context.completion_limit.oneOf.1.allowed_completions_within_interval","typeLabel":"integer"},"completion_count_within_interval":{"type":"integer","description":"The number of times this rule has been completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.context.completion_limit.oneOf.1.completion_count_within_interval","typeLabel":"integer"},"remaining_completions_within_interval":{"type":"integer","description":"The number of times this rule can still be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.context.completion_limit.oneOf.1.remaining_completions_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.context.completion_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated rule has a limit, the customer has reached it, and the limit will never reset. This means the rule can never be completed again by this customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.context.completion_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.context.completion_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated rule has a limit and the customer has reached it. The customer will be able to complete the rule again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.context.completion_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.context.completion_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can complete the rule again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.context.completion_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.context.completion_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.context.completion_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.context.completion_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["last_completed_at","completion_count","completion_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this rule, such as the number of times they have completed it, or any limit that is in effect","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"string","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"null","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.10","typeLabel":"Facebook Like · object"},{"type":"object","title":"Twitter follow","required":["id","limit","kind","properties","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this rule can be completed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"twitter_follow","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.kind","typeLabel":"string"},"properties":{"type":"object","properties":{"twitter_handle":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.properties.twitter_handle","typeLabel":"string"}},"required":["twitter_handle"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.properties","typeLabel":"object"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this rule. For example, 'Make a purchase' or 'Refer a friend'","example":"Make a purchase","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this rule variant is enabled. For example, some rules are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.variant.enabled","typeLabel":"boolean"},"result":{"oneOf":[{"type":"object","title":"Points","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","per_currency_unit","points"],"properties":{"kind":{"type":"string","const":"points","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.variant.result.oneOf.0.kind","typeLabel":"string"},"per_currency_unit":{"oneOf":[{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.variant.result.oneOf.0.per_currency_unit.oneOf.0","typeLabel":"number"},{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.variant.result.oneOf.0.per_currency_unit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.variant.result.oneOf.0.per_currency_unit","typeLabel":"number | null"},"points":{"type":"number","description":"The number of points provided when this rule variant is completed. If `per_currency_unit` is not null, this will be the number of points per currency unit (e.g. 5 points per $1)","example":5,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.variant.result.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.variant.result.oneOf.0","typeLabel":"Points · object"},{"type":"object","title":"Reward","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","reward"],"properties":{"kind":{"type":"string","const":"reward","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.variant.result.oneOf.1.kind","typeLabel":"string"},"reward":{"type":"object","properties":{"kind":{"type":"string","enum":["gift_card","cart_discount_voucher","cart_variable_discount_voucher","free_shipping_voucher","product_discount_voucher","collection_discount_voucher","product_cart","active_subscription_discount_voucher","active_subscription_product","custom"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.variant.result.oneOf.1.reward.kind","typeLabel":"enum\u003cstring>"},"title":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.variant.result.oneOf.1.reward.title","typeLabel":"string"}},"required":["kind","title"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.variant.result.oneOf.1.reward","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.variant.result.oneOf.1","typeLabel":"Reward · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.variant.result","typeLabel":"Points · object | Reward · object"},"result_short_text":{"type":"string","description":"Short, localized text indicating the result of completing this rule variant. For example: '100 points', '5 points per $1', or '$5 voucher'","example":"5 points per $1","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.variant.result_short_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","result","result_short_text"],"additionalProperties":false,"description":"The rule variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.variant","typeLabel":"object"},"context":{"type":"object","properties":{"last_completed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.context.last_completed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.context.last_completed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.context.last_completed_at","typeLabel":"string | null"},"completion_count":{"type":"number","description":"The number of times this rule has been completed by the customer in total","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.context.completion_count","typeLabel":"number"},"completion_limit":{"oneOf":[{"type":"object","title":"No limit","description":"no limit","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated rule has no limit, so this customer can complete it any number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.context.completion_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.context.completion_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_completions_within_interval","completion_count_within_interval","remaining_completions_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated rule has a limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.context.completion_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.context.completion_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.context.completion_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.context.completion_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_completions_within_interval":{"type":"integer","description":"The number of times this rule can be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.context.completion_limit.oneOf.1.allowed_completions_within_interval","typeLabel":"integer"},"completion_count_within_interval":{"type":"integer","description":"The number of times this rule has been completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.context.completion_limit.oneOf.1.completion_count_within_interval","typeLabel":"integer"},"remaining_completions_within_interval":{"type":"integer","description":"The number of times this rule can still be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.context.completion_limit.oneOf.1.remaining_completions_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.context.completion_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated rule has a limit, the customer has reached it, and the limit will never reset. This means the rule can never be completed again by this customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.context.completion_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.context.completion_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated rule has a limit and the customer has reached it. The customer will be able to complete the rule again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.context.completion_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.context.completion_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can complete the rule again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.context.completion_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.context.completion_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.context.completion_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.context.completion_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["last_completed_at","completion_count","completion_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this rule, such as the number of times they have completed it, or any limit that is in effect","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"string","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"null","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.11","typeLabel":"Twitter follow · object"},{"type":"object","title":"Instagram follow","required":["id","limit","kind","properties","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this rule can be completed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"instagram_follow","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.kind","typeLabel":"string"},"properties":{"type":"object","properties":{"instagram_handle":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.properties.instagram_handle","typeLabel":"string"}},"required":["instagram_handle"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.properties","typeLabel":"object"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this rule. For example, 'Make a purchase' or 'Refer a friend'","example":"Make a purchase","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this rule variant is enabled. For example, some rules are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.variant.enabled","typeLabel":"boolean"},"result":{"oneOf":[{"type":"object","title":"Points","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","per_currency_unit","points"],"properties":{"kind":{"type":"string","const":"points","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.variant.result.oneOf.0.kind","typeLabel":"string"},"per_currency_unit":{"oneOf":[{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.variant.result.oneOf.0.per_currency_unit.oneOf.0","typeLabel":"number"},{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.variant.result.oneOf.0.per_currency_unit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.variant.result.oneOf.0.per_currency_unit","typeLabel":"number | null"},"points":{"type":"number","description":"The number of points provided when this rule variant is completed. If `per_currency_unit` is not null, this will be the number of points per currency unit (e.g. 5 points per $1)","example":5,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.variant.result.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.variant.result.oneOf.0","typeLabel":"Points · object"},{"type":"object","title":"Reward","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","reward"],"properties":{"kind":{"type":"string","const":"reward","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.variant.result.oneOf.1.kind","typeLabel":"string"},"reward":{"type":"object","properties":{"kind":{"type":"string","enum":["gift_card","cart_discount_voucher","cart_variable_discount_voucher","free_shipping_voucher","product_discount_voucher","collection_discount_voucher","product_cart","active_subscription_discount_voucher","active_subscription_product","custom"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.variant.result.oneOf.1.reward.kind","typeLabel":"enum\u003cstring>"},"title":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.variant.result.oneOf.1.reward.title","typeLabel":"string"}},"required":["kind","title"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.variant.result.oneOf.1.reward","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.variant.result.oneOf.1","typeLabel":"Reward · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.variant.result","typeLabel":"Points · object | Reward · object"},"result_short_text":{"type":"string","description":"Short, localized text indicating the result of completing this rule variant. For example: '100 points', '5 points per $1', or '$5 voucher'","example":"5 points per $1","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.variant.result_short_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","result","result_short_text"],"additionalProperties":false,"description":"The rule variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.variant","typeLabel":"object"},"context":{"type":"object","properties":{"last_completed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.context.last_completed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.context.last_completed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.context.last_completed_at","typeLabel":"string | null"},"completion_count":{"type":"number","description":"The number of times this rule has been completed by the customer in total","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.context.completion_count","typeLabel":"number"},"completion_limit":{"oneOf":[{"type":"object","title":"No limit","description":"no limit","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated rule has no limit, so this customer can complete it any number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.context.completion_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.context.completion_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_completions_within_interval","completion_count_within_interval","remaining_completions_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated rule has a limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.context.completion_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.context.completion_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.context.completion_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.context.completion_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_completions_within_interval":{"type":"integer","description":"The number of times this rule can be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.context.completion_limit.oneOf.1.allowed_completions_within_interval","typeLabel":"integer"},"completion_count_within_interval":{"type":"integer","description":"The number of times this rule has been completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.context.completion_limit.oneOf.1.completion_count_within_interval","typeLabel":"integer"},"remaining_completions_within_interval":{"type":"integer","description":"The number of times this rule can still be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.context.completion_limit.oneOf.1.remaining_completions_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.context.completion_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated rule has a limit, the customer has reached it, and the limit will never reset. This means the rule can never be completed again by this customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.context.completion_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.context.completion_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated rule has a limit and the customer has reached it. The customer will be able to complete the rule again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.context.completion_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.context.completion_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can complete the rule again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.context.completion_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.context.completion_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.context.completion_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.context.completion_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["last_completed_at","completion_count","completion_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this rule, such as the number of times they have completed it, or any limit that is in effect","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"string","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"null","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.12","typeLabel":"Instagram follow · object"},{"type":"object","title":"Instagram mention","required":["id","limit","kind","properties","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this rule can be completed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"instagram_mention","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.kind","typeLabel":"string"},"properties":{"type":"object","properties":{"instagram_handle":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.properties.instagram_handle","typeLabel":"string"}},"required":["instagram_handle"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.properties","typeLabel":"object"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this rule. For example, 'Make a purchase' or 'Refer a friend'","example":"Make a purchase","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this rule variant is enabled. For example, some rules are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.variant.enabled","typeLabel":"boolean"},"result":{"oneOf":[{"type":"object","title":"Points","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","per_currency_unit","points"],"properties":{"kind":{"type":"string","const":"points","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.variant.result.oneOf.0.kind","typeLabel":"string"},"per_currency_unit":{"oneOf":[{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.variant.result.oneOf.0.per_currency_unit.oneOf.0","typeLabel":"number"},{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.variant.result.oneOf.0.per_currency_unit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.variant.result.oneOf.0.per_currency_unit","typeLabel":"number | null"},"points":{"type":"number","description":"The number of points provided when this rule variant is completed. If `per_currency_unit` is not null, this will be the number of points per currency unit (e.g. 5 points per $1)","example":5,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.variant.result.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.variant.result.oneOf.0","typeLabel":"Points · object"},{"type":"object","title":"Reward","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","reward"],"properties":{"kind":{"type":"string","const":"reward","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.variant.result.oneOf.1.kind","typeLabel":"string"},"reward":{"type":"object","properties":{"kind":{"type":"string","enum":["gift_card","cart_discount_voucher","cart_variable_discount_voucher","free_shipping_voucher","product_discount_voucher","collection_discount_voucher","product_cart","active_subscription_discount_voucher","active_subscription_product","custom"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.variant.result.oneOf.1.reward.kind","typeLabel":"enum\u003cstring>"},"title":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.variant.result.oneOf.1.reward.title","typeLabel":"string"}},"required":["kind","title"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.variant.result.oneOf.1.reward","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.variant.result.oneOf.1","typeLabel":"Reward · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.variant.result","typeLabel":"Points · object | Reward · object"},"result_short_text":{"type":"string","description":"Short, localized text indicating the result of completing this rule variant. For example: '100 points', '5 points per $1', or '$5 voucher'","example":"5 points per $1","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.variant.result_short_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","result","result_short_text"],"additionalProperties":false,"description":"The rule variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.variant","typeLabel":"object"},"context":{"type":"object","properties":{"last_completed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.context.last_completed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.context.last_completed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.context.last_completed_at","typeLabel":"string | null"},"completion_count":{"type":"number","description":"The number of times this rule has been completed by the customer in total","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.context.completion_count","typeLabel":"number"},"completion_limit":{"oneOf":[{"type":"object","title":"No limit","description":"no limit","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated rule has no limit, so this customer can complete it any number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.context.completion_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.context.completion_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_completions_within_interval","completion_count_within_interval","remaining_completions_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated rule has a limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.context.completion_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.context.completion_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.context.completion_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.context.completion_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_completions_within_interval":{"type":"integer","description":"The number of times this rule can be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.context.completion_limit.oneOf.1.allowed_completions_within_interval","typeLabel":"integer"},"completion_count_within_interval":{"type":"integer","description":"The number of times this rule has been completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.context.completion_limit.oneOf.1.completion_count_within_interval","typeLabel":"integer"},"remaining_completions_within_interval":{"type":"integer","description":"The number of times this rule can still be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.context.completion_limit.oneOf.1.remaining_completions_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.context.completion_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated rule has a limit, the customer has reached it, and the limit will never reset. This means the rule can never be completed again by this customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.context.completion_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.context.completion_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated rule has a limit and the customer has reached it. The customer will be able to complete the rule again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.context.completion_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.context.completion_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can complete the rule again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.context.completion_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.context.completion_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.context.completion_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.context.completion_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["last_completed_at","completion_count","completion_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this rule, such as the number of times they have completed it, or any limit that is in effect","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"string","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"null","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.13","typeLabel":"Instagram mention · object"},{"type":"object","title":"Instagram post hashtag","required":["id","limit","kind","properties","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this rule can be completed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"instagram_post_hashtag","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.kind","typeLabel":"string"},"properties":{"type":"object","properties":{"instagram_handle":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.properties.instagram_handle","typeLabel":"string"},"hashtag":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.properties.hashtag","typeLabel":"string"}},"required":["instagram_handle","hashtag"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.properties","typeLabel":"object"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this rule. For example, 'Make a purchase' or 'Refer a friend'","example":"Make a purchase","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this rule variant is enabled. For example, some rules are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.variant.enabled","typeLabel":"boolean"},"result":{"oneOf":[{"type":"object","title":"Points","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","per_currency_unit","points"],"properties":{"kind":{"type":"string","const":"points","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.variant.result.oneOf.0.kind","typeLabel":"string"},"per_currency_unit":{"oneOf":[{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.variant.result.oneOf.0.per_currency_unit.oneOf.0","typeLabel":"number"},{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.variant.result.oneOf.0.per_currency_unit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.variant.result.oneOf.0.per_currency_unit","typeLabel":"number | null"},"points":{"type":"number","description":"The number of points provided when this rule variant is completed. If `per_currency_unit` is not null, this will be the number of points per currency unit (e.g. 5 points per $1)","example":5,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.variant.result.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.variant.result.oneOf.0","typeLabel":"Points · object"},{"type":"object","title":"Reward","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","reward"],"properties":{"kind":{"type":"string","const":"reward","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.variant.result.oneOf.1.kind","typeLabel":"string"},"reward":{"type":"object","properties":{"kind":{"type":"string","enum":["gift_card","cart_discount_voucher","cart_variable_discount_voucher","free_shipping_voucher","product_discount_voucher","collection_discount_voucher","product_cart","active_subscription_discount_voucher","active_subscription_product","custom"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.variant.result.oneOf.1.reward.kind","typeLabel":"enum\u003cstring>"},"title":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.variant.result.oneOf.1.reward.title","typeLabel":"string"}},"required":["kind","title"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.variant.result.oneOf.1.reward","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.variant.result.oneOf.1","typeLabel":"Reward · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.variant.result","typeLabel":"Points · object | Reward · object"},"result_short_text":{"type":"string","description":"Short, localized text indicating the result of completing this rule variant. For example: '100 points', '5 points per $1', or '$5 voucher'","example":"5 points per $1","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.variant.result_short_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","result","result_short_text"],"additionalProperties":false,"description":"The rule variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.variant","typeLabel":"object"},"context":{"type":"object","properties":{"last_completed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.context.last_completed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.context.last_completed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.context.last_completed_at","typeLabel":"string | null"},"completion_count":{"type":"number","description":"The number of times this rule has been completed by the customer in total","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.context.completion_count","typeLabel":"number"},"completion_limit":{"oneOf":[{"type":"object","title":"No limit","description":"no limit","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated rule has no limit, so this customer can complete it any number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.context.completion_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.context.completion_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_completions_within_interval","completion_count_within_interval","remaining_completions_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated rule has a limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.context.completion_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.context.completion_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.context.completion_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.context.completion_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_completions_within_interval":{"type":"integer","description":"The number of times this rule can be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.context.completion_limit.oneOf.1.allowed_completions_within_interval","typeLabel":"integer"},"completion_count_within_interval":{"type":"integer","description":"The number of times this rule has been completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.context.completion_limit.oneOf.1.completion_count_within_interval","typeLabel":"integer"},"remaining_completions_within_interval":{"type":"integer","description":"The number of times this rule can still be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.context.completion_limit.oneOf.1.remaining_completions_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.context.completion_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated rule has a limit, the customer has reached it, and the limit will never reset. This means the rule can never be completed again by this customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.context.completion_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.context.completion_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated rule has a limit and the customer has reached it. The customer will be able to complete the rule again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.context.completion_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.context.completion_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can complete the rule again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.context.completion_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.context.completion_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.context.completion_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.context.completion_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["last_completed_at","completion_count","completion_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this rule, such as the number of times they have completed it, or any limit that is in effect","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"string","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"null","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.14","typeLabel":"Instagram post hashtag · object"},{"type":"object","title":"Tiktok follow","required":["id","limit","kind","properties","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this rule can be completed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"tiktok_follow","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.kind","typeLabel":"string"},"properties":{"type":"object","properties":{"tiktok_handle":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.properties.tiktok_handle","typeLabel":"string"}},"required":["tiktok_handle"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.properties","typeLabel":"object"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this rule. For example, 'Make a purchase' or 'Refer a friend'","example":"Make a purchase","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this rule variant is enabled. For example, some rules are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.variant.enabled","typeLabel":"boolean"},"result":{"oneOf":[{"type":"object","title":"Points","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","per_currency_unit","points"],"properties":{"kind":{"type":"string","const":"points","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.variant.result.oneOf.0.kind","typeLabel":"string"},"per_currency_unit":{"oneOf":[{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.variant.result.oneOf.0.per_currency_unit.oneOf.0","typeLabel":"number"},{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.variant.result.oneOf.0.per_currency_unit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.variant.result.oneOf.0.per_currency_unit","typeLabel":"number | null"},"points":{"type":"number","description":"The number of points provided when this rule variant is completed. If `per_currency_unit` is not null, this will be the number of points per currency unit (e.g. 5 points per $1)","example":5,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.variant.result.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.variant.result.oneOf.0","typeLabel":"Points · object"},{"type":"object","title":"Reward","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","reward"],"properties":{"kind":{"type":"string","const":"reward","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.variant.result.oneOf.1.kind","typeLabel":"string"},"reward":{"type":"object","properties":{"kind":{"type":"string","enum":["gift_card","cart_discount_voucher","cart_variable_discount_voucher","free_shipping_voucher","product_discount_voucher","collection_discount_voucher","product_cart","active_subscription_discount_voucher","active_subscription_product","custom"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.variant.result.oneOf.1.reward.kind","typeLabel":"enum\u003cstring>"},"title":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.variant.result.oneOf.1.reward.title","typeLabel":"string"}},"required":["kind","title"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.variant.result.oneOf.1.reward","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.variant.result.oneOf.1","typeLabel":"Reward · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.variant.result","typeLabel":"Points · object | Reward · object"},"result_short_text":{"type":"string","description":"Short, localized text indicating the result of completing this rule variant. For example: '100 points', '5 points per $1', or '$5 voucher'","example":"5 points per $1","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.variant.result_short_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","result","result_short_text"],"additionalProperties":false,"description":"The rule variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.variant","typeLabel":"object"},"context":{"type":"object","properties":{"last_completed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.context.last_completed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.context.last_completed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.context.last_completed_at","typeLabel":"string | null"},"completion_count":{"type":"number","description":"The number of times this rule has been completed by the customer in total","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.context.completion_count","typeLabel":"number"},"completion_limit":{"oneOf":[{"type":"object","title":"No limit","description":"no limit","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated rule has no limit, so this customer can complete it any number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.context.completion_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.context.completion_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_completions_within_interval","completion_count_within_interval","remaining_completions_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated rule has a limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.context.completion_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.context.completion_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.context.completion_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.context.completion_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_completions_within_interval":{"type":"integer","description":"The number of times this rule can be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.context.completion_limit.oneOf.1.allowed_completions_within_interval","typeLabel":"integer"},"completion_count_within_interval":{"type":"integer","description":"The number of times this rule has been completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.context.completion_limit.oneOf.1.completion_count_within_interval","typeLabel":"integer"},"remaining_completions_within_interval":{"type":"integer","description":"The number of times this rule can still be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.context.completion_limit.oneOf.1.remaining_completions_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.context.completion_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated rule has a limit, the customer has reached it, and the limit will never reset. This means the rule can never be completed again by this customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.context.completion_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.context.completion_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated rule has a limit and the customer has reached it. The customer will be able to complete the rule again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.context.completion_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.context.completion_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can complete the rule again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.context.completion_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.context.completion_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.context.completion_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.context.completion_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["last_completed_at","completion_count","completion_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this rule, such as the number of times they have completed it, or any limit that is in effect","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"string","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"null","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.15","typeLabel":"Tiktok follow · object"},{"type":"object","title":"Tiktok post hashtag","required":["id","limit","kind","properties","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this rule can be completed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"tiktok_post_hashtag","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.kind","typeLabel":"string"},"properties":{"type":"object","properties":{"hashtag":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.properties.hashtag","typeLabel":"string"}},"required":["hashtag"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.properties","typeLabel":"object"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this rule. For example, 'Make a purchase' or 'Refer a friend'","example":"Make a purchase","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this rule variant is enabled. For example, some rules are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.variant.enabled","typeLabel":"boolean"},"result":{"oneOf":[{"type":"object","title":"Points","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","per_currency_unit","points"],"properties":{"kind":{"type":"string","const":"points","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.variant.result.oneOf.0.kind","typeLabel":"string"},"per_currency_unit":{"oneOf":[{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.variant.result.oneOf.0.per_currency_unit.oneOf.0","typeLabel":"number"},{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.variant.result.oneOf.0.per_currency_unit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.variant.result.oneOf.0.per_currency_unit","typeLabel":"number | null"},"points":{"type":"number","description":"The number of points provided when this rule variant is completed. If `per_currency_unit` is not null, this will be the number of points per currency unit (e.g. 5 points per $1)","example":5,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.variant.result.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.variant.result.oneOf.0","typeLabel":"Points · object"},{"type":"object","title":"Reward","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","reward"],"properties":{"kind":{"type":"string","const":"reward","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.variant.result.oneOf.1.kind","typeLabel":"string"},"reward":{"type":"object","properties":{"kind":{"type":"string","enum":["gift_card","cart_discount_voucher","cart_variable_discount_voucher","free_shipping_voucher","product_discount_voucher","collection_discount_voucher","product_cart","active_subscription_discount_voucher","active_subscription_product","custom"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.variant.result.oneOf.1.reward.kind","typeLabel":"enum\u003cstring>"},"title":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.variant.result.oneOf.1.reward.title","typeLabel":"string"}},"required":["kind","title"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.variant.result.oneOf.1.reward","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.variant.result.oneOf.1","typeLabel":"Reward · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.variant.result","typeLabel":"Points · object | Reward · object"},"result_short_text":{"type":"string","description":"Short, localized text indicating the result of completing this rule variant. For example: '100 points', '5 points per $1', or '$5 voucher'","example":"5 points per $1","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.variant.result_short_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","result","result_short_text"],"additionalProperties":false,"description":"The rule variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.variant","typeLabel":"object"},"context":{"type":"object","properties":{"last_completed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.context.last_completed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.context.last_completed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.context.last_completed_at","typeLabel":"string | null"},"completion_count":{"type":"number","description":"The number of times this rule has been completed by the customer in total","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.context.completion_count","typeLabel":"number"},"completion_limit":{"oneOf":[{"type":"object","title":"No limit","description":"no limit","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated rule has no limit, so this customer can complete it any number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.context.completion_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.context.completion_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_completions_within_interval","completion_count_within_interval","remaining_completions_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated rule has a limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.context.completion_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.context.completion_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.context.completion_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.context.completion_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_completions_within_interval":{"type":"integer","description":"The number of times this rule can be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.context.completion_limit.oneOf.1.allowed_completions_within_interval","typeLabel":"integer"},"completion_count_within_interval":{"type":"integer","description":"The number of times this rule has been completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.context.completion_limit.oneOf.1.completion_count_within_interval","typeLabel":"integer"},"remaining_completions_within_interval":{"type":"integer","description":"The number of times this rule can still be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.context.completion_limit.oneOf.1.remaining_completions_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.context.completion_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated rule has a limit, the customer has reached it, and the limit will never reset. This means the rule can never be completed again by this customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.context.completion_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.context.completion_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated rule has a limit and the customer has reached it. The customer will be able to complete the rule again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.context.completion_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.context.completion_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can complete the rule again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.context.completion_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.context.completion_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.context.completion_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.context.completion_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["last_completed_at","completion_count","completion_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this rule, such as the number of times they have completed it, or any limit that is in effect","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"string","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"null","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.16","typeLabel":"Tiktok post hashtag · object"},{"type":"object","title":"Referral","required":["id","limit","kind","properties","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this rule can be completed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"referral","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.kind","typeLabel":"string"},"properties":{"type":"object","properties":{"trigger":{"type":"string","enum":["any_purchase","qualifying_purchase"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.properties.trigger","typeLabel":"enum\u003cstring>"}},"required":["trigger"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.properties","typeLabel":"object"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this rule. For example, 'Make a purchase' or 'Refer a friend'","example":"Make a purchase","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this rule variant is enabled. For example, some rules are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.variant.enabled","typeLabel":"boolean"},"result":{"oneOf":[{"type":"object","title":"Points","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","per_currency_unit","points"],"properties":{"kind":{"type":"string","const":"points","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.variant.result.oneOf.0.kind","typeLabel":"string"},"per_currency_unit":{"oneOf":[{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.variant.result.oneOf.0.per_currency_unit.oneOf.0","typeLabel":"number"},{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.variant.result.oneOf.0.per_currency_unit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.variant.result.oneOf.0.per_currency_unit","typeLabel":"number | null"},"points":{"type":"number","description":"The number of points provided when this rule variant is completed. If `per_currency_unit` is not null, this will be the number of points per currency unit (e.g. 5 points per $1)","example":5,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.variant.result.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.variant.result.oneOf.0","typeLabel":"Points · object"},{"type":"object","title":"Reward","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","reward"],"properties":{"kind":{"type":"string","const":"reward","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.variant.result.oneOf.1.kind","typeLabel":"string"},"reward":{"type":"object","properties":{"kind":{"type":"string","enum":["gift_card","cart_discount_voucher","cart_variable_discount_voucher","free_shipping_voucher","product_discount_voucher","collection_discount_voucher","product_cart","active_subscription_discount_voucher","active_subscription_product","custom"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.variant.result.oneOf.1.reward.kind","typeLabel":"enum\u003cstring>"},"title":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.variant.result.oneOf.1.reward.title","typeLabel":"string"}},"required":["kind","title"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.variant.result.oneOf.1.reward","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.variant.result.oneOf.1","typeLabel":"Reward · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.variant.result","typeLabel":"Points · object | Reward · object"},"result_short_text":{"type":"string","description":"Short, localized text indicating the result of completing this rule variant. For example: '100 points', '5 points per $1', or '$5 voucher'","example":"5 points per $1","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.variant.result_short_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","result","result_short_text"],"additionalProperties":false,"description":"The rule variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.variant","typeLabel":"object"},"context":{"type":"object","properties":{"last_completed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.context.last_completed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.context.last_completed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.context.last_completed_at","typeLabel":"string | null"},"completion_count":{"type":"number","description":"The number of times this rule has been completed by the customer in total","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.context.completion_count","typeLabel":"number"},"completion_limit":{"oneOf":[{"type":"object","title":"No limit","description":"no limit","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated rule has no limit, so this customer can complete it any number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.context.completion_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.context.completion_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_completions_within_interval","completion_count_within_interval","remaining_completions_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated rule has a limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.context.completion_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.context.completion_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.context.completion_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.context.completion_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_completions_within_interval":{"type":"integer","description":"The number of times this rule can be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.context.completion_limit.oneOf.1.allowed_completions_within_interval","typeLabel":"integer"},"completion_count_within_interval":{"type":"integer","description":"The number of times this rule has been completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.context.completion_limit.oneOf.1.completion_count_within_interval","typeLabel":"integer"},"remaining_completions_within_interval":{"type":"integer","description":"The number of times this rule can still be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.context.completion_limit.oneOf.1.remaining_completions_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.context.completion_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated rule has a limit, the customer has reached it, and the limit will never reset. This means the rule can never be completed again by this customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.context.completion_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.context.completion_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated rule has a limit and the customer has reached it. The customer will be able to complete the rule again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.context.completion_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.context.completion_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can complete the rule again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.context.completion_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.context.completion_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.context.completion_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.context.completion_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["last_completed_at","completion_count","completion_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this rule, such as the number of times they have completed it, or any limit that is in effect","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"string","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"null","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.17","typeLabel":"Referral · object"},{"type":"object","title":"Clickthrough","required":["id","limit","kind","properties","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this rule can be completed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"clickthrough","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.kind","typeLabel":"string"},"properties":{"type":"object","properties":{"destination_url":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.properties.destination_url","typeLabel":"string"}},"required":["destination_url"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.properties","typeLabel":"object"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this rule. For example, 'Make a purchase' or 'Refer a friend'","example":"Make a purchase","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this rule variant is enabled. For example, some rules are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.variant.enabled","typeLabel":"boolean"},"result":{"oneOf":[{"type":"object","title":"Points","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","per_currency_unit","points"],"properties":{"kind":{"type":"string","const":"points","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.variant.result.oneOf.0.kind","typeLabel":"string"},"per_currency_unit":{"oneOf":[{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.variant.result.oneOf.0.per_currency_unit.oneOf.0","typeLabel":"number"},{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.variant.result.oneOf.0.per_currency_unit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.variant.result.oneOf.0.per_currency_unit","typeLabel":"number | null"},"points":{"type":"number","description":"The number of points provided when this rule variant is completed. If `per_currency_unit` is not null, this will be the number of points per currency unit (e.g. 5 points per $1)","example":5,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.variant.result.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.variant.result.oneOf.0","typeLabel":"Points · object"},{"type":"object","title":"Reward","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","reward"],"properties":{"kind":{"type":"string","const":"reward","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.variant.result.oneOf.1.kind","typeLabel":"string"},"reward":{"type":"object","properties":{"kind":{"type":"string","enum":["gift_card","cart_discount_voucher","cart_variable_discount_voucher","free_shipping_voucher","product_discount_voucher","collection_discount_voucher","product_cart","active_subscription_discount_voucher","active_subscription_product","custom"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.variant.result.oneOf.1.reward.kind","typeLabel":"enum\u003cstring>"},"title":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.variant.result.oneOf.1.reward.title","typeLabel":"string"}},"required":["kind","title"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.variant.result.oneOf.1.reward","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.variant.result.oneOf.1","typeLabel":"Reward · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.variant.result","typeLabel":"Points · object | Reward · object"},"result_short_text":{"type":"string","description":"Short, localized text indicating the result of completing this rule variant. For example: '100 points', '5 points per $1', or '$5 voucher'","example":"5 points per $1","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.variant.result_short_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","result","result_short_text"],"additionalProperties":false,"description":"The rule variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.variant","typeLabel":"object"},"context":{"type":"object","properties":{"last_completed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.context.last_completed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.context.last_completed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.context.last_completed_at","typeLabel":"string | null"},"completion_count":{"type":"number","description":"The number of times this rule has been completed by the customer in total","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.context.completion_count","typeLabel":"number"},"completion_limit":{"oneOf":[{"type":"object","title":"No limit","description":"no limit","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated rule has no limit, so this customer can complete it any number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.context.completion_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.context.completion_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_completions_within_interval","completion_count_within_interval","remaining_completions_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated rule has a limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.context.completion_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.context.completion_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.context.completion_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.context.completion_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_completions_within_interval":{"type":"integer","description":"The number of times this rule can be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.context.completion_limit.oneOf.1.allowed_completions_within_interval","typeLabel":"integer"},"completion_count_within_interval":{"type":"integer","description":"The number of times this rule has been completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.context.completion_limit.oneOf.1.completion_count_within_interval","typeLabel":"integer"},"remaining_completions_within_interval":{"type":"integer","description":"The number of times this rule can still be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.context.completion_limit.oneOf.1.remaining_completions_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.context.completion_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated rule has a limit, the customer has reached it, and the limit will never reset. This means the rule can never be completed again by this customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.context.completion_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.context.completion_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated rule has a limit and the customer has reached it. The customer will be able to complete the rule again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.context.completion_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.context.completion_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can complete the rule again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.context.completion_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.context.completion_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.context.completion_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.context.completion_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["last_completed_at","completion_count","completion_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this rule, such as the number of times they have completed it, or any limit that is in effect","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"string","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"null","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.18","typeLabel":"Clickthrough · object"},{"type":"object","title":"Retail purchase","required":["id","limit","kind","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this rule can be completed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"retail_purchase","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.kind","typeLabel":"string"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this rule. For example, 'Make a purchase' or 'Refer a friend'","example":"Make a purchase","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this rule variant is enabled. For example, some rules are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.variant.enabled","typeLabel":"boolean"},"result":{"oneOf":[{"type":"object","title":"Points","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","per_currency_unit","points"],"properties":{"kind":{"type":"string","const":"points","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.variant.result.oneOf.0.kind","typeLabel":"string"},"per_currency_unit":{"oneOf":[{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.variant.result.oneOf.0.per_currency_unit.oneOf.0","typeLabel":"number"},{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.variant.result.oneOf.0.per_currency_unit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.variant.result.oneOf.0.per_currency_unit","typeLabel":"number | null"},"points":{"type":"number","description":"The number of points provided when this rule variant is completed. If `per_currency_unit` is not null, this will be the number of points per currency unit (e.g. 5 points per $1)","example":5,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.variant.result.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.variant.result.oneOf.0","typeLabel":"Points · object"},{"type":"object","title":"Reward","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","reward"],"properties":{"kind":{"type":"string","const":"reward","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.variant.result.oneOf.1.kind","typeLabel":"string"},"reward":{"type":"object","properties":{"kind":{"type":"string","enum":["gift_card","cart_discount_voucher","cart_variable_discount_voucher","free_shipping_voucher","product_discount_voucher","collection_discount_voucher","product_cart","active_subscription_discount_voucher","active_subscription_product","custom"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.variant.result.oneOf.1.reward.kind","typeLabel":"enum\u003cstring>"},"title":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.variant.result.oneOf.1.reward.title","typeLabel":"string"}},"required":["kind","title"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.variant.result.oneOf.1.reward","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.variant.result.oneOf.1","typeLabel":"Reward · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.variant.result","typeLabel":"Points · object | Reward · object"},"result_short_text":{"type":"string","description":"Short, localized text indicating the result of completing this rule variant. For example: '100 points', '5 points per $1', or '$5 voucher'","example":"5 points per $1","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.variant.result_short_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","result","result_short_text"],"additionalProperties":false,"description":"The rule variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.variant","typeLabel":"object"},"context":{"type":"object","properties":{"last_completed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.context.last_completed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.context.last_completed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.context.last_completed_at","typeLabel":"string | null"},"completion_count":{"type":"number","description":"The number of times this rule has been completed by the customer in total","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.context.completion_count","typeLabel":"number"},"completion_limit":{"oneOf":[{"type":"object","title":"No limit","description":"no limit","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated rule has no limit, so this customer can complete it any number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.context.completion_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.context.completion_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_completions_within_interval","completion_count_within_interval","remaining_completions_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated rule has a limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.context.completion_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.context.completion_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.context.completion_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.context.completion_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_completions_within_interval":{"type":"integer","description":"The number of times this rule can be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.context.completion_limit.oneOf.1.allowed_completions_within_interval","typeLabel":"integer"},"completion_count_within_interval":{"type":"integer","description":"The number of times this rule has been completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.context.completion_limit.oneOf.1.completion_count_within_interval","typeLabel":"integer"},"remaining_completions_within_interval":{"type":"integer","description":"The number of times this rule can still be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.context.completion_limit.oneOf.1.remaining_completions_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.context.completion_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated rule has a limit, the customer has reached it, and the limit will never reset. This means the rule can never be completed again by this customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.context.completion_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.context.completion_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated rule has a limit and the customer has reached it. The customer will be able to complete the rule again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.context.completion_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.context.completion_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can complete the rule again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.context.completion_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.context.completion_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.context.completion_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.context.completion_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["last_completed_at","completion_count","completion_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this rule, such as the number of times they have completed it, or any limit that is in effect","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"string","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"null","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.19","typeLabel":"Retail purchase · object"},{"type":"object","title":"Link a retailer account","required":["id","limit","kind","properties","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this rule can be completed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"subtotal_link","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.kind","typeLabel":"string"},"properties":{"type":"object","properties":{"retailers":{"description":"The retailers the store lists for linking, in the order the store has them. A store can set this rule to pay for an account at any retailer, so linking one that is not listed can also earn","type":"array","items":{"type":"object","properties":{"retailer_id":{"type":"string","description":"The retailer's ID in Subtotal","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.properties.retailers.items.[INDEX].retailer_id","typeLabel":"string"},"name":{"type":"string","description":"The display name of the retailer","example":"Walmart","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.properties.retailers.items.[INDEX].name","typeLabel":"string"},"link_url":{"type":"string","description":"Where to send the customer to link their account at this retailer. Points only reach the customer when they link with the same email address as their loyalty account","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.properties.retailers.items.[INDEX].link_url","typeLabel":"string"},"logo":{"oneOf":[{"type":"object","description":"`null` when no logo is available for this retailer","required":["light","dark"],"properties":{"light":{"type":"string","description":"Logo URL for use on a light background","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.properties.retailers.items.[INDEX].logo.oneOf.0.light","typeLabel":"string"},"dark":{"type":"string","description":"Logo URL for use on a dark background","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.properties.retailers.items.[INDEX].logo.oneOf.0.dark","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.properties.retailers.items.[INDEX].logo.oneOf.0","typeLabel":"object"},{"type":"null","description":"`null` when no logo is available for this retailer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.properties.retailers.items.[INDEX].logo.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.properties.retailers.items.[INDEX].logo","typeLabel":"object | null"}},"required":["retailer_id","name","link_url","logo"],"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.properties.retailers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.properties.retailers","typeLabel":"object[]"}},"required":["retailers"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.properties","typeLabel":"object"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this rule. For example, 'Make a purchase' or 'Refer a friend'","example":"Make a purchase","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this rule variant is enabled. For example, some rules are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.variant.enabled","typeLabel":"boolean"},"result":{"oneOf":[{"type":"object","title":"Points","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","per_currency_unit","points"],"properties":{"kind":{"type":"string","const":"points","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.variant.result.oneOf.0.kind","typeLabel":"string"},"per_currency_unit":{"oneOf":[{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.variant.result.oneOf.0.per_currency_unit.oneOf.0","typeLabel":"number"},{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.variant.result.oneOf.0.per_currency_unit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.variant.result.oneOf.0.per_currency_unit","typeLabel":"number | null"},"points":{"type":"number","description":"The number of points provided when this rule variant is completed. If `per_currency_unit` is not null, this will be the number of points per currency unit (e.g. 5 points per $1)","example":5,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.variant.result.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.variant.result.oneOf.0","typeLabel":"Points · object"},{"type":"object","title":"Reward","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","reward"],"properties":{"kind":{"type":"string","const":"reward","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.variant.result.oneOf.1.kind","typeLabel":"string"},"reward":{"type":"object","properties":{"kind":{"type":"string","enum":["gift_card","cart_discount_voucher","cart_variable_discount_voucher","free_shipping_voucher","product_discount_voucher","collection_discount_voucher","product_cart","active_subscription_discount_voucher","active_subscription_product","custom"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.variant.result.oneOf.1.reward.kind","typeLabel":"enum\u003cstring>"},"title":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.variant.result.oneOf.1.reward.title","typeLabel":"string"}},"required":["kind","title"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.variant.result.oneOf.1.reward","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.variant.result.oneOf.1","typeLabel":"Reward · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.variant.result","typeLabel":"Points · object | Reward · object"},"result_short_text":{"type":"string","description":"Short, localized text indicating the result of completing this rule variant. For example: '100 points', '5 points per $1', or '$5 voucher'","example":"5 points per $1","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.variant.result_short_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","result","result_short_text"],"additionalProperties":false,"description":"The rule variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.variant","typeLabel":"object"},"context":{"type":"object","properties":{"last_completed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.context.last_completed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.context.last_completed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.context.last_completed_at","typeLabel":"string | null"},"completion_count":{"type":"number","description":"The number of times this rule has been completed by the customer in total","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.context.completion_count","typeLabel":"number"},"completion_limit":{"oneOf":[{"type":"object","title":"No limit","description":"no limit","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated rule has no limit, so this customer can complete it any number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.context.completion_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.context.completion_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_completions_within_interval","completion_count_within_interval","remaining_completions_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated rule has a limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.context.completion_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.context.completion_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.context.completion_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.context.completion_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_completions_within_interval":{"type":"integer","description":"The number of times this rule can be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.context.completion_limit.oneOf.1.allowed_completions_within_interval","typeLabel":"integer"},"completion_count_within_interval":{"type":"integer","description":"The number of times this rule has been completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.context.completion_limit.oneOf.1.completion_count_within_interval","typeLabel":"integer"},"remaining_completions_within_interval":{"type":"integer","description":"The number of times this rule can still be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.context.completion_limit.oneOf.1.remaining_completions_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.context.completion_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated rule has a limit, the customer has reached it, and the limit will never reset. This means the rule can never be completed again by this customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.context.completion_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.context.completion_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated rule has a limit and the customer has reached it. The customer will be able to complete the rule again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.context.completion_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.context.completion_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can complete the rule again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.context.completion_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.context.completion_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.context.completion_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.context.completion_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["last_completed_at","completion_count","completion_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this rule, such as the number of times they have completed it, or any limit that is in effect","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"string","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"null","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.20","typeLabel":"Link a retailer account · object"},{"type":"object","title":"Purchase at a linked retailer","required":["id","limit","kind","properties","variant","context"],"properties":{"id":{"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.id","typeLabel":"number"},"limit":{"oneOf":[{"type":"object","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","required":["count","interval"],"properties":{"count":{"type":"integer","description":"The number of times this rule can be completed for a customer in the specified calendar `interval`, e.g. once a week","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.limit.oneOf.0.count","typeLabel":"integer"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.limit.oneOf.0.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.limit.oneOf.0.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.limit.oneOf.0.interval","typeLabel":"enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.limit.oneOf.0","typeLabel":"object"},{"type":"null","description":"A limit for this rule, which is applied per customer. Rules with a limit set may only be completed a set number of times in a given interval. The limit may be `null` if the rule has no limit and can therefore be completed any number of times by the same customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.limit","typeLabel":"object | null"},"kind":{"type":"string","const":"subtotal_purchase","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.kind","typeLabel":"string"},"properties":{"type":"object","properties":{"retailers":{"description":"The retailers the store lists for this rule, in the order the store has them. A purchase only earns once the customer has linked their account at that retailer. A store can set this rule to pay for purchases at any retailer, including ones not listed","type":"array","items":{"type":"object","properties":{"retailer_id":{"type":"string","description":"The retailer's ID in Subtotal","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.properties.retailers.items.[INDEX].retailer_id","typeLabel":"string"},"name":{"type":"string","description":"The display name of the retailer","example":"Walmart","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.properties.retailers.items.[INDEX].name","typeLabel":"string"},"link_url":{"type":"string","description":"Where to send the customer to link their account at this retailer. Points only reach the customer when they link with the same email address as their loyalty account","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.properties.retailers.items.[INDEX].link_url","typeLabel":"string"},"logo":{"oneOf":[{"type":"object","description":"`null` when no logo is available for this retailer","required":["light","dark"],"properties":{"light":{"type":"string","description":"Logo URL for use on a light background","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.properties.retailers.items.[INDEX].logo.oneOf.0.light","typeLabel":"string"},"dark":{"type":"string","description":"Logo URL for use on a dark background","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.properties.retailers.items.[INDEX].logo.oneOf.0.dark","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.properties.retailers.items.[INDEX].logo.oneOf.0","typeLabel":"object"},{"type":"null","description":"`null` when no logo is available for this retailer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.properties.retailers.items.[INDEX].logo.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.properties.retailers.items.[INDEX].logo","typeLabel":"object | null"}},"required":["retailer_id","name","link_url","logo"],"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.properties.retailers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.properties.retailers","typeLabel":"object[]"}},"required":["retailers"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.properties","typeLabel":"object"},"variant":{"type":"object","properties":{"tier_id":{"oneOf":[{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.variant.tier_id.oneOf.0","typeLabel":"number"},{"description":"The tier ID to which this rule variant applies. This will always be `null` if the program does not have tiers enabled","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.variant.tier_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.variant.tier_id","typeLabel":"number | null"},"title":{"type":"string","description":"Short, localized title for this rule. For example, 'Make a purchase' or 'Refer a friend'","example":"Make a purchase","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.variant.title","typeLabel":"string"},"description":{"oneOf":[{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.variant.description.oneOf.0","typeLabel":"string"},{"description":"Longer, localized description for this rule, giving the shopper more detail than the title. Where no description is set in the requested language, one from another language is returned in preference to nothing, matching how the title resolves. `null` means no description is set in any language","example":"Earn points every time you shop with us","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.variant.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.variant.description","typeLabel":"string | null"},"enabled":{"type":"boolean","description":"Indicates if this rule variant is enabled. For example, some rules are only available for certain tiers","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.variant.enabled","typeLabel":"boolean"},"result":{"oneOf":[{"type":"object","title":"Points","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","per_currency_unit","points"],"properties":{"kind":{"type":"string","const":"points","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.variant.result.oneOf.0.kind","typeLabel":"string"},"per_currency_unit":{"oneOf":[{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"number","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.variant.result.oneOf.0.per_currency_unit.oneOf.0","typeLabel":"number"},{"description":"Indicates if the points value is per currency unit. For example, if a rule provides 5 points for every $1 spent, this will be `1`. If `null`, the points value is exact","example":1,"type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.variant.result.oneOf.0.per_currency_unit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.variant.result.oneOf.0.per_currency_unit","typeLabel":"number | null"},"points":{"type":"number","description":"The number of points provided when this rule variant is completed. If `per_currency_unit` is not null, this will be the number of points per currency unit (e.g. 5 points per $1)","example":5,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.variant.result.oneOf.0.points","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.variant.result.oneOf.0","typeLabel":"Points · object"},{"type":"object","title":"Reward","description":"The result of completing this rule. Will be one of `points` (points are awarded to the customer), or `reward` (a reward is immediately granted, such as a cart discount voucher)","required":["kind","reward"],"properties":{"kind":{"type":"string","const":"reward","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.variant.result.oneOf.1.kind","typeLabel":"string"},"reward":{"type":"object","properties":{"kind":{"type":"string","enum":["gift_card","cart_discount_voucher","cart_variable_discount_voucher","free_shipping_voucher","product_discount_voucher","collection_discount_voucher","product_cart","active_subscription_discount_voucher","active_subscription_product","custom"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.variant.result.oneOf.1.reward.kind","typeLabel":"enum\u003cstring>"},"title":{"type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.variant.result.oneOf.1.reward.title","typeLabel":"string"}},"required":["kind","title"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.variant.result.oneOf.1.reward","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.variant.result.oneOf.1","typeLabel":"Reward · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.variant.result","typeLabel":"Points · object | Reward · object"},"result_short_text":{"type":"string","description":"Short, localized text indicating the result of completing this rule variant. For example: '100 points', '5 points per $1', or '$5 voucher'","example":"5 points per $1","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.variant.result_short_text","typeLabel":"string"}},"required":["tier_id","title","description","enabled","result","result_short_text"],"additionalProperties":false,"description":"The rule variant that is applicable to this customer and their tier","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.variant","typeLabel":"object"},"context":{"type":"object","properties":{"last_completed_at":{"oneOf":[{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"string","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.context.last_completed_at.oneOf.0","typeLabel":"string"},{"description":"`ISO 8601` timestamp representing when this rule was last completed by the customer, or `null` if the rule has never been completed by the customer","type":"null","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.context.last_completed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.context.last_completed_at","typeLabel":"string | null"},"completion_count":{"type":"number","description":"The number of times this rule has been completed by the customer in total","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.context.completion_count","typeLabel":"number"},"completion_limit":{"oneOf":[{"type":"object","title":"No limit","description":"no limit","required":["state"],"properties":{"state":{"type":"string","const":"no_limit","description":"The associated rule has no limit, so this customer can complete it any number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.context.completion_limit.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.context.completion_limit.oneOf.0","typeLabel":"No limit · object"},{"type":"object","title":"Limit not reached","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","allowed_completions_within_interval","completion_count_within_interval","remaining_completions_within_interval"],"properties":{"state":{"type":"string","const":"limit_not_reached","description":"The associated rule has a limit, but this customer has not yet reached it","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.context.completion_limit.oneOf.1.state","typeLabel":"string"},"interval":{"oneOf":[{"type":"string","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","enum":["day","week","month","year"],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.context.completion_limit.oneOf.1.interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The calendar interval for this limit. If `null`, it means the limit will never reset and the rule can only ever be completed for a customer a set number of times","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.context.completion_limit.oneOf.1.interval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.context.completion_limit.oneOf.1.interval","typeLabel":"enum\u003cstring> | null"},"allowed_completions_within_interval":{"type":"integer","description":"The number of times this rule can be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.context.completion_limit.oneOf.1.allowed_completions_within_interval","typeLabel":"integer"},"completion_count_within_interval":{"type":"integer","description":"The number of times this rule has been completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.context.completion_limit.oneOf.1.completion_count_within_interval","typeLabel":"integer"},"remaining_completions_within_interval":{"type":"integer","description":"The number of times this rule can still be completed by the customer in the current limit interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.context.completion_limit.oneOf.1.remaining_completions_within_interval","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.context.completion_limit.oneOf.1","typeLabel":"Limit not reached · object"},{"type":"object","title":"Limit reached forever","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state"],"properties":{"state":{"type":"string","const":"limit_reached_forever","description":"The associated rule has a limit, the customer has reached it, and the limit will never reset. This means the rule can never be completed again by this customer","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.context.completion_limit.oneOf.2.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.context.completion_limit.oneOf.2","typeLabel":"Limit reached forever · object"},{"type":"object","title":"Limit reached until reset","description":"An object indicating the state of this rule's completion limit specific to this customer. When rules are limited, they can only be completed by a customer a set number of times in a given interval (or forever). The `state` property indicates what limit, if any, is currently in effect","required":["state","interval","resets_at","resets_at_relative_to_now"],"properties":{"state":{"type":"string","const":"limit_reached_until_reset","description":"The associated rule has a limit and the customer has reached it. The customer will be able to complete the rule again once the limit resets, which will be at the specified `reset_at` date","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.context.completion_limit.oneOf.3.state","typeLabel":"string"},"interval":{"type":"string","enum":["day","week","month","year"],"description":"The calendar interval for this limit","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.context.completion_limit.oneOf.3.interval","typeLabel":"enum\u003cstring>"},"resets_at":{"type":"string","description":"`ISO 8601` timestamp representing when the limit will reset and the customer can complete the rule again. This will usually be the start of the next calendar interval","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.context.completion_limit.oneOf.3.resets_at","typeLabel":"string"},"resets_at_relative_to_now":{"type":"string","description":"Localized text indicating when the limit will reset relative to now","example":"3 days","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.context.completion_limit.oneOf.3.resets_at_relative_to_now","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.context.completion_limit.oneOf.3","typeLabel":"Limit reached until reset · object"}],"isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.context.completion_limit","typeLabel":"No limit · object | Limit not reached · object | Limit reached forever · object | Limit reached until reset · object"}},"required":["last_completed_at","completion_count","completion_limit"],"additionalProperties":false,"description":"Information about this customer's interaction with this rule, such as the number of times they have completed it, or any limit that is in effect","isRequired":true,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.context","typeLabel":"object"},"image_url":{"oneOf":[{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"string","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.image_url.oneOf.0","typeLabel":"string"},{"description":"A display image for this rule, when the merchant has set one: either an image they uploaded or an external image URL. `null` when no image is set","type":"null","uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.image_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21.image_url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"customer.available_rules.items.[INDEX].oneOf.21","typeLabel":"Purchase at a linked retailer · object"}],"uniqueKey":"customer.available_rules.items.[INDEX]","typeLabel":"Birthday · object | Loyalty pass install · object | Collection purchase · object | Newsletter signup · object | Pageview · object | Product purchase · object | Purchase · object | Join program · object | Review · object | Custom · object | Facebook Like · object | Twitter follow · object | Instagram follow · object | Instagram mention · object | Instagram post hashtag · object | Tiktok follow · object | Tiktok post hashtag · object | Referral · object | Clickthrough · object | Retail purchase · object | Link a retailer account · object | Purchase at a linked retailer · object"},"isRequired":true,"uniqueKey":"customer.available_rules","typeLabel":"(Birthday · object | Loyalty pass install · object | Collection purchase · object | Newsletter signup · object | Pageview · object | Product purchase · object | Purchase · object | Join program · object | Review · object | Custom · object | Facebook Like · object | Twitter follow · object | Instagram follow · object | Instagram mention · object | Instagram post hashtag · object | Tiktok follow · object | Tiktok post hashtag · object | Referral · object | Clickthrough · object | Retail purchase · object | Link a retailer account · object | Purchase at a linked retailer · object)[]"},"history":{"description":"A list of the most recent actions that have occurred for this customer, such as earning points, redeeming rewards, and joining tiers. This list is sorted by date with the most recent actions at the beginning.\n\nHistory actions are not the same as _transactions_. A single action may cover multiple transactions. For example, if points are added and then later voided, it will be represented by a single action whose state will initially be `approved`, and then later change to `void`. This keeps the customer's history concise whilst still showing the key information.","type":"array","items":{"oneOf":[{"type":"object","title":"Earned points from rule","required":["kind","label","date","points","points_text","rule","points_will_approve_at","points_will_expire_at","state"],"properties":{"kind":{"type":"string","const":"earned_points_from_rule","description":"Represents points that the customer earned as the result of completing a rule.","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.0.kind","typeLabel":"string"},"label":{"type":"string","description":"Short text describing the history action. This will typically be the name of the associated rule","example":"Join our program","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.0.label","typeLabel":"string"},"date":{"type":"string","description":"`ISO 8601` timestamp representing when this history action occurred. Note that actions may change over time, such as points being approved or voided, but this timestamp will always represent when the action originally happened","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.0.date","typeLabel":"string"},"points":{"type":"integer","minimum":0,"description":"The number of points earned from the rule. This will always be 0 or higher","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.0.points","typeLabel":"integer"},"points_text":{"type":"string","description":"Short, localized text indicating the number of points earned","example":"500 points","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.0.points_text","typeLabel":"string"},"rule":{"type":"object","properties":{"id":{"type":"number","description":"The ID of the rule whose completion earned the points. If this does not match a `rule` in the current Site Configuration, it means the associated rule has been deleted","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.0.rule.id","typeLabel":"number"},"kind":{"type":"string","enum":["birthday","loyalty_pass_install","collection_purchase","newsletter_signup","pageview","product_purchase","purchase","join_program","review","custom","facebook_like","twitter_follow","instagram_follow","instagram_mention","instagram_post_hashtag","tiktok_follow","tiktok_post_hashtag","referral","clickthrough","retail_purchase","subtotal_link","subtotal_purchase"],"isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.0.rule.kind","typeLabel":"enum\u003cstring>"}},"required":["id","kind"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.0.rule","typeLabel":"object"},"points_will_approve_at":{"oneOf":[{"description":"If the state of this action is `pending`, this will be an `ISO 8601` timestamp representing the date at which the points will become approved, unless they are declined in the meantime","type":"string","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.0.points_will_approve_at.oneOf.0","typeLabel":"string"},{"description":"If the state of this action is `pending`, this will be an `ISO 8601` timestamp representing the date at which the points will become approved, unless they are declined in the meantime","type":"null","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.0.points_will_approve_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.0.points_will_approve_at","typeLabel":"string | null"},"points_will_expire_at":{"oneOf":[{"description":"If 'Earned date' or 'Calendar' point expiration is enabled, this will be an `ISO 8601` timestamp representing the date at which these points will expire","type":"string","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.0.points_will_expire_at.oneOf.0","typeLabel":"string"},{"description":"If 'Earned date' or 'Calendar' point expiration is enabled, this will be an `ISO 8601` timestamp representing the date at which these points will expire","type":"null","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.0.points_will_expire_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.0.points_will_expire_at","typeLabel":"string | null"},"state":{"type":"string","enum":["pending","declined","approved","void","expired"],"description":"The state of the points earned from this rule.\n\n- `pending` - the points cannot be redeemed yet, and will be declined or approved at a later date\n\n- `declined` - pending points were declined and cannot be used\n\n- `approved` - points that can be redeemed\n\n- `void` - approved points that have been voided and cannot be used\n\n- `expired` - points that have expired and cannot be used","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.0.state","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"customer.history.items.[INDEX].oneOf.0","typeLabel":"Earned points from rule · object"},{"type":"object","title":"Redeemed points for reward","required":["kind","label","date","points","points_text","reward","claimed_reward_id","state"],"properties":{"kind":{"type":"string","const":"redeemed_points_for_reward","description":"Represents a reward that the customer redeemed using points","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.1.kind","typeLabel":"string"},"label":{"type":"string","description":"Short text describing the history action. This will typically be the name of the redeemed reward","example":"$5 voucher","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.1.label","typeLabel":"string"},"date":{"type":"string","description":"`ISO 8601` timestamp representing when this history action occurred. Note that actions may change over time, such as points being approved or voided, but this timestamp will always represent when the action originally happened","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.1.date","typeLabel":"string"},"points":{"type":"integer","maximum":0,"description":"The number of points redeemed. This will always be 0 or lower","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.1.points","typeLabel":"integer"},"points_text":{"type":"string","description":"Short, localized text indicating the number of points redeemed","example":"-500 points","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.1.points_text","typeLabel":"string"},"reward":{"type":"object","properties":{"id":{"type":"number","description":"The ID of the reward redeemed for the points. If this does not match a `reward` in the current Site Configuration, it means the associated reward has been deleted, or that it is a `private_product` or `tiktok_coupon` placeholder, which is never listed","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.1.reward.id","typeLabel":"number"},"kind":{"oneOf":[{"type":"string","enum":["gift_card","cart_discount_voucher","cart_variable_discount_voucher","free_shipping_voucher","product_discount_voucher","collection_discount_voucher","product_cart","active_subscription_discount_voucher","active_subscription_product","custom"],"isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.1.reward.kind.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"string","const":"private_product","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.1.reward.kind.oneOf.1","typeLabel":"string"},{"type":"string","const":"tiktok_coupon","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.1.reward.kind.oneOf.2","typeLabel":"string"}],"isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.1.reward.kind","typeLabel":"enum\u003cstring> · string · string"}},"required":["id","kind"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.1.reward","typeLabel":"object"},"claimed_reward_id":{"type":"number","description":"The ID of the associated claimed reward for the customer","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.1.claimed_reward_id","typeLabel":"number"},"state":{"type":"string","enum":["pending","declined","approved","void","expired"],"description":"The state of the redeemed reward.\n\n- `pending` - the reward cannot be used yet, and will be declined or approved at a later date\n\n- `declined` - the reward was declined and cannot be used\n\n- `approved` - the reward can be used\n\n- `void` - the reward was voided and cannot be used\n\n- `expired` - the reward has expired and cannot be used","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.1.state","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"customer.history.items.[INDEX].oneOf.1","typeLabel":"Redeemed points for reward · object"},{"type":"object","title":"Received reward","required":["kind","label","date","reward","claimed_reward_id","rule","state"],"properties":{"kind":{"type":"string","const":"received_reward","description":"Represents a reward that the customer received without redeeming their points, such as from completing a rule or entering a new tier","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.2.kind","typeLabel":"string"},"label":{"type":"string","description":"Short text describing the history action. This will typically be the name of the received reward","example":"$5 voucher","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.2.label","typeLabel":"string"},"date":{"type":"string","description":"`ISO 8601` timestamp representing when this history action occurred. Note that actions may change over time, such as points being approved or voided, but this timestamp will always represent when the action originally happened","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.2.date","typeLabel":"string"},"reward":{"type":"object","properties":{"id":{"type":"number","description":"The ID of the received reward. If this does not match a `reward` in the current Site Configuration, it means the associated reward has been deleted","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.2.reward.id","typeLabel":"number"},"kind":{"type":"string","enum":["gift_card","cart_discount_voucher","cart_variable_discount_voucher","free_shipping_voucher","product_discount_voucher","collection_discount_voucher","product_cart","active_subscription_discount_voucher","active_subscription_product","custom"],"isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.2.reward.kind","typeLabel":"enum\u003cstring>"}},"required":["id","kind"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.2.reward","typeLabel":"object"},"claimed_reward_id":{"type":"number","description":"The ID of the associated claimed reward for the customer","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.2.claimed_reward_id","typeLabel":"number"},"rule":{"oneOf":[{"type":"object","description":"If this reward was received as a result of completing a rule, this will include the ID and kind of the related rule. It will be `null` if the reward some other way, such as from entering a new tier","required":["id","kind","title"],"properties":{"id":{"type":"number","description":"The ID of the rule whose completion resulted in the reward. If this does not match a `rule` in the current Site Configuration, it means the associated rule has been deleted","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.2.rule.oneOf.0.id","typeLabel":"number"},"kind":{"type":"string","enum":["birthday","loyalty_pass_install","collection_purchase","newsletter_signup","pageview","product_purchase","purchase","join_program","review","custom","facebook_like","twitter_follow","instagram_follow","instagram_mention","instagram_post_hashtag","tiktok_follow","tiktok_post_hashtag","referral","clickthrough","retail_purchase","subtotal_link","subtotal_purchase"],"isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.2.rule.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"title":{"type":"string","description":"Localized display title for the rule (the merchant-configured title for the shopper-facing locale, falling back to the default title for the rule kind). Useful for surfacing the rule context alongside the reward — e.g. \"Refer a friend — $5 voucher\".","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.2.rule.oneOf.0.title","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.2.rule.oneOf.0","typeLabel":"object"},{"type":"null","description":"If this reward was received as a result of completing a rule, this will include the ID and kind of the related rule. It will be `null` if the reward some other way, such as from entering a new tier","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.2.rule.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.2.rule","typeLabel":"object | null"},"state":{"type":"string","enum":["pending","declined","approved","void","expired"],"description":"The state of the reward received from the rule.\n\n- `pending` - the reward cannot be used yet, and will be declined or approved at a later date\n\n- `declined` - the reward was declined and cannot be used\n\n- `approved` - the reward can be used\n\n- `void` - the reward was voided and cannot be used\n\n- `expired` - the reward has expired and cannot be used","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.2.state","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"customer.history.items.[INDEX].oneOf.2","typeLabel":"Received reward · object"},{"type":"object","title":"Points added","required":["kind","label","date","points","points_text","points_will_expire_at","state"],"properties":{"kind":{"type":"string","const":"points_added","description":"Represents points that were added to the customer, typically by a store administrator or an automated import","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.3.kind","typeLabel":"string"},"label":{"type":"string","description":"Short text describing the history action. This will typically be the administrator note associated with the adjustment","example":"Points imported","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.3.label","typeLabel":"string"},"date":{"type":"string","description":"`ISO 8601` timestamp representing when this history action occurred. Note that actions may change over time, such as points being approved or voided, but this timestamp will always represent when the action originally happened","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.3.date","typeLabel":"string"},"points":{"type":"integer","minimum":0,"description":"The number of points added. This will always be 0 or higher","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.3.points","typeLabel":"integer"},"points_text":{"type":"string","description":"Short, localized text indicating the number of points added","example":"1,000 points","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.3.points_text","typeLabel":"string"},"points_will_expire_at":{"oneOf":[{"description":"If 'Earned date' or 'Calendar' point expiration is enabled, this will be an `ISO 8601` timestamp representing the date at which these points will expire","type":"string","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.3.points_will_expire_at.oneOf.0","typeLabel":"string"},{"description":"If 'Earned date' or 'Calendar' point expiration is enabled, this will be an `ISO 8601` timestamp representing the date at which these points will expire","type":"null","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.3.points_will_expire_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.3.points_will_expire_at","typeLabel":"string | null"},"state":{"type":"string","enum":["approved","void","expired"],"description":"The state of the points that were added.\n\n- `approved` - the points can be used\n\n- `void` - the points were voided and cannot be used\n\n- `expired` - the points have expired and cannot be used","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.3.state","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"customer.history.items.[INDEX].oneOf.3","typeLabel":"Points added · object"},{"type":"object","title":"Points removed","required":["kind","label","date","points","points_text","state"],"properties":{"kind":{"type":"string","const":"points_removed","description":"Represents points that were removed from the customer, typically by a store administrator or an automated import. By default, removed points have the `applied` state. If the removal is voided (reverted), they will have the `void` state which adds the points back to the customer","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.4.kind","typeLabel":"string"},"label":{"type":"string","description":"Short text describing the history action. This will typically be the administrator note associated with the adjustment","example":"Duplicate points removed","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.4.label","typeLabel":"string"},"date":{"type":"string","description":"`ISO 8601` timestamp representing when this history action occurred. Note that actions may change over time, such as points being approved or voided, but this timestamp will always represent when the action originally happened","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.4.date","typeLabel":"string"},"points":{"type":"integer","maximum":0,"description":"The number of points removed. This will always be 0 or lower","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.4.points","typeLabel":"integer"},"points_text":{"type":"string","description":"Short, localized text indicating the number of points removed","example":"-1,000 points","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.4.points_text","typeLabel":"string"},"state":{"type":"string","enum":["applied","void"],"description":"The state of the points removal.\n\n- `applied` - the points have been removed\n\n- `void` - the removal has been voided and the points were added back","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.4.state","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"customer.history.items.[INDEX].oneOf.4","typeLabel":"Points removed · object"},{"type":"object","title":"Points expired","required":["kind","label","date","points","points_text"],"properties":{"kind":{"type":"string","const":"points_expired","description":"Represents a set of points that have expired and been removed from the customer. Points can expire due to inactivity, or a set amount of time after they are earned.","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.5.kind","typeLabel":"string"},"label":{"type":"string","description":"Short text describing the history action. This will typically be a localized message indicating the expiry","example":"Points expired due to inactivity","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.5.label","typeLabel":"string"},"date":{"type":"string","description":"`ISO 8601` timestamp representing when this history action occurred. Note that actions may change over time, such as points being approved or voided, but this timestamp will always represent when the action originally happened","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.5.date","typeLabel":"string"},"points":{"type":"integer","maximum":0,"description":"The number of points that expired. This will always be 0 or lower","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.5.points","typeLabel":"integer"},"points_text":{"type":"string","description":"Short, localized text indicating the number of points expired","example":"-500 points","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.5.points_text","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"customer.history.items.[INDEX].oneOf.5","typeLabel":"Points expired · object"},{"type":"object","title":"Entered tier","required":["kind","label","date","tier"],"properties":{"kind":{"type":"string","const":"entered_tier","description":"Represents the customer entering a new tier","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.6.kind","typeLabel":"string"},"label":{"type":"string","description":"Short text describing the history action. This will typically be a localized message referencing the tier","example":"Entered Gold tier","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.6.label","typeLabel":"string"},"date":{"type":"string","description":"`ISO 8601` timestamp representing when this history action occurred. Note that actions may change over time, such as points being approved or voided, but this timestamp will always represent when the action originally happened","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.6.date","typeLabel":"string"},"tier":{"type":"object","properties":{"id":{"type":"number","description":"The ID of the tier","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.6.tier.id","typeLabel":"number"},"name":{"type":"string","description":"The name of the tier","isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.6.tier.name","typeLabel":"string"}},"required":["id","name"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.history.items.[INDEX].oneOf.6.tier","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"customer.history.items.[INDEX].oneOf.6","typeLabel":"Entered tier · object"}],"uniqueKey":"customer.history.items.[INDEX]","typeLabel":"Earned points from rule · object | Redeemed points for reward · object | Received reward · object | Points added · object | Points removed · object | Points expired · object | Entered tier · object"},"isRequired":true,"uniqueKey":"customer.history","typeLabel":"(Earned points from rule · object | Redeemed points for reward · object | Received reward · object | Points added · object | Points removed · object | Points expired · object | Entered tier · object)[]"},"active_cart_redemptions":{"description":"A list of active cart redemptions. When a `product_cart` reward is redeemed by the customer, a new active cart redemption is created. This will persist until it expires or the completes the order","type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The unique ID of this cart redemption. This ID needs to be attached to the cart line when the product is added to the cart. For Shopify, this is used as the value of the `__lion_sfp_id` attribute on the cart line","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].id","typeLabel":"string"},"claimed_reward_id":{"type":"number","description":"The ID of the claimed reward that this cart redemption is associated with","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].claimed_reward_id","typeLabel":"number"},"expires_at":{"type":"string","description":"`ISO 8601` timestamp representing when this cart redemption will expire if it has not been checked out, at which point any associated points will be returned to the customer","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].expires_at","typeLabel":"string"},"product":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].product.id","typeLabel":"string"},"handle":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].product.handle.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].product.handle.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].product.handle","typeLabel":"string | null"},"title":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].product.title.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].product.title.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].product.title","typeLabel":"string | null"},"url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].product.url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].product.url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].product.url","typeLabel":"string | null"},"image_url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].product.image_url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].product.image_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].product.image_url","typeLabel":"string | null"},"variant":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].product.variant.id","typeLabel":"string"},"title":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].product.variant.title.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].product.variant.title.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].product.variant.title","typeLabel":"string | null"},"inventory_count":{"oneOf":[{"description":"The current inventory count of this product variant, or `null` if inventory is not tracked. If the count is zero, you should ensure it is not selectable by customers when redeeming the reward","type":"integer","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].product.variant.inventory_count.oneOf.0","typeLabel":"integer"},{"description":"The current inventory count of this product variant, or `null` if inventory is not tracked. If the count is zero, you should ensure it is not selectable by customers when redeeming the reward","type":"null","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].product.variant.inventory_count.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].product.variant.inventory_count","typeLabel":"integer | null"}},"required":["id","title","inventory_count"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].product.variant","typeLabel":"object"}},"required":["id","handle","title","url","image_url","variant"],"additionalProperties":false,"description":"The product and variant that this cart redemption is for","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].product","typeLabel":"object"},"quantity":{"type":"number","description":"The quantity of the line item in this cart redemption","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].quantity","typeLabel":"number"},"cart_id":{"type":"string","description":"The ID of the cart for which this cart redemption was initially redeemed","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].cart_id","typeLabel":"string"},"cart_line":{"type":"object","title":"Shopify cart line","description":"Details of the cart line that should be added to the Shopify cart. When using the Storefront API, these should be passed into the [cartLinesAdd mutation](https://shopify.dev/docs/api/storefront/latest/mutations/cartLinesAdd)","required":["kind","merchandise_id","product_id","quantity","attributes"],"properties":{"kind":{"type":"string","const":"shopify","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].cart_line.kind","typeLabel":"string"},"merchandise_id":{"type":"string","description":"The merchandise (variant) ID to add to the cart","example":"gid://shopify/ProductVariant/1001","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].cart_line.merchandise_id","typeLabel":"string"},"product_id":{"type":"string","description":"The product ID to add to the cart","example":"gid://shopify/Product/100","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].cart_line.product_id","typeLabel":"string"},"quantity":{"type":"number","description":"The quantity of the cart line to add","example":1,"isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].cart_line.quantity","typeLabel":"number"},"attributes":{"description":"An array of key-value attributes that should be included with the cart line","example":[{"key":"__lion_sfp_id","value":"19fdf4cb"}],"type":"array","items":{"type":"object","properties":{"key":{"type":"string","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].cart_line.attributes.items.[INDEX].key","typeLabel":"string"},"value":{"type":"string","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].cart_line.attributes.items.[INDEX].value","typeLabel":"string"}},"required":["key","value"],"additionalProperties":false,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].cart_line.attributes.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].cart_line.attributes","typeLabel":"object[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].cart_line","typeLabel":"Shopify cart line · object"},"current_cart_state":{"oneOf":[{"type":"object","description":"If this request included a serialized `cart` object whose `id` matches the `cart_id` of this redemption, this object includes information about this redemption's state in the current cart. It will be `null` if the request did not include a serialized cart or its `id` does not match","required":["in_cart","cart_requirements_met","cart_requirements_detail"],"properties":{"in_cart":{"type":"boolean","description":"Indicates if the redemption is currently in the cart","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].current_cart_state.oneOf.0.in_cart","typeLabel":"boolean"},"cart_requirements_met":{"type":"boolean","description":"Indicates if all this redemption's requirements are currently met by the cart, such as a required minimum cart total or number of line items","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].current_cart_state.oneOf.0.cart_requirements_met","typeLabel":"boolean"},"cart_requirements_detail":{"type":"object","properties":{"minimum_cart_total":{"oneOf":[{"type":"object","title":"No requirement","required":["state"],"properties":{"state":{"type":"string","const":"no_requirement","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].current_cart_state.oneOf.0.cart_requirements_detail.minimum_cart_total.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].current_cart_state.oneOf.0.cart_requirements_detail.minimum_cart_total.oneOf.0","typeLabel":"No requirement · object"},{"type":"object","title":"Requirement met","required":["state"],"properties":{"state":{"type":"string","const":"requirement_met","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].current_cart_state.oneOf.0.cart_requirements_detail.minimum_cart_total.oneOf.1.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].current_cart_state.oneOf.0.cart_requirements_detail.minimum_cart_total.oneOf.1","typeLabel":"Requirement met · object"},{"type":"object","title":"Requirement not met","required":["state","additional_amount_required"],"properties":{"state":{"type":"string","const":"requirement_not_met","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].current_cart_state.oneOf.0.cart_requirements_detail.minimum_cart_total.oneOf.2.state","typeLabel":"string"},"additional_amount_required":{"type":"object","properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].current_cart_state.oneOf.0.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required.amount","typeLabel":"number"},"formatted":{"type":"string","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].current_cart_state.oneOf.0.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required.formatted","typeLabel":"string"}},"required":["amount","formatted"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].current_cart_state.oneOf.0.cart_requirements_detail.minimum_cart_total.oneOf.2.additional_amount_required","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].current_cart_state.oneOf.0.cart_requirements_detail.minimum_cart_total.oneOf.2","typeLabel":"Requirement not met · object"}],"isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].current_cart_state.oneOf.0.cart_requirements_detail.minimum_cart_total","typeLabel":"No requirement · object | Requirement met · object | Requirement not met · object"},"minimum_line_item_quantity":{"oneOf":[{"type":"object","title":"No requirement","required":["state"],"properties":{"state":{"type":"string","const":"no_requirement","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].current_cart_state.oneOf.0.cart_requirements_detail.minimum_line_item_quantity.oneOf.0.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].current_cart_state.oneOf.0.cart_requirements_detail.minimum_line_item_quantity.oneOf.0","typeLabel":"No requirement · object"},{"type":"object","title":"Requirement met","required":["state"],"properties":{"state":{"type":"string","const":"requirement_met","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].current_cart_state.oneOf.0.cart_requirements_detail.minimum_line_item_quantity.oneOf.1.state","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].current_cart_state.oneOf.0.cart_requirements_detail.minimum_line_item_quantity.oneOf.1","typeLabel":"Requirement met · object"},{"type":"object","title":"Requirement not met","required":["state","additional_quantity_required"],"properties":{"state":{"type":"string","const":"requirement_not_met","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].current_cart_state.oneOf.0.cart_requirements_detail.minimum_line_item_quantity.oneOf.2.state","typeLabel":"string"},"additional_quantity_required":{"type":"number","description":"The number of additional line items required before this requirement is met","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].current_cart_state.oneOf.0.cart_requirements_detail.minimum_line_item_quantity.oneOf.2.additional_quantity_required","typeLabel":"number"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].current_cart_state.oneOf.0.cart_requirements_detail.minimum_line_item_quantity.oneOf.2","typeLabel":"Requirement not met · object"}],"isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].current_cart_state.oneOf.0.cart_requirements_detail.minimum_line_item_quantity","typeLabel":"No requirement · object | Requirement met · object | Requirement not met · object"}},"required":["minimum_cart_total","minimum_line_item_quantity"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].current_cart_state.oneOf.0.cart_requirements_detail","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].current_cart_state.oneOf.0","typeLabel":"object"},{"type":"null","description":"If this request included a serialized `cart` object whose `id` matches the `cart_id` of this redemption, this object includes information about this redemption's state in the current cart. It will be `null` if the request did not include a serialized cart or its `id` does not match","isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].current_cart_state.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX].current_cart_state","typeLabel":"object | null"}},"required":["id","claimed_reward_id","expires_at","product","quantity","cart_id","cart_line","current_cart_state"],"additionalProperties":false,"uniqueKey":"customer.active_cart_redemptions.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"customer.active_cart_redemptions","typeLabel":"object[]"},"email_marketing_consent":{"type":"object","properties":{"state":{"type":"string","enum":["subscribed","not_subscribed","unknown"],"description":"The state of the customer's email marketing consent. This is not guaranteed to be up to date, as LoyaltyLion relies on receiving changes for this value from your email marketing provider or ecommerce platform. Therefore, it should not be used as the source of truth for sending emails to this customer.\n\nIf we have no information about the customer's email marketing consent, it will be `unknown`.","isRequired":true,"uniqueKey":"customer.email_marketing_consent.state","typeLabel":"enum\u003cstring>"}},"required":["state"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.email_marketing_consent","typeLabel":"object"},"sms_marketing_consent":{"type":"object","properties":{"state":{"type":"string","enum":["subscribed","not_subscribed","unknown"],"description":"The state of the customer's SMS marketing consent. This is not guaranteed to be up to date, as LoyaltyLion relies on receiving changes for this value from your SMS marketing provider or ecommerce platform. Therefore, it should not be used as the source of truth for sending SMS to this customer.\n\nIf we have no information about the customer's SMS marketing consent, it will be `unknown`.","isRequired":true,"uniqueKey":"customer.sms_marketing_consent.state","typeLabel":"enum\u003cstring>"}},"required":["state"],"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.sms_marketing_consent","typeLabel":"object"},"receipt_upload_url":{"oneOf":[{"description":"A URL that the customer can visit to upload a receipt for the retail purchase rule. Will be `null` if the retail purchase rule is not enabled for this program","type":"string","isRequired":true,"uniqueKey":"customer.receipt_upload_url.oneOf.0","typeLabel":"string"},{"description":"A URL that the customer can visit to upload a receipt for the retail purchase rule. Will be `null` if the retail purchase rule is not enabled for this program","type":"null","isRequired":true,"uniqueKey":"customer.receipt_upload_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.receipt_upload_url","typeLabel":"string | null"},"loyalty_pass_url":{"oneOf":[{"description":"A personal link that installs this customer's loyalty pass in Apple Wallet or Google Wallet, with no email entry or login. It identifies this customer only, so only show it to them. Will be `null` if the customer has no email address or the program's loyalty pass isn't live","type":"string","isRequired":true,"uniqueKey":"customer.loyalty_pass_url.oneOf.0","typeLabel":"string"},{"description":"A personal link that installs this customer's loyalty pass in Apple Wallet or Google Wallet, with no email entry or login. It identifies this customer only, so only show it to them. Will be `null` if the customer has no email address or the program's loyalty pass isn't live","type":"null","isRequired":true,"uniqueKey":"customer.loyalty_pass_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.loyalty_pass_url","typeLabel":"string | null"},"referral_urls":{"oneOf":[{"type":"object","description":"Referral URLs for different platforms, unique to this customer, or `null` if referrals are not enabled. Each URL has the same referral functionality, but will result in the referral being tracked for its platform. If unsure, use the `direct` URL for a generic link","required":["direct","facebook","twitter","email","whatsapp","instagram","device_share"],"properties":{"direct":{"type":"string","description":"A generic referral link that is not associated with any particular platform","isRequired":true,"uniqueKey":"customer.referral_urls.oneOf.0.direct","typeLabel":"string"},"facebook":{"type":"string","description":"A referral link intended for sharing on Facebook","isRequired":true,"uniqueKey":"customer.referral_urls.oneOf.0.facebook","typeLabel":"string"},"twitter":{"type":"string","description":"A referral link intended for sharing on Twitter","isRequired":true,"uniqueKey":"customer.referral_urls.oneOf.0.twitter","typeLabel":"string"},"email":{"type":"string","description":"A referral link intended for sharing via email","isRequired":true,"uniqueKey":"customer.referral_urls.oneOf.0.email","typeLabel":"string"},"whatsapp":{"type":"string","description":"A referral link intended for sharing via WhatsApp","isRequired":true,"uniqueKey":"customer.referral_urls.oneOf.0.whatsapp","typeLabel":"string"},"instagram":{"type":"string","description":"A referral link intended for sharing on Instagram","isRequired":true,"uniqueKey":"customer.referral_urls.oneOf.0.instagram","typeLabel":"string"},"device_share":{"type":"string","description":"A referral link intended for sharing via a mobile device share prompt","isRequired":true,"uniqueKey":"customer.referral_urls.oneOf.0.device_share","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"customer.referral_urls.oneOf.0","typeLabel":"object"},{"type":"null","description":"Referral URLs for different platforms, unique to this customer, or `null` if referrals are not enabled. Each URL has the same referral functionality, but will result in the referral being tracked for its platform. If unsure, use the `direct` URL for a generic link","isRequired":true,"uniqueKey":"customer.referral_urls.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"customer.referral_urls","typeLabel":"object | null"}},"required":["state","id","merchant_id","email","phone","first_name","last_name","points_approved","points_pending","points_spent","enrolled_at","tier_membership","birthday","next_birthday","claimed_rewards","available_rewards","available_rules","history","active_cart_redemptions","email_marketing_consent","sms_marketing_consent","receipt_upload_url","loyalty_pass_url","referral_urls"],"additionalProperties":false,"description":"The customer object, updated as of the reward refund, i.e. any refunded points will be returned to their points balance. This customer will always have `state` set to `enrolled`, as only enrolled customers can redeem rewards","isRequired":true,"uniqueKey":"customer","typeLabel":"object"}},"required":["claimed_reward","customer"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"claimed_reward":{"id":123,"claimed_at":"\u003cstring>","reward_id":123,"title":"$5 voucher","state":"approved","source":{"kind":"points_redemption","points_cost":123},"auto_refund_at":"\u003cstring>","redeemable":{"usage_status":"not_used","kind":"product_cart","product":{"id":"\u003cstring>","handle":"\u003cstring>","title":"\u003cstring>","url":"\u003cstring>","image_url":"\u003cstring>","variant":{"id":"\u003cstring>","title":"\u003cstring>","inventory_count":123}},"quantity":123,"used_at":"\u003cstring>","cart_line_identifier":"\u003cstring>","grant":{"expires_at":"\u003cstring>"},"active_cart_redemption":{"id":"\u003cstring>","claimed_reward_id":123,"expires_at":"\u003cstring>","product":{"id":"\u003cstring>","handle":"\u003cstring>","title":"\u003cstring>","url":"\u003cstring>","image_url":"\u003cstring>","variant":{"id":"\u003cstring>","title":"\u003cstring>","inventory_count":123}},"quantity":123,"cart_id":"\u003cstring>","cart_line":{"kind":"shopify","merchandise_id":"gid://shopify/ProductVariant/1001","product_id":"gid://shopify/Product/100","quantity":1,"attributes":[{"key":"__lion_sfp_id","value":"19fdf4cb"}]},"current_cart_state":{"in_cart":true,"cart_requirements_met":true,"cart_requirements_detail":{"minimum_cart_total":{"state":"no_requirement"},"minimum_line_item_quantity":{"state":"no_requirement"}}}}}},"customer":{"state":"enrolled","id":123,"merchant_id":"\u003cstring>","email":"\u003cstring>","phone":"+447700900123","first_name":"\u003cstring>","last_name":"\u003cstring>","points_approved":123,"points_pending":123,"points_spent":123,"enrolled_at":"\u003cstring>","tier_membership":{"tier_id":123,"started_at":"2025-01-01T12:00:00Z","expires_at":"2026-01-01T12:00:00Z","progress":{"kind":"points","valid_until":"\u003cstring>","points_needed_for_renewal":123,"upgrade_tier_id":123,"points_needed_for_upgrade":123,"tier_points":{"now":123,"at_expiration":123},"forecasted_tier_id":123}},"birthday":{"month":6,"day":25},"next_birthday":"2025-06-25","claimed_rewards":[{"id":123,"claimed_at":"\u003cstring>","reward_id":123,"title":"$5 voucher","state":"approved","source":{"kind":"points_redemption","points_cost":123},"auto_refund_at":"\u003cstring>","redeemable":{"usage_status":"not_used","kind":"gift_card","code_last_characters":"\u003cstring>","initial_balance":{"amount":123,"formatted":"\u003cstring>"},"current_balance":{"amount":123,"formatted":"\u003cstring>"},"expires_at":"\u003cstring>"}}],"available_rewards":[{"id":123,"limit":{"count":123,"interval":"day"},"kind":"gift_card","properties":{"initial_balance":{"amount":123,"formatted":"\u003cstring>"}},"variant":{"tier_id":123,"title":"$5 voucher","description":"Spend your points on $5 off your next order","enabled":true,"cost":{"kind":"fixed","points":123},"cost_text":"100 points"},"context":{"can_redeem":{"state":"redeemable"},"last_claimed_at":"\u003cstring>","claim_count":123,"claim_limit":{"state":"no_limit"}},"image_url":"\u003cstring>"}],"available_rules":[{"id":123,"limit":{"count":123,"interval":"day"},"kind":"birthday","variant":{"tier_id":123,"title":"Make a purchase","description":"Earn points every time you shop with us","enabled":true,"result":{"kind":"points","per_currency_unit":1,"points":5},"result_short_text":"5 points per $1"},"context":{"last_completed_at":"\u003cstring>","completion_count":123,"completion_limit":{"state":"no_limit"}},"image_url":"\u003cstring>"}],"history":[{"kind":"earned_points_from_rule","label":"Join our program","date":"\u003cstring>","points":1,"points_text":"500 points","rule":{"id":123,"kind":"birthday"},"points_will_approve_at":"\u003cstring>","points_will_expire_at":"\u003cstring>","state":"pending"}],"active_cart_redemptions":[{"id":"\u003cstring>","claimed_reward_id":123,"expires_at":"\u003cstring>","product":{"id":"\u003cstring>","handle":"\u003cstring>","title":"\u003cstring>","url":"\u003cstring>","image_url":"\u003cstring>","variant":{"id":"\u003cstring>","title":"\u003cstring>","inventory_count":123}},"quantity":123,"cart_id":"\u003cstring>","cart_line":{"kind":"shopify","merchandise_id":"gid://shopify/ProductVariant/1001","product_id":"gid://shopify/Product/100","quantity":1,"attributes":[{"key":"__lion_sfp_id","value":"19fdf4cb"}]},"current_cart_state":{"in_cart":true,"cart_requirements_met":true,"cart_requirements_detail":{"minimum_cart_total":{"state":"no_requirement"},"minimum_line_item_quantity":{"state":"no_requirement"}}}}],"email_marketing_consent":{"state":"subscribed"},"sms_marketing_consent":{"state":"subscribed"},"receipt_upload_url":"\u003cstring>","loyalty_pass_url":"\u003cstring>","referral_urls":{"direct":"\u003cstring>","facebook":"\u003cstring>","twitter":"\u003cstring>","email":"\u003cstring>","whatsapp":"\u003cstring>","instagram":"\u003cstring>","device_share":"\u003cstring>"}}}}},"exampleType":"generated"}},"exampleType":"generated"},"a395188e-e6dc-496e-a0e4-e51a976ef18c":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"object","additionalProperties":{"type":"string","uniqueKey":"error.details.additionalProperties","typeLabel":"string"},"uniqueKey":"error.details","typeLabel":"object"}},"required":["message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"message":"\u003cstring>","details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"1da5ba14-5b53-480f-8f45-cd87dc61d819":{"description":"401","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"code":{"type":"string","uniqueKey":"error.code","typeLabel":"string"},"details":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"error.details.additionalProperties","typeLabel":"string"},"uniqueKey":"error.details","typeLabel":"object"}},"required":["message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"message":"\u003cstring>","code":"\u003cstring>","details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"b644046a-e1b8-49e8-98f3-a2a64b14180d":{"description":"403","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"code":{"type":"string","uniqueKey":"error.code","typeLabel":"string"},"details":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"error.details.additionalProperties","typeLabel":"string"},"uniqueKey":"error.details","typeLabel":"object"}},"required":["message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"message":"\u003cstring>","code":"\u003cstring>","details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"6aac033b-bc5e-42ab-951c-50882a093a5f":{"description":"404","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["not_found"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["code","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"not_found","message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"963eedb4-3b84-433d-8d11-1850a3aab267":{"description":"422","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"oneOf":[{"type":"object","title":"Customer not enrolled","required":["code"],"properties":{"code":{"type":"string","const":"customer_not_enrolled","isRequired":true,"uniqueKey":"error.oneOf.0.code","typeLabel":"string"},"message":{"type":"string","uniqueKey":"error.oneOf.0.message","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"error.oneOf.0","typeLabel":"Customer not enrolled · object"},{"type":"object","title":"Customer blocked","required":["code"],"properties":{"code":{"type":"string","const":"customer_blocked","isRequired":true,"uniqueKey":"error.oneOf.1.code","typeLabel":"string"},"message":{"type":"string","uniqueKey":"error.oneOf.1.message","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"error.oneOf.1","typeLabel":"Customer blocked · object"},{"type":"object","title":"Reward invalid kind","required":["code"],"properties":{"code":{"type":"string","const":"reward_kind_mismatch","isRequired":true,"uniqueKey":"error.oneOf.2.code","typeLabel":"string"},"message":{"type":"string","uniqueKey":"error.oneOf.2.message","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"error.oneOf.2","typeLabel":"Reward invalid kind · object"},{"type":"object","title":"Reward already refunded","required":["code"],"properties":{"code":{"type":"string","const":"reward_already_refunded","isRequired":true,"uniqueKey":"error.oneOf.3.code","typeLabel":"string"},"message":{"type":"string","uniqueKey":"error.oneOf.3.message","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"error.oneOf.3","typeLabel":"Reward already refunded · object"},{"type":"object","title":"Reward already used","required":["code"],"properties":{"code":{"type":"string","const":"reward_already_used","isRequired":true,"uniqueKey":"error.oneOf.4.code","typeLabel":"string"},"message":{"type":"string","uniqueKey":"error.oneOf.4.message","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"error.oneOf.4","typeLabel":"Reward already used · object"}],"isRequired":true,"uniqueKey":"error","typeLabel":"Customer not enrolled · object | Customer blocked · object | Reward invalid kind · object | Reward already refunded · object | Reward already used · object"}},"required":["error"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"customer_not_enrolled","message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"31630db3-2b9e-4c7e-98d5-aae398badfd6":{"description":"429","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"}},"required":["code"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"rate_limited"}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"f22b8b38-859b-4698-aa68-72c18ad18f4c":{"ProgramApiKey":{"type":"http","scheme":"bearer","description":"An API key linked to a Program in LoyaltyLion, with a set of permissions (scopes). API keys can be created manually, or acquired through an OAuth2 flow. The API key should be provided as a `Bearer` token in the `Authorization` header","scopes":["write_customers"],"schemeName":"ProgramApiKey"}},"8ac1466c-56f1-4faf-8975-abde6b362010":{"CustomerSessionToken":{"type":"http","scheme":"bearer","description":"A [customer session token](/headless-api/session-tokens): a signed envelope you generate yourself, scoped to a single site and customer and to the [scopes](/headless-api/session-tokens#scopes) you grant it. Safe to hand to a browser or app: it only authorizes customer-self-serve actions for its own customer. Provide it as a `Bearer` token in the `Authorization` header","scopes":["write"],"schemeName":"CustomerSessionToken"}}},"servers":{"5947ccdf-6752-40b7-8a08-71f8c0d385f5":{"url":"https://api.loyaltylion.com"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"An API key linked to a Program in LoyaltyLion, with a set of permissions (scopes). API keys can be created manually, or acquired through an OAuth2 flow. The API key should be provided as a `Bearer` token in the `Authorization` header","scopes":["write_customers"],"schemeName":"ProgramApiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"An API key linked to a Program in LoyaltyLion, with a set of permissions (scopes). API keys can be created manually, or acquired through an OAuth2 flow. The API key should be provided as a `Bearer` token in the `Authorization` header","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"ProgramApiKey","name":"Authorization"}],"title":"ProgramApiKey"},{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"A [customer session token](/headless-api/session-tokens): a signed envelope you generate yourself, scoped to a single site and customer and to the [scopes](/headless-api/session-tokens#scopes) you grant it. Safe to hand to a browser or app: it only authorizes customer-self-serve actions for its own customer. Provide it as a `Bearer` token in the `Authorization` header","scopes":["write"],"schemeName":"CustomerSessionToken"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"A [customer session token](/headless-api/session-tokens): a signed envelope you generate yourself, scoped to a single site and customer and to the [scopes](/headless-api/session-tokens#scopes) you grant it. Safe to hand to a browser or app: it only authorizes customer-self-serve actions for its own customer. Provide it as a `Bearer` token in the `Authorization` header","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"CustomerSessionToken","name":"Authorization"}],"title":"CustomerSessionToken"}]},"originalFileLocation":"headless-api/2025-06/openapi.json"},"subdomain":"loyaltylion","siteName":"LoyaltyLion","title":"Free Product - LoyaltyLion","navMaps":{"firstHrefInVersion":{"2025-06":{"href":"/headless-api/2025-06/reward-refund/free-product","matchLevel":0},"v2":{"href":"/api-reference/introduction","matchLevel":4}},"firstHrefInLanguage":{}},"lastModified":"2026-10-26T12:59:00.172Z","originalFileLocation":"headless-api/2025-06/reward-refund/free-product.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"application-name\" content=\"LoyaltyLion\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/loyaltylion/-HHkKRQ0-0oU9Wqj/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/loyaltylion/-HHkKRQ0-0oU9Wqj/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/loyaltylion/-HHkKRQ0-0oU9Wqj/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/loyaltylion/-HHkKRQ0-0oU9Wqj/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/loyaltylion/-HHkKRQ0-0oU9Wqj/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/loyaltylion/-HHkKRQ0-0oU9Wqj/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/loyaltylion/-HHkKRQ0-0oU9Wqj/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/loyaltylion/-HHkKRQ0-0oU9Wqj/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/loyaltylion/-HHkKRQ0-0oU9Wqj/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Free Product - LoyaltyLion\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"LoyaltyLion\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://developers.loyaltylion.com/headless-api/2025-06/reward-refund/free-product\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://loyaltylion.mintlify.app/_mintlify/api/og/v2?division=Reward+refunds\u0026amp;title=Free+Product\u0026amp;theme=ba374c8767f6d28b4848a12c\u0026amp;signature=daa52c42a42de5e93bcaa78469196ddbbf098659b63f5ed612348d72e5f371d0\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Free Product - LoyaltyLion\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://loyaltylion.mintlify.app/_mintlify/api/og/v2?division=Reward+refunds\u0026amp;title=Free+Product\u0026amp;theme=ba374c8767f6d28b4848a12c\u0026amp;signature=daa52c42a42de5e93bcaa78469196ddbbf098659b63f5ed612348d72e5f371d0\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/loyaltylion/-HHkKRQ0-0oU9Wqj/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"LoyaltyLion\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#7533f2\">\u003clink data-mint-head rel=\"canonical\" href=\"https://developers.loyaltylion.com/headless-api/2025-06/reward-refund/free-product\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/headless-api/2025-06/reward-refund/free-product.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://developers.loyaltylion.com/#organization\",\"name\":\"LoyaltyLion\",\"url\":\"https://developers.loyaltylion.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/loyaltylion/qoWgzO-fbs5_an5D/logo/loyaltylion-logo-black.svg?fit=max\u0026auto=format\u0026n=qoWgzO-fbs5_an5D\u0026q=85\u0026s=a8042001d5f93ef344ce190752bfba7d\"}},{\"@type\":\"WebSite\",\"@id\":\"https://developers.loyaltylion.com#website\",\"name\":\"LoyaltyLion\",\"url\":\"https://developers.loyaltylion.com\",\"publisher\":{\"@id\":\"https://developers.loyaltylion.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://developers.loyaltylion.com/headless-api/2025-06/reward-refund/free-product#webpage\",\"url\":\"https://developers.loyaltylion.com/headless-api/2025-06/reward-refund/free-product\",\"name\":\"Free Product\",\"dateModified\":\"2026-10-26T12:59:00.172Z\",\"isPartOf\":{\"@id\":\"https://developers.loyaltylion.com#website\"},\"breadcrumb\":{\"@id\":\"https://developers.loyaltylion.com/headless-api/2025-06/reward-refund/free-product#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://developers.loyaltylion.com/headless-api/2025-06/reward-refund/free-product#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Resources\",\"item\":\"https://developers.loyaltylion.com/headless-api/2025-06/configuration/get-configuration\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Free Product\",\"item\":\"https://developers.loyaltylion.com/headless-api/2025-06/reward-refund/free-product\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://developers.loyaltylion.com/headless-api/2025-06/reward-refund/free-product#apireference\",\"headline\":\"Free Product\",\"name\":\"Free Product\",\"url\":\"https://developers.loyaltylion.com/headless-api/2025-06/reward-refund/free-product\",\"mainEntityOfPage\":{\"@id\":\"https://developers.loyaltylion.com/headless-api/2025-06/reward-refund/free-product#webpage\"},\"dateModified\":\"2026-10-26T12:59:00.172Z\",\"publisher\":{\"@id\":\"https://developers.loyaltylion.com/#organization\"},\"isPartOf\":{\"@id\":\"https://developers.loyaltylion.com#website\"}}]}\u003c/script>","siteName":"LoyaltyLion","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/docs/introduction"}]},{"tab":"SDK","pages":[{"title":"SDK","href":"/sdk/overview"}]},{"tab":"Admin API","versions":[{"version":"v2","default":true,"groups":[{"group":"Admin API","pages":[{"title":"Introduction","href":"/api-reference/introduction"},{"group":"Authentication","pages":[{"title":"Overview","href":"/api-reference/authentication/overview"},{"title":"API keys","href":"/api-reference/authentication/api-keys"},{"title":"OAuth","href":"/api-reference/authentication/oauth"},{"title":"Token \u0026 secret (deprecated)","href":"/api-reference/authentication/token-secret"}]},{"title":"Pagination","href":"/api-reference/pagination"}]},{"group":"Resources","pages":[{"group":"Identity","pages":[{"title":"Who Am I","version":"v2","openapi":"api-reference/v2/openapi.json GET /v2/identity/whoami","href":"/api-reference/v2/resources/whoami"}]},{"group":"Customers","pages":[{"title":"List Customers","version":"v2","openapi":"api-reference/v2/openapi.json GET /v2/customers","href":"/api-reference/v2/resources/customers/list-customers"},{"title":"Update Customer","version":"v2","openapi":"api-reference/v2/openapi.json PATCH /v2/customers/{merchant_id}","href":"/api-reference/v2/resources/customers/update-customer"},{"title":"Add Points","version":"v2","openapi":"api-reference/v2/openapi.json POST /v2/customers/{merchant_id}/points","href":"/api-reference/v2/resources/customers/add-points"},{"title":"Remove Points","version":"v2","openapi":"api-reference/v2/openapi.json POST /v2/customers/{merchant_id}/remove_points","href":"/api-reference/v2/resources/customers/remove-points"},{"title":"List Available Rewards","version":"v2","openapi":"api-reference/v2/openapi.json GET /v2/customers/{merchant_id}/available_rewards","href":"/api-reference/v2/resources/customers/rewards/list-available-rewards"},{"title":"Redeem Reward","version":"v2","openapi":"api-reference/v2/openapi.json POST /v2/customers/{merchant_id}/claimed_rewards","href":"/api-reference/v2/resources/customers/rewards/redeem-reward"},{"title":"Refund Reward","version":"v2","openapi":"api-reference/v2/openapi.json POST /v2/customers/{merchant_id}/claimed_rewards/{claimed_reward_id}/refund","href":"/api-reference/v2/resources/customers/rewards/refund-reward"},{"title":"List Transactions","version":"v2","openapi":"api-reference/v2/openapi.json GET /v2/customers/{merchant_id}/transactions","href":"/api-reference/v2/resources/customers/list-transactions"}]},{"group":"Activities","pages":[{"title":"List Activities","version":"v2","openapi":"api-reference/v2/openapi.json GET /v2/activities","href":"/api-reference/v2/resources/activities/list-activities"},{"title":"Create Activity","version":"v2","openapi":"api-reference/v2/openapi.json POST /v2/activities","href":"/api-reference/v2/resources/activities/create-activity"},{"title":"Update Activity","version":"v2","openapi":"api-reference/v2/openapi.json PUT /v2/activities/{name}/{merchant_id}","href":"/api-reference/v2/resources/activities/update-activity"}]},{"group":"Transactions","pages":[{"title":"List Transactions","version":"v2","openapi":"api-reference/v2/openapi.json GET /v2/transactions","href":"/api-reference/v2/resources/transactions/list-transactions"}]},{"group":"Orders","pages":[{"title":"List Orders","version":"v2","openapi":"api-reference/v2/openapi.json GET /v2/orders","href":"/api-reference/v2/resources/orders/list-orders"},{"title":"Get Order","version":"v2","openapi":"api-reference/v2/openapi.json GET /v2/orders/{merchant_id}","href":"/api-reference/v2/resources/orders/get-order"},{"title":"Create Order","version":"v2","openapi":"api-reference/v2/openapi.json POST /v2/orders","href":"/api-reference/v2/resources/orders/create-order"},{"title":"Update Order","version":"v2","openapi":"api-reference/v2/openapi.json PUT /v2/orders/{merchant_id}","href":"/api-reference/v2/resources/orders/update-order"}]},{"group":"Sites","pages":[{"title":"List Sites","version":"v2","openapi":"api-reference/v2/openapi.json GET /v2/sites","href":"/api-reference/v2/resources/sites/list-sites"},{"title":"Create WebView Session","version":"v2","openapi":"api-reference/v2/openapi.json POST /v2/sites/{site_id}/webviews/sessions","href":"/api-reference/v2/resources/sites/create-webview-session"}]},{"group":"Reviews","pages":[{"title":"Create Review","version":"v2","openapi":"api-reference/v2/openapi.json POST /v2/reviews/{platform}","href":"/api-reference/v2/resources/reviews/create-review"},{"title":"Update Review","version":"v2","openapi":"api-reference/v2/openapi.json PUT /v2/reviews/{platform}/{merchant_id}","href":"/api-reference/v2/resources/reviews/update-review"},{"title":"Delete Review","version":"v2","openapi":"api-reference/v2/openapi.json DELETE /v2/reviews/{platform}/{merchant_id}","href":"/api-reference/v2/resources/reviews/delete-review"}]},{"group":"Rewards","pages":[{"title":"Enable Reward","version":"v2","openapi":"api-reference/v2/openapi.json POST /v2/rewards/{reward_id}/enable","href":"/api-reference/v2/resources/rewards/enable-reward"},{"title":"Disable Reward","version":"v2","openapi":"api-reference/v2/openapi.json POST /v2/rewards/{reward_id}/disable","href":"/api-reference/v2/resources/rewards/disable-reward"}]},{"group":"Emails","pages":[{"title":"List Unsubscribes","version":"v2","openapi":"api-reference/v2/openapi.json GET /v2/loyalty_emails/unsubscribes","href":"/api-reference/v2/resources/emails/list-unsubscribes"},{"title":"Create Unsubscribe","version":"v2","openapi":"api-reference/v2/openapi.json POST /v2/loyalty_emails/unsubscribes","href":"/api-reference/v2/resources/emails/create-unsubscribe"}]},{"group":"Exports","pages":[{"title":"Customer exports","version":"v2","href":"/api-reference/v2/resources/customers/exports/overview"},{"title":"Create Export","version":"v2","openapi":"api-reference/v2/openapi.json POST /v2/customers/exports","href":"/api-reference/v2/resources/customers/exports/create-export"},{"title":"Get Export","version":"v2","openapi":"api-reference/v2/openapi.json GET /v2/customers/exports/{id}","href":"/api-reference/v2/resources/customers/exports/get-export"},{"title":"List Exports","version":"v2","openapi":"api-reference/v2/openapi.json GET /v2/customers/exports","href":"/api-reference/v2/resources/customers/exports/list-exports"}]},{"group":"Webhooks","pages":[{"title":"List Webhooks","version":"v2","openapi":"api-reference/v2/openapi.json GET /v2/webhooks","href":"/api-reference/v2/resources/webhooks/list-webhooks"},{"title":"Create Webhook","version":"v2","openapi":"api-reference/v2/openapi.json POST /v2/webhooks","href":"/api-reference/v2/resources/webhooks/create-webhook"},{"title":"Delete Webhook","version":"v2","openapi":"api-reference/v2/openapi.json DELETE /v2/webhooks/{webhook_id}","href":"/api-reference/v2/resources/webhooks/delete-webhook"}]}]},{"group":"Webhooks","pages":[{"title":"Introduction","href":"/api-reference/v2/webhooks/overview"},{"group":"Webhook events","pages":[{"title":"customers/update","href":"/api-reference/v2/webhooks/events/customers-update"},{"title":"loyalty_emails/unsubscribe","href":"/api-reference/v2/webhooks/events/loyalty-emails-unsubscribe"},{"title":"rewards/store_fulfilment","href":"/api-reference/v2/webhooks/events/rewards-store-fulfilment"},{"title":"receipts/manual_approval_required","href":"/api-reference/v2/webhooks/events/receipts-manual-approval-required"},{"title":"program_events/customer.enrolled","href":"/api-reference/v2/webhooks/events/program-events/customer-enrolled"},{"title":"program_events/customer.tier_upgraded","href":"/api-reference/v2/webhooks/events/program-events/customer-tier-upgraded"},{"title":"program_events/customer.tier_downgraded","href":"/api-reference/v2/webhooks/events/program-events/customer-tier-downgraded"},{"title":"program_events/customer.reward_available_notification","href":"/api-reference/v2/webhooks/events/program-events/customer-reward-available-notification"},{"title":"program_events/customer.recurring_reward_available_reminder","href":"/api-reference/v2/webhooks/events/program-events/customer-recurring-reward-available-reminder"},{"title":"program_events/customer.claimed_reward","href":"/api-reference/v2/webhooks/events/program-events/customer-claimed-reward"},{"title":"program_events/customer.points_earned","href":"/api-reference/v2/webhooks/events/program-events/customer-points-earned"},{"title":"program_events/customer.referral_complete","href":"/api-reference/v2/webhooks/events/program-events/customer-referral-complete"},{"title":"program_events/customer.rule_completed","href":"/api-reference/v2/webhooks/events/program-events/customer-rule-completed"},{"title":"program_events/customer.approaching_tier_upgrade","href":"/api-reference/v2/webhooks/events/program-events/customers-approaching-tier-upgrade"},{"title":"program_events/customer.moved_to_defected_segment","href":"/api-reference/v2/webhooks/events/program-events/customer-moved-to-defected-segment"},{"title":"program_events/customer.moved_to_loyal_segment","href":"/api-reference/v2/webhooks/events/program-events/customer-moved-to-loyal-segment"},{"title":"program_events/customer.moved_to_at_risk_segment","href":"/api-reference/v2/webhooks/events/program-events/customer-moved-to-at-risk-segment"},{"title":"program_events/customer.approaching_points_expiration","href":"/api-reference/v2/webhooks/events/program-events/customer-approaching-points-expiration"},{"title":"program_events/customer.approaching_reward_expiration","href":"/api-reference/v2/webhooks/events/program-events/customer-approaching-reward-expiration"},{"title":"program_events/customer.receipt_approved","href":"/api-reference/v2/webhooks/events/program-events/customer-receipt-approved"},{"title":"program_events/customer.receipt_declined","href":"/api-reference/v2/webhooks/events/program-events/customer-receipt-declined"}]}]}]}]},{"tab":"Headless API","versions":[{"version":"2025-06","default":true,"groups":[{"group":"Headless API","pages":[{"title":"Introduction","href":"/headless-api/introduction"},{"title":"Customer session tokens","href":"/headless-api/session-tokens"},{"title":"Errors","href":"/headless-api/errors"},{"title":"Changelog","href":"/headless-api/changelog"}]},{"group":"Guides","pages":[{"title":"Referrals","href":"/headless-api/guides/referrals"},{"group":"Shopify Hydrogen","pages":[{"title":"Integrate with Hydrogen","href":"/headless-api/guides/hydrogen/integrate"},{"title":"Free product rewards","href":"/headless-api/guides/hydrogen/free-product-rewards"}]}]},{"group":"Resources","pages":[{"group":"Configuration","pages":[{"title":"Get Configuration","version":"v2","openapi":"headless-api/2025-06/openapi.json GET /headless/2025-06/{site_id}/configuration","href":"/headless-api/2025-06/configuration/get-configuration"}]},{"group":"Customers","pages":[{"title":"Get Customer","version":"v2","openapi":"headless-api/2025-06/openapi.json GET /headless/2025-06/{site_id}/customers/{merchant_id}","href":"/headless-api/2025-06/customers/get-customer"},{"title":"Initialize Session","version":"v2","openapi":"headless-api/2025-06/openapi.json POST /headless/2025-06/{site_id}/customers/{merchant_id}/sessions","href":"/headless-api/2025-06/customers/initialize-session"},{"title":"Enroll Customer","version":"v2","openapi":"headless-api/2025-06/openapi.json POST /headless/2025-06/{site_id}/customers/{merchant_id}/enroll","href":"/headless-api/2025-06/customers/enroll-customer"},{"title":"Set Birthday","version":"v2","openapi":"headless-api/2025-06/openapi.json POST /headless/2025-06/{site_id}/customers/{merchant_id}/birthday","href":"/headless-api/2025-06/customers/set-birthday"},{"title":"Subscribe to Email Marketing","version":"v2","openapi":"headless-api/2025-06/openapi.json POST /headless/2025-06/{site_id}/customers/{merchant_id}/email_marketing/subscribe","href":"/headless-api/2025-06/customers/subscribe-email-marketing"}]},{"group":"Referrals","pages":[{"title":"Claim Referee Incentive","version":"v2","openapi":"headless-api/2025-06/openapi.json POST /headless/2025-06/{site_id}/referrals/referee_incentive","href":"/headless-api/2025-06/referrals/claim-referee-incentive"},{"title":"Track Share","version":"v2","openapi":"headless-api/2025-06/openapi.json POST /headless/2025-06/{site_id}/referrals/shares","href":"/headless-api/2025-06/referrals/track-share"},{"title":"Register Guest Referrer","version":"v2","openapi":"headless-api/2025-06/openapi.json POST /headless/2025-06/{site_id}/referrals/guest_registrations","href":"/headless-api/2025-06/referrals/register-guest-referrer"}]},{"group":"Reward redemption","pages":[{"title":"Cart Discount Voucher","version":"v2","openapi":"headless-api/2025-06/openapi.json POST /headless/2025-06/{site_id}/rewards/cart_discount_voucher/redeem","href":"/headless-api/2025-06/reward-redemption/cart-discount-voucher"},{"title":"Free Shipping Voucher","version":"v2","openapi":"headless-api/2025-06/openapi.json POST /headless/2025-06/{site_id}/rewards/free_shipping_voucher/redeem","href":"/headless-api/2025-06/reward-redemption/free-shipping-voucher"},{"title":"Collection Discount Voucher","version":"v2","openapi":"headless-api/2025-06/openapi.json POST /headless/2025-06/{site_id}/rewards/collection_discount_voucher/redeem","href":"/headless-api/2025-06/reward-redemption/collection-discount-voucher"},{"title":"Product Discount Voucher","version":"v2","openapi":"headless-api/2025-06/openapi.json POST /headless/2025-06/{site_id}/rewards/product_discount_voucher/redeem","href":"/headless-api/2025-06/reward-redemption/product-discount-voucher"},{"title":"Gift Card","version":"v2","openapi":"headless-api/2025-06/openapi.json POST /headless/2025-06/{site_id}/rewards/gift_card/redeem","href":"/headless-api/2025-06/reward-redemption/gift-card"},{"title":"Active Subscription Discount Voucher","version":"v2","openapi":"headless-api/2025-06/openapi.json POST /headless/2025-06/{site_id}/rewards/active_subscription_discount_voucher/redeem","href":"/headless-api/2025-06/reward-redemption/active-subscription-discount-voucher"},{"title":"Active Subscription Product","version":"v2","openapi":"headless-api/2025-06/openapi.json POST /headless/2025-06/{site_id}/rewards/active_subscription_product/redeem","href":"/headless-api/2025-06/reward-redemption/active-subscription-product"},{"title":"Free Product","version":"v2","openapi":"headless-api/2025-06/openapi.json POST /headless/2025-06/{site_id}/rewards/product_cart/redeem","description":null,"href":"/headless-api/2025-06/reward-redemption/free-product"}]},{"group":"Reward refunds","pages":[{"title":"Free Product","version":"v2","openapi":"headless-api/2025-06/openapi.json POST /headless/2025-06/{site_id}/rewards/product_cart/refund","href":"/headless-api/2025-06/reward-refund/free-product"}]},{"group":"Complete rules","pages":[{"title":"Clickthrough","version":"v2","openapi":"headless-api/2025-06/openapi.json POST /headless/2025-06/{site_id}/rules/clickthrough/complete","description":null,"href":"/headless-api/2025-06/complete-rules/clickthrough"},{"title":"Facebook Like","version":"v2","openapi":"headless-api/2025-06/openapi.json POST /headless/2025-06/{site_id}/rules/facebook_like/complete","href":"/headless-api/2025-06/complete-rules/facebook-like"},{"title":"Instagram Follow","version":"v2","openapi":"headless-api/2025-06/openapi.json POST /headless/2025-06/{site_id}/rules/instagram_follow/complete","href":"/headless-api/2025-06/complete-rules/instagram-follow"},{"title":"TikTok Follow","version":"v2","openapi":"headless-api/2025-06/openapi.json POST /headless/2025-06/{site_id}/rules/tiktok_follow/complete","href":"/headless-api/2025-06/complete-rules/tiktok-follow"},{"title":"Twitter/X Follow","version":"v2","openapi":"headless-api/2025-06/openapi.json POST /headless/2025-06/{site_id}/rules/twitter_follow/complete","href":"/headless-api/2025-06/complete-rules/twitter-follow"}]}]}]}]},{"tab":"MCP","pages":[{"title":"MCP","href":"/docs/mcp/overview"}]}]},"title":"Free Product - LoyaltyLion","buildId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","deploymentId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-rfhihCWU.js","utils-BmH1XFxk.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-BcNsxPKB.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-BAES3tkd.js","snippetPresets-DCMQBKLP.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-D6l_bzE9.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BOktbnNh.js","shallow-BCs8SgM7.js","getApiPlaygroundDisplay-DEmW5bJB.js","CodeSnippet-CpZOpB9C.js","CodeSnippets-BOBDqibl.js","Page-D5fEM6aW.js","getPastedJson-DH2JBvmr.js","icon-BBJH-kKh.js","MethodPill-D2Sd5NLC.js","DuplicateIcon-CGgfL2qN.js","createIcon-BKudBBzi.js","DynamicMarkdown-85clUA0i.js","SectionHeading-D0JiMgDx.js","axios-vUo_bRtp.js","Markdown-Cfiy0xZO.js","clsx-rL8ZCCw4.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-aeztFa9U.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BywkCr5C.js"]}