Render offers
This page applies when you render the wall yourself from the API. The hosted page already does this for you.
Render each offer
Every offer has offer_info.title, offer_info.description, entity.name,
and action.payload.url. The other display fields depend on what the offer's
source provides and are often missing, so use them when present and never
require them.
| Show | Field | Always present |
|---|---|---|
| Title | offer_info.title | Yes |
| Description | offer_info.short_description, falling back to a shortened offer_info.description | description only |
| Brand name | entity.name | Yes |
| Logo or icon | entity.logo, or a material[] image tagged logo or icon | No |
| Cover image | A material[] image tagged banner or hero, falling back to any image, then the logo | No |
| Badge | claims[].text — hide the badge when there are no claims | No |
| Tap target | action.payload.url — the tracked click link to open when the user taps the offer | Yes |
If you open an offer's detail page outside the Query response that served it,
for example from a deep link or after a reload, look the card up by its
offer_instance_id with the Offer Instance API from
your server, and show its action only when one is returned. Never replace
action.payload.url with the offer's landing page: that link carries no
attribution. Always send X-AON-Placement-Id on Query, because cards served
without a placement can't be looked up later.
Images
Images in material[] have format: "image", an optional tag describing
their purpose, and an optional dimensions string such as "1024x500". Sizes
vary from offer to offer, so crop to your own frame (for example with
object-fit: cover) and keep a placeholder for offers without images.
Payout
goals[].pricing.amount is the offer's listed payout before the AON platform
fee. You can use it to rank offers or to size a reward. What you actually earn
per conversion arrives on the conversion Webhook; see
Attribution and rewards.