Skip to content
 

API Reference · Details

Offer Instance API

Look up as many as 100 Offer cards your application has already served, by offer_instance_id, using a Live API Key from your server. Get when each card was served, its placement, the Offer's current details and status, and the original tracked link while it can still be opened.

Operations

POST/v1/offers/instancesBearer required
Look up served Offer cards by offer_instance_id
Curated overlay
Headers
Fields
2·2 required
Showing the complete documented schema.
Authorizationstring
required

Bearer followed by your application-owned Live API Key, sent from your server. Test Keys are not supported.

example: Bearer <LIVE_API_KEY>
Content-Typestring
required

The request body is JSON.

example: application/json
Request Body

JSON payload. Unknown fields are rejected.

Fields
1·1 required
Showing the complete documented schema.
offer_instance_idsarray
required

1 to 100 offer_instance_id UUIDs returned by Query. Duplicates are de-duplicated, keeping the first occurrence.

example: ["019dd208-27d2-7673-b16f-6897fa120304", "019dd208-27d2-7673-b16f-6897fa120305"]items: string
Behavior, compatibility, and source notes

Look up as many as 100 Offer cards your application has already served, by the offer_instance_id returned with each Query result, using an application-owned Live API Key. Each found card returns when it was served, its placement, the Offer's current details and status, and the original tracked link only while that link can still be opened.

  • Use this when an Offer detail page is opened outside the Query response that produced the card, for example from a deep link, a bookmark, a share or a reload. Look the card up by its offer_instance_id instead of re-running Query, and never replace action with the Offer's landing page: that link carries no attribution.
  • Send Authorization: Bearer <LIVE_API_KEY> from your server only. Never call this route from a browser or mobile client, because that exposes your Live API Key. Live and Live Limited applications can call this route; paused or suspended applications cannot. Offer Query and MCP search continue to use placement identity.
  • Send Content-Type: application/json with a body of {"offer_instance_ids": [...]}: 1 to 100 offer_instance_id UUIDs returned by Query. Duplicate IDs are de-duplicated, keeping the first occurrence. Unknown body fields are rejected. Send offer_instance_id values only: a canonical Offer ID returns not_found and an aonlink is rejected as not a UUID. Use the OfferInfo API to read by Offer ID.
  • data.instances contains exactly one item per de-duplicated requested ID, in request order. Each item is either found or not_found; there is no 404 or partial-failure response.
  • An instance belongs to the application whose identity served it. not_found means the ID is unknown, was served to another application, was served by a test or sandbox request, or is a legacy record without a resolvable Offer. A not_found item contains only offer_instance_id and status.
  • An instance belongs to the application of the identity that served it. Where anonymous mode is available, a Query sent without a placement_id is served anonymously through the AON default placement, so its instances belong to the AON default application and return not_found for your key; where it is not available, such a Query is rejected with 401. Always send your placement_id on Query if you need to look cards up later.
  • A found item returns served_at (when the card was served, UTC, second precision), placement_id (the placement the instance was served through, or null when the serve record itself carries no placement, such as legacy or static Offer Wall serves) and offer. offer always echoes offer_id and offer_instance_id.
  • offer uses the OfferInfo API projection of the Offer's current stored details and offer_info.status, so the status of a found card always matches what OfferInfo returns for the same offer_id. Treat any status other than active as not servable. When the Offer has no stored details, offer contains only offer_id, offer_instance_id and offer_info.status.
  • Real-time remote Partner Offers are not stored in the AON catalog. Their cards are found, but report offer_info.status expired, the same as OfferInfo, and include no details and no action.
  • action is the original tracked link from the Query response and is returned only while that link can be opened right now: the Offer is active, the card's placement is still active and belongs to your application (or the card was served without a placement), the card has a tracked short link, and the target frozen at serve time is an absolute http or https URL. Otherwise action is omitted; it is never null or a replacement link. Offers whose served target is not an http(s) URL, such as a custom-scheme app deep link, do not return action; a deep-link Offer whose target is an https universal link can.
  • Clicks on a returned action are attributed to the original card. This route is read-only: it creates no offer instance, impression, click or link, does not call Partners, and consumes no serving quota. There is no application-level rate limit.
Implementation checklist · 5 items
  • Create a Live API Key in Developer Portal under your application's API & Webhooks → API Keys, and call this route from your server only. The application must be Live or Live Limited.
  • Always send your placement_id on Query. Where anonymous mode is available, a Query without one is served anonymously under the AON default application and its instances return not_found to your key; otherwise it is rejected with 401.
  • POST a JSON body with offer_instance_ids: 1 to 100 offer_instance_id UUIDs returned by Query. Duplicates are de-duplicated.
  • Render found items like a Query result. Show action only when it is returned, and never replace it with the Offer's landing page.
  • Treat offer_info.status other than active as not servable. Real-time remote Partner Offers report expired with no details or action.