How it works
Fraud checks pause downloads at a single point in the order lifecycle: between Shopify confirming payment and Alva sending anything to the customer. Five steps run in order:
- ORDERS_PAID webhook fires. Shopify sends the paid-order payload to Alva via Pub/Sub. The webhook handler resolves the shop, customer, and product mappings.
- Shopify Risk Analysis API returns a recommendation. Alva calls Shopify's risk endpoint and receives one of three labels — low, medium, or high.
- The order joins the fraud queue if risk meets the threshold. When the recommendation matches the merchant's configured threshold (typically high), Alva writes a
FraudCheckQueuerow inside a database transaction. The download email is held. License-key assignment is held. - Approval releases the order. The merchant approves from the fraud queue. Alva sends the delivery email, runs license-key auto-assignment, and writes a
FraudCheckActionaudit row. - Rejection blocks delivery. The merchant rejects. No email is sent, no license keys are assigned, and the order is marked rejected. Access can still be revoked later if anything slipped through.
When orders are held
An order is held when two conditions are both true: fraud checks are enabled in Settings → Fraud protection, and Shopify's Risk API returns a recommendation at or above the configured risk level (high by default). Low and medium orders sail through. Orders that match the threshold sit in the queue with no email and no license key until reviewed.
Alva admin → Orders → Fraud queue. Show 2–3 example orders with status "Pending review", the Shopify risk pill ("High"), product names, and the Approve / Reject buttons. No real customer data visible.
What customers see while held
Customers see nothing. No download email lands in the inbox, the customer-account page shows no purchased files, and the order-status thank-you page does not surface a download link. The order itself looks paid in Shopify — the hold applies only to digital fulfilment.
When orders are NOT checked
POS orders skip fraud checks entirely. Card-present sales in Shopify POS do not carry a customer record by default, and the webhook handler short-circuits before reaching the Risk API. Email and license-key assignment fire immediately for those orders. Draft orders and guest checkouts without a customer record follow the same path.
See also
Frequently asked questions
Yes. Open Settings → Fraud protection in the Alva admin and toggle the fraud queue off. Every paid order then triggers an immediate download email and license-key assignment with no risk evaluation.
Open Orders → Fraud queue in the Alva admin. The page lists every held order with the Shopify risk recommendation and the products waiting to ship.
Yes. License keys are never assigned to a held order. Assignment runs only after the merchant approves, which prevents fraudulent buyers from burning through key inventory.
Was this helpful?
Last updated 2026-05-06