NAV
shell

Introduction

Welcome to the Qurated API!

The Qurated API allows you to easily integrate surveys in to your platform. Surveys can be accessed in 3 different ways:

Before your users start taking surveys, make sure your endpoints are configured. This allows us to let you know your users have completed surveys and are redirected to the right place.

Authentication

To authorize, use this code:

# With shell, you can just pass the correct header with each request
curl "https://api_endpoint_here"
  -H "Authorization: Basic $(echo -n secret:secret | base64)"

Make sure to replace secret with your API key.

Authentication is done via basic auth. The provided API key is used as both username and password.

Authorization: Basic $(echo -n secret:secret | base64)

Qurated Offerwall

What is the Offerwall?

If you don't want to display survey data yourself you can simply drop the offerwall js widget in to your existing site.

Prerequisites

Offerwall Flow

Authenticating your user with Qurated

When a user comes to your site and wants to complete surveys, you need to generate an access token for that individual. This is done by calling https://studies.qurated.ai/user/access_token with your unique identifier for your user (ID, UUID, GUID) and the user's country code.

It is also possible to include a user's demographic data when creating an access token to be used for new users. You can read about this in the User Demographic passing section.

Note: The access token must be generated server side


curl -X GET "https://studies.qurated.ai/user/access_token?api_key=$apikey&guid=$guid&country=$country" 

Generate an access token for your user

Note: the country param is the ISO 3166-1 alpha-3 for the country.

Providing the user access token to the offerwall widget

Once you have a user's access token it needs to be given to the widget so it can fetch surveys for this user. The example HTML needs to be added to your site with the $token replaced with the user's token you got from the previous step.

Once these two steps are done user's will be able to see surveys.

<div id="ow-root"></div>
<script src="https://offerwall.qurated.ai/widget.js?authtoken=$TOKEN" id="qurated-studies"></script>

These tags need to be added to your HTML with the token you received from the API

Creating a postback API

The last step is to provide a 'postback' API that we can send events to so that you know when a user completes a survey and what their reward was. This is all detailed here.

Offerwall widget in React

If you want to use the widget in a React app there are a few different ways to achieve this.

Custom react hook

Create a hook that will import a script and assign it an ID of qurated-studies.

import { useEffect } from 'react';
const useImportScript = resourceUrl => {
  useEffect(() => {
    const script = document.createElement('script');
    script.src = resourceUrl;
    script.async = true;
    script.id = 'qurated-studies';
    document.body.appendChild(script);
    return () => {
      document.body.removeChild(script);
    }
  }, [resourceUrl]);
};
export default useImportScript;

The custom React hook

You can then use this hook with the user's JWT to fetch surveys.

import React from 'react';
import useImportScript from './importScript';

const Offerwall = () => {
  let userToken = getUserToken(); // You need to define this
  useImportScript(`https://offerwall.qurated.ai/widget.js?authtoken=${userToken}`);
  return (
    <div className="App">
      <div id="ow-root" ></div>
    </div>
  )

}

export default Offerwall;

Using the hook

Using the react-script-tag package

The react-script-tag package can be used to insert scripts in to your react app.

import React from 'react';
import ScriptTag from 'react-script-tag';

const Offerwall = () => {
  let userToken = getUserToken(); // You need to define this

  return (
    <div className="App">
      <div id="ow-root" ></div>
      <ScriptTag id="qurated-studies" type="text/javascript" src={`https://offerwall.qurated.ai/widget.js?authtoken=${userToken}`} />
    </div>
  )

}

export default Offerwall;

Using the react script tag package

Configuring the Offerwall

It is possible to set several different configuration options when adding the Offerwall to your site.

In order to do this, include the optional parameters described below in the querystring, after your authToken and appended with &.


<div id="ow-root"></div>
<script src="https://offerwall.qurated.ai/widget.js?authtoken={token}&notification_position=top-right&hide_filter_buttons=true&max_survey_number=6" id="qurated-studies"></script>

Script Parameters

Parameter Description Permitted Values Default Value
notification_position Set where the notification card will appear on screen. 'top-left'
'top-right'
'bottom-left'
'bottom-right'
'top-right'
hide_filter_buttons Hide the Webcam and PII buttons and filter out those surveys false
max_survey_number Set the maximum number of surveys to show on the Offerwall Positive integers Not set

Surveys

List available surveys - API key

