Skip to main content

Webhook Testing Guide

Purpose

This page explains the coupon test scenarios you can use when running the Activation SDK in test/debug mode.

Each seeded test offer simulates one coupon validation outcome. This lets you verify your app behavior and webhook handling without waiting for real provider timelines.

We provide a set of test-only coupon offers that simulate the main reward validation outcomes your app may receive in production. Each test offer maps to one scenario — such as accepted, rejected, extended pending, timeout auto-accept, or a late provider callback. Contact your Actual account team for a test receipt images for this test.

When your app runs in test/debug mode and scans the matching test receipt, the system sends the same style of RewardUpdate webhook events your integration should handle in production, but with compressed timing so QA can complete each test in a few minutes.


Important Notes

note
  • These offers are only for test/debug mode. Normal production users should not see or qualify for these offers.
  • Timing is compressed for QA.
  • The default delay is about 1 minute per scenario step.
  • A two-step scenario usually completes in about 2 minutes.
  • The initial scan creates a pending promo reward.
  • The scenario then sends the follow-up pending, accepted, rejected, or audit-only update.

How To Run A Scenario

  1. Enable debug mode in the SDK, and ensure you are running either a whitelisted non-prod bundle ID, or that your app user is whitelisted as a test user (both require you to notify us in advance so we can make the changes in our backend).
  2. Open the offer wall and choose one of the test offers listed below.
  3. Scan the matching test receipt from the test receipt set.
  4. Confirm that receipt summary screen shows a qualification for that offer.
  5. Watch the client webhook endpoint for RewardUpdate events.
  6. Compare the received status sequence with the expected scenario.

Timing Reference

EventTiming
Initial scan responseReward is created in pending state when the receipt qualifies
First simulated provider update~1 minute after scan
Second simulated provider update (if applicable)~2 minutes after scan

Exact timing can vary slightly depending on queueing and environment load.


Scenarios

Scenario 1: Happy Path

What this tests: Provider accepts the reward normally.

Expected sequence: pendingaccepted after ~1 minute

Client expectation: Client should show the reward as completed or earned.

Test offers:

ProductQualifying UPCs
Astepro® Allergy41100589903
Biotrue®310119035887, 310119039984, 310119039977, 310119035863
Ocean Spray® Pure Juice31200020857

Scenario 2: Rejected Path

What this tests: Provider rejects the reward.

Expected sequence: pendingrejected after ~1 minute

Reject reason: REJECTED_QUALITY

Client expectation: Client should show the reward as rejected or not earned.

Test offers:

ProductQualifying UPCs
Nexium305732450421, 305732452425
Mrs. Meyer's808124125094
ARM & HAMMER® Deep Clean Laundry Detergent33200942276, 33200942269

Scenario 3: 24h Timeout Auto-Accept

What this tests: Provider does not respond before the timeout, so the system auto-accepts the reward.

Expected sequence: pendingaccepted after ~1 minute

Accept reason: AUTO_ACCEPTED_24H

Client expectation: Client should treat the reward as accepted.

Test offers:

ProductQualifying UPCs
Nature's Bounty®074312011269, 074312020995, 74312009716, 74312590948
Biotrue310119035887, 310119039984, 310119039977, 310119035863
Dial® Body Wash and Bar Soap17000348896

Scenario 4: Extended Pending → Accepted

What this tests: Provider sends an extended pending state, then later accepts.

Expected sequence:

  1. pendingpending after ~1 minute (reason: PENDING_MANUAL_REVIEW)
  2. pendingaccepted after ~2 minutes

Client expectation: Client should keep the reward pending during review, then show it as complete.

Test offers:

ProductQualifying UPCs
Chobani®894700010984, 818290012814, 818290012845, 818290019707, 818290019714, 818290019721, 894700010144, 894700010434, 818290011817, 818290016935, 818290017048, 818290015488, 818290016928, 818290015075, 818290017963, 818290012357, 818290015082
FIFA Degree Advanced and Whole Body Deodorant79400267009
TruSkin @ Drug Stores850001641975, 850001641982, 850001641302, 850001641999

Scenario 5: Extended Pending → Rejected

What this tests: Provider sends an extended pending state, then later rejects.

Expected sequence:

  1. pendingpending after ~1 minute (reason: PENDING_MANUAL_REVIEW)
  2. pendingrejected after ~2 minutes (reason: REJECTED_QUALITY)

Client expectation: Client should keep the reward pending during review, then show it as rejected.

Test offers:

ProductQualifying UPCs
Chobani®894700010984, 818290012814, 818290012845, 818290019707, 818290019714, 818290019721, 894700010144, 894700010434, 818290011817, 818290016935, 818290017048, 818290015488, 818290016928, 818290015075, 818290017963, 818290012357, 818290015082
Ocean Spray® Zero Sugar - 6pks & 3L31200013835
TruSkin @ Select Grocery Stores850001641975, 850001641982, 850001641302, 850001641999

Scenario 6: Extended Pending Timeout Auto-Accept

What this tests: Provider keeps the reward pending too long, so the system auto-accepts it.

Expected sequence:

  1. pendingpending after ~1 minute (reason: PENDING_HOLD_PERIOD)
  2. pendingaccepted after ~2 minutes (reason: AUTO_ACCEPTED_EXTENDED_PENDING)

Client expectation: Client should keep the reward pending first, then show it as complete.

Test offers:

ProductQualifying UPCs
Aleve®25866591998
TruSkin @ Walmart850001641975, 850001641982, 850001641302, 850001641999, 850001641678

Scenario 7: Late Provider Callback

What this tests: The system auto-accepts the reward first, then a late provider rejection arrives afterward.

Expected sequence:

  1. pendingaccepted after ~1 minute (reason: AUTO_ACCEPTED_24H)
  2. A simulated late rejected callback is received after ~2 minutes — audit-only, does not change the final reward state (reason: REJECTED_AFTER_AUTO_ACCEPT)

Client expectation: Client should keep the reward accepted. A late provider callback should not reverse the reward.

Test offers:

ProductQualifying UPCs
Aleve® or AleveX™25866591578, 25866592247, 25866592261

What to Verify When Testing

  • Did the offer appear only in test/debug mode?
  • Did the scan qualify for the selected offer?
  • Did you receive the expected RewardUpdate events?
  • Did the app display the correct reward state after each update?
  • Did the app keep the reward as accepted in the late callback scenario (Scenario 7)?
  • Does the app have enough logging to support users asking why a reward is pending, accepted, or rejected?

Known Caveats

  • These flows are for test/debug mode only.
  • Timing is approximate and can vary slightly by environment.
  • The exact receipt-to-offer mapping should be taken from the test receipt spreadsheet/document.
  • The late callback scenario (Scenario 7) is intentionally audit-only after auto-accept. Clients should not expect a second client-facing rejection update that reverses the accepted reward.