Hi everyone,
I’m a developer working on a custom Shopify app (unlisted/private) that uses Shopify Functions – order-discount extension to implement a customer-specific promotion.
Goal:
I want to create a promotion for specific customer groups with the following rules:
- Logged-in customers can get 50% off at checkout when applying a discount code.
- However, each customer has a maximum discount quota of $1000 (either lifetime or reset periodically).
- After each successful checkout, the discount used should be subtracted from their remaining quota.
- If the 50% discount exceeds their quota, it should be capped at $1000, and the customer pays the rest.
Example use cases:
- Order value $1200 → 50% = $600 →
allow full discount - Order value $3000 → 50% = $1500 →
only $1000 discount allowed → customer pays $2000
Challenge:
Since Shopify Functions cannot make external API calls , I’m unable to:
- Fetch the customer’s current quota from my backend within the Function
- Update the quota after order completion
This breaks the logic I need for enforcing a per-customer discount limit.
Looking for advice on:
- How to enforce per-customer discount caps without calling external APIs in the Function?
- Has anyone implemented a similar quota-based discount system before?
- Is the best way to track usage externally via webhook (e.g. orders/create) and sync quota manually?
- Is it viable to store the quota as a metafield on the customer, and read it inside the Function?
- Does Shopify Functions allow reading customer metafields from RunInput?
Current workaround idea:
- Use a customer metafield like customer.discount_remaining to track the quota
- On checkout, the Function reads this metafield and caps the discount accordingly
- After order is placed, use orders/create webhook to update the metafield value in my backend
→ But I’m not sure if customer metafields are available in the input payload to the function.
Has anyone found a more elegant or Shopify-recommended solution for this use case?
Any insights or shared experience would be highly appreciated. Thanks in advance!