curl "https://studies.qurated.ai/f0ad37b292a39ad86a0e6a95f43bfc53?user_agent=Mozilla&user_ip=192.168.1.1&webcam=true&collects_pii=true"
  -H "Authorization: Basic $(echo -n secret:secret | base64)"
  -X GET

The above command returns JSON structured like this:

[
    {
        "id": "936c3509623a",
        "category": "Market topics",
        "categoryImage": "https://d1s51etp8bktk6.cloudfront.net/images/57-385cbc592f275441abaada185b52562a.jpg",
        "cpi": "57",
        "loi": "20",
        "flags": "hot",
        "url": "https://router.qmree.com/surveys/9c4c006ce88f536c"
    },
    {
        "id": "bbaf70a16737",
        "category": "Automotive",
        "categoryImage": "https://d1s51etp8bktk6.cloudfront.net/images/12-08341236ad154579424b753370275921.jpg",
        "cpi": "102",
        "loi": "24",
        "flags": "hot,webcam",
        "url": "https://router.qmree.com/surveys/b791afa5334ac807"
    },
    {
        "id": "237d80ca0b95",
        "category": "Food",
        "categoryImage": "https://d1s51etp8bktk6.cloudfront.net/images/164-82e7dd37cf9ee7ad7e2118c543888b72.jpg",
        "cpi": "39",
        "loi": "5",
        "flags": "recontact",
        "url": "https://router.qmree.com/surveys/d592934163dd5669"
    },
    {
        "id": "21b42e5ce95a",
        "category": "Consumer trends",
        "categoryImage": "https://d1s51etp8bktk6.cloudfront.net/images/59-bac1e55757c34ead0f700872db92ada4.jpg"
        "cpi": "92",
        "loi": "10",
        "flags": "",
        "url": "https://router.qmree.com/surveys/79445bc985cb2ea5"
    }
]

This endpoint returns a ranked list of available surveys.

The results from this endpoint should be updated frequently, ideally every 1-2 minutes, and after every survey start to ensure the latest list is presented.

HTTP Request

GET https://studies.qurated.ai/:guid?user_agent=:user_agent&user_ip=:user_ip&webcam=:webcam

URL Parameters

Parameter Description
guid The guid previously provided of the user to get surveys for
user_agent The current user agent of the user
user_ip The current ip of the user
webcam Return webcam surveys: true/false (Default: true)
collects_pii Return surveys that collect PII: true/false (Default: true)

List available surveys - JWT

If you wish to consume the API through your front end you can create a JWT for your user to use as the authentication. Allowing your API key to remain secret.

To create a JWT for a user follow the process listed here

curl --location --request GET 'https://studies.qurated.ai/studies' \
--header 'Authorization: Bearer <USER_JWT>'

The above command returns JSON structured like this:

[
    {
        "id": "936c3509623a",
        "category": "Market topics",
        "categoryImage": "https://d1s51etp8bktk6.cloudfront.net/images/57-385cbc592f275441abaada185b52562a.jpg",
        "cpi": "57",
        "loi": "20",
        "flags": "hot",
        "url": "https://router.qmree.com/surveys/9c4c006ce88f536c"
    },
    {
        "id": "bbaf70a16737",
        "category": "Automotive",
        "categoryImage": "https://d1s51etp8bktk6.cloudfront.net/images/12-08341236ad154579424b753370275921.jpg",
        "cpi": "102",
        "loi": "24",
        "flags": "hot,webcam",
        "url": "https://router.qmree.com/surveys/b791afa5334ac807"
    },
    {
        "id": "237d80ca0b95",
        "category": "Food",
        "categoryImage": "https://d1s51etp8bktk6.cloudfront.net/images/164-82e7dd37cf9ee7ad7e2118c543888b72.jpg",
        "cpi": "39",
        "loi": "5",
        "flags": "recontact",
        "url": "https://router.qmree.com/surveys/d592934163dd5669"
    },
    {
        "id": "21b42e5ce95a",
        "category": "Consumer trends",
        "categoryImage": "https://d1s51etp8bktk6.cloudfront.net/images/59-bac1e55757c34ead0f700872db92ada4.jpg"
        "cpi": "92",
        "loi": "10",
        "flags": "",
        "url": "https://router.qmree.com/surveys/79445bc985cb2ea5"
    }
]

URL Parameters

Parameter Description
webcam Return webcam surveys: true/false (Default: true)
collects_pii Return surveys that collect PII: true/false (Default: true)

JSON Response Object

