Custom stores: quickstart

Any stack — Next.js, Rails, Laravel, Django, Shopify headless, hand-rolled PHP. Two additions, about an hour.

Your store slug and signing secret are in your dashboard under Store setup. Or use “Email the steps to my developer” on the Overview page.
  1. 1
    Tell the app which order was placed
    On your order confirmation page, call EasyVial.trackOrder(). The object only exists inside the app, so this does nothing on your normal site.
    order confirmation page
    <script>
      (function () {
        function send() {
          window.EasyVial.trackOrder({ id: "{{ order.number }}", orderKey: "{{ order.secret_key }}" });
        }
        if (window.EasyVial) send();
        else window.addEventListener("easyvial:ready", send, { once: true });
      })();
    </script>
    orderKeyis any per-order secret you already store (an order access token or a random string saved with the order). Never use the customer's email or anything guessable. Full SDK reference →
  2. 2
    Report the order from your server
    When the order is created and every time its status changes, send a signed JSON request:
    POST
    https://easyvial.app/api/v1/orders?store=YOUR_SLUG
    Content-Type: application/json
    X-EasyVial-Signature: <hex HMAC-SHA256 of the raw body, keyed with your signing secret>
    
    {
      "id": "10423",
      "order_key": "same secret you passed to trackOrder",
      "status": "processing",
      "total": "129.98",
      "refunded_total": "0",
      "currency": "USD",
      "created_at": "2026-11-08T14:00:00Z"
    }
    Field reference → · Signing examples (Node, PHP, Python, Ruby, Go) →
  3. 3
    Test it
    Open your app link on a phone, place a small order, and check it in App orders. Then mark it shipped and confirm the notification arrives. Testing checklist →

Optional, but recommended

Save utm_source, utm_medium and utm_campaignfrom the landing URL onto the order and send them in step 2. That attributes app orders even if step 1 didn't run (for example, a customer who completes payment on an external page).

Use window.EasyVial?.isAppto hide your own “download our app” banner inside the app. You can also skip your site's age gate in the app — the app asks the age question itself before customers enter your store.