Getting set up

Payment logs — your account's webhook & gateway history

Payment logs lets the tenant administrator see every webhook the till received and every call the till made to a payment gateway for THIS account. Use it to debug a payment that hasn't confirmed, to verify a charge actually landed, or to share evidence with provider support when something looks wrong on their side.

Open it from the topbar — green shield icon, only visible to users with the System Access permission.

What it shows

Two tabs, scoped to YOUR account only — you cannot see other tenants' payments, and other tenants cannot see yours.

Inbound webhooks

Each time Paystack / Stripe / Flutterwave pushed a webhook to BusinessSensor for one of your transactions, you see one row here.

  • Received — when the webhook landed.
  • Provider / Reference — gateway + the acct-… reference that ties it back to a till payment.
  • Amount — what the gateway says was paid.
  • Status:
    • Processed — applied to the matching till intent successfully.
    • Skipped — a duplicate redelivery; the original was already processed.
    • Failed — see the Error column. Common reasons: amount mismatch, expired/wrong signature, tenant subdomain missing.
    • Replayed — a BusinessSensor super-admin re-ran a stuck row for you.
  • Sig — green shield = the gateway's signature verified; red = it didn't.
  • Outcome — Success / Failure / Cancelled / Pending mapped from the gateway's event type.

Click any row for the full raw payload + signature header + linked intent.

Outbound API calls

Each time the till started a charge or verified one with the gateway, you see one row here.

  • Operation — InitializeTransaction (starting a charge), ChargeBankTransfer (bank-transfer flow), Verify (defensive double-check).
  • Reference — same acct-… string as the matching Inbound row.
  • HTTP status / Latency / OK — what the gateway returned. OK = no with HTTP 200 means the gateway accepted the request but rejected the business operation (e.g. "Insufficient funds").
  • Error — exception message if the call timed out before completing.

Click any row for the full request body (sensitive fields like secret_key and cvv are automatically removed before storage) and the gateway's response body.

How to use it for common problems

A customer says "I paid but the receipt shows Pending"

  1. Inbound tab → filter to the right Provider → search for the reference the cashier sees in the payment dialog (it starts with acct-).
  2. No row → the gateway hasn't sent the webhook yet. Wait 30 seconds and refresh; if still nothing, the gateway is delayed (rare; defensive verify usually catches it after 10s).
  3. Failed row → click in. Common reasons:
    • "Reported amount … != expected …" — the gateway saw a different amount than we sent. Usually means the customer paid the wrong amount, or the gateway converted to a different currency. Call your gateway support.
    • "Signature did not verify" — the gateway's webhook secret has rotated and BusinessSensor's copy is stale. Contact BusinessSensor support.
  4. Processed row but receipt still Pending → the cashier needs to refresh the till; the receipt poll-loop updates every 10s.

You want to confirm a refund actually went through

Outbound tab → filter Operation = Refund (when wired) → find the row for the original reference. HTTP 200 + OK = yes; check the response body for the gateway's refund ID.

Verify a specific charge landed at the right amount

  1. Outbound tab → find the InitializeTransaction row for the reference. The Request body shows what BusinessSensor sent (amount, currency).
  2. Inbound tab → find the matching Processed row. The "Reported amount" column shows what the gateway actually charged.
  3. The two should always match. If not, that intent's row would already be Failed with an amount-mismatch error.

Common problems

  • The page is empty → no webhook traffic for this account yet. Once a cashless payment runs at the till, it shows up here within 15 seconds.
  • You can't see the topbar icon → you don't have the System Access permission. Ask your account administrator to grant it to your user group via Setup → Users.
  • "You don't have permission to view this page" → server-side gate rejected your request. Same fix as above — System Access is required.

What's NOT here

This page only shows YOUR account's payment activity. BusinessSensor's operations team has a broader view (/admin/payment-logs) that also covers cross-app router-side traffic, which isn't meaningful for a single tenant. If you suspect a gateway-wide problem affecting more than your account, contact BusinessSensor support and they can investigate from that broader view.

See it working on your own business

Start a 45-day free trial — no card needed — and follow this guide in your own practice company.