Demo · synthetic dataThis is what a substrate-built fintech product looks like running. UI is interactive — click any payment, customer, or mandate to drill in. Data is synthetic but consistent across all views.

← Back to /build

Audit log

Tamper-evident · GDPR Art. 30 compliant by construction · every event references the FNV-1a hash of the previous event so any tampering breaks the chain.

Total events

240

Chain breaks

0 · ever

Last integrity verify

2026-05-09 03:00 UTC

Subjectallpaymentmandatetenantwebhooksystem

Events · showing 50 of 240

  1. #240

    12:30:33

    operator:eve@vendor-euissued refund pi_3PqB3k1ninkrtdmflw · amount=10185 centspayment
    prevd219d149hash21e64cb6
  2. #239

    12:30:33

    tenant-gateisolation check passed tenant=acme-co · row.tenant_id matches sessiontenant
    prev571e566fhashd219d149
  3. #238

    12:30:33

    stripe.webhookverified signature, ingested pi_3PqB3k1ninkrtdmflw · payment_intent.refundedwebhook
    prev09a849f8hash571e566f
  4. #237

    12:14:34

    tenant-gateisolation check passed tenant=acme-co · row.tenant_id matches sessiontenant
    preve973394chash09a849f8
  5. #236

    12:14:34

    stripe.webhookverified signature, ingested pi_3PqB9flcgt2t5mbnue · sepa_debit.succeededwebhook
    prev41a61b81hashe973394c
  6. #235

    11:47:21

    rate-limitrejected request ip=185.220.100.20 · /api/payments · 50/min exceededsystem
    prevea3bb950hash41a61b81
  7. #234

    11:30:00

    tenant-gateisolation check passed tenant=acme-co · row.tenant_id matches sessiontenant
    prev6e39d32dhashea3bb950
  8. #233

    11:30:00

    stripe.webhookverified signature, ingested pi_3PqBpk2513653w6qsh · payment_intent.succeededwebhook
    prev702a8fcfhash6e39d32d
  9. #232

    11:10:14

    tenant-gateisolation check passed tenant=acme-co · row.tenant_id matches sessiontenant
    prev4098438dhash702a8fcf
  10. #231

    11:10:14

    stripe.webhookverified signature, ingested pi_3PqBr4d5acsn2zl79s · payment_intent.succeededwebhook
    prevec580801hash4098438d
  11. #230

    10:47:04

    rate-limitrejected request ip=185.220.101.23 · /api/payments · 50/min exceededsystem
    prev872d1788hashec580801
  12. #229

    10:28:57

    tenant-gateisolation check passed tenant=acme-co · row.tenant_id matches sessiontenant
    prev9872d3e2hash872d1788
  13. #228

    10:28:57

    stripe.webhookverified signature, ingested pi_3PqB27pb94eava0yx3 · payment_intent.succeededwebhook
    prev292700d6hash9872d3e2
  14. #227

    10:08:26

    tenant-gateisolation check passed tenant=vendor-eu · row.tenant_id matches sessiontenant
    prevdf2d79echash292700d6
  15. #226

    10:08:26

    stripe.webhookverified signature, ingested pi_3PqBwvxbdmzr3dwsdp · sepa_debit.succeededwebhook
    prevbdba7ffahashdf2d79ec
  16. #225

    09:46:47

    rate-limitrejected request ip=185.220.102.26 · /api/payments · 50/min exceededsystem
    prev14a92ac8hashbdba7ffa
  17. #224

    09:33:08

    tenant-gateisolation check passed tenant=vendor-eu · row.tenant_id matches sessiontenant
    preve9d2c5e0hash14a92ac8
  18. #223

    09:33:08

    stripe.webhookverified signature, ingested pi_3PqBjl1oyrq7rifyxf · payment_intent.succeededwebhook
    prev2bbde1c8hashe9d2c5e0
  19. #222

    08:52:34

    tenant-gateisolation check passed tenant=vendor-eu · row.tenant_id matches sessiontenant
    prev79de5b53hash2bbde1c8
  20. #221

    08:52:34

    stripe.webhookverified signature, ingested pi_3PqB5ct3d1fm54o9n2 · payment_intent.processingwebhook
    prevd7f848e6hash79de5b53
  21. #220

    08:46:30

    rate-limitrejected request ip=185.220.103.29 · /api/payments · 50/min exceededsystem
    prevcb365241hashd7f848e6
  22. #219

    08:30:07

    tenant-gateisolation check passed tenant=vendor-eu · row.tenant_id matches sessiontenant
    prev7fb1c888hashcb365241
  23. #218

    08:30:07

    stripe.webhookverified signature, ingested pi_3PqBfvzmmlrvs4xhe2 · sepa_debit.createdwebhook
    prev26937349hash7fb1c888
  24. #217

    07:55:43

    tenant-gateisolation check passed tenant=acme-co · row.tenant_id matches sessiontenant
    prev30a4ea70hash26937349
  25. #216

    07:55:43

    stripe.webhookverified signature, ingested pi_3PqBnjgarcefhmek0w · payment_intent.succeededwebhook
    prevfad263cbhash30a4ea70
  26. #215

    07:46:13

    rate-limitrejected request ip=185.220.104.32 · /api/payments · 50/min exceededsystem
    prevd3e59e93hashfad263cb
  27. #214

    07:44:03

    tenant-gateisolation check passed tenant=vendor-eu · row.tenant_id matches sessiontenant
    prevf9a9a547hashd3e59e93
  28. #213

    07:44:03

    stripe.webhookverified signature, ingested pi_3PqBqeeqs89j28nin8 · payment_intent.succeededwebhook
    prev61bdde84hashf9a9a547
  29. #212

    07:11:15

    tenant-gateisolation check passed tenant=acme-co · row.tenant_id matches sessiontenant
    prevf50c7535hash61bdde84
  30. #211

    07:11:15

    stripe.webhookverified signature, ingested pi_3PqB6baq03vl74ywfo · payment_intent.succeededwebhook
    prev80a8ce19hashf50c7535
  31. #210

    06:45:56

    rate-limitrejected request ip=185.220.105.35 · /api/payments · 50/min exceededsystem
    prevf4785e43hash80a8ce19
  32. #209

    06:39:02

    tenant-gateisolation check passed tenant=acme-co · row.tenant_id matches sessiontenant
    prevb2acc478hashf4785e43
  33. #208

    06:39:02

    stripe.webhookverified signature, ingested pi_3PqB5jp8av6fabxvr8 · payment_intent.succeededwebhook
    prevef6c406chashb2acc478
  34. #207

    06:08:37

    tenant-gateisolation check passed tenant=vendor-eu · row.tenant_id matches sessiontenant
    prev5e396928hashef6c406c
  35. #206

    06:08:37

    stripe.webhookverified signature, ingested pi_3PqBnw1f25yfycow4f · sepa_debit.succeededwebhook
    prev335eb3c3hash5e396928
  36. #205

    05:25:21

    tenant-gateisolation check passed tenant=vendor-eu · row.tenant_id matches sessiontenant
    prevab674d83hash335eb3c3
  37. #204

    05:25:21

    stripe.webhookverified signature, ingested pi_3PqBvdvnok7giuone2 · sepa_debit.succeededwebhook
    prevb2a6d6a1hashab674d83
  38. #203

    04:53:41

    tenant-gateisolation check passed tenant=acme-co · row.tenant_id matches sessiontenant
    prevb178ebeehashb2a6d6a1
  39. #202

    04:53:41

    stripe.webhookverified signature, ingested pi_3PqBqdos05ka5i0jr6 · payment_intent.succeededwebhook
    prev712e1f0ahashb178ebee
  40. #201

    04:43:45

    tenant-gateisolation check passed tenant=vendor-eu · row.tenant_id matches sessiontenant
    prev7545f47ahash712e1f0a
  41. #200

    04:43:45

    stripe.webhookverified signature, ingested pi_3PqBxockvfvkjpvdcr · sepa_debit.succeededwebhook
    prevc73b405fhash7545f47a
  42. #199

    04:05:13

    tenant-gateisolation check passed tenant=acme-co · row.tenant_id matches sessiontenant
    prevc875028dhashc73b405f
  43. #198

    04:05:13

    stripe.webhookverified signature, ingested pi_3PqBcecl1agnr3pau4 · sepa_debit.failedwebhook
    prev6ee201d9hashc875028d
  44. #197

    03:39:30

    tenant-gateisolation check passed tenant=acme-co · row.tenant_id matches sessiontenant
    prevd4b2180ehash6ee201d9
  45. #196

    03:39:30

    stripe.webhookverified signature, ingested pi_3PqBsqi6ie20cf8s5y · payment_intent.succeededwebhook
    prevb4acfd63hashd4b2180e
  46. #195

    03:05:51

    operator:eve@vendor-euissued refund pi_3PqBizpao67a8kfoeu · amount=2812 centspayment
    prev2bd3cec9hashb4acfd63
  47. #194

    03:05:51

    tenant-gateisolation check passed tenant=acme-co · row.tenant_id matches sessiontenant
    prevbe115841hash2bd3cec9
  48. #193

    03:05:51

    stripe.webhookverified signature, ingested pi_3PqBizpao67a8kfoeu · payment_intent.refundedwebhook
    prev15d8d1e5hashbe115841
  49. #192

    02:38:57

    tenant-gateisolation check passed tenant=acme-co · row.tenant_id matches sessiontenant
    prev2032d601hash15d8d1e5
  50. #191

    02:38:57

    stripe.webhookverified signature, ingested pi_3PqBf782e5vfvl89n5 · payment_intent.succeededwebhook
    prev0e5982dahash2032d601
PaySafe · Audit log · Promethean