API stands for "application programming interface." This Wikipedia article covers APIs in more detail, but it can be helpful to think of the API as a way for different apps to talk to one another. For many users, the main interaction with the API will be through API access key, a way for other apps to access your account without you giving out your password.
The QuestionPro API is organized around REST. We use built-in HTTP features, like HTTP authentication and HTTP verbs, to allow you to interact securely with our API from a client-side web application. JSON will be returned in all responses from the API, including errors.
Note: Our API supports maximum 100 responses per API call.
http://api.questionpro.com/a/api
Team Edition | Enterprise | |
Responses per call (surveyResponses) | 100 | 100 |
Email invites sent per call (sendSurvey) | 100 | 100 |
Email Uploads per call (createEmailGroup) | 100 | 100 |
Free API calls | 100 | 500 |
Cost per call (after free calls) | $0.1 | $0.1 |
You authenticate to the QuestionPro API by providing your API key in the request. You can get your API key from your account:
Login to QuestionPro and navigate to Integration » Developer API
Click on 'Get API Key' button and the key will be generated.
In order to make the API calls you'll also need to provide the survey ID for the required survey.
api.setAccessKey("xxxxx");
api.setSurveyID(xxxxx);
public void setSurveyID(long val){surveyID=val;}
public void setAccessKey(String val){accessKey=val;}
public long getSurveyID(){return surveyID;}
public String getAccessKey(){return accessKey;}
Method: questionpro.survey.responseCount
This API call will return total survey response count based on the filtering criteria.
Name | Value | Required |
id | Survey ID | ✔ |
resultMode |
Assign following values to resultMode to get different responses
|
✔ |
startDate* | Start Date for response time range - Date Format is MM/DD/YYYY | ✕ |
endDate* | End Date for response time range - Date Format is MM/DD/YYYY | ✕ |
*Either both Start Date and End Date have to be entered else neither
http://api.questionpro.com/a/api/questionpro.survey.responseCount
public String getSurveyResponseCountUrl() {
return "http://api.questionpro.com/a/api/questionpro.survey.responseCount?accessKey=" +
getAccessKey();
}
public long getResponseCount() throws Exception {
String path = getSurveyResponseCountUrl();
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(path);
String data = "{"id":"" + getSurveyID() + "","resultMode":"0",
"startDate":"01/14/2013"," +
""endDate":"01/15/2013"}";
StringEntity se = new StringEntity(data);
httpost.setEntity(se);
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
ResponseHandler responseHandler = new BasicResponseHandler();
Object resp = httpclient.execute(httpost, responseHandler);
String json = resp.toString();
JSONObject obj = new JSONObject(json);
obj = obj.getJSONObject("response");
System.out.println(" Survey : " + obj.opt("name") +
" Status : " + obj.opt("status") +
" Overall Viewed : " + obj.optLong("overallViewedCount") +
" Overall Started : " + obj.optLong("overallStartedCount") +
" Overall Complete : " + obj.optLong("overallCompleteCount") +
" Started Count: " + obj.optLong("startedCount") +
" Complete Count : " + obj.optLong("completeCount"));
return obj.getLong("overallStartedCount");
}
{ "response" : { "completeCount" : 6,
"id" : 3896108,
"name" : "Sample Survey",
"overallCompleteCount" : 6,
"overallStartedCount" : 6,
"overallTerminatedCount" : 0,
"overallViewedCount" : 7,
"partialCount" : 6,
"startedCount" : 6,
"status" : "Active",
"terminatedCount" : 0
},
"status" : { "id" : 200,
"message" : "OK",
"method" : "questionpro.survey.responseCount",
"serverUTC" : 1403250725110,
"url" : "/a/api/questionpro.survey.responseCount"
}
}
Method: questionpro.survey.surveyResponses
This API call is used to retrieve survey responses for a survey based on the filtering criteria.
Name | Value | Required |
id | Survey ID | ✔ |
resultMode |
Assign following values to resultMode to get different responses
|
✔ |
startDate* | Start Date for response time range - Date Format is MM/DD/YYYY | ✕ |
endDate* | End Date for response time range - Date Format is MM/DD/YYYY | ✕ |
startingResponseCounter | This parameter is used to get responses in a particular range sequentially. If this parameter is not specified the first 100 responses will be returned, If '2' is specified, responses in the range 201-300 will be returned and so on. | ✕ |
*Either both Start Date and End Date have to be entered else neither
http://api.questionpro.com/a/api/questionpro.survey.surveyResponses
public String getSurveyResponseUrl() {
return "http://api.questionpro.com/a/api/questionpro.survey.surveyResponse?accessKey=" +
getAccessKey();
}
public String getResponses(int startingResponseCounter) throws Exception {
String path = getSurveyResponsesUrl();
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(path);
String data = "{"id":"" + getSurveyID() + "","resultMode":"0","startDate":"01/01/2013","
+
""endDate":"07/24/2013","startingResponseCounter":""+ startingResponseCounter +""}";
StringEntity se = new StringEntity(data);
httpost.setEntity(se);
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
ResponseHandler responseHandler = new BasicResponseHandler();
Object resp = httpclient.execute(httpost, responseHandler);
return resp.toString();
}
{ "response" : { "id" : 3896108,
"name" : "Sample Survey",
"responses" : [ { "country" : "IN",
"duplicate" : false,
"externalReference" : "test_response",
"id" : 23749765,
"ipAddress" : "115.248.168.125",
"region" : "16",
"responseSet" : [ { "questionCode" : "Q1",
"questionDescription" : " ",
"questionID" : 36860852,
"questionText" : "How often do you conduct surveys?",
"values" : [ { "answerText" : "Weekly",
"id" : "181377002",
"value" : { "scale" : "1" }
} ]
} ],
"responseStatus" : "Yes",
"timeTaken" : 2,
"timestamp" : "20 Jun, 2014 11:50:05 AM MSD"
},
{ "country" : "IN",
"duplicate" : false,
"externalReference" : "test_response",
"id" : 23749766,
"ipAddress" : "115.248.168.125",
"region" : "16",
"responseSet" : [ { "questionCode" : "Q1",
"questionDescription" : " ",
"questionID" : 36860852,
"questionText" : "How often do you conduct surveys?",
"values" : [ { "answerText" : "Quarterly",
"id" : "181377004",
"value" : { "scale" : "3" }
} ]
} ],
"responseStatus" : "Yes",
"timeTaken" : 1,
"timestamp" : "20 Jun, 2014 11:50:09 AM MSD"
}
],
"status" : "Active",
"surveyStatistics" : { "completedCount" : 6,
"startedCount" : 6,
"viewedCount" : 0
}
},
"status" : { "id" : 200,
"message" : "OK",
"method" : "questionpro.survey.surveyResponses",
"serverUTC" : 1403258290868,
"url" : "/a/api/questionpro.survey.surveyResponses"
}
}
Method: questionpro.survey.sendSurveyMetaData
This API call will return information related to email groups and templates for the user. This information can be used along with sendSurvey API call
Name | Value | Required |
id | Survey ID | ✔ |
http://api.questionpro.com/a/api/questionpro.survey.sendSurveyMetaData
public String getSendSurveyMetaDataUrl() {
return
"http://api.questionpro.com/a/api/questionpro.survey.sendSurveyMetaData?accessKey=" +
getAccessKey();
}
public JSONObject getSendSurveyMetaData() throws Exception {
String path = getSendSurveyMetaDataUrl();
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(path);
//String data = "{"surveyID":"" + getSurveyID() + ""}";
JSONObject data = new JSONObject();
data.put("surveyID", getSurveyID());
StringEntity se = new StringEntity(data.toString());
httpost.setEntity(se);
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
ResponseHandler responseHandler = new BasicResponseHandler();
Object resp = httpclient.execute(httpost, responseHandler);
JSONObject meta = new JSONObject( resp.toString());
JSONObject response = meta.getJSONObject("response");
JSONArray emailGroups = response.getJSONArray("emailGroups");
JSONArray templates = response.getJSONArray("templates");
for (int i=0; i < emailGroups.length();i++) {
JSONObject jsonEg = emailGroups.getJSONObject(i);
System.out.println("Email Group ID : " + jsonEg.getLong("emailGroupID") + " Name : " +
jsonEg.getString("emailGroupName"));
}
for (int i=0; i < templates.length();i++) {
JSONObject jsonSc = templates.getJSONObject(i);
System.out.println("Template ID : " + jsonSc.getLong("templateID") + " Subject : " +
jsonSc.getString("templateSubject"));
}
return meta;
}
{ "response" : { "emailGroups" : [ { "emailGroupID" : 664235,
"emailGroupName" : "Default List- 1"
},
{ "emailGroupID" : 664234,
"emailGroupName" : "QPTest"
}
],
"templates" : [ { "templateID" : 87278,
"templateSubject" : "Template0Survey Invitation template 2"
} ]
},
"status" : { "id" : 200,
"message" : "OK",
"method" : "questionpro.survey.sendSurveyMetaData",
"serverUTC" : 1378809379946,
"url" : "/a/api/questionpro.survey.sendSurveyMetaData"
}
}
Send Survey
Method: questionpro.survey.sendSurvey
This API is used to send survey invitations to individual respondents as well as email
lists.
Attributes
Name
Value
Required
surveyID
Survey ID
✔
mode
- 1 - Send invites to an existing email list using an existing email
template
- 2 - Send invites to individual email addresses using an existing email
template
- 3 - Send invites to existing email list using a custom email template
- 4 - Send invites to individual email addresses using a custom email
template
✔
emailGroupID
ID for the email list to which you want to send invites.
Required with mode 1 and mode 3
templateID
Email template to be used.
Required with mode 1 and mode 2
emails
Email addresses of the respondents (JSONArray).
Required with mode 2 and mode 4
template
Custom email template (JSONArray with attributes 'body' & 'subject').
Required with mode 3 and mode 4
URL
http://api.questionpro.com/a/api/questionpro.survey.sendSurvey
Sample Request
public String getSendSurveyUrl() {
return "http://api.questionpro.com/a/api/questionpro.survey.sendSurvey?accessKey=" +
getAccessKey();
}
public JSONObject getSendSurvey1() throws Exception {
String path = getSendSurveyUrl();
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(path);
JSONObject data = new JSONObject();
data.put("surveyID", getSurveyID());
data.put("emailGroupID", 1234);
data.put("templateID", 5678);
data.put("mode", 1);
StringEntity se = new StringEntity(data.toString());
httpost.setEntity(se);
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
ResponseHandler responseHandler = new BasicResponseHandler();
Object resp = httpclient.execute(httpost, responseHandler);
return new JSONObject(resp.toString());
}
public JSONObject getSendSurvey2() throws Exception {
String path = getSendSurveyUrl();
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(path);
JSONObject data = new JSONObject();
JSONArray emails = new JSONArray();
emails.put("test@g.com");
emails.put("test2@g.com");
data.put("surveyID", getSurveyID());
data.put("emails", emails);
data.put("templateID", 5678);
data.put("mode", 2);
StringEntity se = new StringEntity(data.toString());
httpost.setEntity(se);
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
ResponseHandler responseHandler = new BasicResponseHandler();
Object resp = httpclient.execute(httpost, responseHandler);
return new JSONObject(resp.toString());
}
public JSONObject getSendSurvey3() throws Exception {
String path = getSendSurveyUrl();
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(path);
JSONObject data = new JSONObject();
JSONObject template = new JSONObject();
template.put("body", "Please take the survey :
");
template.put("subject", "This is subject");
data.put("surveyID", getSurveyID());
data.put("emailGroupID", 1234);
data.put("template", template);
data.put("mode", 3);
StringEntity se = new StringEntity(data.toString());
httpost.setEntity(se);
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
ResponseHandler responseHandler = new BasicResponseHandler();
Object resp = httpclient.execute(httpost, responseHandler);
return new JSONObject(resp.toString());
}
public JSONObject getSendSurvey4() throws Exception {
String path = getSendSurveyUrl();
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(path);
JSONObject data = new JSONObject();
JSONArray emails = new JSONArray();
emails.put("test@g.com");
emails.put("test2@g.com");
JSONObject template = new JSONObject();
template.put("body", "Please take the survey :
");
template.put("subject", "This is subject");
data.put("surveyID", getSurveyID());
data.put("emails", emails);
data.put("template", template);
data.put("mode", 4);
StringEntity se = new StringEntity(data.toString());
httpost.setEntity(se);
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
ResponseHandler responseHandler = new BasicResponseHandler();
Object resp = httpclient.execute(httpost, responseHandler);
return new JSONObject(resp.toString());
}
Sample Response
{ "response" : { "result" : "Message successful." },
"status" : { "id" : 200,
"message" : "OK",
"method" : "questionpro.survey.sendSurvey",
"serverUTC" : 1378810004358,
"url" : "/a/api/questionpro.survey.sendSurvey"
}
}
Get Survey Invite History
Method: questionpro.survey.emailBatchStatistics
This API call can be used to get the send survey history for a specific survey.
Attributes
Name
Value
Required
surveyID
Survey ID
✔
URL
http://api.questionpro.com/a/api/questionpro.survey.emailBatchStatistics
Sample Request
public String getEmailBatchStatisticsURL(){
return "http://api.questionpro.com/a/api/questionpro.survey.emailBatchStatistics?accessKey="
+ getAccessKey();
}
public JSONObject getEmailBatchStatistics() throws Exception {
String path = deleteSurveyURL();
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(path);
JSONObject data = new JSONObject();
data.put("surveyID", getSurveyID());
StringEntity se = new StringEntity(data.toString());
httpost.setEntity(se);
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
ResponseHandler responseHandler = new BasicResponseHandler();
Object resp = httpclient.execute(httpost, responseHandler);
return new JSONObject(resp.toString());
}
Sample Response
{
"response": {
"emailBatches": [
{
"emailGroup": "Default List-1",
"viewed": 0,
"completed": 0,
"batchID": 1499762,
"participationRate": "0%",
"batchType": "Normal",
"participationPending": 2,
"timestamp": "02/08/2016 16:02:53",
"initialSent": 2,
"status": "Completed Successfully"
},
{
"emailGroup": "test",
"viewed": 0,
"completed": 0,
"batchID": 945908,
"participationRate": "0%",
"batchType": "Normal",
"participationPending": 3,
"timestamp": "18/04/2013 11:35:38",
"initialSent": 3,
"status": "Completed Successfully"
}
]
},
"status": {
"method": "questionpro.survey.emailBatchStatistics",
"serverUTC": 1470390987145,
"id": 200,
"message": "OK",
"url": "/a/api/questionpro.survey.emailBatchStatistics"
}
}
Send Reminders
Method: questionpro.survey.sendReminder
This API call is used to send reminders to previously sent email batches
Attributes
Name
Value
Required
surveyID
Survey ID
✔
emailGroupID
ID for the email list to which you want to send reminders.
✔
templateID
Email template to be used.
✔
URL
http://api.questionpro.com/a/api/questionpro.survey.sendReminder
Sample Request
public String getSendReminderUrl() {
return "http://api.questionpro.com/a/api/questionpro.survey.sendReminder?accessKey=" +
getAccessKey();
}
public JSONObject getSendReminder() throws Exception {
String path = getSendReminderUrl();
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(path);
JSONObject data = new JSONObject();
data.put("surveyID", getSurveyID());
data.put("emailGroupID", 1234);
data.put("templateID", 5678);
StringEntity se = new StringEntity(data.toString());
httpost.setEntity(se);
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
ResponseHandler responseHandler = new BasicResponseHandler();
Object resp = httpclient.execute(httpost, responseHandler);
return new JSONObject(resp.toString());
}
Sample Response
{ "response" : { "result" : "Message successful." },
"status" : { "id" : 200,
"message" : "OK",
"method" : "questionpro.survey.sendSurvey",
"serverUTC" : 1378810004358,
"url" : "/a/api/questionpro.survey.sendSurvey"
}
}
Create User
Method: questionpro.survey.createUser
You can create user accounts using this API call. Please note that you will require a
global access key to make this call.
Attributes
Name
Value
Required
emailAddress
Login email address for the new user
URL
http://api.questionpro.com/a/api/questionpro.survey.createUser
Sample Request
public String getSurveyResponseCountUrl() {
return "http://api.questionpro.com/a/api/questionpro.survey.createUser?accessKey=" +
getGlobalAccessKey();
}
public long getResponseCount() throws Exception {
String path = getSurveyResponseCountUrl();
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(path);
String data = "{\"emailAddress\":\"newUser@questionpro.com\"}";
StringEntity se = new StringEntity(data);
httpost.setEntity(se);
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
ResponseHandler responseHandler = new BasicResponseHandler();
Object resp = httpclient.execute(httpost, responseHandler);
return resp;
}
Sample Response
{
"response":{
"emailAddress":"newUser@questionpro.com",
"password":"kwnde",
"success":1
},
"status":{
"method":"questionpro.survey.createUser",
"serverUTC":1412076126669,
"id":200,
"message":"OK",
"url":"/a/api/questionpro.survey.createUser"
}
}
Create Email List
Method: questionpro.survey.createEmailGroup
This API call can be used to create email lists for a specific survey.
Attributes
Name
Value
Required
surveyID
Survey ID
Emails
Email addresses with custom variables (JSON Array)
URL
http://api.questionpro.com/a/api/questionpro.survey.createEmailGroup
Sample Request
public String getCreateEmailGroupURL(){
return "http://api.questionpro.com/a/api/questionpro.survey.createEmailGroup?accessKey="
+ getAccessKey();
}
public JSONObject createEmailGroup() throws Exception {
String path = getCreateEmailGroupURL();
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(path);
JSONObject data = new JSONObject();
JSONArray emails = new JSONArray();
emails.put("test@g.com,custom1,custom2");
emails.put("test2@g.com,custom1,custom2");
data.put("surveyID", getSurveyID());
data.put("emails", emails);
StringEntity se = new StringEntity(data.toString());
httpost.setEntity(se);
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
ResponseHandler responseHandler = new BasicResponseHandler();
Object resp = httpclient.execute(httpost, responseHandler);
return new JSONObject(resp.toString());
}
Sample Response
{
"response":{
"result":{
"emailGroupID":847771
}
},
"status":{
"method":"questionpro.survey.createEmailGroup",
"serverUTC":1439556596337,
"id":200,
"message":"OK",
"url":"/a/api/questionpro.survey.createEmailGroup"
}
}
List All User Accounts
Method: questionpro.survey.getAllAccounts
You can get all user accounts using this API call. Please note that you will require a
global access key to make this call.
Attributes
Name
Value
Required
userID
Logged in user id
✕
*User ID is optional as it is extracted from access key and this call requires
no data
to be passed in request
URL
http://api.questionpro.com/a/api/questionpro.survey.getAllAccounts
Sample Request
public String getAllAccountsUrl() {
return "http://api.questionpro.com/a/api/questionpro.survey.getAllAccounts?accessKey=" +
getGlobalAccessKey();
}
public JSONObject getAllAccounts() throws Exception {
String path = getAllAccountsUrl();
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(path);
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
ResponseHandler responseHandler = new BasicResponseHandler();
Object resp = httpclient.execute(httpost, responseHandler);
return resp;
}
Sample Response
{
"response": {
"accounts": [
{
"firstName": "xyz",
"lastName": "pqr",
"lastLogin": "0 days(s) ago",
"emailAddress": "loggedUser@questionpro.com",
"phone": "(IN)9876543210",
"accountType": "Uber Admin User",
"creationDate": "Nov 17, 2010",
"userID": 1234
},
{
"lastLogin": "1288 days(s) ago",
"emailAddress": "abcUser@surveyanalytics.com",
"phone": "",
"accountType": "Recurring Billing Deactivated",
"creationDate": "Feb 21, 2011",
"userID": 2345
},
{
"lastLogin": "N/A",
"emailAddress": "xyzUser@questionpro.com",
"phone": "",
"accountType": "Dashboard",
"creationDate": "May 12, 2015",
"userID": 3456
},
]
},
"status": {
"method": "questionpro.survey.getAllAccounts",
"apiKey": "xxx",
"serverUTC": 1461565670022,
"id": 200,
"message": "OK",
"url": "/a/api/questionpro.survey.getAllAccounts"
}
}
Get Specific Account
Method: questionpro.survey.getAccount
This API call can be used to get a specific account based on userID.
Attributes
Name
Value
Required
userID
User ID
✔
URL
http://api.questionpro.com/a/api/questionpro.survey.getAccount
Sample Request
public String getAccountURL(){
return "http://api.questionpro.com/a/api/questionpro.survey.getAccount?accessKey="
+ getAccessKey();
}
public JSONObject getAccount() throws Exception {
String path = getAccountURL();
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(path);
JSONObject data = new JSONObject();
data.put("userID", getUserID());
StringEntity se = new StringEntity(data.toString());
httpost.setEntity(se);
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
ResponseHandler responseHandler = new BasicResponseHandler();
Object resp = httpclient.execute(httpost, responseHandler);
return new JSONObject(resp.toString());
}
Sample Response
{
"response": {
"account": {
"firstName": "xyz",
"lastName": "pqr",
"lastLogin": "0 days(s) ago",
"emailAddress": "someUser@questionpro.com",
"phone": "(IN)9876543210",
"creationDate": "Nov 17, 2010",
"userID": 1234
}
},
"status": {
"method": "questionpro.survey.getAccount",
"apiKey": "xxxx",
"serverUTC": 1461565902891,
"id": 200,
"message": "OK",
"url": "/a/api/questionpro.survey.getAccount"
}
}
Get All Surveys
Method: questionpro.survey.getAllSurveys
This API call can be used to get all surveys belonging to a specific user account.
URL
http://api.questionpro.com/a/api/questionpro.survey.getAllSurveys
Sample Request
public String getSurveysURL(){
return "http://api.questionpro.com/a/api/questionpro.survey.getAllSurveys?accessKey="
+ getAccessKey();
}
public JSONObject getSurveys() throws Exception {
String path = getSurveysURL();
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(path);
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
ResponseHandler responseHandler = new BasicResponseHandler();
Object resp = httpclient.execute(httpost, responseHandler);
return new JSONObject(resp.toString());
}
Sample Response
{
"response":{
"surveys:":[
{
"surveyID":4794284,
"surveyName":"QP (V1.24) CNC Assessment 2016-2017",
"surveyURL":"https://www.questionpro.com/a/TakeSurvey?id=4794284"
},
{
"surveyID":4794283,
"surveyName":"(Copy) (V1.24 TEST)",
"surveyURL":"https://www.questionpro.com/a/TakeSurvey?id=4794283"
}
"status":{
"method":"questionpro.survey.getAllSurveys",
"serverUTC":1472021401080,
"id":200,
"message":"OK",
"url":"/a/api/questionpro.survey.getAllSurveys"
}
}
Get Survey
Method: questionpro.survey.getSurvey
This API call can be used to get a specific survey.
Attributes
Name
Value
Required
id
Survey ID
✔
URL
http://api.questionpro.com/a/api/questionpro.survey.getSurvey
Sample Request
public String getSurveyURL(){
return "http://api.questionpro.com/a/api/questionpro.survey.getSurvey?accessKey="
+ getAccessKey();
}
public JSONObject getSurvey() throws Exception {
String path = getSurveyURL();
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(path);
JSONObject data = new JSONObject();
data.put("id", getSurveyID());
StringEntity se = new StringEntity(data.toString());
httpost.setEntity(se);
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
ResponseHandler responseHandler = new BasicResponseHandler();
Object resp = httpclient.execute(httpost, responseHandler);
return new JSONObject(resp.toString());
}
Sample Response
{
"response":{
"connectURL":"http://www.questionpro.com/t/AIBHLZVEJR",
"subtitle":"Aug 05 2016",
"languageContent":[
],
"thankYouMessage":"Thank you for completing this survey.",
"surveyLanguages":[
{
"isDefault":true,
"name":"English"
}
],
"id":4782051,
"hasScoringLogic":false,
"title":"CSat Survey",
"sections":[
{
"numTasks":0,
"exactMinAnswers":0,
"orientation":2,
"code":"Q1",
"maxAnswers":0,
"questions":[
{
"orderNumber":0,
"answers":[
{
"score":0,
"isDefault":false,
"excludeRandomize":0,
"id":252834875,
"text":"Weekly"
},
{
"score":0,
"isDefault":false,
"excludeRandomize":0,
"id":252834876,
"text":"Monthly"
},
{
"score":0,
"isDefault":false,
"excludeRandomize":0,
"id":252834877,
"text":"Quarterly"
},
{
"score":0,
"isDefault":false,
"excludeRandomize":0,
"id":252834878,
"text":"Annually"
}
],
"id":48612631,
"text":"How often do you conduct surveys?"
}
],
"dynamicExplodeText":"",
"sectionID":1,
"type":"U",
"minAnswers":0,
"required":false,
"hasPageBreak":false,
"random":false,
"randomSection":false,
"subtype":"A"
}
],
"surveyTheme":{
"titleBarBGGrad":"#233954",
"buttonHoverBG":"#9e9f9f",
"surveyBGGrad":"#4f4f4f",
"titleBarTextColor":"#ffffff",
"buttonTextColor":"#3b3b3b"
},
"numericTitle":0
},
"status":{
"method":"questionpro.survey.getSurvey",
"serverUTC":1470390437541,
"id":200,
"message":"OK",
"url":"/a/api/questionpro.survey.getSurvey"
}
}
Delete Survey
Method: questionpro.survey.deleteSurvey
This API call can be used to delete a specific survey.
Attributes
Name
Value
Required
surveyID
Survey ID
✔
URL
http://api.questionpro.com/a/api/questionpro.survey.deleteSurvey
Sample Request
public String deleteSurveyURL(){
return "http://api.questionpro.com/a/api/questionpro.survey.deleteSurvey?accessKey="
+ getAccessKey();
}
public JSONObject deleteSurvey() throws Exception {
String path = deleteSurveyURL();
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(path);
JSONObject data = new JSONObject();
data.put("surveyID", getSurveyID());
StringEntity se = new StringEntity(data.toString());
httpost.setEntity(se);
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
ResponseHandler responseHandler = new BasicResponseHandler();
Object resp = httpclient.execute(httpost, responseHandler);
return new JSONObject(resp.toString());
}
Sample Response
{
"response": {
"surveyID": 6110,
"success": 1,
"message": "Survey deleted successfully"
},
"status": {
"method": "questionpro.survey.deleteSurvey",
"apiKey": "xxxx",
"serverUTC": 1461566204206,
"id": 200,
"message": "OK",
"url": "/a/api/questionpro.survey.deleteSurvey"
}
}
Get All Email Lists
Method: questionpro.survey.getEmailLists
This API call can be used to get all email lists for a given survey.
It returns global as well as survey-specific list.
Attributes
Name
Value
Required
surveyID
Survey ID
✔
URL
http://api.questionpro.com/a/api/questionpro.survey.getEmailLists
Sample Request
public String getEmailListsURL(){
return "http://api.questionpro.com/a/api/questionpro.survey.getEmailLists?accessKey="
+ getAccessKey();
}
public JSONObject getEmailLists() throws Exception {
String path = getEmailListsURL();
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(path);
JSONObject data = new JSONObject();
data.put("surveyID", getSurveyID());
StringEntity se = new StringEntity(data.toString());
httpost.setEntity(se);
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
ResponseHandler responseHandler = new BasicResponseHandler();
Object resp = httpclient.execute(httpost, responseHandler);
return new JSONObject(resp.toString());
}
Sample Response
{
"response": {
"emailLists": [
{
"surveyID": 0,
"name": "my global list",
"emailGroupID": 1300,
"email": "test1@questionpro.com, test2@questionpro.com, test3@questionpro.com",
"statistics": {
"unsubscribed": "3",
"total": 3,
"active": "0",
"pendinVerification": 0,
"bounced": "0"
}
},
{
"surveyID": 5395,
"name": "Email-List-test",
"emailGroupID": 1354,
"email": "user@questionpro.com",
"statistics": {
"unsubscribed": "0",
"total": 1,
"active": "1",
"pendinVerification": 0,
"bounced": "0"
}
},
{
"surveyID": 5395,
"name": "Default List-1",
"emailGroupID": 1355,
"email": "",
"statistics": {
"unsubscribed": "0",
"total": 0,
"active": "0",
"pendinVerification": 0,
"bounced": "0"
}
}
]
},
"status": {
"method": "questionpro.survey.getEmailLists",
"apiKey": "xxxx",
"serverUTC": 1461566830499,
"id": 200,
"message": "OK",
"url": "/a/api/questionpro.survey.getEmailLists"
}
}
Get Specific Email List
Method: questionpro.survey.getEmailList
This API call can be used to get specific email list with requested email group id.
Attributes
Name
Value
Required
emailGroupID
Email Group ID
✔
URL
http://api.questionpro.com/a/api/questionpro.survey.getEmailList
Sample Request
public String getEmailListURL(){
return "http://api.questionpro.com/a/api/questionpro.survey.getEmailList?accessKey="
+ getAccessKey();
}
public JSONObject getEmailList() throws Exception {
String path = getEmailListURL();
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(path);
JSONObject data = new JSONObject();
data.put("emailGroupID", getEmailGroupID());
StringEntity se = new StringEntity(data.toString());
httpost.setEntity(se);
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
ResponseHandler responseHandler = new BasicResponseHandler();
Object resp = httpclient.execute(httpost, responseHandler);
return new JSONObject(resp.toString());
}
Sample Response
{
"response": {
"emailList": {
"surveyID": 5395,
"name": "Email-List-test",
"emailGroupID": 1354,
"email": "user@questionpro.com",
"statistics": {
"unsubscribed": "0",
"total": 1,
"active": "1",
"pendinVerification": 0,
"bounced": "0"
}
}
},
"status": {
"method": "questionpro.survey.getEmailList",
"apiKey": "xxxx",
"serverUTC": 1461567017465,
"id": 200,
"message": "OK",
"url": "/a/api/questionpro.survey.getEmailList"
}
}
Delete Specific Email List
Method: questionpro.survey.deleteEmailList
This API call can be used to delete specific email list with requested email group
id.
Attributes
Name
Value
Required
emailGroupID
Email Group ID
✔
URL
http://api.questionpro.com/a/api/questionpro.survey.deleteEmailList
Sample Request
public String deleteEmailListURL(){
return "http://api.questionpro.com/a/api/questionpro.survey.deleteEmailList?accessKey="
+ getAccessKey();
}
public JSONObject deleteEmailList() throws Exception {
String path = deleteEmailListURL();
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(path);
JSONObject data = new JSONObject();
data.put("emailGroupID", getEmailGroupID());
StringEntity se = new StringEntity(data.toString());
httpost.setEntity(se);
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
ResponseHandler responseHandler = new BasicResponseHandler();
Object resp = httpclient.execute(httpost, responseHandler);
return new JSONObject(resp.toString());
}
Sample Response
{
"response": {
"success": 1,
"message": "Email Group deleted successfully",
"emailGroupID": 1354
},
"status": {
"method": "questionpro.survey.deleteEmailList",
"apiKey": "xxxx",
"serverUTC": 1461567218720,
"id": 200,
"message": "OK",
"url": "/a/api/questionpro.survey.deleteEmailList"
}
}
Get All Email Templates
Method: questionpro.survey.getEmailTemplates
This API call can be used to get all email templates for a given survey.
Attributes
Name
Value
Required
surveyID
Survey ID
✔
URL
http://api.questionpro.com/a/api/questionpro.survey.getEmailTemplates
Sample Request
public String getEmailTemplatesURL(){
return
"http://api.questionpro.com/a/api/questionpro.survey.getEmailTemplates?accessKey="
+ getAccessKey();
}
public JSONObject getEmailTemplates() throws Exception {
String path = getEmailTemplatesURL();
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(path);
JSONObject data = new JSONObject();
data.put("surveyID", getSurveyID());
StringEntity se = new StringEntity(data.toString());
httpost.setEntity(se);
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
ResponseHandler responseHandler = new BasicResponseHandler();
Object resp = httpclient.execute(httpost, responseHandler);
return new JSONObject(resp.toString());
}
Sample Response
"response": {
"emailTemplates": [
{
"surveyID": 5395,
"templateID": 123,
"title": "Test-Survey-Specific",
"contentSummary": "Hello,\n\nWe would appreciate your feedback"
}
]
},
"status": {
"method": "questionpro.survey.getEmailTemplates",
"apiKey": "xxxx",
"serverUTC": 1461567860254,
"id": 200,
"message": "OK",
"url": "/a/api/questionpro.survey.getEmailTemplates"
}
}
Get Email Template
Method: questionpro.survey.getEmailTemplate
This API call can be used to get a specific email template with requested template
id.
Attributes
Name
Value
Required
templateID
Template ID
✔
URL
http://api.questionpro.com/a/api/questionpro.survey.getEmailTemplate
Sample Request
public String getEmailTemplateURL(){
return "http://api.questionpro.com/a/api/questionpro.survey.getEmailTemplate?accessKey="
+ getAccessKey();
}
public JSONObject getEmailTemplate() throws Exception {
String path = getEmailTemplateURL();
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(path);
JSONObject data = new JSONObject();
data.put("templateID", getTemplateID());
StringEntity se = new StringEntity(data.toString());
httpost.setEntity(se);
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
ResponseHandler responseHandler = new BasicResponseHandler();
Object resp = httpclient.execute(httpost, responseHandler);
return new JSONObject(resp.toString());
}
Sample Response
{
"response": {
"emailTemplate": {
"surveyID": 5395,
"templateID": 123,
"title": "Test-Survey-Specific",
"type": "2",
"contentSummary": "Hello,\n\nWe would appreciate your feedback"
}
},
"status": {
"method": "questionpro.survey.getEmailTemplate",
"apiKey": "xxxx",
"serverUTC": 1461567927522,
"id": 200,
"message": "OK",
"url": "/a/api/questionpro.survey.getEmailTemplate"
}
}
Delete Email Template
Method: questionpro.survey.deleteEmailTemplate
This API call can be used to delete a specific email template with requested template
id.
Attributes
Name
Value
Required
templateID
Template ID
✔
URL
http://api.questionpro.com/a/api/questionpro.survey.deleteEmailTemplate
Sample Request
public String deleteEmailTemplateURL(){
return
"http://api.questionpro.com/a/api/questionpro.survey.deleteEmailTemplate?accessKey="
+ getAccessKey();
}
public JSONObject deleteEmailTemplate() throws Exception {
String path = deleteEmailTemplateURL();
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(path);
JSONObject data = new JSONObject();
data.put("templateID", getTemplateID());
StringEntity se = new StringEntity(data.toString());
httpost.setEntity(se);
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
ResponseHandler responseHandler = new BasicResponseHandler();
Object resp = httpclient.execute(httpost, responseHandler);
return new JSONObject(resp.toString());
}
Sample Response
{
"response": {
"success": 1,
"templateID": 123,
"message": "Email Template deleted successfully"
},
"status": {
"method": "questionpro.survey.deleteEmailTemplate",
"apiKey": "xxxx",
"serverUTC": 1461568015962,
"id": 200,
"message": "OK",
"url": "/a/api/questionpro.survey.deleteEmailTemplate"
}
}
}
t
Get Specific Response
Method: questionpro.survey.surveyResponse
This API call can be used to get a specific survey response for a given survey.
Attributes
Name
Value
Required
surveyID
Survey ID
✔
responseID
Response ID
✔
URL
http://api.questionpro.com/a/api/questionpro.survey.surveyResponse
Sample Request
public String surveyResponseURL(){
return
"http://api.questionpro.com/a/api/questionpro.survey.surveyResponse?accessKey="
+ getAccessKey();
}
public JSONObject surveyResponse() throws Exception {
String path = surveyResponseURL();
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(path);
JSONObject data = new JSONObject();
data.put("surveyID", getSurveyID());
data.put("responseID", getResponseID());
StringEntity se = new StringEntity(data.toString());
httpost.setEntity(se);
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
ResponseHandler responseHandler = new BasicResponseHandler();
Object resp = httpclient.execute(httpost, responseHandler);
return new JSONObject(resp.toString());
}
Sample Response
{
"response": {
"surveyResponse": {
"externalReference": "test_response",
"timeTaken": 23,
"ipAddress": "127.0.0.1",
"UTCTimestamp": 13,
"id": 29245,
"duplicate": false,
"responseStatus": "Yes",
"responseSet": [
{
"questionDescription": " ",
"questionID": 17607029,
"questionCode": "Q1",
"values": [
{
"answerText": "Weekly",
"id": "135906",
"value": {
"scale": "1",
"dynamic": "[Weekly]\r\nabc "
}
}
],
"questionText": "How often do you conduct surveys?"
}
],
"timestamp": "24 Feb, 2016 05:00:13 PM IST"
},
"name": "emojiSurvey1",
"id": 123,
"status": "Active"
},
"status": {
"method": "questionpro.survey.surveyResponse",
"apiKey": "xxxx",
"serverUTC": 1461568638389,
"id": 200,
"message": "OK",
"url": "/a/api/questionpro.survey.surveyResponse"
}
}
Delete a Specific Response
Method: questionpro.survey.deleteResponse
This API call can be used to get a specific survey response for a given survey.
Attributes
Name
Value
Required
surveyID
Survey ID
✔
responseID
Response ID
✔
URL
http://api.questionpro.com/a/api/questionpro.survey.deleteResponse
Sample Request
public String deleteResponseURL(){
return
"http://api.questionpro.com/a/api/questionpro.survey.deleteResponse?accessKey="
+ getAccessKey();
}
public JSONObject deleteResponse() throws Exception {
String path = deleteResponseURL();
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(path);
JSONObject data = new JSONObject();
data.put("surveyID", getSurveyID());
data.put("responseID", getResponseID());
StringEntity se = new StringEntity(data.toString());
httpost.setEntity(se);
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
ResponseHandler responseHandler = new BasicResponseHandler();
Object resp = httpclient.execute(httpost, responseHandler);
return new JSONObject(resp.toString());
}
Sample Response
{
"response": {
"surveyID": 123,
"success": 1,
"message": "Response deleted successfully",
"responseID": 4567
},
"status": {
"method": "questionpro.survey.deleteResponse",
"apiKey": "xxxx",
"serverUTC": 1461568860575,
"id": 200,
"message": "OK",
"url": "/a/api/questionpro.survey.deleteResponse"
}
}