Skip to main content
Version: 3.x

Eligibility check

Use this endpoint to check whether a user currently has a survey offer available before you show them a call-to-action. It returns a simple has_offer true/false plus the link that sends the user into the offer.

POST https://www.tapresearch.com/supply_api/v4/surveys/offer

All requests must be made over HTTPS.

Request​

Send the parameters as form-encoded body fields, or as a JSON body.

ParameterTypeRequiredDescription
user_identifierStringYesYour persistent, unique identifier for this user.
api_tokenStringYesThe API token for your app, found in the Publisher Dashboard. Must belong to an app created with the Eligibility API type.
client_ipStringYesThe end user's IP address.
placement_tagStringNoTag of the survey wall placement to check.
attributes_hashObjectNoCustom user attributes for segmentation.
device_identifierStringNoThe user's device identifier, if you have one.

Example request​

curl -X POST https://www.tapresearch.com/supply_api/v4/surveys/offer \
-d "user_identifier=user-12345" \
-d "api_token=your-api-token" \
-d "client_ip=203.0.113.42"

Response​

The response is a JSON object. has_offer is the field to branch on; offer_url and message_hash are only returned when has_offer is true.

FieldTypeDescription
has_offerBooleantrue if the user has an offer available, false otherwise.
offer_reasonIntegerA code explaining the result. Always present. See Reason codes.
reason_commentStringHuman-readable explanation of offer_reason. Always present.
offer_urlStringThe URL to send the user to in order to start the offer. Present when has_offer is true.
abandon_urlStringDeprecated. Reopens the survey wall in a new session, without ending a survey the user is in. Present when has_offer is true, except for apps in in-app WebView mode, which don't receive it. See Leaving a survey.
message_hashObjectThe reward range for this user. Present when has_offer is true. See message_hash below.

message_hash​

The reward range to display to the user, in your currency.

FieldTypeDescription
minStringMinimum reward amount, in your currency.
maxStringMaximum reward amount, in your currency.
currencyStringThe name of the currency the user earns.

Example response — offer available​

{
"has_offer": true,
"offer_reason": 0,
"reason_comment": "Qualified",
"offer_url": "https://www.tapresearch.com/router/offers/8f14e45fceea167a5a36dedd4bea2543/pre_entry?sdk=false&uid=user-12345&...",
"message_hash": {
"min": "10",
"max": "700",
"currency": "gold"
},
"abandon_url": "https://www.tapresearch.com/router/offers/8f14e45fceea167a5a36dedd4bea2543?tid=...&uid=user-12345&..."
}

Example response — no offer​

{
"has_offer": false,
"offer_reason": 19,
"reason_comment": "No content available"
}

Using the response​

  • has_offer: true — Show your call-to-action and link the user to offer_url. Use message_hash to display the reward range (for example, "Earn 10–700 gold"). offer_url is typically opened in the device's browser; to keep users in your app instead, see In-app WebViews.
  • has_offer: false — Do not show the call-to-action. There is nothing for the user to do right now.

When the user completes the offer, TapResearch reports the reward to your server through a postback.

Leaving a survey​

abandon_url is deprecated, and new integrations shouldn't use it. In the device's browser, there's nothing to handle. If you load offer_url in your own in-app WebView and want a close button that takes users out of a survey, use in-app WebView mode: the survey wall sends your app an abandon URL for each survey, which ends that survey and returns the user to the wall. Once in-app WebView mode is on, the response no longer includes abandon_url.

Reason codes​

Every response includes offer_reason (an integer) and a matching reason_comment. Branch on the code, not the comment text. Common values:

CodeMeaning
0Qualified — an offer is available (has_offer: true)
1Not qualified — no surveys available for this user right now
2App is in test mode — only registered test devices are eligible
4Not a supported country
5User is under the supported age
8User is banned
19No active offers available
20User identifier is an anonymous device advertising ID, not a real user ID
22User is blacklisted
23User doesn't meet the placement's targeting criteria, such as your segmentation attributes
24No currency is set up for the offer

This is the common subset; other codes may appear.

Errors​

Errors return a JSON error message with an HTTP status:

StatusMeaning
401Missing or invalid API token.
422Invalid or missing request parameters.
503Temporarily unavailable.