---
title: Stripe WooPayments Ingestion
description: 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…
url: "https://webstepper.io/docs/trustlens/chargeback-monitor/stripe-woopayments-ingestion/"
updated: "2026-10-18"
category: Chargeback Monitor
---

# Stripe WooPayments Ingestion

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:

1. TrustLens receives the dispute from the gateway plugin's action
2. Finds the WooCommerce order (see the Order ID row above)
3. If no order is found, the dispute is skipped — nothing is recorded
4. Reads the order's billing email and computes the customer email hash
5. Increments the customer's `total_disputes` counter
6. Logs a `dispute_created` event on the customer's timeline
7. Clears the cached chargeback ratios so the next page load includes the dispute
8. Marks the order as disputed and stores the dispute details on the order
9. Adds the dispute to `{prefix}trustlens_disputes`, which powers the Pro open-disputes worklist
10. Queues a score recalculation for the customer
11. Fires the `trustlens/dispute_recorded` and `trustlens/chargeback_filed` actions — 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:

1. Go to **Developers → Webhooks**
2. Find the endpoint matching your WooCommerce installation
3. Check Recent Events — successful 200 responses mean delivery is working
4. 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](/docs/trustlens/chargeback-monitor/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](/docs/trustlens/automation/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](/docs/trustlens/chargeback-monitor/manual-dispute-entry/) — they will count in the month you enter them.
