Remove contact list members in bulk
curl --request POST \
--url https://api.superx.so/v1/contact-lists/{id}/members/bulk-delete \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"member_ids": [
"m1a2b3c4d5e6f7g8h9i0j",
"m2b3c4d5e6f7g8h9i0j1k"
]
}
'import requests
url = "https://api.superx.so/v1/contact-lists/{id}/members/bulk-delete"
payload = { "member_ids": ["m1a2b3c4d5e6f7g8h9i0j", "m2b3c4d5e6f7g8h9i0j1k"] }
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({member_ids: ['m1a2b3c4d5e6f7g8h9i0j', 'm2b3c4d5e6f7g8h9i0j1k']})
};
fetch('https://api.superx.so/v1/contact-lists/{id}/members/bulk-delete', 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.superx.so/v1/contact-lists/{id}/members/bulk-delete",
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([
'member_ids' => [
'm1a2b3c4d5e6f7g8h9i0j',
'm2b3c4d5e6f7g8h9i0j1k'
]
]),
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.superx.so/v1/contact-lists/{id}/members/bulk-delete"
payload := strings.NewReader("{\n \"member_ids\": [\n \"m1a2b3c4d5e6f7g8h9i0j\",\n \"m2b3c4d5e6f7g8h9i0j1k\"\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://api.superx.so/v1/contact-lists/{id}/members/bulk-delete")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"member_ids\": [\n \"m1a2b3c4d5e6f7g8h9i0j\",\n \"m2b3c4d5e6f7g8h9i0j1k\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.superx.so/v1/contact-lists/{id}/members/bulk-delete")
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 \"member_ids\": [\n \"m1a2b3c4d5e6f7g8h9i0j\",\n \"m2b3c4d5e6f7g8h9i0j1k\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"deleted": 2,
"total_in_list_after": 42
}
}{
"error": {
"code": "system_list_read_only",
"message": "System lists are managed automatically and can't be edited."
}
}{
"error": {
"code": "invalid_api_key",
"message": "Unknown or revoked API key"
}
}{
"error": {
"code": "insufficient_scope",
"message": "This API key is read-only. Create a key with the write scope to use this endpoint."
}
}{
"error": {
"code": "list_not_found",
"message": "No contact list with that id belongs to this account."
}
}{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded for the Pro plan (30 requests/min). Upgrade for higher limits.",
"retry_after": 42
}
}{
"error": {
"code": "upstream_error",
"message": "Failed to fetch scheduled posts. Try again shortly."
}
}{
"error": {
"code": "upstream_unavailable",
"message": "The scheduling service is temporarily unavailable. Retry with the same Idempotency-Key."
}
}Contact Lists
Remove contact list members in bulk
Remove up to 500 members from a list you created, by member id (the
id from GET /v1/contact-lists/{id}/members).
POST rather than DELETE because the ids travel in a body. The delete is
scoped to this list, so ids that are not in it are skipped and
deleted can be lower than the number you sent. There is deliberately
no “delete everything matching a filter” mode. System lists return 400
system_list_read_only.
Works for your main account or any account linked to it (account_id);
accounts shared with you are read-only. Needs the write scope.
POST
/
v1
/
contact-lists
/
{id}
/
members
/
bulk-delete
Remove contact list members in bulk
curl --request POST \
--url https://api.superx.so/v1/contact-lists/{id}/members/bulk-delete \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"member_ids": [
"m1a2b3c4d5e6f7g8h9i0j",
"m2b3c4d5e6f7g8h9i0j1k"
]
}
'import requests
url = "https://api.superx.so/v1/contact-lists/{id}/members/bulk-delete"
payload = { "member_ids": ["m1a2b3c4d5e6f7g8h9i0j", "m2b3c4d5e6f7g8h9i0j1k"] }
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({member_ids: ['m1a2b3c4d5e6f7g8h9i0j', 'm2b3c4d5e6f7g8h9i0j1k']})
};
fetch('https://api.superx.so/v1/contact-lists/{id}/members/bulk-delete', 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.superx.so/v1/contact-lists/{id}/members/bulk-delete",
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([
'member_ids' => [
'm1a2b3c4d5e6f7g8h9i0j',
'm2b3c4d5e6f7g8h9i0j1k'
]
]),
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.superx.so/v1/contact-lists/{id}/members/bulk-delete"
payload := strings.NewReader("{\n \"member_ids\": [\n \"m1a2b3c4d5e6f7g8h9i0j\",\n \"m2b3c4d5e6f7g8h9i0j1k\"\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://api.superx.so/v1/contact-lists/{id}/members/bulk-delete")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"member_ids\": [\n \"m1a2b3c4d5e6f7g8h9i0j\",\n \"m2b3c4d5e6f7g8h9i0j1k\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.superx.so/v1/contact-lists/{id}/members/bulk-delete")
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 \"member_ids\": [\n \"m1a2b3c4d5e6f7g8h9i0j\",\n \"m2b3c4d5e6f7g8h9i0j1k\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"deleted": 2,
"total_in_list_after": 42
}
}{
"error": {
"code": "system_list_read_only",
"message": "System lists are managed automatically and can't be edited."
}
}{
"error": {
"code": "invalid_api_key",
"message": "Unknown or revoked API key"
}
}{
"error": {
"code": "insufficient_scope",
"message": "This API key is read-only. Create a key with the write scope to use this endpoint."
}
}{
"error": {
"code": "list_not_found",
"message": "No contact list with that id belongs to this account."
}
}{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded for the Pro plan (30 requests/min). Upgrade for higher limits.",
"retry_after": 42
}
}{
"error": {
"code": "upstream_error",
"message": "Failed to fetch scheduled posts. Try again shortly."
}
}{
"error": {
"code": "upstream_unavailable",
"message": "The scheduling service is temporarily unavailable. Retry with the same Idempotency-Key."
}
}Authorizations
A SuperX API key ("sxk_..."), created in the SuperX app under Account > API / MCP / CLI. Keys are server-side secrets.
Path Parameters
The list id from GET /v1/contact-lists.
Body
application/json
Response
The bulk removal finished.
Show child attributes
Show child attributes