API Integration (Advanced)
Get Offers API - Technical Docs
Quick start
Base URL
Method: GET only. HTTPS is required.
Authentication
Every request requires two things: your wall ID and your API key.
Item | Where it goes | Notes |
|---|---|---|
| Query parameter | Your numeric offer wall ID. |
| Header or query parameter | Your 20-character account API key. |
Your API key can be supplied in whichever way fits your stack:
Header:
X-API-Key: YOUR_API_KEYHeader:
Authorization: ApiKey YOUR_API_KEYHeader:
Authorization: Bearer YOUR_API_KEYQuery parameter:
api_key=YOUR_API_KEY
Passing the key as a header is recommended so it stays out of URLs, logs, and browser history.
Finding your key: Log into the Publisher Portal and go to My Account → Account API Key. Keep it secret and never expose it in client-side code or public repositories.
Request parameters
Parameter | Type | Required | Description |
|---|---|---|---|
| integer | Yes | Your offer wall ID. |
| string | Yes | Your account API key (or supply via header). |
| integer | No | Page size after filtering. Range 1–10000. Default 100. |
| integer | No | Starting position in the filtered list. Default 0. |
| string (IPv4) | No | IP used for geo evaluation (country/state). Defaults to the caller's IP. |
| string | No | Exact match on an offer's |
| string | No |
|
| string | No | ISO 3166-1 alpha-2 code (e.g. |
Filtering: server-side vs. your side
You can filter the catalog two ways:
Server-side: pass any of the
filter[...]parameters above and RevU returns only matching offers. This is the most efficient way to narrow by tag, platform, or country.Your side: some attributes are not available as request filters and should be applied to the returned data.
Pagination
total tells you how many offers match your filters before paging. Walk the full catalog by incrementing offset by limit:
Response
A successful request returns status: "success" and a paginated list of offers.
Field | Type | Description |
|---|---|---|
| string | Always |
| integer | Your affiliate (publisher) ID. |
| integer | The wall the catalog was returned for. |
| integer | Number of offers matching your filters, before the |
| integer | The offset applied to this page. |
| integer | The page size applied to this page. |
| array | The offers for this page (see below). |
The offer object
Each entry in offers[] is a complete offer. Fields are grouped below by purpose.
Identity & content
Field | Type | Description |
|---|---|---|
| integer | Unique offer identifier. Use this to de-duplicate and to locate a specific offer. |
| string | Internal/campaign name. |
| string | Short marketing headline. |
| string | Longer description of the offer. |
| string | Additional terms and conditions. |
| string | Landing-page preview without tracking. |
| string | Optional campaign label ("flair") you can group or filter on. |
Offer categorization
Offers carry two independent classifications:
Field | Type | Description |
|---|---|---|
| string | The offer's category label. One of: |
| integer | RevU's internal content category. See mapping below. |
offer_category mapping
ID | Category | ID | Category |
|---|---|---|---|
0 | Undefined | 6 | Surveys |
1 | Casino/Gambling | 7 | Branded |
2 | Loyalty Offers | 8 | Mobile – Non Gaming |
3 | Non Branded Submits | 9 | Alcohol/Tobacco/Drugs |
4 | Games | 10 | Other Mature |
5 | Trial/Purchase | 11 | Social Casinos |
Rewards & events
Every offer exposes its reward structure through an events[] array, whether it has one step or several. The offer-level total_user_reward is the sum of every event's user_reward.
Field | Type | Description |
|---|---|---|
| integer | Total virtual currency a user can earn across all events, in your wall's currency units. Equals the sum of |
| integer | Base attribution window in days (individual events may override it). |
| array | The reward steps for this offer (see below). |
Each event in events[]:
Field | Type | Description |
|---|---|---|
| string | Identifier for this event/step. Use it for tier-level postback tracking. |
| string | What the user must do to complete this step. |
| integer | Virtual currency awarded to the user for this step (wall currency units). |
| number | Your payout for this step, in USD. |
| integer | Internal classification of the event's conversion type. |
| integer | Attribution window for this event, in days. |
| integer |
|
| boolean |
|
The click URL
The click_url_base is your tracking link for the offer. Before serving it to a user, append that user's identifier to the sid2= parameter.
Field | Type | Description |
|---|---|---|
| string | Base tracking URL. Append your user identifier to |
Required: set your user's ID on sid2=.
Optional additions:
Parameter | Use |
|---|---|
| The user's IDFA (iOS only). |
| Any URL-safe value up to 255 characters. Whatever you pass here is returned to you on the postback for your own tracking. |
sid4 is reserved by RevU for the event identifier and should not be set by you.
Mobile
Field | Type | Description |
|---|---|---|
| string | The app's store identifier when applicable (e.g. an Android package name or iOS App Store ID). |
Targeting
Field | Type | Description |
|---|---|---|
| object | Which platforms the offer supports (see below). |
| array | Allowed ISO 3166-1 alpha-2 country codes. Global offers return the full list of supported countries. |
| array | Allowed state/province codes, or |
| boolean | When |
platform object
Field | Type | Description |
|---|---|---|
| boolean |
|
| object |
|
| object |
|
OS version bounds are null when there is no restriction.
Capping
The capping object tells you, in real time, how much room an offer has left so you can avoid showing exhausted offers.
Field | Type | Description |
|---|---|---|
| object | Conversion (lead) cap status. |
| object | Click cap status. |
lead_cap
Field | Type | Description |
|---|---|---|
| boolean | Whether a lead cap is active. |
| string | The scope the cap applies to (e.g. |
| string | null |
| integer | Conversions still available in the current period. |
| integer | Conversions used in the current period. |
| string | The cap window. One of |
click_cap: when disabled, the object is simply { "enabled": false }. When enabled it adds remaining_clicks_available, current_clicks_count, and capping_period.
Scheduling (dayparting)
Field | Type | Description |
|---|---|---|
| string | Daily start time (e.g. |
| string | Daily end time (e.g. |
| boolean |
|
| string | Timezone the window is evaluated in (e.g. |
Performance & creatives
Field | Type | Description |
|---|---|---|
| number | null |
| number | Historical earnings per click, network-wide, over the last 7 days. |
| string | Expected tracking delay: |
| array | Available images/banners, each with |
Best practices
Cache responses for 2-10 minutes. The catalog is well suited to short-term caching and this keeps your integration fast.
Stay under rate limits. Sustained bursts above ~5 requests per minute may be temporarily throttled. Pull on a schedule and cache.
Paginate. Use
limit/offsetand stop onceoffset ≥ total.Honor caps. Skip offers where the relevant cap has no remaining availability.
Respect
user_restricted. Only surface restricted offers after confirming eligibility via the Get Personalized API.Build the click URL per user. Always set
sid2=to the user's ID before serving a link.
Errors
Error responses use status: "failure" with a human-readable message.
HTTP | Example | Meaning |
|---|---|---|
400 |
| A required parameter is missing or invalid. |
401 |
| No API key was supplied. |
403 |
| The key is wrong, or your account cannot use this API. |
404 | N/A | The wall or affiliate could not be found or is inactive. |
405 |
| Only |