Field Description
id The identifier for the survey invite. Use this id to follow up on any issues reported with the survey. This id will be unique for this user and survey and will be returned in redirects and server to server calls.
category The category of the survey (*see below for a list of all possible categories)
categoryImage A suggested image for the category (not required to be used)
cpi The amount in cents paid on successful completion of the survey
loi The length in minutes of the survey
flags Additional data about the survey, comma seperated (*see below for a list of possible values)
url The url to redirect the user into to start the survey (This url will expire in 5 minutes and is single use)
reward The suggested remuneration for the end user
formattedReward The suggested remuneration for the end user as a formatted currency string

Survey flags

Flag Description
hot Survey has a very high likelyhood of completion by the user
webcam Requires a webcam to complete the survey
collects_pii Requires user to enter Personally Identifiable Information
recontact This is a follow up to a survey the user previously completed (normally 100% IR)
screener This will be a 0 cpi survey that is used to enable more content for the user depending on market conditions.

Survey categories

Categories -
Airlines Household services
Alcohol free beverages Information technology
Alcoholic beverages Insurance
Automative products Internet providers services
Automotive Last nights TV
Beer Market topics
Business services Media
Cell phones Mobile phones
Cereals Movie Films
Chocolate Music
Cleaning products New products
Coffee Personal care
Computer games Pet food
Computer products Pet
Consumer topics Politics
Consumer trends Printers
Cosmetics Products for children
Educational products Restaurants
Electronic products Shopping
Employment Snacks
Energy providers Sport
Entertainment Sports
Environment Supermarkets
Esports Sweets
Fashion Technology
Fast food Telecommunication services
Finance Television
Financial products Tobacco
Financial services Transportation
Food Travel
Fragrance Trending topics
Furniture Universal topics
Gambling Universal trends
General Video game systems
Health Wellness
Home Wholesale
Household appliances

Survey Gateway

Since surveys come and go fairly quick, notifications and emails linking directly to surveys can go stale quickly. This is where Survey Gateway comes in. Generate a URL to send to your users, when they click it, it will take them to the best survey that fits the parameters.

Generating the Survey Gateway URL

curl --location --request GET 'https://studies.qurated.ai/survey-match/gateway-url?guid=:guid&country=:country_code' \
--header 'Authorization: Basic $(echo -n secret:secret | base64)'

Make a request using your API key to create a link for a user.

URL Parameters

Parameter Description Required
guid The guid of your user true
country The country code of your user (USA, GBR, etc) true
min_cpi The minimum CPI in cents for the surveys returned by the URL false
max_cpi The maximum CPI in cents for the surveys returned by the URL false
min_loi The minimum LOI in minutes for the surveys returned by the URL false
max_loi The maximum LOI in minutes for the surveys returned by the URL false

note: LOI times are based on average completion times

Response

https://studies.qurated.ai/survey-match/redirect?token=eyJhbGciOiJIUzI1NiJ9.eyJwYW5lbEd1aWQiOiIyIiwic3ViIjoiMSIsImNvdW50cnlDb2RlIjoiR0JSIiwicHJvdmlkZXIiOiJzdG9wX2JlaW5nX25vc3kiLCJzdXJ2ZXlGaWx0ZXJzIjp7Im1pbkNwaSI6IjUwIiwibWF4Q3BpIjpudWxsLCJtaW5Mb2kiOm51bGwsIm1heExvaSI6bnVsbH0sImF1dGhvciI6InF1cmF0ZWQiLCJleHAiOjE2MzQxMzY0ODR9.i1YtxcLbU3RMbZFFjjighwaUECQjP9Zm-XvWCLl0dOs

The response will look something like this. Share this with your user and they will be taken to the best matching survey at the time they click it. The link is valid for 7 days.

Configuring your Endpoints

To integrate with Qurated you need to configure a redirect, postback and profile redirect URL. You can also set a notification endpoint but this is optional.

Setting Endpoints

curl --location --request PUT 'https://panel-provider.qurated.ai/provider/endpoints' \
--header 'Authorization: Bearer secret' \
--header 'Content-Type: application/json' \
--data-raw '{
        "redirect": "https://test.com/%status%/%guid%/%study_id%",
        "postback": "https://test.com/postback",
        "notification": "https://test.com/notification",
        "user_banned": "https://test.com/user_banned",
        "profile_redirect": "https://test.com",
        "profiler_postback": "https://test.com/profiler"
    }'

The above command expects JSON structured like this in the body:


