Extended Setup Actions
Create test participant (Staging only)
Create a test participant profile in the staging environment only. Use this to simulate screener responses and test your integration end-to-end without real participants.
POST
/
v1
/
profiles
Create test participant (Staging only)
curl --request POST \
--url https://api-staging.respondent.io/v1/profiles \
--header 'Content-Type: application/json' \
--header 'x-api-key: <x-api-key>' \
--header 'x-api-secret: <x-api-secret>' \
--data '
{
"email": "<string>",
"workEmail": "<string>",
"firstName": "<string>",
"lastName": "<string>",
"password": "<string>"
}
'import requests
url = "https://api-staging.respondent.io/v1/profiles"
payload = {
"email": "<string>",
"workEmail": "<string>",
"firstName": "<string>",
"lastName": "<string>",
"password": "<string>"
}
headers = {
"x-api-key": "<x-api-key>",
"x-api-secret": "<x-api-secret>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-api-key': '<x-api-key>',
'x-api-secret': '<x-api-secret>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
email: '<string>',
workEmail: '<string>',
firstName: '<string>',
lastName: '<string>',
password: '<string>'
})
};
fetch('https://api-staging.respondent.io/v1/profiles', 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-staging.respondent.io/v1/profiles",
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([
'email' => '<string>',
'workEmail' => '<string>',
'firstName' => '<string>',
'lastName' => '<string>',
'password' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <x-api-key>",
"x-api-secret: <x-api-secret>"
],
]);
$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-staging.respondent.io/v1/profiles"
payload := strings.NewReader("{\n \"email\": \"<string>\",\n \"workEmail\": \"<string>\",\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"password\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<x-api-key>")
req.Header.Add("x-api-secret", "<x-api-secret>")
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-staging.respondent.io/v1/profiles")
.header("x-api-key", "<x-api-key>")
.header("x-api-secret", "<x-api-secret>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"<string>\",\n \"workEmail\": \"<string>\",\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"password\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-staging.respondent.io/v1/profiles")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<x-api-key>'
request["x-api-secret"] = '<x-api-secret>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"<string>\",\n \"workEmail\": \"<string>\",\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"password\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyBody
application/json
Need work email to make sure this participant is eligible for B2B projects. Note: Check if this email is not being used by any other participant, otherwise it will skip work email verification.
Available options:
male, female, other, nonbinary, transmale, transfemale, prefernottoanswer, N/A Response
201 - undefined
Last modified on March 18, 2026
Was this page helpful?
Previous
Create quotaCreate audience quotas to control recruitment distribution by demographic criteria (e.g., age, gender, income). Quotas automatically stop recruitment for a segment once its target is met.
Next
⌘I
Create test participant (Staging only)
curl --request POST \
--url https://api-staging.respondent.io/v1/profiles \
--header 'Content-Type: application/json' \
--header 'x-api-key: <x-api-key>' \
--header 'x-api-secret: <x-api-secret>' \
--data '
{
"email": "<string>",
"workEmail": "<string>",
"firstName": "<string>",
"lastName": "<string>",
"password": "<string>"
}
'import requests
url = "https://api-staging.respondent.io/v1/profiles"
payload = {
"email": "<string>",
"workEmail": "<string>",
"firstName": "<string>",
"lastName": "<string>",
"password": "<string>"
}
headers = {
"x-api-key": "<x-api-key>",
"x-api-secret": "<x-api-secret>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-api-key': '<x-api-key>',
'x-api-secret': '<x-api-secret>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
email: '<string>',
workEmail: '<string>',
firstName: '<string>',
lastName: '<string>',
password: '<string>'
})
};
fetch('https://api-staging.respondent.io/v1/profiles', 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-staging.respondent.io/v1/profiles",
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([
'email' => '<string>',
'workEmail' => '<string>',
'firstName' => '<string>',
'lastName' => '<string>',
'password' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <x-api-key>",
"x-api-secret: <x-api-secret>"
],
]);
$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-staging.respondent.io/v1/profiles"
payload := strings.NewReader("{\n \"email\": \"<string>\",\n \"workEmail\": \"<string>\",\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"password\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<x-api-key>")
req.Header.Add("x-api-secret", "<x-api-secret>")
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-staging.respondent.io/v1/profiles")
.header("x-api-key", "<x-api-key>")
.header("x-api-secret", "<x-api-secret>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"<string>\",\n \"workEmail\": \"<string>\",\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"password\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-staging.respondent.io/v1/profiles")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<x-api-key>'
request["x-api-secret"] = '<x-api-secret>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"<string>\",\n \"workEmail\": \"<string>\",\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"password\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body