limit, so you can render them in your own UI and cycle through them. Each offer carries its own impressionUid and a branded short clickUrl.
Calling this endpoint is not the impression. When you actually display an offer, confirm it with
POST /offers/impressions/{impressionUid}/delivered. For the scenario walkthrough (render, confirm, route the tap), see the Rewarded Actions guide; to fetch your full curated inventory instead of a ranked selection, see POST /offers/catalog.Authentication
Pass your publishable key in theX-API-Key header (pk_live_* for production, pk_test_* for development). Multi-app projects also send X-Platform: api (requires an API-platform app in the project; without one the response is 401 Invalid API key). A test key returns the demo catalog rather than your inventory, and records no impressions, clicks, or conversions from it. The full model, including the API platform app type, is in the overview’s Authentication section.
Request
Structure
Field Reference
Attributes you stored earlier fill the gaps. If you have sent this
userId a set with
POST /users/attributes, any attribute
this request omits is filled from it, and a stored age narrows the offers a user under 18
may be shown. Anything in this request’s own attributes always wins. countryCode and
language stay required here regardless: the request is rejected before the stored set is
read, so storing them does not make them optional.API-platform apps receive every eligible offer by default. An app created with platform API gets all entitled, geo-eligible offers with no per-platform trimming, which is ideal when you serve a mixed-platform audience from your own server. To narrow a single request to one surface, send that end user’s device platform in
attributes.platform.Response
Structure
Field Reference
Beyond
impressionUid and campaignId, the response carries no internal identifiers. Creative ids and request ids are not returned; they are still computed server-side for analytics.
Image fields
Example
Status codes
Retry guidance
- Retries are not deduplicated server-side. Every
/offers/feedcall generates fresh short links and analytics rows, so only fetch a feed once per placement you intend to render. - Use exponential backoff with jitter (for example 200ms, 1s, 5s, max 3 retries) for transient failures (429 / 503 / network).
- After exhausting retries, render nothing. The end-user experience should never degrade because of an Encore outage.
Related
POST /offers/impressions/{impressionUid}/delivered: confirm each offer’s impression when it is displayed.- Rewarded Actions guide: the full fetch, render, confirm, click pattern.
POST /offers/catalog: full eligible inventory for curated surfaces.- API Reference overview: auth, the impression model, and feed vs catalog.