To send a Stripe receipt through Emailer API, verify the real supported Stripe transaction, use the approved receipt template and keep a stable send idempotency key for retries. Also decide whether Stripe or your application is responsible for the receipt. Two separate systems sending the same notification can create duplicates even when each system handles retries correctly.
Choose a payment receipt or an order confirmation
A payment receipt and a paid-order confirmation use different evidence. Emailer API currently supports live Stripe verification for these financial emails; an application callback alone cannot authorize them. Use the event and identifier for the message you actually intend to send.
| Emailer API event | Required Stripe evidence | Template identifier |
|---|---|---|
| payment.receipt | charge.succeeded; captured positive-value unrefunded charge and exact provider-record email | PAYMENT is the ch_ charge ID |
| order.confirmed | Supported paid, complete, positive-value Checkout Session in payment mode | ORDER is the cs_ session ID |
Verify the incoming event and connect read access
If your app receives Stripe webhooks, verify the Stripe signature according to Stripe’s documentation before acting on the event. Design the handler for duplicate deliveries and events arriving out of order. Receiving a webhook is not a reason to skip Emailer API’s own financial-event verification.
Connect the supported restricted live Stripe key with read access to Events, Charges and Checkout Sessions using the secure field. Emailer API encrypts the key and makes read requests. Never paste the key into an assistant conversation or put it in browser code.
For Checkout, the documented supported events are checkout.session.completed and checkout.session.async_payment_succeeded, with the required paid session state. Free, incomplete and test-mode transactions do not qualify for this live sending path.
Make one system responsible for each notification
Example: your business already sends Stripe receipts, and you add an Emailer API receipt after the same payment. The customer could receive two messages even if neither request is technically a retry. Review your existing Stripe receipt configuration and application notifications before enabling another receipt path.
Decide whether you need a payment receipt, a distinct order confirmation or both. If both are useful, make their purposes clear to the customer. Keep an application record connecting the source transaction, message type and send result; do not use a new random business-event identifier on every webhook delivery.
Validate the exact message, then persist the send identity
Install the approved fixed template on the verified domain and obtain event authorization for the exact recipient and content. Financial events must satisfy the documented freshness checks, including the 15-minute event window. Validation checks eligibility without sending; it is not a reservation of future capacity.
Persist the source event ID, authorization ID and send Idempotency-Key. Retry uncertain email admission using the same key and identical payload within the documented 24-hour replay window. Changing content or inventing another key is not a reliable way to recover an unknown outcome.
Reconcile acceptance with the later result
A 202 response means queued. Keep the returned email identifier and inspect delivery logs or verified signed webhook events for the later outcome. Avoid generating another receipt solely because the first request has not yet produced a delivery event.
If verification, capacity or suppression blocks the request, inspect the actual check and reconcile the transaction state. Do not change a payment date or transaction identifier to make an old event appear fresh. Use the current API contract for recovery decisions rather than assuming every payment notification can be resent indefinitely.
Common questions
Can I use an application callback to verify a payment?
Not for Emailer API’s current financial receipt and paid-order paths. They require the supported Stripe verification.
Does idempotency prevent two different systems from emailing?
No. It controls retries of a request within the documented API contract. You still coordinate notification ownership across Stripe and your application.
Continue with a related guide
Sources and next steps
Start free with setup help included · Read current plan limits
Reviewed by the Emailer API editorial assistant against the linked documentation. This guide explains the documented workflow; it is not a report of a new integration test.