curl --request POST \
--url https://api.goextrovert.com/client/v2/prospects/move \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"prospectsIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"areAllSelected": true,
"newListId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"campaignId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"oldListId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"newListName": "<string>"
}
'import requests
url = "https://api.goextrovert.com/client/v2/prospects/move"
payload = {
"prospectsIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"areAllSelected": True,
"newListId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"campaignId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"oldListId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"newListName": "<string>"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
prospectsIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
areAllSelected: true,
newListId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
campaignId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
oldListId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
newListName: '<string>'
})
};
fetch('https://api.goextrovert.com/client/v2/prospects/move', 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.goextrovert.com/client/v2/prospects/move",
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([
'prospectsIds' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'areAllSelected' => true,
'newListId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'campaignId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'oldListId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'newListName' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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.goextrovert.com/client/v2/prospects/move"
payload := strings.NewReader("{\n \"prospectsIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"areAllSelected\": true,\n \"newListId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"campaignId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"oldListId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"newListName\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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.goextrovert.com/client/v2/prospects/move")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"prospectsIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"areAllSelected\": true,\n \"newListId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"campaignId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"oldListId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"newListName\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.goextrovert.com/client/v2/prospects/move")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"prospectsIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"areAllSelected\": true,\n \"newListId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"campaignId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"oldListId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"newListName\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"existedUsers": [
{
"id": "8d256aa6-9b12-49a7-93ee-bf41634b5b60",
"name": "<string>",
"description": "<string>"
}
],
"totalUsersLimit": 123,
"newListId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"message": "Operation completed successfully"
}{
"status": "error",
"data": null,
"message": "An error occurred while processing the request"
}Move Selected Prospects
Moves prospects between lists or into a new list inside the target campaign. Exactly one destination is required: pass newListId to reuse an existing list, or newListName to create a destination list. Pass one item in prospectsIds for a single-prospect case, or many items for a bulk operation. Moving a prospect that is already visible does not take a new unit of the workspace Prospect Capacity, whoever owns the destination campaign. The backend returns which prospects already existed at the destination. Requires an active plan: on an expired plan the move is rejected with 403, while clean-up stays available.
curl --request POST \
--url https://api.goextrovert.com/client/v2/prospects/move \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"prospectsIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"areAllSelected": true,
"newListId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"campaignId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"oldListId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"newListName": "<string>"
}
'import requests
url = "https://api.goextrovert.com/client/v2/prospects/move"
payload = {
"prospectsIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"areAllSelected": True,
"newListId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"campaignId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"oldListId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"newListName": "<string>"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
prospectsIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
areAllSelected: true,
newListId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
campaignId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
oldListId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
newListName: '<string>'
})
};
fetch('https://api.goextrovert.com/client/v2/prospects/move', 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.goextrovert.com/client/v2/prospects/move",
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([
'prospectsIds' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'areAllSelected' => true,
'newListId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'campaignId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'oldListId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'newListName' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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.goextrovert.com/client/v2/prospects/move"
payload := strings.NewReader("{\n \"prospectsIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"areAllSelected\": true,\n \"newListId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"campaignId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"oldListId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"newListName\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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.goextrovert.com/client/v2/prospects/move")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"prospectsIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"areAllSelected\": true,\n \"newListId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"campaignId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"oldListId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"newListName\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.goextrovert.com/client/v2/prospects/move")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"prospectsIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"areAllSelected\": true,\n \"newListId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"campaignId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"oldListId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"newListName\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"existedUsers": [
{
"id": "8d256aa6-9b12-49a7-93ee-bf41634b5b60",
"name": "<string>",
"description": "<string>"
}
],
"totalUsersLimit": 123,
"newListId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"message": "Operation completed successfully"
}{
"status": "error",
"data": null,
"message": "An error occurred while processing the request"
}Authorizations
API Key for authentication
Body
- Option 1
- Option 2
Explicit prospect record IDs, not profile IDs. Ignored when areAllSelected=true; pass [] in that mode. In explicit mode use a non-empty selection: [] moves no prospects, but newListName may still create an empty destination list before selection is resolved.
1000True selects by variant and optional oldListId and ignores prospectsIds. False selects the explicit prospect record IDs; variant is then ignored by selection but remains required and validated. In both modes oldListId, when supplied, triggers a permission check and requires every selected record to belong to that list.
Required validated selector. With areAllSelected=true: list requires oldListId; all selects the accessible bulk scope and is still narrowed if oldListId is supplied; campaign is unsupported and returns BadRequest. With areAllSelected=false, selection ignores variant, but a valid enum value is still required.
all, list, campaign Existing destination list ID; it must belong to campaignId. Supply exactly one of newListId and newListName; omit newListName, do not pass null or an empty string.
Destination campaign ID, not the source-selection scope. If newListId is used, that list must belong to this campaign. The destination must be a usable Prospects campaign in the same team and the plan must be active; moving already-visible prospects does not require free Prospect Capacity.
Optional source-list constraint. Required for bulk variant=list; when supplied with explicit IDs or bulk variant=all, every selected record must belong to this list. It also causes a read/permission check; omit it when no source-list guard is intended.
Non-empty destination list name to create in campaignId; this creates a new list, not a rename. Supply exactly one of newListId and newListName; omit newListId, do not pass null or an empty string.
1