Stripe WooPayments Ingestion
5 min read
- View as Markdown Open this page as plain Markdown (opens in a new tab)
- Open in ChatGPT Ask questions about this page (opens in a new tab)
- Open in Claude Ask questions about this page (opens in a new tab)
- Open in Google AI Studio Ask questions about this page (Google account required) (opens in a new tab)
Stores using Stripe or WooPayments get automatic chargeback ingestion in both Free and Pro tiers. TrustLens listens for the dispute events that the WooCommerce Stripe Gateway and WooPayments plugins raise when they receive a dispute webhook, maps each dispute to its WooCommerce order, attributes it to the right customer, and updates the customer’s record and the store-wide ratio in near-real time. This page describes exactly what TrustLens captures and how to verify ingestion is working.
What Triggers Ingestion #
When a dispute is filed against a Stripe or WooPayments transaction, the gateway sends a webhook to your site and the gateway plugin turns it into a WordPress action. TrustLens hooks four of those actions:
wc_stripe_charge_dispute_created— a dispute was opened (WooCommerce Stripe Gateway)wc_stripe_charge_dispute_closed— a dispute was closed with an outcome (WooCommerce Stripe Gateway)woocommerce_payments_dispute_created— a dispute was opened (WooPayments)woocommerce_payments_dispute_closed— a dispute was closed with an outcome (WooPayments)
There is no separate handler for intermediate status changes (“under review” and similar): TrustLens records the dispute when it opens and records the outcome when it closes. Ingestion runs only while the Chargeback Tracking module is on (Settings → Detection; on by default).
What Gets Captured #
For each new dispute:
| Field | Source |
|---|---|
| Dispute ID | Gateway-provided unique ID |
| Order ID | Stripe: the dispute’s order metadata, or a lookup of the charge ID in the order’s _stripe_charge_id / _transaction_id meta. WooPayments: the order ID on the dispute. |
| Customer email hash | Derived from the order’s billing email |
| Dispute reason | Gateway-provided reason code (fraudulent, product_not_received, etc.) |
| Dispute amount | Gateway-provided, converted from the smallest currency unit |
| Currency | WooPayments only |
| Response deadline | WooPayments only (the dispute’s evidence due date). Stripe disputes are stored without a deadline. |
| Status | Gateway-provided status at the time the dispute opened (for example needs_response) |
| Source | stripe or woopayments |
The card brand isn’t read from the dispute. It comes from the order, where TrustLens recorded it when the payment completed — that is what places the dispute in the Visa, Mastercard, Amex, or Discover ratio. Card numbers and last-4 digits are not captured.
The date that counts for the chargeback ratio is the date TrustLens recorded the dispute.
The Mapping Flow #
Step by step when a new dispute arrives:
- TrustLens receives the dispute from the gateway plugin’s action
- Finds the WooCommerce order (see the Order ID row above)
- If no order is found, the dispute is skipped — nothing is recorded
- Reads the order’s billing email and computes the customer email hash
- Increments the customer’s
total_disputescounter - Logs a
dispute_createdevent on the customer’s timeline - Clears the cached chargeback ratios so the next page load includes the dispute
- Marks the order as disputed and stores the dispute details on the order
- Adds the dispute to
{prefix}trustlens_disputes, which powers the Pro open-disputes worklist - Queues a score recalculation for the customer
- Fires the
trustlens/dispute_recordedandtrustlens/chargeback_filedactions — automation rules and notifications subscribe
When the dispute closes, TrustLens increments disputes_won or disputes_lost, closes the worklist row, logs a dispute_closed event, queues a score recalculation, and fires trustlens/dispute_resolved. Stripe outcomes won and warning_closed (a closed inquiry) count as won; WooPayments counts won as won. Every other closing status counts as lost. On Pro, a lost outcome also checks the auto-block setting.
Verifying Ingestion Is Working #
Three sanity checks:
1. Check the Disputed Order #
Open the order in WooCommerce. A recorded dispute shows a Chargeback / dispute filed notice below the billing address with the reason, amount, and source (for example “Stripe entry”). The customer’s TrustLens profile also lists a “Dispute created” event under Recent activity. On Pro, open disputes appear in the Chargeback Monitor’s Open disputes worklist and Recent activity feed. If you have known recent disputes and none of these show them, ingestion isn’t running.
2. Verify the Webhook Endpoint #
Stripe sends webhooks to your WooCommerce Stripe webhook endpoint. In your Stripe Dashboard:
- Go to Developers → Webhooks
- Find the endpoint matching your WooCommerce installation
- Check Recent Events — successful 200 responses mean delivery is working
- If you see failures (4xx or 5xx), the endpoint isn’t responding correctly
3. Check the Action Scheduler Queue #
Go to WooCommerce → Status → Scheduled Actions, filter to the trustlens/calculate_score hook. After a dispute arrives, you should see a queued action for the affected customer.
What If a Dispute Doesn’t Appear #
Common causes:
- Webhook signing key mismatch. Stripe webhooks include a signature; if the secret in WooCommerce Stripe settings is wrong, the webhook is rejected before TrustLens sees it.
- Webhook endpoint not configured. If you’ve never configured Stripe webhooks in WooCommerce, they’re not delivered.
- Order not found. If the dispute carries no order ID and the charge ID isn’t stored on any order (rare, but happens on imported orders or with custom integrations), TrustLens can’t map the dispute and skips it.
- Chargeback Tracking turned off. With the module off in Settings → Detection, TrustLens doesn’t listen for disputes.
- Gateway not on the supported list. Only Stripe (through the WooCommerce Stripe Gateway plugin) and WooPayments are auto-ingested. Other gateways need manual entry.
For the first three, fix in WooCommerce Stripe / WooPayments settings. For the last, see Manual Dispute Entry.
Reopened and Reversed Disputes #
TrustLens records one opening and one outcome per dispute. It has no handler for a dispute that is reopened or reversed after closing. If the gateway sends a second closing event for the same dispute, the matching won or lost counter is incremented again, so a customer’s won/lost totals can drift from the processor’s final result in that rare case. The dispute’s event history on the customer timeline shows each recorded event.
Dispute Reasons and the Chargeback Signal #
TrustLens captures the gateway-provided reason code but doesn’t weight the trust-score signal by reason — a lost dispute is a lost dispute regardless of reason. Pro automation rules can’t filter on the dispute reason either; the conditions available on Dispute Recorded and Chargeback Filed rules are customer and order fields such as total disputes, disputes lost, and segment. See Triggers Reference.
Webhook Security #
TrustLens delegates webhook authentication to WooCommerce’s gateway integration. Stripe webhooks are signed; the WooCommerce Stripe plugin verifies the signature before it raises the dispute action TrustLens listens to. WooPayments uses the same pattern. This means TrustLens trusts that any dispute event it sees has already been authenticated by the gateway plugin.
The implication: don’t disable signature verification in your gateway plugin. If you do, attackers could potentially inject fake dispute data into TrustLens. Verification is on by default; leave it on.
Limitations #
- One gateway per dispute. If you’ve migrated between gateways and disputes arrive for both, both ingestions work independently. There’s no cross-gateway deduplication.
- Currency conversion. Dispute amounts are stored as the gateway reports them. The chargeback ratio uses counts, not currency-adjusted values, so currency mix doesn’t affect the ratio.
- Historical disputes. Webhooks only deliver new events, and TrustLens doesn’t import past disputes from Stripe or WooPayments. Historical Sync rebuilds customer profiles and card brands from your orders, not disputes. To bring older disputes into a customer’s record, enter them on the order screen with Manual Dispute Entry — they will count in the month you enter them.
Updated on October 18, 2026