Use this API to fetch available offers and send users into them. Call it, get back a list of offers with a ready-to-use link per offer, and build your own UI around it. Separate from the Survey API — offers are one-time CPA/CPI actions, not multi-question surveys.
api_key and
api_secret (found in your app's integration page in the publisher dashboard).postback_url already configured on your publisher app — the same one used for every other
Lootwalls integration. This API doesn't change or replace that; it reuses it.
Every request requires both:
Authorization: Bearer {your_api_key}
X-Api-Secret: {your_api_secret}
Requests missing either header, or with an invalid key/secret pair, get 401 Unauthorized.
POST https://lootwalls.com/api/v1/publishers/offers
Authorization: Bearer {apiKey}
X-Api-Secret: {apiSecret}
Content-Type: application/json
| Field | Required | Description |
|---|---|---|
userId |
Yes | Your own identifier for this end user. |
{
"userId": "user_12345"
}
{
"success": true,
"userId": "user_12345",
"offerCount": 14,
"offers": [
{
"id": "eyJpdiI6...opaque-token...",
"name": "Offer",
"reward": 1.20,
"description": "Complete a quick offer",
"logo": "https://lootwalls.com/icons/surveyicon.jfif",
"category": ["survey"],
"trafficType": "incent",
"entryUrl": "https://lootwalls.com/api/v1/publishers/redirect/eyJpdiI6...?apiKey=...&userId=user_12345"
}
]
}
| Field | Description |
|---|---|
offers[].id |
Opaque identifier for this offer. Unique per offer, stable for the life of that offer, but not decodable — treat it as an arbitrary string. |
offers[].reward |
What the user earns for completing it, in USD, already after your commission. |
offers[].category |
Array of classification tags (e.g. survey, games, dating).
Only populated for custom offers — an empty array for every other offer source, not a sign of
missing data. |
offers[].trafficType |
incent or non_incent. Only populated for custom offers —
null for every other offer source, not a sign of missing data. |
offers[].entryUrl |
Send the user to this URL (new tab / WebView / redirect) to start the offer. Do not construct or modify this URL yourself — always use the exact value returned. |
offers array (with offerCount: 0) is a normal response, not an error —
show an empty state, not an error page.
| Status | Meaning |
|---|---|
401 |
Missing or invalid Authorization/X-Api-Secret headers. |
400 |
userId missing or empty. |
Open entryUrl directly (new tab, in-app browser, or a redirect from your own backend). It will
record the click against your publisher account and redirect the user to the actual offer.
Unchanged from your existing integration: when the user completes an offer,
Lootwalls calls your postback_url — the same one
already configured on your publisher app — with the usual macros substituted:
{user_id} your userId for this user
{payout} amount earned (0 if not approved)
{status} 1 = approved, 0 = rejected/reversed
{transaction_id} unique id for this completion
entryUrl uses the same redirect endpoint as the Survey
API — if you've already integrated that one, the completion/postback behavior is identical here.