At a glance
The count of successful transactions on Viva Payments rails in the period: how many discrete charges hit the rail, regardless of size. The denominator behind average-transaction value, decline-rate, refund-rate, and 3DS-abandon-rate. Volume’s twin metric.
| What it counts | COUNT(transactions) where StatusId = F (Successful) on /api/transactions. Each unique TransactionId counts once. Includes online checkout, Smart POS captures, recurring rebills, and pay-by-link. Partial captures of a single auth count as one transaction (Viva treats the full lifecycle as one record). |
| API endpoint | GET /api/transactions on the Smart Checkout API. |
| Currency | Currency-neutral (count, not amount). One EUR transaction and one GBP transaction both add 1. |
| Refunds | Not deducted from count. A fully refunded transaction is still 1 successful transaction here. Refund counts are tracked in viv_refund_volume. |
| Disputes / chargebacks | Not deducted. A disputed transaction still counts. Disputes tracked in viv_dispute_rate. |
| Failed / declined payments | Excluded. Only StatusId = F rows count. E, M, X excluded. |
| 3DS 2 treatment | Both frictionless and challenge-completed flows count. Customer-abandoned 3DS challenges (X) excluded. |
| Recurring vs one-time | Both included. Each rebill is one transaction. |
| Channels | Online + POS + recurring + pay-by-link unified. Each channel adds to the count uniformly. |
| Payout timing | Per transaction date (when the customer paid). |
| Time window | 30D vsP (default 30D vs the prior 30D). |
| Alert trigger | drop >15% vsP. |
| Roles | owner, finance, operations |
Calculation
Calculated automatically from your Viva Payments data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.Worked example
A Cypriot pharmacy chain (“Aphrodite Pharma”) runs four high-street stores plus an online prescription-fulfilment site. Window 03 Apr 26 to 02 May 26.| Channel | Transactions | Avg Ticket | Notes |
|---|---|---|---|
| Nicosia flagship Smart POS | 4,820 | EUR 23 | High-volume low-ticket OTC pharmacy |
| Limassol Smart POS | 3,240 | EUR 26 | Same |
| Larnaca Smart POS | 1,910 | EUR 24 | Same |
| Paphos Smart POS | 1,420 | EUR 25 | Same |
| Online prescription site | 980 | EUR 48 | Higher ticket, multi-item |
| Recurring monthly subscriptions (vitamins) | 720 | EUR 35 | Tokenized rebills |
| Pay-by-link (B2B clinic accounts) | 32 | EUR 480 | Wholesale invoicing |
- POS is 86.8% of transaction count but 76% of revenue. Pharmacy traffic is volume-heavy and ticket-light; finance-team revenue dashboards under-represent the operational load that POS terminals carry. Counting transactions exposes throughput pressure that revenue alone hides.
- Pay-by-link is 0.2% of count but contributes 1.2% of revenue. 32 captures at EUR 480 average is a small flow but a high-margin one. CFOs reviewing volume-only dashboards can miss the strategic value of B2B payment rails.
- Recurring at 720 rebills implies ~720 active subscribers. Rebill count is an immediate proxy for active subscription base. A 5% drop month-on-month is a churn signal worth investigating in the upstream subscription tool before the revenue impact lands.
- Online ticket EUR 48 is 2x POS ticket. Online basket-builders add multiple items; in-store traffic buys impulse OTC. This is normal pharmacy behavior. A reversal would be unusual.
- Per-store transaction count is the staffing signal. Nicosia at 4,820 captures over 30 days is roughly 160 transactions/day, well within one cashier’s throughput. Anything above 250/day suggests a second register is needed at peak hours.
Sibling cards merchants should reference together
| Card | Why pair it with Total Transactions |
|---|---|
viv_total_volume | The numerator. Volume ÷ transactions = average transaction. |
viv_avg_transaction | The per-transaction view. |
viv_volume_trend | Time-series view, reveals whether transaction count is moving with or against volume. |
viv_success_rate | The rate equivalent. Successful ÷ all attempts. |
viv_decline_rate | Failed attempts not in this count. |
viv_threedsecure_abandon_rate | 3DS abandons not in this count. |
Stripe stripe_total_transactions / PayPal pp_total_transactions | Cross-PSP same-archetype comparison. |
Shopify total_orders | Upstream commerce view. Orders typically ≥ Viva transactions (each order is at least one transaction; multi-charge orders generate more). |
Reconciling against the vendor’s own dashboard
Where to look in the Viva Payments Dashboard: viva.com/business/account/login. Closest comparable view:Viva Business → Sales → Transactions (filter “Status: Successful”; the row count at the bottom = this card)The Sales overview page also shows a “Successful transactions” tile. Other Viva views:
- Smart POS terminal reports (Devices → Terminals): per-device transaction counts; subset of this card.
- Recurring (Subscriptions) view: rebill counts; subset of this card.
| Reason | Direction | Why |
|---|---|---|
| Time zone | Boundary days off | Athens / Cyprus timezone is UTC+2 / UTC+3; we use UTC for period boundaries. |
| Pagination caps | Ours lower for very high volume | Viva API paginates at 100 transactions per page; for merchants with >50,000 transactions/day a sync interruption can defer the freshest 5 to 15 minutes. |
| 3DS late completion | Theirs may flip retroactively | A late-completed 3DS challenge moves from X to F retroactively in the Dashboard; our snapshot reflects state at sync. |
| Refresh lag | Ours lower for “today” | Most recent 5 to 15 minutes may not be indexed yet. |
| Comparison | Expected relationship | When divergence is legitimate |
|---|---|---|
viv_total_transactions ↔ shopify.total_orders | viva ≤ shopify for online orders, but multi-charge Shopify orders can flip the inequality | A Shopify order paid via subscription deposit + remainder generates one Shopify order but two Viva transactions. Marketplace splits also multiply. |
viv_total_transactions ↔ bigcommerce.total_orders | Same logic | |
viv_total_transactions + stripe.stripe_total_transactions + paypal.pp_total_transactions | ≈ commerce_total_orders for Viva-primary stores | Approximate; per-order multi-charge variance applies. |
Known limitations / merchant FAQs
“Why does this card differ from my Shopify / BC orders count?” A few reasons. (1) Multi-charge orders: Shopify orders paid via deposit + remainder, partial captures, or subscription installments produce multiple Viva transactions per order. (2) Authorisation-only flows: a Shopify order with manual capture later doesn’t count here until captured. (3) Channel mix: the commerce platform counts orders paid by any method; Viva only sees Viva-routed orders. “Are 3DS-abandoned attempts in this count?” No. OnlyStatusId = F counts. Abandons are X, declines are E or M. To see the full attempt funnel, pair this card with viv_decline_rate and viv_threedsecure_abandon_rate.
“Recurring rebills, do those add up here?”
Yes. Each successful rebill is one transaction. Failed rebills go to declines, retries that succeed flip back to successful and count.
“Multi-currency, does count work the same way?”
Yes. Count is currency-neutral. One EUR transaction and one GBP transaction both add 1.
“Pay-by-link, are those in here?”
Yes. Pay-by-link transactions are Type = Capture once the customer pays the link. They count uniformly with online checkout and POS.
“Why are POS counts so high relative to online?”
For physical retail (pharmacy, grocery, food, fashion-flagship), POS volume is structurally 5 to 20x online by transaction count. Online tickets are higher; POS tickets are lower; the per-channel split tells you where to look for throughput pressure.
“Smart Retry on a failed rebill, does the original failure stay in the metric?”
The failure is in declines historically (E then). When Smart Retry succeeds 3 to 7 days later, the new attempt is F and adds to this count. The historical decline doesn’t move backward.
“My JP Morgan acquisition concern, anything affecting transaction counts?”
No. Transaction recording, status lifecycle, and API behaviour are unchanged post-acquisition.