Proxy Mail QA

Test coupon codes from sign-up to checkout

A welcome offer has more moving parts than it looks: the email has to arrive, the code has to work once, and it has to stop working when it should. Sign up with a new test account, get the coupon with its discount and end date, and record what checkout did with it.

Updated

Why coupon flows break quietly

How Proxy Mail QA helps

  1. Sign up for the offer on your staging site with a new address.
  2. See the coupon on the Accounts page and in the inbox: the code with Copy, its discount (“20% off”), its end date, and how long after the address was made it arrived. Past its end date it reads “Expired” and stays copyable, so you can test that checkout refuses it.
  3. Apply it at checkout with test payments, then record the result in the inbox: Accepted, Rejected or an error, with the message your app showed.
  4. Read the verdict. A coupon accepted after its end date, accepted twice when it’s one-time, or accepted for an offer one person already claimed fails. An error warns.

What to check

In a test

offer.spec.ts
const submitted = new Date();
await page.getByRole('button', { name: 'Get 20% off' }).click();

// Offers often take minutes: this waits up to 10.
const coupon = await qa.waitForCode(address, { type: 'coupon', since: submitted, timeout: 600 });
expect(coupon.discount).toBe('20% off');
expect(coupon.after_seconds).toBeLessThan(300);

await page.getByLabel('Promo code').fill(coupon.value);
await page.getByRole('button', { name: 'Apply' }).click();
const first = await qa.recordCouponResult(address, 'accepted', { oneTime: true });
expect(first.check?.status).toBe('pass');

// The same code again should be refused.
await page.getByLabel('Promo code').fill(coupon.value);
await page.getByRole('button', { name: 'Apply' }).click();
const again = await qa.recordCouponResult(address, 'rejected', { message: await page.getByRole('alert').innerText() });
expect(again.check?.status).not.toBe('fail');

Agents connected to the MCP server get the same with wait_for_code (kind coupon) and record_coupon_result, and the test_coupon_checkout prompt walks through the whole round on staging.

Try it on your next sign-up test

Free plan, no credit card. Create an address and watch the code or link arrive.

Create a free accountOpen the app

Questions

Do I need to switch anything on?

Yes, for now. Marketing and offer emails is in Labs: switch it on in the app under Account settings → Labs. It applies to your API keys and agents too; until then their marketing tools answer with an error that says so.

Does Proxy Mail QA check out for me?

No. It never opens links or checks out. Your test, your agent or you apply the coupon on your staging site with test payments, then record what happened.

What if the email doesn't say when the coupon ends?

The coupon_expiry check warns, since people will ask. When it does say, as "valid until 31 October" or "valid for 7 days", the end date appears beside the coupon.

Can I use this to collect coupons from other shops?

No. Creating accounts to claim offers from services you don't own is fraud, and it breaks our terms. These accounts are for testing your own offers in development, staging or QA.

Why didn't my login-code wait return the coupon?

Plain waits leave coupons out, so a sign-in test never types a discount code into the code box by mistake. Ask for a coupon with type coupon, or kind coupon for agents.

Built your app with an AI tool? Pick yours