{
    "redirect": "test.com/%status%/%guid%/%study_id%",
    "postback": "test.com/postback",
    "notification": "test.com/notification",
    "user_banned": "test.com/user_banned",
    "profile_redirect": "test.com",
    "profiler_postback": "test.com/profiler"
}

This endpoint allows programmatic setting of the redirect endpoints users will be sent to on returning from a survey

Failures can immediately be communicated back to the user, but completes should wait for verification via the server to server postback method.

HTTP Request

PUT https://panel-provider.qurated.ai/provider/endpoints

JSON Object

Field Required Description
redirect true The url to redirect users to on finishing the survey. Placeholders can be specified that will be substituted on redirect
postback true The url to send the postback object to. Details of postback are listed below
notification false The url to send notification events to
user_banned false The url to send user banned notifications to
Response Code Meaning
200 Endpoints updated successfully

Get current configured endpoints

curl "https://panel-provider.qurated.ai/provider/endpoints"
  -H "Authorization: Bearer secret"
  -X GET

The above command returns JSON structured like this:

{
  "redirect": "redirect.com/%status%/%guid%/%study_id%",
  "postback": "postback.com/qurated_postback",
  "notification": "test.com/notification",
  "user_banned": "test.com/user_banned",
  "profile_redirect": "test.com",
  "profiler_postback": "test.com/profiler"
}

This endpoint returns the current setting for your endpoints.

HTTP Request

GET https://panel-provider.qurated.ai/provider/endpoints

Redirect

The user will be redirected backfrom the survey to your site using this link. It will contain information about the user, survey and the status.

HTTP Request

GET https://panel-provider.qurated.ai/provider/endpoints

Placeholders

Variable Description
%status% The status of the survey. See below for a list of statuses.
%guid% The user guid.
%study_id% The id of the study - this will match the id returned from the available surveys endpoint.

Statuses

Status Meaning
complete Survey successfully completed and user can be rewarded
terminate Survey was rejected
quota_full Survey has enough respondents for the user profile
screenout User did not qualify for the survey
timeout User abandoned the survey
fraud Survey was rejected due to fraudulent activity (VPN/Proxy use, speeders, straightliners, gibberish, etc.)
taken User has already taken the survey (potentially on another platform or with a duplicate account)
not_available Survey not available (survey closed, full, etc.)
used_link Survey url has already been used to enter the survey (users cannot re enter a survey once they have attempted it)
expired_link Survey url has expired (old urls are likely to be for surveys that are no longer available - ensure the list of available surveys is refreshed regularly)

Postback endpoint

Postback events can come out of order, be replayed or have future events that do not change the current state.

The rules for state transitions are as follows:

HTTP Request

POST https://www.example.com/s2s/survey_finished

Example for an API survey listing integration

{
  "guid": "f0ad37b292a39ad86a0e6a95f43bfc53",
  "study_id": "237d80ca0b95",
  "finished_at": "2019-05-24T15:42:04Z",
  "status": "complete",
  "audience_complete": false,
  "cpi" : 140,
  "cpi_currency": "USD",
}

Example for offerwall and gateway integrations

{
  "guid": "f0ad37b292a39ad86a0e6a95f43bfc53",
  "study_id": "237d80ca0b95",
  "finished_at": "2019-05-24T15:42:04Z",
  "status": "complete",
  "audience_complete": false,
  "displayed_reward": 115,
  "cpi" : 140,
  "cpi_currency": "USD",
  "user_reward": 115
}

JSON Object

Field Description
guid The user guid
study_id The id of the study - this will match the id returned from the available surveys endpoint.
finished_at The timestamp when the user finished the survey (iso8601)
status The verified status of the survey attempt (see below for a list of possible values)
cpi The revenue you receive by your user completing this survey
cpi_currency The currency of the revenue (This can vary based on the survey provider)
user_reward User reward is in the user's home currency unless you have configured a custom currency, in which case it will be calculated using your custom currency settings
displayed_reward The reward that was shown to the user when they clicked it - only applicable to offerwall integrations - typically identical to user_reward
audience_complete Some survey providers have 'mini' surveys within a normal survey. If this is set to true, the user has completed a mini survey to earn an extra reward.

URL Parameters

The following parameter will be added to every postback url to enable verification of source

