API Integration (Advanced)
Get Personalized API - Technical Docs
Get Personalized returns offers selected and ranked for a user on a wall. Display them in the returned array order. Use Get Progress for event completion and credit status.
Quick start
Use GET over HTTPS and URL-encode the actual user identifier in the path. The legacy URL /hotoffers_v3_api.php remains supported; supply uid as a query parameter there. Both URLs support offer_id. No API key is required or validated by this handler.
Request parameters
Parameter | Type | Required | Meaning |
|---|---|---|---|
| string | Yes on the REST URL | ASCII user identifier in the path. Keep it consistent with clicks and Get Progress, within 255 characters, and do not use the literal |
| string | Yes on the legacy URL | The same user identifier, supplied as a query parameter. |
| integer | Yes | Numeric wall ID. |
| integer | Unless | Maximum offers requested, from 1 through 500. Defaults to 500 for an |
| integer | No | Positive campaign ID. Selects that offer regardless of its rank, if available and eligible for the user. Otherwise returns 404 |
| string | No |
|
| number | No | Device OS version used in targeting. |
| string | No | User IP for geographic evaluation. Defaults to the caller’s IP. Cannot be combined with |
| string | No | Session correlation value included in standard generated tracking URLs and available as |
| integer | No | Defaults to 3, the envelope documented here. Values 1 and 2 select the legacy flat-array format. Use 3 for this integration. |
| integer | No | Legacy client option, ignored for the v3 envelope. Do not use it to select the response format. |
| number | No | Positive reward floor for v3 offers. Echoed in the envelope when applied. |
| string | No | Optional experiment identifier echoed in the envelope when supplied. |
| boolean | No | Accepted but ignored. It adds neither |
| string | No | Accepted but ignored. Every event already contains |
| string | No | Deprecated compatibility parameter; provides no JSONP wrapping. Combining it with |
For server-side requests, pass the user’s IP and actual device. A browser request uses the caller’s IP by default, but still needs an explicit ios or android device value for those platforms.
Response envelope
The Swagger reference contains complete schemas and valid examples for single-event and tiered offers.
Field | Type | Meaning |
|---|---|---|
| string |
|
| integer | Publisher account ID. |
| integer | Requested wall ID. |
| integer or digit string | User data identifier for support correlation. New user records return an integer; existing records return a digit string. Treat it as an opaque identifier, not a new request ID. |
| integer | Available matching offers before the requested maximum is applied. |
| integer | Currently 0. This endpoint does not expose an offset paging parameter. |
| integer | Effective requested maximum, not the number returned. Equals |
| string or null | Echoed experiment value, when present. |
| number or null | Applied positive reward floor, when present. |
| integer | Resolved wall sort configuration. |
| integer | Split-test bucket selected for this response. Echo this exact value when recording a wall impression, including 0. The active buckets are configuration-dependent. |
| boolean | Soft missing-credit-report restriction. Offers can still be returned. Hard bans use HTTP 403 instead. |
| array | Ranked offers. Preserve this order for display. |
Offer fields
Field | Type | Meaning |
|---|---|---|
| integer | Campaign ID. |
| string | Campaign name. |
| string | Short headline. |
| string | Offer description. |
| string | Additional terms. Display these with the event requirements. |
| string | Category label, such as |
| integer | Internal content category: 0 Undefined, 1 Casino/Gambling, 2 Loyalty Offers, 3 Non Branded Submits, 4 Games, 5 Trial/Purchase, 6 Surveys, 7 Branded, 8 Mobile Non Gaming, 9 Alcohol/Tobacco/Drugs, 10 Other Mature, 11 Social Casinos. |
| string |
|
| string |
|
| string | Configured crediting-delay label, including Daily, Weekly and other delays. May be empty. |
| string or null | Configured repeat policy, described below. It does not by itself establish user eligibility. |
| integer or null | Campaign reward deadline in Unix seconds using the click snapshot. Null before a click, when no applicable snapshotted window exists, or when the anchor is unavailable. |
| integer or null | User-facing campaign reward-window duration in days. Current configuration before a click; the user's stored window after a click. Null when no applicable window exists. |
| integer or null | Support/report-filing deadline in Unix seconds using the click snapshot. Null before a click or when the anchor is unavailable. |
| integer | Support/report-filing duration in days. Based on current campaign configuration before a click and the stored campaign credit window after a click. Never null; a network default applies without a reward window. |
| string | User-specific URL. Serve it as returned. Some policy decisions can return a preview destination instead of a tracking URL. |
| string or null | Most recent known parent click for this user and offer in the applicable wall or unified publisher scope, in UTC. Null when absent. |
| string or null | Mobile app identifier when available. |
| array | Objects containing |
| string | Single campaign badge. |
| array of strings | Free-form tags in canonical spelling, ordered by name. Empty when none are configured. |
| object | Lead, click and publisher cap snapshots, described below. |
| array | Event requirements and rewards. |
| number | Sum of listed event rewards in wall display units. May be fractional. |
| number or null | Pre-promo reward, combined across events for tiered offers. Present only during a promotion. |
| integer | Legacy compatibility field, currently always 0. It is not the response position. |
| boolean | Offer is marked not to display in wall browse sections. It remains in the API response and can be kept in progress views. |
| number | Historical earnings per click. |
| integer or null | Typical completion time in minutes, when known. |
| integer or null | Campaign go-live time in Unix seconds, when available from statistics. |
| boolean or null | Legacy field present as true for tiered offers and omitted for single-event offers. |
| number or null | Legacy combined reward field, present for tiered offers. Use |
The v3 response does not contain user_eligible, in_progress, user_completed, recommended_score, sortmetric or conversion_rate. Use Get Progress for progress states. No payout or total_payout is returned here; publisher payouts are documented by Get Offers.
Event fields
Field | Type | Meaning |
|---|---|---|
| string | Configured RevU event identifier, such as |
| string | Raw offer/tier identifier used for conversion matching. Matches |
| string | Requirements for this step. |
| number | Wall-currency reward; may be fractional. |
| integer | Crediting-timing code: 0 unset, 1 Instant, 2 Daily, 3 2-3 Days, 4 3-5 Days, 5 5-7 Days, 6 Weekly, 7 Bi-Weekly, 8 Monthly, 9 Instant pixel/loop, 10 Hourly, 11 Undisclosed. |
| integer or null | Event override deadline in Unix seconds. Null before a click or without a separate applicable override; use the offer-level deadline when null. |
| integer or null | User-facing duration in days for this event's own override. Null means use the offer-level duration. Current configuration before a click; stored event window after a click when a snapshot exists. |
| boolean | Whether steps must be completed in order. |
| integer or false | One-based position for an ordered event, otherwise false. No separate |
| boolean | Tracking-only event with zero reward. Distinct from a payable event whose reward happens to be zero. |
Reward and support windows
Before the user clicks an offer, its offer-level and event-level reward_expiration_date values and its support_expiration_date are null. Display reward_window_days and support_window_days as durations at this stage. Do not construct a deadline from the response time.
After a click, campaign and base-event windows use the stored click-time settings. A click made without a reward window keeps a null campaign reward duration and date even if a window is configured later. Event overrides use their stored snapshot when available. A tier added after the click without a snapshot uses its current override configuration with the existing click-backed anchor.
Dates use the stored reward-window start when available, falling back to the click timestamp. This start can reflect an attributed install event, so it need not equal attributed_click_time. Preserve the returned dates rather than recomputing them from that field. A null event duration or deadline uses the offer-level value. An event can have its own reward window even when the campaign has none.
Reward windows concern completion. Support windows concern filing a missing-credit report and do not extend the reward deadline. Support duration remains available when no reward window is configured. Use the returned duration instead of hardcoding a support-window formula or default.
Before-click and clicked examples
These are field excerpts, not complete responses. IDs are fictional. The clicked example uses a stored anchor of 2026-11-01T12:00:00Z (Unix 1793534400): 27 days gives 1795867200, 34 days gives 1796472000, and a 7-day event override gives 1794139200.
Before the click:
After the click, with the same durations in the stored snapshots:
Repeat policies
| Meaning |
|---|---|
| Repeats are restricted. This is not a guaranteed lifetime limit; tiered offers can credit each event. |
| Normally counts conversions on the current calendar date. |
| No frequency-count limit; other eligibility rules still apply. |
| Normally counts today and yesterday, not an exact rolling 48-hour interval. |
| Normally allows five conversions on the current calendar date. |
| Normally counts today and the previous six dates; no fixed weekday reset. |
multiple_leads is null for a missing or unrecognized setting. Date boundaries use the service's configured time zone; daylight-saving behavior can affect availability. The named policy does not promise an exact elapsed-hour reset.
multiple_leads: "once_per_day" normally allows another completion on a later service calendar date, provided other requirements still hold. It does not guarantee a repeat reward.
Get Personalized does not return repeat_available or completion history. Call Get Progress with the same wall/user identifiers and optional offer_id to inspect the repeat-check result, event timestamps and reward states. A missing offer in Personalized can reflect list limits, targeting or other rules; it does not identify a specific repeat restriction. There is no last-24-hours completion filter in either endpoint.
Capping
The three cap flags have different meanings:
Object | Meaning of | When | Other fields returned when true |
|---|---|---|---|
| A lead cap is configured. Check the remaining count to determine whether it is reached. | No lead cap. The entire object is |
|
| A click cap is configured. Check the remaining count to determine whether it is reached. | No click cap. The entire object is | Integer |
| This publisher has reached its cap. Stop showing the offer. | Either no publisher cap or a configured publisher cap with room left. The entire object is | Only |
Publisher caps never return a remaining count, current count or configured maximum. A configured publisher cap of 45 per day with zero conversions and an offer with no publisher cap both return {"enabled": false}. You cannot distinguish those states or calculate the publisher’s remaining quota from this response. Once a publisher cap is reached, the entire object is {"enabled": true, "cap_scope": "publisher", "capping_period": "daily_cst"}.
Lead caps cover all conversions, so lead_cap.event_id is null. Lead and click counts are integers; remaining counts are clamped to zero. Adding current and remaining counts cannot reliably reconstruct a configured maximum after overdelivery. Lead-cap periods include unlimited, hourly, daily_cst, daily_est, daily_pst, daily_gmt, weekly, monthly and total.
When to stop showing an offer
Stop showing an offer if any one of these conditions is true:
lead_cap.enabled == trueandlead_cap.remaining_leads_available <= 0.click_cap.enabled == trueandclick_cap.remaining_clicks_available <= 0.publisher_cap.enabled == true.
Combine the conditions with OR. For an offer returned by the API:
These are capacity checks. A false capReached value does not establish that an individual user is eligible. Capacity can change after a response; a cap snapshot does not reserve capacity.
The field shapes and stop-showing conditions match Get Offers. See the Get Offers cap examples for complete objects and full responses. filter[capped_only] is a Get Offers parameter; Get Personalized does not expose it.
Bans and errors
Hard user or IP restrictions return HTTP 403 with a structured error. A successful response with banned: true instead indicates a soft missing-credit-report restriction; it can still contain offers. Render the appropriate support restriction without treating that flag as a hard offer-access ban.
Validation and general failures use this envelope:
Structured errors use this envelope:
HTTP | Code or format | Meaning |
|---|---|---|
400 |
| Missing or invalid parameters, including non-ASCII user IDs, invalid offer IDs, invalid device values, or |
403 |
| Inactive wall or publisher. |
403 |
| Hard user or security restriction. |
404 |
| Wall not found or no offers available. |
404 |
| Requested offer is unavailable or ineligible for this user. |
500 |
| Unexpected server failure. Retry and contact support if persistent. |
Integration practices
Pass the actual device and user IP, keep the user identifier consistent, display offers in returned order, and exclude wall_hidden entries from browsing. Preserve fractional rewards, nullable fields and independent identifiers. Use Get Progress for per-event progress and include support_id when reporting a user-specific issue.
Share feedback on this documentation
