Skip to main content
When the conversion that verifies a transaction is priced in a currency other than USD, Encore does not convert it automatically: the offer_completed it sends carries payout: 0. When Encore later books the conversion at a USD figure, it can send you offer_payout_booked: that figure, for the same transactionId and paying action. The same event reports a booking for any other paying action Encore already sent an offer_completed for. A paying action Encore never sent an offer_completed for gets no offer_payout_booked: its first offer_completed carries the booked figure instead.
Never credit a reward on this event. Credit only on offer_completed, once per transactionId. This event only corrects a payout figure. A handler that credits on every request without reading event would pay the user twice, which is why this event is off until you ask for it.

Turning it on

Encore sends it only to a webhook subscribed to it. Every webhook starts subscribed to offer_completed only. To subscribe, confirm to Encore support that your handler switches on event and never credits on offer_payout_booked, and ask for payout updates on your app. Without the subscription, Encore still books the figure; only the notice to your server is skipped. To unsubscribe, ask Encore support. Payout updates still waiting for a retry are then dropped. An offer_completed is never dropped this way. Deleting and re-creating your webhook also unsubscribes it: the new webhook starts at offer_completed only, and queued payout updates are dropped until you ask to subscribe again.

When Encore sends it

When Encore books a USD figure for a conversion priced in another currency, what your webhook receives depends on which conversion it is: The conversion the transaction verified on always counts as already sent, so Encore never sends a late first offer_completed for it, even if your webhook did not exist or was turned off when it verified. If your app has no webhook, or it is turned off, when the figure is booked, Encore sends nothing.

The request Encore sends

Same URL, headers, signature and delivery guarantees as offer_completed: an HMAC-SHA256 signature over <X-Webhook-Timestamp>.<raw_body>, and the same 2xx deadline and retry schedule.
There is no reward field: this event never carries one.

What to do with it

  1. Switch on event. Route offer_payout_booked to your payout records, never to your credit logic.
  2. Update the payout for transactionId plus actionId. If you hold no offer_completed with this actionId, but hold one for this transactionId without an actionId, update that one. Use (transactionId, actionId, event) from the signed body to deduplicate. Do not key on X-Webhook-Delivery-Id, which sits outside the signature.
  3. The booked payout wins. Ordering is not guaranteed: the earlier offer_completed for the same action can still be retrying when this arrives. For one transactionId plus actionId, keep this event’s payout whichever arrives first, and never overwrite it with the payout of an offer_completed that arrives later. This event only reaches you for an action Encore already sent an offer_completed for, or the one the transaction verified on. For any other paying action, the booked figure arrives as that action’s first offer_completed, so do not wait for an offer_payout_booked there.
  4. A transaction you have no completion for: this happens when the offer_completed never reached you, for example because your webhook did not exist or was turned off when the transaction verified, or your endpoint was down for the whole retry window. Record the payout and reconcile from your dashboard. Still never credit a reward.