Field Description
signature HMAC_SHA256(API_KEY, request.body)
Status Meaning
complete Survey successfully completed and user can be rewarded
terminate Survey was rejected
quota_full Survey has enough respondents for the user profile
screenout User did not qualify for the survey
timeout User abandoned the survey
fraud Survey was rejected due to fraudulent activity (VPN/Proxy use, speeders, straightliners, gibberish, etc.)
taken User has already taken the survey (potentially on another platform or with a duplicate account)
not_available Survey not available (survey closed, full, etc.)
used_link Survey url has already been used to enter the survey (users cannot re enter a survey once they have attempted it)
expired_link Survey url has expired (old urls are likely to be for surveys that are no longer available - ensure the list of available surveys is refreshed regularly)
reconcile_to_complete Previously terminated survey has been accepted by the client and will now be paid. These events can have a delay of weeks/months.
reconcile_to_terminate Survey answers have been rejected by the client and will not be paid. Normally due to poor quality answers.

Notification endpoint

This endpoint will receive a list of users matched to a high performing survey opportunity that is likely to be short lived. Notifying them to visit your site/app to attempt the survey as soon as possible will give them an opportunity to qualify for the survey before it is full. Users are likely to receive multiple opportunities throughout the day and some more than others so thought should be given to what notification strategy best suits your users in terms of frequency. These notifications are good for at most 5-10 minutes after which they will be stale and should be discarded.

HTTP Request

POST https://www.example.com/s2s/notification

{
  "guids": ["f0ad37b292a39ad86a0e6a95f43bfc53", "b0ec82b563b39dd86a0e6a95f83bgc27"]
}

JSON Object

Field Description
guids A list of user guids to notify

User Banned endpoint

The User Banned endpoint is used to notify when a user has been paused or unpaused by our fraud system. This gives visibility of why a user might not be shown surveys by our system.

HTTP Request

POST https://www.example.com/s2s/user_banned

JSON Object

Field Description
guid User guid to be paused or unpaused
banned For true, the user has been banned. For false, the user is no longer banned
time Time in UTC that the user paused or unpaused action ocurred
{
  "guid": "f0ad37b292a39ad86a0e6a95f43bfc53",
  "banned": true,
  "time": "2019-05-24T15:42:04Z"
}

Profile redirect endpoint

This endpoint is used to redirect a user back to your site once they have finished editing their profile using the Qurated profile page.

Profiler Postback endpoint

Profiler Postback events can come out of order or be replayed.

HTTP Request

POST https://www.example.com/profiler

Example for a Profiler start

{
  "guid": "f0ad37b292a39ad86a0e6a95f43bfc53",
  "status": "start",
  "time": "2019-05-24T15:42:04Z",
  "initial_profiler": true,
  "tracking_params" : {}
}

JSON Object

Field Description
guid The user guid
status The type of profiler event. This will either be "start" or "complete".
time The timestamp for the start or finish of the profiler survey (iso8601).
initial_profiler Whether the user is entering our sign-up survey for being screened for further profile information.
tracking_params Any tracking params that were passed through by you with the user.

URL Parameters

The following parameter will be added to every profiler postback url to enable verification of source

Field Description
signature HMAC_SHA256(API_KEY, request.body)

Users

User Profiling

Qurated will gather demographic data on your users when you they enter a survey for the first time. Having an accurate and comprehensive demographic profile is integral to users getting the best experience from surveys.

If you would like to control the profiling flow without having to come directly to Qurated first you can use these APIs to generate links for the initial profiler and the profile page where users can edit their demographic data. These URLs could then be iframed or added as a pop-out modal without the user having to leave your site.

All this data can then be retrieved from the User profile API

Initial profiler URL

Fetch the initial profiler URL for a given user guid.

Will return a 404 if the user has already completed the initial profiler

curl "https://studies.qurated.ai/:guid/signup-survey/url?country=USA"
  -H "Authorization: Basic $(echo -n secret:secret | base64)"
  -X GET

Profile Page URL

Fetch profile page URL so the user can add and edit their demographic profile.

curl "https://studies.qurated.ai/:guid/profile/url?country=USA"
  -H "Authorization: Basic $(echo -n secret:secret | base64)"
  -X GET

Managing User Data

It might be necessary to request that a user be deleted or their most sensitive data be removed from the Qurated system. This allows your organisation to be compliant of data and privacy laws such as GDPR and CCPA.

Deleting a User

curl "https://demographics.qurated.ai/users/:guid/full-profile"
  -H "Authorization: Bearer secret"
  -X DELETE

This endpoint will remove all profile data about a requested user and opt them out of surveys.

HTTP Request

DELETE https://demographics.qurated.ai/users/:guid/full-profile

Authentication

Authentication is done via bearer token. The provided API key is used as the bearer token.

Authorization: Bearer secret

Deleting sensitive User data

To authorize, use this code:

curl "https://demographics.qurated.ai/users/:guid/sensitive-data"
  -H "Authorization: Bearer secret"
  -X DELETE

This endpoint will remove sensitive data for a user, which includes information such as Ethnicity, Religion and Medical Conditions but will not opt them out of surveys.

HTTP Request

DELETE https://demographics.qurated.ai/users/:guid/sensitive-data

Authentication

Authentication is done via bearer token. The provided API key is used as the bearer token.

Authorization: Bearer secret

Get a User's Profile

To authorize, use this code:

curl "https://demographics.qurated.ai/users/:guid/demographics"
  -H "Authorization: Bearer secret"
  -X GET

Make sure to replace secret with your API key.

The above command returns JSON structured like this:

[
  {
    "question": {
      "key": "1",
      "label": "Postcode"
    },
    "answers": [
      {
        "key": "1-1",
        "label": "90210"
      }
    ]
  },
  {
    "question": {
      "key": "2",
      "label": "Which, if any, of these drinks have you consumed in the past four weeks?"
    },
    "answers": [
      {
        "key": "2-1",
        "label": "Fruit drinks/juices"
      },
      {
        "key": "2-2",
        "label": "Flavored malt beverages or wine coolers"
      },
      {
        "key": "2-3",
        "label": "Pre-mixed packaged spirits/flavored alcoholic beverages"
      },
      {
        "key": "2-4",
        "label": "Coffee"
      }
    ]
  }
]

This endpoint allows you to query a user's profile data using their user guid and your api key. The returned data is an array of objects, containing a question object and answers array. If you have provided your own set of keys for questions and answers, they will be included in the JSON response. For any questions a user has answered, but no question or answer key is provided, the description of the question or answer will still be provided.

HTTP Request

GET https://demographics.qurated.ai/users/:guid/demographics

Authentication

Authentication is done via bearer token. The provided API key is used as the bearer token.

Authorization: Bearer secret

Passing in User Demographics

It is possible to pass some demographic information about a user to pre-fill the Sign up Survey. This will allow information users have already entered to be automatically added to their profile. In order to pass in User Demographics a mapping file needs to be generated, allowing your stored questions and answers to be converted into a form Qurated can use. Contact the Qurated team for help with generating this file. Because this information is used to pre-fill the Sign up survey, it is only necessary to send user demographics for a User that has not filled out the Sign up survey. You can check if a user has done this by querying the profile endpoint.

Offerwall User Demographics

When using the Offerwall, user demographics can be passed in using the access token that is given to the widget.

Generating the Access Token

Look at the section on Authenticaing your user to learn how to generate the access token.

When creating the access token, append key-value pairs of your question and answer codes as parameters to the URL. For questions with multiple answers, concatenate using a "," delimiter.

Example for generating Offerwall access token with user demographics appended as URL parameters


curl -X GET "https://studies.qurated.ai/user/access_token?api_key=$apikey&guid=$guid&country=$country&question_id_1=answer_1&question_id_2=answer_2,answer_3&question_id_3=answer_4" 

Survey Gateway User Demographics

When using the Survey Gateway, append key-value pairs of your question and answer codes as parameters to the URL. For questions with multiple answers, concatenate using a "," delimiter.

Example for Survey Gateway query with user demographics appended as URL parameters

curl --location --request GET "https://studies.qurated.ai/survey-match/gateway-url?guid=$guid&country=$country_code&question_id_1=answer_1&question_id_2=answer_2,answer_3&question_id_3=answer_4" \
--header 'Authorization: Basic $(echo -n secret:secret | base64)'

Errors

The Qmree API uses the following error codes:

Error Code Meaning
400 Bad Request -- JSON body or parameter is malformed or cannot be understood
401 Unauthorized -- Your API key is wrong.
403 Forbidden -- Your request was blocked.
404 Not Found -- The specified user profile could not be found.
405 Method Not Allowed -- You tried to use an unsupported method.
406 Not Acceptable -- The request included unsupported options.
422 Unprocessable Entity -- JSON body contains unexpected or missing fields. Inspect the json response for details.
429 Too Many Requests -- Your request was rate limited! Slow down!