curl --request POST \
--url https://app.sideshift.app/api/oauth/v1/recruit/students \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"batchSize": 21,
"page": 1,
"lastDoc": {
"lastDocId": "<string>",
"nextTypesensePage": 2,
"skipWithinPage": 500
},
"jobId": "<string>",
"searchTerm": "",
"filters": {
"q": "",
"creatorVerified": false,
"hasTopPosts": false,
"hasThreePosts": false,
"hasTikTok": false,
"hasInstagram": false,
"usBased": false,
"nonUS": false,
"isVerified": true,
"minTikTokPosts": true,
"country": "<string>",
"hideRepeatApplicants": true,
"grades": [],
"schools": [],
"genders": [],
"age": {
"min": 66,
"max": 66
},
"earningsCents": {
"min": 123,
"max": 123
},
"views": {
"min": 123,
"max": 123
},
"posts": {
"min": 123,
"max": 123
},
"xp": {
"min": 123,
"max": 123
},
"rating": {
"min": 2.5
},
"reviews": {
"min": 500000
},
"certificationTypes": [],
"minCertifications": 25,
"achievementKeys": [],
"achievementMinTierByKey": {},
"minUnlockedAchievements": 100,
"locations": [],
"niches": [],
"countries": [],
"trainingProgress": {
"min": 50,
"max": 50
},
"minRank": 5,
"showBookmarkedOnly": false,
"hideMessaged": false,
"messagedUserIds": [],
"hideAppliedToJobId": "<string>"
}
}
'import requests
url = "https://app.sideshift.app/api/oauth/v1/recruit/students"
payload = {
"batchSize": 21,
"page": 1,
"lastDoc": {
"lastDocId": "<string>",
"nextTypesensePage": 2,
"skipWithinPage": 500
},
"jobId": "<string>",
"searchTerm": "",
"filters": {
"q": "",
"creatorVerified": False,
"hasTopPosts": False,
"hasThreePosts": False,
"hasTikTok": False,
"hasInstagram": False,
"usBased": False,
"nonUS": False,
"isVerified": True,
"minTikTokPosts": True,
"country": "<string>",
"hideRepeatApplicants": True,
"grades": [],
"schools": [],
"genders": [],
"age": {
"min": 66,
"max": 66
},
"earningsCents": {
"min": 123,
"max": 123
},
"views": {
"min": 123,
"max": 123
},
"posts": {
"min": 123,
"max": 123
},
"xp": {
"min": 123,
"max": 123
},
"rating": { "min": 2.5 },
"reviews": { "min": 500000 },
"certificationTypes": [],
"minCertifications": 25,
"achievementKeys": [],
"achievementMinTierByKey": {},
"minUnlockedAchievements": 100,
"locations": [],
"niches": [],
"countries": [],
"trainingProgress": {
"min": 50,
"max": 50
},
"minRank": 5,
"showBookmarkedOnly": False,
"hideMessaged": False,
"messagedUserIds": [],
"hideAppliedToJobId": "<string>"
}
}
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({
batchSize: 21,
page: 1,
lastDoc: {lastDocId: '<string>', nextTypesensePage: 2, skipWithinPage: 500},
jobId: '<string>',
searchTerm: '',
filters: {
q: '',
creatorVerified: false,
hasTopPosts: false,
hasThreePosts: false,
hasTikTok: false,
hasInstagram: false,
usBased: false,
nonUS: false,
isVerified: true,
minTikTokPosts: true,
country: '<string>',
hideRepeatApplicants: true,
grades: [],
schools: [],
genders: [],
age: {min: 66, max: 66},
earningsCents: {min: 123, max: 123},
views: {min: 123, max: 123},
posts: {min: 123, max: 123},
xp: {min: 123, max: 123},
rating: {min: 2.5},
reviews: {min: 500000},
certificationTypes: [],
minCertifications: 25,
achievementKeys: [],
achievementMinTierByKey: {},
minUnlockedAchievements: 100,
locations: [],
niches: [],
countries: [],
trainingProgress: {min: 50, max: 50},
minRank: 5,
showBookmarkedOnly: false,
hideMessaged: false,
messagedUserIds: [],
hideAppliedToJobId: '<string>'
}
})
};
fetch('https://app.sideshift.app/api/oauth/v1/recruit/students', 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://app.sideshift.app/api/oauth/v1/recruit/students",
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([
'batchSize' => 21,
'page' => 1,
'lastDoc' => [
'lastDocId' => '<string>',
'nextTypesensePage' => 2,
'skipWithinPage' => 500
],
'jobId' => '<string>',
'searchTerm' => '',
'filters' => [
'q' => '',
'creatorVerified' => false,
'hasTopPosts' => false,
'hasThreePosts' => false,
'hasTikTok' => false,
'hasInstagram' => false,
'usBased' => false,
'nonUS' => false,
'isVerified' => true,
'minTikTokPosts' => true,
'country' => '<string>',
'hideRepeatApplicants' => true,
'grades' => [
],
'schools' => [
],
'genders' => [
],
'age' => [
'min' => 66,
'max' => 66
],
'earningsCents' => [
'min' => 123,
'max' => 123
],
'views' => [
'min' => 123,
'max' => 123
],
'posts' => [
'min' => 123,
'max' => 123
],
'xp' => [
'min' => 123,
'max' => 123
],
'rating' => [
'min' => 2.5
],
'reviews' => [
'min' => 500000
],
'certificationTypes' => [
],
'minCertifications' => 25,
'achievementKeys' => [
],
'achievementMinTierByKey' => [
],
'minUnlockedAchievements' => 100,
'locations' => [
],
'niches' => [
],
'countries' => [
],
'trainingProgress' => [
'min' => 50,
'max' => 50
],
'minRank' => 5,
'showBookmarkedOnly' => false,
'hideMessaged' => false,
'messagedUserIds' => [
],
'hideAppliedToJobId' => '<string>'
]
]),
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://app.sideshift.app/api/oauth/v1/recruit/students"
payload := strings.NewReader("{\n \"batchSize\": 21,\n \"page\": 1,\n \"lastDoc\": {\n \"lastDocId\": \"<string>\",\n \"nextTypesensePage\": 2,\n \"skipWithinPage\": 500\n },\n \"jobId\": \"<string>\",\n \"searchTerm\": \"\",\n \"filters\": {\n \"q\": \"\",\n \"creatorVerified\": false,\n \"hasTopPosts\": false,\n \"hasThreePosts\": false,\n \"hasTikTok\": false,\n \"hasInstagram\": false,\n \"usBased\": false,\n \"nonUS\": false,\n \"isVerified\": true,\n \"minTikTokPosts\": true,\n \"country\": \"<string>\",\n \"hideRepeatApplicants\": true,\n \"grades\": [],\n \"schools\": [],\n \"genders\": [],\n \"age\": {\n \"min\": 66,\n \"max\": 66\n },\n \"earningsCents\": {\n \"min\": 123,\n \"max\": 123\n },\n \"views\": {\n \"min\": 123,\n \"max\": 123\n },\n \"posts\": {\n \"min\": 123,\n \"max\": 123\n },\n \"xp\": {\n \"min\": 123,\n \"max\": 123\n },\n \"rating\": {\n \"min\": 2.5\n },\n \"reviews\": {\n \"min\": 500000\n },\n \"certificationTypes\": [],\n \"minCertifications\": 25,\n \"achievementKeys\": [],\n \"achievementMinTierByKey\": {},\n \"minUnlockedAchievements\": 100,\n \"locations\": [],\n \"niches\": [],\n \"countries\": [],\n \"trainingProgress\": {\n \"min\": 50,\n \"max\": 50\n },\n \"minRank\": 5,\n \"showBookmarkedOnly\": false,\n \"hideMessaged\": false,\n \"messagedUserIds\": [],\n \"hideAppliedToJobId\": \"<string>\"\n }\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://app.sideshift.app/api/oauth/v1/recruit/students")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"batchSize\": 21,\n \"page\": 1,\n \"lastDoc\": {\n \"lastDocId\": \"<string>\",\n \"nextTypesensePage\": 2,\n \"skipWithinPage\": 500\n },\n \"jobId\": \"<string>\",\n \"searchTerm\": \"\",\n \"filters\": {\n \"q\": \"\",\n \"creatorVerified\": false,\n \"hasTopPosts\": false,\n \"hasThreePosts\": false,\n \"hasTikTok\": false,\n \"hasInstagram\": false,\n \"usBased\": false,\n \"nonUS\": false,\n \"isVerified\": true,\n \"minTikTokPosts\": true,\n \"country\": \"<string>\",\n \"hideRepeatApplicants\": true,\n \"grades\": [],\n \"schools\": [],\n \"genders\": [],\n \"age\": {\n \"min\": 66,\n \"max\": 66\n },\n \"earningsCents\": {\n \"min\": 123,\n \"max\": 123\n },\n \"views\": {\n \"min\": 123,\n \"max\": 123\n },\n \"posts\": {\n \"min\": 123,\n \"max\": 123\n },\n \"xp\": {\n \"min\": 123,\n \"max\": 123\n },\n \"rating\": {\n \"min\": 2.5\n },\n \"reviews\": {\n \"min\": 500000\n },\n \"certificationTypes\": [],\n \"minCertifications\": 25,\n \"achievementKeys\": [],\n \"achievementMinTierByKey\": {},\n \"minUnlockedAchievements\": 100,\n \"locations\": [],\n \"niches\": [],\n \"countries\": [],\n \"trainingProgress\": {\n \"min\": 50,\n \"max\": 50\n },\n \"minRank\": 5,\n \"showBookmarkedOnly\": false,\n \"hideMessaged\": false,\n \"messagedUserIds\": [],\n \"hideAppliedToJobId\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.sideshift.app/api/oauth/v1/recruit/students")
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 \"batchSize\": 21,\n \"page\": 1,\n \"lastDoc\": {\n \"lastDocId\": \"<string>\",\n \"nextTypesensePage\": 2,\n \"skipWithinPage\": 500\n },\n \"jobId\": \"<string>\",\n \"searchTerm\": \"\",\n \"filters\": {\n \"q\": \"\",\n \"creatorVerified\": false,\n \"hasTopPosts\": false,\n \"hasThreePosts\": false,\n \"hasTikTok\": false,\n \"hasInstagram\": false,\n \"usBased\": false,\n \"nonUS\": false,\n \"isVerified\": true,\n \"minTikTokPosts\": true,\n \"country\": \"<string>\",\n \"hideRepeatApplicants\": true,\n \"grades\": [],\n \"schools\": [],\n \"genders\": [],\n \"age\": {\n \"min\": 66,\n \"max\": 66\n },\n \"earningsCents\": {\n \"min\": 123,\n \"max\": 123\n },\n \"views\": {\n \"min\": 123,\n \"max\": 123\n },\n \"posts\": {\n \"min\": 123,\n \"max\": 123\n },\n \"xp\": {\n \"min\": 123,\n \"max\": 123\n },\n \"rating\": {\n \"min\": 2.5\n },\n \"reviews\": {\n \"min\": 500000\n },\n \"certificationTypes\": [],\n \"minCertifications\": 25,\n \"achievementKeys\": [],\n \"achievementMinTierByKey\": {},\n \"minUnlockedAchievements\": 100,\n \"locations\": [],\n \"niches\": [],\n \"countries\": [],\n \"trainingProgress\": {\n \"min\": 50,\n \"max\": 50\n },\n \"minRank\": 5,\n \"showBookmarkedOnly\": false,\n \"hideMessaged\": false,\n \"messagedUserIds\": [],\n \"hideAppliedToJobId\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"students": [
{
"userId": "<string>",
"name": "<string>",
"college": "<string>",
"major": "<string>",
"academicLevel": "<string>",
"hometown": "<string>",
"profileImageUrl": "<string>",
"oneLiner": "<string>",
"creatorVerified": true,
"superUser": true,
"instagram": "<string>",
"tiktok": "<string>",
"linkedin": "<string>",
"topPosts": [
"<unknown>"
],
"niches": [
"<string>"
],
"pastWork": [
"<unknown>"
],
"hasInstagram": true,
"hasTikTok": true,
"hasTopPosts": true,
"usBased": true,
"hasBeenPaid": true,
"experiences": [
"<unknown>"
],
"involvement": [
"<unknown>"
],
"lastActive": "<unknown>",
"hasThreePosts": true,
"xp": 123,
"country": "<string>",
"stripeCountry": "<string>",
"location": "<string>",
"state": "<string>",
"city": "<string>",
"region": "<string>",
"gender": "<string>",
"birthday": "<string>",
"birthdayTimestamp": 123,
"certifications": [
"<unknown>"
],
"achievementProgress": [
"<unknown>"
],
"creatorLeaderboard": "<unknown>",
"totalViews": 123,
"totalEarnings": 123,
"averageRating": 123,
"reviewCount": 123,
"graduationStatus": "<string>",
"graduationYear": 123,
"trainingProgressPercent": 123,
"trainingNodesCompleted": 123,
"activeCertificationTypes": [
"<string>"
],
"activeCertificationCount": 123,
"unlockedAchievementKeys": [
"<string>"
],
"unlockedAchievementCount": 123
}
],
"lastDoc": {
"lastDocId": "<string>",
"nextTypesensePage": 2,
"skipWithinPage": 500
},
"pagination": {
"currentPage": 123,
"pageSize": 123,
"hasMore": true,
"lastDocId": "<string>",
"totalReturned": 123,
"totalMatched": 123,
"messagedIdsCount": 123,
"exhaustedNonMessaged": true,
"scanPages": 123
},
"filters": {}
}
}{
"error": {
"code": "unauthorized",
"message": "Missing bearer access token",
"requestId": "req_..."
}
}{
"error": {
"code": "insufficient_scope",
"message": "Requires scope 'campaigns:write'",
"requestId": "req_..."
}
}{
"error": {
"code": "not_found",
"message": "Resource not found",
"requestId": "req_..."
}
}{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded",
"requestId": "req_..."
}
}Search recruit students
search recruit students. Requires the recruit:read scope.
curl --request POST \
--url https://app.sideshift.app/api/oauth/v1/recruit/students \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"batchSize": 21,
"page": 1,
"lastDoc": {
"lastDocId": "<string>",
"nextTypesensePage": 2,
"skipWithinPage": 500
},
"jobId": "<string>",
"searchTerm": "",
"filters": {
"q": "",
"creatorVerified": false,
"hasTopPosts": false,
"hasThreePosts": false,
"hasTikTok": false,
"hasInstagram": false,
"usBased": false,
"nonUS": false,
"isVerified": true,
"minTikTokPosts": true,
"country": "<string>",
"hideRepeatApplicants": true,
"grades": [],
"schools": [],
"genders": [],
"age": {
"min": 66,
"max": 66
},
"earningsCents": {
"min": 123,
"max": 123
},
"views": {
"min": 123,
"max": 123
},
"posts": {
"min": 123,
"max": 123
},
"xp": {
"min": 123,
"max": 123
},
"rating": {
"min": 2.5
},
"reviews": {
"min": 500000
},
"certificationTypes": [],
"minCertifications": 25,
"achievementKeys": [],
"achievementMinTierByKey": {},
"minUnlockedAchievements": 100,
"locations": [],
"niches": [],
"countries": [],
"trainingProgress": {
"min": 50,
"max": 50
},
"minRank": 5,
"showBookmarkedOnly": false,
"hideMessaged": false,
"messagedUserIds": [],
"hideAppliedToJobId": "<string>"
}
}
'import requests
url = "https://app.sideshift.app/api/oauth/v1/recruit/students"
payload = {
"batchSize": 21,
"page": 1,
"lastDoc": {
"lastDocId": "<string>",
"nextTypesensePage": 2,
"skipWithinPage": 500
},
"jobId": "<string>",
"searchTerm": "",
"filters": {
"q": "",
"creatorVerified": False,
"hasTopPosts": False,
"hasThreePosts": False,
"hasTikTok": False,
"hasInstagram": False,
"usBased": False,
"nonUS": False,
"isVerified": True,
"minTikTokPosts": True,
"country": "<string>",
"hideRepeatApplicants": True,
"grades": [],
"schools": [],
"genders": [],
"age": {
"min": 66,
"max": 66
},
"earningsCents": {
"min": 123,
"max": 123
},
"views": {
"min": 123,
"max": 123
},
"posts": {
"min": 123,
"max": 123
},
"xp": {
"min": 123,
"max": 123
},
"rating": { "min": 2.5 },
"reviews": { "min": 500000 },
"certificationTypes": [],
"minCertifications": 25,
"achievementKeys": [],
"achievementMinTierByKey": {},
"minUnlockedAchievements": 100,
"locations": [],
"niches": [],
"countries": [],
"trainingProgress": {
"min": 50,
"max": 50
},
"minRank": 5,
"showBookmarkedOnly": False,
"hideMessaged": False,
"messagedUserIds": [],
"hideAppliedToJobId": "<string>"
}
}
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({
batchSize: 21,
page: 1,
lastDoc: {lastDocId: '<string>', nextTypesensePage: 2, skipWithinPage: 500},
jobId: '<string>',
searchTerm: '',
filters: {
q: '',
creatorVerified: false,
hasTopPosts: false,
hasThreePosts: false,
hasTikTok: false,
hasInstagram: false,
usBased: false,
nonUS: false,
isVerified: true,
minTikTokPosts: true,
country: '<string>',
hideRepeatApplicants: true,
grades: [],
schools: [],
genders: [],
age: {min: 66, max: 66},
earningsCents: {min: 123, max: 123},
views: {min: 123, max: 123},
posts: {min: 123, max: 123},
xp: {min: 123, max: 123},
rating: {min: 2.5},
reviews: {min: 500000},
certificationTypes: [],
minCertifications: 25,
achievementKeys: [],
achievementMinTierByKey: {},
minUnlockedAchievements: 100,
locations: [],
niches: [],
countries: [],
trainingProgress: {min: 50, max: 50},
minRank: 5,
showBookmarkedOnly: false,
hideMessaged: false,
messagedUserIds: [],
hideAppliedToJobId: '<string>'
}
})
};
fetch('https://app.sideshift.app/api/oauth/v1/recruit/students', 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://app.sideshift.app/api/oauth/v1/recruit/students",
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([
'batchSize' => 21,
'page' => 1,
'lastDoc' => [
'lastDocId' => '<string>',
'nextTypesensePage' => 2,
'skipWithinPage' => 500
],
'jobId' => '<string>',
'searchTerm' => '',
'filters' => [
'q' => '',
'creatorVerified' => false,
'hasTopPosts' => false,
'hasThreePosts' => false,
'hasTikTok' => false,
'hasInstagram' => false,
'usBased' => false,
'nonUS' => false,
'isVerified' => true,
'minTikTokPosts' => true,
'country' => '<string>',
'hideRepeatApplicants' => true,
'grades' => [
],
'schools' => [
],
'genders' => [
],
'age' => [
'min' => 66,
'max' => 66
],
'earningsCents' => [
'min' => 123,
'max' => 123
],
'views' => [
'min' => 123,
'max' => 123
],
'posts' => [
'min' => 123,
'max' => 123
],
'xp' => [
'min' => 123,
'max' => 123
],
'rating' => [
'min' => 2.5
],
'reviews' => [
'min' => 500000
],
'certificationTypes' => [
],
'minCertifications' => 25,
'achievementKeys' => [
],
'achievementMinTierByKey' => [
],
'minUnlockedAchievements' => 100,
'locations' => [
],
'niches' => [
],
'countries' => [
],
'trainingProgress' => [
'min' => 50,
'max' => 50
],
'minRank' => 5,
'showBookmarkedOnly' => false,
'hideMessaged' => false,
'messagedUserIds' => [
],
'hideAppliedToJobId' => '<string>'
]
]),
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://app.sideshift.app/api/oauth/v1/recruit/students"
payload := strings.NewReader("{\n \"batchSize\": 21,\n \"page\": 1,\n \"lastDoc\": {\n \"lastDocId\": \"<string>\",\n \"nextTypesensePage\": 2,\n \"skipWithinPage\": 500\n },\n \"jobId\": \"<string>\",\n \"searchTerm\": \"\",\n \"filters\": {\n \"q\": \"\",\n \"creatorVerified\": false,\n \"hasTopPosts\": false,\n \"hasThreePosts\": false,\n \"hasTikTok\": false,\n \"hasInstagram\": false,\n \"usBased\": false,\n \"nonUS\": false,\n \"isVerified\": true,\n \"minTikTokPosts\": true,\n \"country\": \"<string>\",\n \"hideRepeatApplicants\": true,\n \"grades\": [],\n \"schools\": [],\n \"genders\": [],\n \"age\": {\n \"min\": 66,\n \"max\": 66\n },\n \"earningsCents\": {\n \"min\": 123,\n \"max\": 123\n },\n \"views\": {\n \"min\": 123,\n \"max\": 123\n },\n \"posts\": {\n \"min\": 123,\n \"max\": 123\n },\n \"xp\": {\n \"min\": 123,\n \"max\": 123\n },\n \"rating\": {\n \"min\": 2.5\n },\n \"reviews\": {\n \"min\": 500000\n },\n \"certificationTypes\": [],\n \"minCertifications\": 25,\n \"achievementKeys\": [],\n \"achievementMinTierByKey\": {},\n \"minUnlockedAchievements\": 100,\n \"locations\": [],\n \"niches\": [],\n \"countries\": [],\n \"trainingProgress\": {\n \"min\": 50,\n \"max\": 50\n },\n \"minRank\": 5,\n \"showBookmarkedOnly\": false,\n \"hideMessaged\": false,\n \"messagedUserIds\": [],\n \"hideAppliedToJobId\": \"<string>\"\n }\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://app.sideshift.app/api/oauth/v1/recruit/students")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"batchSize\": 21,\n \"page\": 1,\n \"lastDoc\": {\n \"lastDocId\": \"<string>\",\n \"nextTypesensePage\": 2,\n \"skipWithinPage\": 500\n },\n \"jobId\": \"<string>\",\n \"searchTerm\": \"\",\n \"filters\": {\n \"q\": \"\",\n \"creatorVerified\": false,\n \"hasTopPosts\": false,\n \"hasThreePosts\": false,\n \"hasTikTok\": false,\n \"hasInstagram\": false,\n \"usBased\": false,\n \"nonUS\": false,\n \"isVerified\": true,\n \"minTikTokPosts\": true,\n \"country\": \"<string>\",\n \"hideRepeatApplicants\": true,\n \"grades\": [],\n \"schools\": [],\n \"genders\": [],\n \"age\": {\n \"min\": 66,\n \"max\": 66\n },\n \"earningsCents\": {\n \"min\": 123,\n \"max\": 123\n },\n \"views\": {\n \"min\": 123,\n \"max\": 123\n },\n \"posts\": {\n \"min\": 123,\n \"max\": 123\n },\n \"xp\": {\n \"min\": 123,\n \"max\": 123\n },\n \"rating\": {\n \"min\": 2.5\n },\n \"reviews\": {\n \"min\": 500000\n },\n \"certificationTypes\": [],\n \"minCertifications\": 25,\n \"achievementKeys\": [],\n \"achievementMinTierByKey\": {},\n \"minUnlockedAchievements\": 100,\n \"locations\": [],\n \"niches\": [],\n \"countries\": [],\n \"trainingProgress\": {\n \"min\": 50,\n \"max\": 50\n },\n \"minRank\": 5,\n \"showBookmarkedOnly\": false,\n \"hideMessaged\": false,\n \"messagedUserIds\": [],\n \"hideAppliedToJobId\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.sideshift.app/api/oauth/v1/recruit/students")
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 \"batchSize\": 21,\n \"page\": 1,\n \"lastDoc\": {\n \"lastDocId\": \"<string>\",\n \"nextTypesensePage\": 2,\n \"skipWithinPage\": 500\n },\n \"jobId\": \"<string>\",\n \"searchTerm\": \"\",\n \"filters\": {\n \"q\": \"\",\n \"creatorVerified\": false,\n \"hasTopPosts\": false,\n \"hasThreePosts\": false,\n \"hasTikTok\": false,\n \"hasInstagram\": false,\n \"usBased\": false,\n \"nonUS\": false,\n \"isVerified\": true,\n \"minTikTokPosts\": true,\n \"country\": \"<string>\",\n \"hideRepeatApplicants\": true,\n \"grades\": [],\n \"schools\": [],\n \"genders\": [],\n \"age\": {\n \"min\": 66,\n \"max\": 66\n },\n \"earningsCents\": {\n \"min\": 123,\n \"max\": 123\n },\n \"views\": {\n \"min\": 123,\n \"max\": 123\n },\n \"posts\": {\n \"min\": 123,\n \"max\": 123\n },\n \"xp\": {\n \"min\": 123,\n \"max\": 123\n },\n \"rating\": {\n \"min\": 2.5\n },\n \"reviews\": {\n \"min\": 500000\n },\n \"certificationTypes\": [],\n \"minCertifications\": 25,\n \"achievementKeys\": [],\n \"achievementMinTierByKey\": {},\n \"minUnlockedAchievements\": 100,\n \"locations\": [],\n \"niches\": [],\n \"countries\": [],\n \"trainingProgress\": {\n \"min\": 50,\n \"max\": 50\n },\n \"minRank\": 5,\n \"showBookmarkedOnly\": false,\n \"hideMessaged\": false,\n \"messagedUserIds\": [],\n \"hideAppliedToJobId\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"students": [
{
"userId": "<string>",
"name": "<string>",
"college": "<string>",
"major": "<string>",
"academicLevel": "<string>",
"hometown": "<string>",
"profileImageUrl": "<string>",
"oneLiner": "<string>",
"creatorVerified": true,
"superUser": true,
"instagram": "<string>",
"tiktok": "<string>",
"linkedin": "<string>",
"topPosts": [
"<unknown>"
],
"niches": [
"<string>"
],
"pastWork": [
"<unknown>"
],
"hasInstagram": true,
"hasTikTok": true,
"hasTopPosts": true,
"usBased": true,
"hasBeenPaid": true,
"experiences": [
"<unknown>"
],
"involvement": [
"<unknown>"
],
"lastActive": "<unknown>",
"hasThreePosts": true,
"xp": 123,
"country": "<string>",
"stripeCountry": "<string>",
"location": "<string>",
"state": "<string>",
"city": "<string>",
"region": "<string>",
"gender": "<string>",
"birthday": "<string>",
"birthdayTimestamp": 123,
"certifications": [
"<unknown>"
],
"achievementProgress": [
"<unknown>"
],
"creatorLeaderboard": "<unknown>",
"totalViews": 123,
"totalEarnings": 123,
"averageRating": 123,
"reviewCount": 123,
"graduationStatus": "<string>",
"graduationYear": 123,
"trainingProgressPercent": 123,
"trainingNodesCompleted": 123,
"activeCertificationTypes": [
"<string>"
],
"activeCertificationCount": 123,
"unlockedAchievementKeys": [
"<string>"
],
"unlockedAchievementCount": 123
}
],
"lastDoc": {
"lastDocId": "<string>",
"nextTypesensePage": 2,
"skipWithinPage": 500
},
"pagination": {
"currentPage": 123,
"pageSize": 123,
"hasMore": true,
"lastDocId": "<string>",
"totalReturned": 123,
"totalMatched": 123,
"messagedIdsCount": 123,
"exhaustedNonMessaged": true,
"scanPages": 123
},
"filters": {}
}
}{
"error": {
"code": "unauthorized",
"message": "Missing bearer access token",
"requestId": "req_..."
}
}{
"error": {
"code": "insufficient_scope",
"message": "Requires scope 'campaigns:write'",
"requestId": "req_..."
}
}{
"error": {
"code": "not_found",
"message": "Resource not found",
"requestId": "req_..."
}
}{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded",
"requestId": "req_..."
}
}Authorizations
OAuth 2.1 authorization code + PKCE (S256). Tokens are tenant-bound (company_id) and scoped. Discover endpoints via /.well-known/oauth-authorization-server.
Body
Search recruit students. The companyId is injected from the OAuth grant and must not be sent by the client. OAuth anti-enumeration ceilings apply: batchSize is clamped to 25 and page (and the cursor's nextTypesensePage) may not exceed 10.
Results per batch. Schema allows up to 50, but the OAuth path clamps any value above 25 down to 25.
1 <= x <= 25Page number. Over OAuth, values above 10 are rejected with 400.
1 <= x <= 10Pagination cursor echoed from a previous response. Over OAuth, nextTypesensePage is capped at 10.
Show child attributes
Show child attributes
Filter by job id.
Search term for candidate names/profiles.
120Advanced candidate-search filters. All fields optional; mirrors the platform recruit search filter set.
Show child attributes
Show child attributes
Response
Paginated recruit-candidate search results.
Show child attributes
Show child attributes