Overview
A Reversal Postback is an automated server-to-server notification that allows you to reverse (reject) previously approved conversions when products are refunded, orders are canceled, chargebacks occur, or fraud is detected.
This guide walks you through implementing reversal postbacks safely, selecting the right identifier method, and integrating with common e-commerce platforms.
DANGER: "Nuclear Option" Identifiers
Using transaction_id WITHOUT event_id: Reverses ALL events for that session (install + purchase + upsell = ALL reversed)
Using email alone: Reverses ALL conversions ever associated with that email address
Using order_id alone: Reverses ALL conversions linked to that order (multiple items, multi-step checkout)
SAFE Methods:
conversion_id - Reverses ONE specific conversion only
transaction_id + event_id=0 - Reverses ONE specific base conversion
email + event_id - Reverses specific event for that email
Real Impact: One customer reversed 100+ conversions accidentally by using email without event_id, thinking they were reversing just one recent order.
When Do You Need Reversal Postbacks?
Before setting up reversals, identify your specific use case. Here are the 7 most common scenarios:
Product Refunds
Chargebacks
Coupon Code Leaks
Subscription Cancellations
Fraud Detection
Lead Quality Issues
Qualification Failures
Check Your Platform Integration First
Before manually setting up reversal postbacks, check if your e-commerce platform already handles this automatically:
Shopify: Official Everflow app handles refunds automatically via refunds/create webhook - no manual setup needed
Stripe: Requires "Read" permission for Refunds in integration settings - can auto-fire reversals
WooCommerce: Requires full API integration (not manual script) for auto-reversal
Custom Cart / CRM: Manual reversal postback setup required (follow guide below)
Note: If your platform integration already handles refunds, you don't need to set up manual reversal postbacks. Check your integration documentation first.
Choosing The Right Identifier
Reversal postbacks require an identifier to locate which conversion(s) to reverse. Use this decision tree to select the safest method:
conversion_id yet (only placeholder)Available Tracking Methods
Once you've selected the appropriate identifier, construct your reversal postback URL using one of these methods:
Reverses: ONE specific conversion only
URL Format:
Example:
When to use: You have the specific conversion ID from the conversion report (most accurate method)
How to get conversion_id: Navigate to Conversions Report, find the conversion, copy Conversion ID from the row
Reverses: ALL conversions linked to this order ID
URL Format:
Example:
All conversions with this order_id will be reversed, even if they were fired separately. If you passed the same order_id for multiple events (base sale + upsell), both will be reversed.
When to use: E-commerce refund scenarios where you have order number from Shopify/WooCommerce/etc.
Three options with different scope:
Option A - Base Conversion Only (Recommended):
Reverses: All base conversions (event_id=0) for that transaction. Upsells and renewals remain approved. Most transactions have only one base conversion, so this typically targets one record. If you need to reverse one specific conversion out of many, use conversion_id instead (Method 1 above).
Option B - ALL Events for Transaction (DANGER):
Without event_id parameter, this reverses ALL conversions linked to this transaction_id: base sale, upsells, renewals, everything. Use only if you are 100% certain you want to reverse the entire session.
Option C - Specific Event by ID:
Reverses: Only conversions matching both transaction_id AND that specific event_id
Option D - Specific Event by Name:
Reverses: Only conversions matching both transaction_id AND that advertiser event name (e.g., "upsell", "renewal")
Three options with different scope:
Option A - ALL Conversions for Email (DANGER):
This reverses EVERY conversion ever associated with this email address across all time. If customer placed 10 orders over 3 months, all 10 orders reversed. Use ONLY if this is your intent.
Option B - Specific Event by ID (Recommended):
Reverses: All conversions for this email matching the specific event_id
Option C - Specific Event by Name:
Reverses: All conversions for this email matching the advertiser event name
If you are using verification_token in your conversion postback, you MUST also add it to your reversal postback: &verification_token=[YOUR_TOKEN]
Without this, your reversal postback will silently fail with no error message.
Platform Integration Examples
Implementation varies by platform. Here are setup guides for the most common integrations:
Shopify - Automatic Refund Handling
Setup:
refunds/create webhookIdentifier Used: order_id (Shopify Order Number)
Advantages:
Limitations:
Customer Example: An e-commerce brand uses Shopify auto-reversal for product returns
Stripe - Chargeback Webhook Integration
Setup:
charge.refunded and charge.dispute.created eventsIdentifier Strategy:
conversion_id or transaction_id in Stripe metadata during initial conversionExample Webhook Handler (Pseudocode):
Customer Example: A home improvement brand uses Stripe webhooks to auto-reverse fraudulent chargebacks
WooCommerce - API Integration
Setup:
woocommerce_order_refunded action hookExample PHP Hook:
Identifier Strategy:
conversion_id in WooCommerce order meta during conversion trackingCustom CRM / API Integration
Common Patterns:
Pattern 1: Negative Event Postback (Recommended for Historical Data)
Pattern 2: Bulk API Reversal (CSV Upload)
/conversions/update endpointPattern 3: On Hold Prevention (Alternative to Reversal)
Customer Example: A subscription service uses negative event postbacks for chargebacks months after enrollment to preserve historical data
Testing Your Reversal Setup
ALWAYS test reversal postbacks before deploying to production. Use this checklist:
conversion_id, transaction_id, and order_id from conversion reporttransaction_id, verify other events (upsells) are still approvedemail, verify only target event was reversed (not all email conversions)On Hold vs Reversal: When To Use Each
Before implementing reversal postbacks, consider if On Hold Conversions might be a better solution:
If you can predict the verification timing (7-day trial, 14-day payment processing, 30-day return window), use On Hold Conversions instead. It's simpler, eliminates clawbacks, and prevents invoice reconciliation headaches.
If issues occur unpredictably (chargebacks, fraud discovered months later, customer requests refund), use Reversal Postbacks.
Troubleshooting
Use this guide to diagnose common reversal postback issues:
Most Common Causes:
1. Missing verification_token
&verification_token=[YOUR_TOKEN] to reversal URL2. Wrong Identifier Value
3. Identifier Mapping Mismatch
4. Conversion Already Rejected
Most Common Causes:
1. Used transaction_id WITHOUT event_id
&event_id=0 for base conversion or specific event_id for target event2. Used email WITHOUT event_id
&event_id=[SPECIFIC_EVENT]3. order_id Linked to Multiple Conversions
Problem: You have order info from external system but can't match to Everflow conversion
Solution Steps:
Prevention: During initial integration, store Everflow conversion_id or transaction_id in your external system (Shopify order notes, Stripe metadata, CRM custom field) for easy retrieval later.
Problem: November conversion reversed in December, causing partner reporting mismatch
Cause: When uploading conversions via API or CSV, Everflow uses upload date (not original date) unless timestamp specified
Customer Example: Company A - CMS error in late November, uploaded corrections in mid-December. Partner reports showed revenue in December but partners already paid sub-affiliates for November.
Solution: Use &unix_timestamp= parameter to backdate
When to use: Make-good reconciliations, correcting historical data, bulk reversals that need to appear in original time period
Problem: Conversion shows as "Rejected" but don't know if it was manual reversal or automatic postback control
Solution:
Reporting Visibility:
Problem: Accidentally reversed wrong conversion or too many conversions
Solution Options:
Option 1: Manual Re-Approval (Small Scale)
Option 2: CSV Bulk Update (Large Scale)
Option 3: API Batch Update
/conversions/update endpointPrevention: Always test on sample conversion first before bulk operations
Reporting & Visibility
After firing reversal postbacks, verify they processed correctly and track reversed conversions: