Orders
The Orders page answers the question only Joryio can: which message produced each order. It is operational, not analytical - find an order, check its status, and see its attribution. Revenue analysis lives on the E-Commerce Overview; fulfilment (shipping, refunds) is managed in your store.
Every figure is net of refunds.
The page
- Header - title, a date-range picker (the same presets used across analytics), nothing else.
- Status tabs - All orders / Paid / Pending / Refunded, with counts.
- Toolbar - search (order number, customer name or email), source, customer, attribution, and sort.
- Table - one row per order; a row opens the detail drawer.
- Pagination - server-side; the page loads one page at a time.
Status tabs
The page uses a payment-oriented view of status - the store owns fulfilment, so shipped/delivered read as Paid here:
| Tab | Includes |
|---|---|
| Paid | Payment captured (processing, shipped, delivered) |
| Pending | Awaiting payment |
| Refunded | Fully or partly refunded |
Toolbar filters
| Filter | Options |
|---|---|
| Search | Order number, customer name, or email |
| Source | All / Campaigns only / Journeys only / Not attributed |
| Customer | All / First-time / Repeat |
| Attribution | All / Click-through only / Assisted click / Opened only |
| Sort | Newest / Highest value / Lowest value |
Table columns
| Column | Description |
|---|---|
| Order | Your order number |
| Date | When it was placed |
| Customer | Name + FIRST/REPEAT badge + email |
| Items | First item + "+N more - N units" |
| Total | Order total, with "-$x refunded" beneath (struck through when fully refunded) |
| Attributed to | Campaign/journey + channel + how it was earned |
| Status | Paid / Pending / Partly refunded / Refunded |
Attribution
For each order, Joryio records which campaign or journey produced it, how the credit was earned, and when:
| How | Meaning | Strength |
|---|---|---|
| Click-through (direct) | The customer clicked this campaign's link and bought (deterministic, same session) | Strong |
| Assisted click | The customer clicked a message within the window before buying | Strong |
| Opened only | The customer opened but did not click (shown in amber) | Weak |
| Not attributed | No engagement within the window - still counts toward total revenue | - |
The "Attributed to" cell shows the campaign/journey name, a channel chip (email/SMS/push/in-app/WhatsApp), and a line like "clicked - 3h before" or "opened only - 41h before".
Click-through only
Some teams trust only purchases where the customer clicked a link and bought (deterministic), and want to exclude the windowed/assisted effect. Use the Attribution → Click-through only filter to list exactly those orders. The same view is available as a toggle on the E-Commerce Overview and as the Direct figure on a campaign's analytics.
Detail drawer
Opening an order shows the attribution first (why it is - or is not - credited), then the customer, then line items with subtotal, refunded amount, and net revenue. Refunds and fulfilment are managed in your store, and the drawer says so.
Attribution models and windows
How an order is credited is configurable:
- Model - Last touch (a click beats an open), Last click, or First touch. Set the workspace default under Settings → Revenue attribution; a campaign or journey can override it in its conversion settings.
- Window - how far back a touch may sit before the order. Each campaign/journey uses its own conversion window (default 7 days).
- Count opens - whether opens (weaker, noisier than clicks) attribute at all. Workspace-level, on by default.
Changing a setting applies to new orders immediately and re-credits existing orders in the background. To compare models side by side (e.g. last-click vs last-touch), open E-Commerce → Overview → Compare models.
Order fields
| Field | Description |
|---|---|
externalId | Your order ID from your e-commerce platform |
userId | Customer's Joryio user ID |
status | Order status |
total | Final order amount |
subtotal | Amount before discounts |
totalRefunded | Amount refunded so far (nets revenue) |
items | Line items array |
placedAt | Order timestamp |
campaignId / canvasId | Deterministic (click-through) attribution tag |
source, utmSource, utmMedium, utmCampaign | Channel / UTM tags |
Line items carry product ID and name, quantity and price, SKU/variant, and image URL.
Using orders in campaigns
Order confirmation emails
<h1>Thank You for Your Order!</h1>
<p>Order #{{ order.id }}</p>
{% for item in order.items %}
<div class="item">
<img src="{{ item.imageUrl }}" />
<p>{{ item.name }} x {{ item.quantity }}</p>
<p>${{ item.price }}</p>
</div>
{% endfor %}
<p>Total: ${{ order.total }}</p>
Post-purchase flows
Create Canvas flows triggered by order events - order confirmation, delivery follow-up, review request, replenishment.
Order events
| Event | Trigger |
|---|---|
ecommerce.order.created | New order placed |
ecommerce.order.fulfilled | Order shipped |
ecommerce.order.cancelled | Order cancelled |
ecommerce.order.refunded | Refund processed |
ecommerce.order.status_changed | Any status change |
Refunds
Refund status and the refunded amount sync from Shopify and WooCommerce (and can be sent by a custom integration via totalRefunded on the Orders API). Every revenue figure on the page - and in attribution - is net of refunds: a partial refund reduces the order's net revenue, and a fully-refunded order contributes nothing to its campaign's credit.