# OfferInfo API

Source: https://docs.aon.pro/api/offer-info

> Derived from the same AON Docs release as the source page.

API Reference · Details

Read current public Offer details by canonical offer\_id or aonlink using a Live API Key, with the same business information as Query and no new distribution instance.

## Operations

**GET** `/v1/offers/info`

Read Offer details

Authentication: Bearer required. Source: Curated overlay.

### Request

Headers

#### `Authorization`

Type: string. Requirement: required.

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

-   example: Bearer <LIVE\_API\_KEY>

Query Parameters

At least one parameter is required. When both are supplied, they must identify the same Offer.

#### `offer_id`

Type: string. Requirement: required when offerurl is absent.

Canonical Offer UUID returned by Query. An upstream Offer ID or bare offer\_instance\_id is not a canonical Offer ID.

-   example: 11111111-1111-4111-8111-111111111111
-   format: uuid

#### `offerurl`

Type: string. Requirement: required when offer\_id is absent.

Complete existing aonlink, URL-encoded as one query parameter. Supports root short codes, root historical instance UUIDs and /static/st\_… links.

-   example: https://aon.link/Ab12Cd34?subid=demo#details
-   format: uri

Request Examples

#### Read by offer\_id

```bash
curl --get 'https://api.aon.pro/v1/offers/info' \
  --header 'Authorization: Bearer <LIVE_API_KEY>' \
  --data-urlencode 'offer_id=11111111-1111-4111-8111-111111111111'
```

#### Read by aonlink

```bash
curl --get 'https://api.aon.pro/v1/offers/info' \
  --header 'Authorization: Bearer <LIVE_API_KEY>' \
  --data-urlencode 'offerurl=https://aon.link/Ab12Cd34?subid=demo#details'
```

### Response

HTTP 200 uses {code, message, data, extra}; data is the single Offer object, not an offers array or data.offer wrapper. The Offer document version is 3.0, matching Query v1.0's public business fields with the explicit instance/action differences below.

#### `code`

Type: string. Requirement: required.

SUCCESS on HTTP 200; otherwise the error code.

-   example: SUCCESS

#### `message`

Type: string. Requirement: required.

Empty on success; a readable explanation on failure.

#### `data`

Type: object. Requirement: required.

One public Offer on success; an empty object on failure.

#### `data.offer_id`

Type: string. Requirement: required.

Stable canonical Offer identity.

-   format: uuid

#### `data.version`

Type: string. Requirement: required.

Offer document version, not the HTTP route version.

Allowed values: `3.0`

#### `data.offer_info`

Type: object. Requirement: required.

Query public Offer information, including available commercial and details profile data. The same Query field semantics and optionality apply.

#### `data.entity`

Type: object. Requirement: required.

Public entity information using Query's entity mapping.

#### `data.goals`

Type: array. Requirement: required.

Public goals using Query's CPA/CPS pricing semantics; CPS pricing.rate is a percentage string.

#### `data.action`

Type: object. Requirement: required when offerurl is provided.

Query public action metadata; payload.url exactly preserves the submitted aonlink. Omitted for ID-only reads.

#### `data.content_language`

Type: string. Requirement: optional.

Actual known language of the selected content; omitted when unknown.

#### `data.material`

Type: array. Requirement: optional.

Available public creative assets using Query's material validation and limits.

#### `extra`

Type: object. Requirement: required.

Empty object for this route.

Response Examples

#### Success by offer\_id

```json
{
  "code": "SUCCESS",
  "message": "",
  "data": {
    "offer_id": "11111111-1111-4111-8111-111111111111",
    "version": "3.0",
    "content_language": "en",
    "offer_info": {
      "title": "Example offer",
      "category": {
        "id": "others"
      },
      "description": "Example offer details"
    },
    "entity": {
      "id": "example-merchant",
      "name": "Example Merchant",
      "type": "merchant"
    },
    "goals": [
      {
        "event": "purchase",
        "pricing": {
          "model": "cpa",
          "amount": "1.00",
          "currency": "USD"
        }
      }
    ]
  },
  "extra": {}
}
```

#### Success by aonlink

```json
{
  "code": "SUCCESS",
  "message": "",
  "data": {
    "offer_id": "11111111-1111-4111-8111-111111111111",
    "version": "3.0",
    "content_language": "en",
    "offer_info": {
      "title": "Example offer",
      "category": {
        "id": "others"
      },
      "description": "Example offer details"
    },
    "entity": {
      "id": "example-merchant",
      "name": "Example Merchant",
      "type": "merchant"
    },
    "goals": [
      {
        "event": "purchase",
        "pricing": {
          "model": "cpa",
          "amount": "1.00",
          "currency": "USD"
        }
      }
    ],
    "action": {
      "type": "open_url",
      "name": "View offer",
      "consumer_action": "buy",
      "payload": {
        "url": "https://aon.link/Ab12Cd34?subid=demo#details"
      }
    }
  },
  "extra": {}
}
```

