curl --request POST \
--url https://api.pickfu.com/v1/surveys \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"questions": [
{
"prompt": "<string>",
"context": {
"text": "<string>",
"mediaUrl": "<string>"
},
"options": [
{
"value": "<string>",
"mediaUrl": "<string>",
"asin": "<string>",
"imageSet": [
"<string>"
],
"mockup": {
"image": "<string>",
"title": "<string>",
"numRatings": 123,
"reviewScore": 123,
"price": 123,
"currency": "<string>"
}
}
]
}
],
"name": "<string>",
"projectId": "<string>",
"projects": [
"<string>"
],
"tags": [
{
"id": 123
}
],
"targeting": [
"<string>"
],
"reporting": [
"<string>"
],
"country": "<string>",
"sampleSize": "<string>",
"surveyIntent": "<string>",
"isMiniPoll": true
}
'import requests
url = "https://api.pickfu.com/v1/surveys"
payload = {
"questions": [
{
"prompt": "<string>",
"context": {
"text": "<string>",
"mediaUrl": "<string>"
},
"options": [
{
"value": "<string>",
"mediaUrl": "<string>",
"asin": "<string>",
"imageSet": ["<string>"],
"mockup": {
"image": "<string>",
"title": "<string>",
"numRatings": 123,
"reviewScore": 123,
"price": 123,
"currency": "<string>"
}
}
]
}
],
"name": "<string>",
"projectId": "<string>",
"projects": ["<string>"],
"tags": [{ "id": 123 }],
"targeting": ["<string>"],
"reporting": ["<string>"],
"country": "<string>",
"sampleSize": "<string>",
"surveyIntent": "<string>",
"isMiniPoll": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
questions: [
{
prompt: '<string>',
context: {text: '<string>', mediaUrl: '<string>'},
options: [
{
value: '<string>',
mediaUrl: '<string>',
asin: '<string>',
imageSet: ['<string>'],
mockup: {
image: '<string>',
title: '<string>',
numRatings: 123,
reviewScore: 123,
price: 123,
currency: '<string>'
}
}
]
}
],
name: '<string>',
projectId: '<string>',
projects: ['<string>'],
tags: [{id: 123}],
targeting: ['<string>'],
reporting: ['<string>'],
country: '<string>',
sampleSize: '<string>',
surveyIntent: '<string>',
isMiniPoll: true
})
};
fetch('https://api.pickfu.com/v1/surveys', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.pickfu.com/v1/surveys",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'questions' => [
[
'prompt' => '<string>',
'context' => [
'text' => '<string>',
'mediaUrl' => '<string>'
],
'options' => [
[
'value' => '<string>',
'mediaUrl' => '<string>',
'asin' => '<string>',
'imageSet' => [
'<string>'
],
'mockup' => [
'image' => '<string>',
'title' => '<string>',
'numRatings' => 123,
'reviewScore' => 123,
'price' => 123,
'currency' => '<string>'
]
]
]
]
],
'name' => '<string>',
'projectId' => '<string>',
'projects' => [
'<string>'
],
'tags' => [
[
'id' => 123
]
],
'targeting' => [
'<string>'
],
'reporting' => [
'<string>'
],
'country' => '<string>',
'sampleSize' => '<string>',
'surveyIntent' => '<string>',
'isMiniPoll' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.pickfu.com/v1/surveys"
payload := strings.NewReader("{\n \"questions\": [\n {\n \"prompt\": \"<string>\",\n \"context\": {\n \"text\": \"<string>\",\n \"mediaUrl\": \"<string>\"\n },\n \"options\": [\n {\n \"value\": \"<string>\",\n \"mediaUrl\": \"<string>\",\n \"asin\": \"<string>\",\n \"imageSet\": [\n \"<string>\"\n ],\n \"mockup\": {\n \"image\": \"<string>\",\n \"title\": \"<string>\",\n \"numRatings\": 123,\n \"reviewScore\": 123,\n \"price\": 123,\n \"currency\": \"<string>\"\n }\n }\n ]\n }\n ],\n \"name\": \"<string>\",\n \"projectId\": \"<string>\",\n \"projects\": [\n \"<string>\"\n ],\n \"tags\": [\n {\n \"id\": 123\n }\n ],\n \"targeting\": [\n \"<string>\"\n ],\n \"reporting\": [\n \"<string>\"\n ],\n \"country\": \"<string>\",\n \"sampleSize\": \"<string>\",\n \"surveyIntent\": \"<string>\",\n \"isMiniPoll\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.pickfu.com/v1/surveys")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"questions\": [\n {\n \"prompt\": \"<string>\",\n \"context\": {\n \"text\": \"<string>\",\n \"mediaUrl\": \"<string>\"\n },\n \"options\": [\n {\n \"value\": \"<string>\",\n \"mediaUrl\": \"<string>\",\n \"asin\": \"<string>\",\n \"imageSet\": [\n \"<string>\"\n ],\n \"mockup\": {\n \"image\": \"<string>\",\n \"title\": \"<string>\",\n \"numRatings\": 123,\n \"reviewScore\": 123,\n \"price\": 123,\n \"currency\": \"<string>\"\n }\n }\n ]\n }\n ],\n \"name\": \"<string>\",\n \"projectId\": \"<string>\",\n \"projects\": [\n \"<string>\"\n ],\n \"tags\": [\n {\n \"id\": 123\n }\n ],\n \"targeting\": [\n \"<string>\"\n ],\n \"reporting\": [\n \"<string>\"\n ],\n \"country\": \"<string>\",\n \"sampleSize\": \"<string>\",\n \"surveyIntent\": \"<string>\",\n \"isMiniPoll\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pickfu.com/v1/surveys")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"questions\": [\n {\n \"prompt\": \"<string>\",\n \"context\": {\n \"text\": \"<string>\",\n \"mediaUrl\": \"<string>\"\n },\n \"options\": [\n {\n \"value\": \"<string>\",\n \"mediaUrl\": \"<string>\",\n \"asin\": \"<string>\",\n \"imageSet\": [\n \"<string>\"\n ],\n \"mockup\": {\n \"image\": \"<string>\",\n \"title\": \"<string>\",\n \"numRatings\": 123,\n \"reviewScore\": 123,\n \"price\": 123,\n \"currency\": \"<string>\"\n }\n }\n ]\n }\n ],\n \"name\": \"<string>\",\n \"projectId\": \"<string>\",\n \"projects\": [\n \"<string>\"\n ],\n \"tags\": [\n {\n \"id\": 123\n }\n ],\n \"targeting\": [\n \"<string>\"\n ],\n \"reporting\": [\n \"<string>\"\n ],\n \"country\": \"<string>\",\n \"sampleSize\": \"<string>\",\n \"surveyIntent\": \"<string>\",\n \"isMiniPoll\": true\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": "<string>",
"name": "<string>",
"country": "<string>",
"sampleSize": 123,
"numResponses": 123,
"status": "<string>",
"targeting": [
"<string>"
],
"reporting": [
"<string>"
],
"reportingDefaultsApplied": [
"<string>"
],
"tags": [
{
"id": "<string>",
"name": "<string>"
}
],
"projects": [
{
"id": "<string>",
"name": "<string>"
}
],
"surveyUrl": "<string>",
"surveyIntent": "<string>",
"questions": [
{
"id": "<string>",
"type": "<string>",
"variant": "<string>",
"value": "<string>",
"translation": "<string>",
"options": [
{
"id": "<string>",
"label": "<string>",
"value": "<string>",
"type": "<string>",
"translation": "<string>",
"product": {
"asin": "<string>",
"title": "<string>",
"price": 123,
"salePrice": 123,
"rating": 123,
"reviews": 123,
"image": "<string>"
},
"imageSetDirection": "<string>",
"mockupType": "<string>"
}
],
"context": {
"type": "<string>",
"value": "<string>",
"translation": "<string>"
},
"results": {
"totalResponses": 123,
"winningOptionId": "<string>",
"averageScore": 123,
"options": [
{
"id": "<string>",
"label": "<string>",
"votes": 123,
"percentage": 123,
"rank": 123,
"isWinner": true
}
]
},
"responses": [
{
"id": "<string>",
"pinned": true,
"explanation": "<string>",
"translation": "<string>",
"chosenOption": "<string>",
"selectedOptions": [
"<string>"
],
"score": 123,
"clicks": [
{
"number": 123,
"xCoord": 123,
"yCoord": 123
}
],
"ranking": [
{
"rank": 123,
"option": "<string>"
}
],
"media": "<string>",
"mediaTranscription": "<string>",
"matchup": {
"option1": "<string>",
"option2": "<string>"
},
"statements": [
{
"id": "<string>",
"statement": "<string>",
"value": 123
}
],
"respondent": [
{
"trait": "<string>",
"value": "<string>"
}
]
}
],
"ai": {}
}
]
},
"cost": {
"amount": 123,
"balance": 123,
"currency": "<string>",
"canPayWithBalance": true,
"quotedCreditsCost": 123,
"creditsCostSubtotal": 123,
"discounts": [
[
"<string>"
]
],
"discountsMoney": [
[
"<string>"
]
],
"planRequired": "<string>"
}
}{
"statusCode": 123,
"error": "<string>",
"message": "<string>"
}Create survey
Creates a new survey in draft status. The survey must be published separately using the publish endpoint.
Each survey contains one or more questions, each with a type (head_to_head, ranked, open_ended, etc.) and optional answer options. You can also specify targeting traits, reporting breakdowns, country, and sample size.
curl --request POST \
--url https://api.pickfu.com/v1/surveys \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"questions": [
{
"prompt": "<string>",
"context": {
"text": "<string>",
"mediaUrl": "<string>"
},
"options": [
{
"value": "<string>",
"mediaUrl": "<string>",
"asin": "<string>",
"imageSet": [
"<string>"
],
"mockup": {
"image": "<string>",
"title": "<string>",
"numRatings": 123,
"reviewScore": 123,
"price": 123,
"currency": "<string>"
}
}
]
}
],
"name": "<string>",
"projectId": "<string>",
"projects": [
"<string>"
],
"tags": [
{
"id": 123
}
],
"targeting": [
"<string>"
],
"reporting": [
"<string>"
],
"country": "<string>",
"sampleSize": "<string>",
"surveyIntent": "<string>",
"isMiniPoll": true
}
'import requests
url = "https://api.pickfu.com/v1/surveys"
payload = {
"questions": [
{
"prompt": "<string>",
"context": {
"text": "<string>",
"mediaUrl": "<string>"
},
"options": [
{
"value": "<string>",
"mediaUrl": "<string>",
"asin": "<string>",
"imageSet": ["<string>"],
"mockup": {
"image": "<string>",
"title": "<string>",
"numRatings": 123,
"reviewScore": 123,
"price": 123,
"currency": "<string>"
}
}
]
}
],
"name": "<string>",
"projectId": "<string>",
"projects": ["<string>"],
"tags": [{ "id": 123 }],
"targeting": ["<string>"],
"reporting": ["<string>"],
"country": "<string>",
"sampleSize": "<string>",
"surveyIntent": "<string>",
"isMiniPoll": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
questions: [
{
prompt: '<string>',
context: {text: '<string>', mediaUrl: '<string>'},
options: [
{
value: '<string>',
mediaUrl: '<string>',
asin: '<string>',
imageSet: ['<string>'],
mockup: {
image: '<string>',
title: '<string>',
numRatings: 123,
reviewScore: 123,
price: 123,
currency: '<string>'
}
}
]
}
],
name: '<string>',
projectId: '<string>',
projects: ['<string>'],
tags: [{id: 123}],
targeting: ['<string>'],
reporting: ['<string>'],
country: '<string>',
sampleSize: '<string>',
surveyIntent: '<string>',
isMiniPoll: true
})
};
fetch('https://api.pickfu.com/v1/surveys', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.pickfu.com/v1/surveys",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'questions' => [
[
'prompt' => '<string>',
'context' => [
'text' => '<string>',
'mediaUrl' => '<string>'
],
'options' => [
[
'value' => '<string>',
'mediaUrl' => '<string>',
'asin' => '<string>',
'imageSet' => [
'<string>'
],
'mockup' => [
'image' => '<string>',
'title' => '<string>',
'numRatings' => 123,
'reviewScore' => 123,
'price' => 123,
'currency' => '<string>'
]
]
]
]
],
'name' => '<string>',
'projectId' => '<string>',
'projects' => [
'<string>'
],
'tags' => [
[
'id' => 123
]
],
'targeting' => [
'<string>'
],
'reporting' => [
'<string>'
],
'country' => '<string>',
'sampleSize' => '<string>',
'surveyIntent' => '<string>',
'isMiniPoll' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.pickfu.com/v1/surveys"
payload := strings.NewReader("{\n \"questions\": [\n {\n \"prompt\": \"<string>\",\n \"context\": {\n \"text\": \"<string>\",\n \"mediaUrl\": \"<string>\"\n },\n \"options\": [\n {\n \"value\": \"<string>\",\n \"mediaUrl\": \"<string>\",\n \"asin\": \"<string>\",\n \"imageSet\": [\n \"<string>\"\n ],\n \"mockup\": {\n \"image\": \"<string>\",\n \"title\": \"<string>\",\n \"numRatings\": 123,\n \"reviewScore\": 123,\n \"price\": 123,\n \"currency\": \"<string>\"\n }\n }\n ]\n }\n ],\n \"name\": \"<string>\",\n \"projectId\": \"<string>\",\n \"projects\": [\n \"<string>\"\n ],\n \"tags\": [\n {\n \"id\": 123\n }\n ],\n \"targeting\": [\n \"<string>\"\n ],\n \"reporting\": [\n \"<string>\"\n ],\n \"country\": \"<string>\",\n \"sampleSize\": \"<string>\",\n \"surveyIntent\": \"<string>\",\n \"isMiniPoll\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.pickfu.com/v1/surveys")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"questions\": [\n {\n \"prompt\": \"<string>\",\n \"context\": {\n \"text\": \"<string>\",\n \"mediaUrl\": \"<string>\"\n },\n \"options\": [\n {\n \"value\": \"<string>\",\n \"mediaUrl\": \"<string>\",\n \"asin\": \"<string>\",\n \"imageSet\": [\n \"<string>\"\n ],\n \"mockup\": {\n \"image\": \"<string>\",\n \"title\": \"<string>\",\n \"numRatings\": 123,\n \"reviewScore\": 123,\n \"price\": 123,\n \"currency\": \"<string>\"\n }\n }\n ]\n }\n ],\n \"name\": \"<string>\",\n \"projectId\": \"<string>\",\n \"projects\": [\n \"<string>\"\n ],\n \"tags\": [\n {\n \"id\": 123\n }\n ],\n \"targeting\": [\n \"<string>\"\n ],\n \"reporting\": [\n \"<string>\"\n ],\n \"country\": \"<string>\",\n \"sampleSize\": \"<string>\",\n \"surveyIntent\": \"<string>\",\n \"isMiniPoll\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pickfu.com/v1/surveys")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"questions\": [\n {\n \"prompt\": \"<string>\",\n \"context\": {\n \"text\": \"<string>\",\n \"mediaUrl\": \"<string>\"\n },\n \"options\": [\n {\n \"value\": \"<string>\",\n \"mediaUrl\": \"<string>\",\n \"asin\": \"<string>\",\n \"imageSet\": [\n \"<string>\"\n ],\n \"mockup\": {\n \"image\": \"<string>\",\n \"title\": \"<string>\",\n \"numRatings\": 123,\n \"reviewScore\": 123,\n \"price\": 123,\n \"currency\": \"<string>\"\n }\n }\n ]\n }\n ],\n \"name\": \"<string>\",\n \"projectId\": \"<string>\",\n \"projects\": [\n \"<string>\"\n ],\n \"tags\": [\n {\n \"id\": 123\n }\n ],\n \"targeting\": [\n \"<string>\"\n ],\n \"reporting\": [\n \"<string>\"\n ],\n \"country\": \"<string>\",\n \"sampleSize\": \"<string>\",\n \"surveyIntent\": \"<string>\",\n \"isMiniPoll\": true\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": "<string>",
"name": "<string>",
"country": "<string>",
"sampleSize": 123,
"numResponses": 123,
"status": "<string>",
"targeting": [
"<string>"
],
"reporting": [
"<string>"
],
"reportingDefaultsApplied": [
"<string>"
],
"tags": [
{
"id": "<string>",
"name": "<string>"
}
],
"projects": [
{
"id": "<string>",
"name": "<string>"
}
],
"surveyUrl": "<string>",
"surveyIntent": "<string>",
"questions": [
{
"id": "<string>",
"type": "<string>",
"variant": "<string>",
"value": "<string>",
"translation": "<string>",
"options": [
{
"id": "<string>",
"label": "<string>",
"value": "<string>",
"type": "<string>",
"translation": "<string>",
"product": {
"asin": "<string>",
"title": "<string>",
"price": 123,
"salePrice": 123,
"rating": 123,
"reviews": 123,
"image": "<string>"
},
"imageSetDirection": "<string>",
"mockupType": "<string>"
}
],
"context": {
"type": "<string>",
"value": "<string>",
"translation": "<string>"
},
"results": {
"totalResponses": 123,
"winningOptionId": "<string>",
"averageScore": 123,
"options": [
{
"id": "<string>",
"label": "<string>",
"votes": 123,
"percentage": 123,
"rank": 123,
"isWinner": true
}
]
},
"responses": [
{
"id": "<string>",
"pinned": true,
"explanation": "<string>",
"translation": "<string>",
"chosenOption": "<string>",
"selectedOptions": [
"<string>"
],
"score": 123,
"clicks": [
{
"number": 123,
"xCoord": 123,
"yCoord": 123
}
],
"ranking": [
{
"rank": 123,
"option": "<string>"
}
],
"media": "<string>",
"mediaTranscription": "<string>",
"matchup": {
"option1": "<string>",
"option2": "<string>"
},
"statements": [
{
"id": "<string>",
"statement": "<string>",
"value": 123
}
],
"respondent": [
{
"trait": "<string>",
"value": "<string>"
}
]
}
],
"ai": {}
}
]
},
"cost": {
"amount": 123,
"balance": 123,
"currency": "<string>",
"canPayWithBalance": true,
"quotedCreditsCost": 123,
"creditsCostSubtotal": 123,
"discounts": [
[
"<string>"
]
],
"discountsMoney": [
[
"<string>"
]
],
"planRequired": "<string>"
}
}{
"statusCode": 123,
"error": "<string>",
"message": "<string>"
}Authorizations
OAuth2 access token obtained via the authorization flow. Include in the Authorization header as: Bearer {access_token}
Body
List of questions for the survey
1Show child attributes
Show child attributes
Survey name (1-255 characters, trimmed)
1 - 255Project GUID (string) or numeric ID to associate with the survey, or null to leave unassigned. Mutually exclusive with projects.
Project GUIDs (or numeric IDs) to associate the survey with. Mutually exclusive with projectId.
50Tags to attach. Each item has either id (existing tag) or name (find-or-create).
10- Option 1
- Option 2
Show child attributes
Show child attributes
Demographic targeting traits
Reporting breakdown traits
Two-letter country code (e.g. US)
Number of respondents (e.g. "15", "30", "50", "75", "100", "200", "300", "500")
Original intent of the survey as interpreted by AI (max 255 characters)
255Whether to create this survey as a daily mini-poll
Was this page helpful?
