Use this API to fetch available surveys and send users into them. Call it, get back a list of surveys with a ready-to-use link per survey, and build your own UI around it.
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/surveys
Authorization: Bearer {apiKey}
X-Api-Secret: {apiSecret}
Content-Type: application/json
| Field | Required | Description |
|---|---|---|
userId |
Yes | Your own identifier for this end user. Must stay stable per user — used to avoid re-showing surveys they've already taken. |
country |
No | ISO country code (e.g. "US", "IN"). If omitted, detected automatically
from the request's IP address. |
{
"userId": "user_12345",
"country": "IN"
}
{
"success": true,
"userId": "user_12345",
"country": "IN",
"surveyCount": 23,
"surveys": [
{
"id": "eyJpdiI6...opaque-token...",
"name": "Survey",
"reward": 1.24,
"description": "~10 min, 55% qualify",
"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 |
|---|---|
surveys[].id |
Opaque identifier for this survey. Unique per survey, stable for the life of that survey, but not decodable — treat it as an arbitrary string. |
surveys[].reward |
What the user earns for completing it, in USD, already after your commission. |
surveys[].description |
Free-text hint (typically duration and/or qualification rate) — format isn't guaranteed, don't parse it programmatically. |
surveys[].category |
Array of classification tags (e.g. survey, games, dating).
Only populated for custom offers — an empty array for every other survey source, not a sign of
missing data. |
surveys[].trafficType |
incent or non_incent. Only populated for custom offers —
null for every other survey source, not a sign of missing data. |
surveys[].entryUrl |
Send the user to this URL (new tab / WebView / redirect) to start the survey. Do not construct or modify this URL yourself — always use the exact value returned. |
surveys array (with surveyCount: 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 — whichever
fits your app). It will:
No further action needed from you at this step.
Unchanged from your existing integration: when the user completes (or is screened out of) a survey,
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
This API doesn't introduce a second postback mechanism — it's the exact same notification you already receive from every other Lootwalls integration.
Your backend Lootwalls
| |
|--- POST /api/v1/publishers/surveys ->| (Bearer + X-Api-Secret)
|<-- { surveys: [...] } ---------------|
| |
(show surveys in your own UI)
| |
user clicks a survey
| |
|--- open entryUrl ------------------>| (click recorded, redirected to real survey)
| |
(user completes the survey on the network's own site)
| |
|<-- POST {your postback_url} --------| (payout, status, transaction_id)