### Errors

Errors and failure modes

#### BAD\_REQUEST: HTTP 400

Missing parameters, empty values, invalid UUID, non-aonlink URL, unsupported path or malformed query.

##### Recommended handling

-   Correct the parameter names and values before retrying.

#### UNAUTHORIZED: HTTP 401

Missing, invalid or revoked API Key, or an ordinary aon\_test\_ Test Key.

##### Recommended handling

-   Use a valid application-owned Live API Key.

#### APPLICATION\_NOT\_SERVING: HTTP 403

The application cannot currently serve requests.

##### Recommended handling

-   Restore the application state before retrying.

#### DEVELOPER\_SUSPENDED: HTTP 403

The developer account is suspended.

##### Recommended handling

-   Restore the account state before retrying.

#### PUBLIC\_TEST\_SCOPE\_DENIED: HTTP 403

The shared Public Test Sandbox Key is restricted to its Query route and cannot read OfferInfo.

##### Recommended handling

-   Use your application's Live API Key.

#### NOT\_FOUND: HTTP 404

The link mapping, public Offer or snapshot is missing, or the content is withdrawn, hidden or test-only.

##### Recommended handling

-   Check the identity and that current public content exists.

#### OFFER\_INFO\_IDENTITY\_CONFLICT: HTTP 409

offer\_id and offerurl resolve to different canonical Offers.

##### Recommended handling

-   Send matching identities or only the intended parameter.

#### OFFER\_INFO\_UNAVAILABLE: HTTP 503

Stored details cannot be read or projected into the public response. No partial success is returned.

##### Recommended handling

-   Retry transient read failures later. Persistent projection failures require the stored data to be corrected.

#### HTTP 409: conflicting identities

```json
{
  "code": "OFFER_INFO_IDENTITY_CONFLICT",
  "message": "offer_id and offerurl resolve to different offers",
  "data": {},
  "extra": {}
}
```

### Behavior, compatibility, and source notes

Read one current public Offer by canonical offer\_id or an existing aonlink, using an application-owned Live API Key.

-   Send Authorization: Bearer <LIVE\_API\_KEY> from your server. Live and Live Limited applications can call this route; paused or suspended applications cannot. Offer Query and MCP search continue to use placement identity without a new API Key requirement.
-   Provide offer\_id, offerurl, or both. Both must resolve to the same canonical Offer; otherwise the response is 409 OFFER\_INFO\_IDENTITY\_CONFLICT. A missing link mapping returns 404. Empty or malformed input returns 400.
-   offerurl is a complete aonlink, not a merchant destination URL. Supported paths are an eight-character alphanumeric root short code, a historical offer\_instance\_id UUID at the root, or /static/st\_… . Use the aonlink origin configured for the API environment. URL-encode the entire parameter, including its query and fragment, as in --data-urlencode below.
-   The URL query and fragment do not change Offer identity. The response preserves the exact submitted aonlink in action.payload.url, including its existing attribution. A link from another application may locate a public Offer; ownership, trace, placement and user context are not returned or rebound.
-   This reads stored local and remote data without calling Query, following redirects, or contacting suppliers. It creates no offer instance, impression, click or link binding, and consumes no serving quota. Catalog membership and placement selection are not required.
-   Local content uses the stored original snapshot, without intent localization. Remote content selects an active English snapshot first, otherwise the most recently updated active snapshot, with a stable tie-break. content\_language reports only the selected content's known language; unknown language is omitted. Language selection, translation and historical versions are not supported.
-   Only current public non-test content is returned: active, undeleted and non-delisted local Offers, or active remote snapshots. Missing mappings or snapshots and withdrawn content return 404. Temporary serving unavailability or an expired quote does not by itself hide details. Stored content may be stale and is not a new serving or price guarantee.
-   Business fields use the Query v1.0 public Offer projection for the selected stored data, including commercial/details profiles, entity, material and goals. CPA/CPS retain Query units; CPS rate is a percentage string. Optional fields are omitted when absent. Internal credentials, settlement contracts and recommendation context are not exposed.
-   offer\_instance\_id is always omitted, never null or a synthetic UUID. ID-only reads omit action; URL reads retain public action metadata and use the submitted aonlink. A malformed stored snapshot returns 503 instead of an incomplete success object.

### Implementation checklist · 4 items

-   Create a Live API Key in Developer Portal under your application's API & Webhooks → API Keys. The application must be Live or Live Limited.
-   Supply canonical offer\_id, a complete URL-encoded offerurl (aonlink), or both identifying the same Offer.
-   Treat the response as stored public content, not a fresh supplier quote or a guarantee that the Offer can currently be served.
-   Preserve the existing action URL when provided. offer\_instance\_id is never returned; ID-only reads omit action.

## Related links

[

Errors & Rate Limits

Shared HTTP status, body envelope, and retry guidance.

](https://docs.aon.pro/api/errors-rate-limits)
