curl --request POST \
--url https://api.goextrovert.com/client/v2/comments/bulk-approve \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"ownerId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"count": 10,
"campaignId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'import requests
url = "https://api.goextrovert.com/client/v2/comments/bulk-approve"
payload = {
"ownerId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"count": 10,
"campaignId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
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({
ownerId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
count: 10,
campaignId: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://api.goextrovert.com/client/v2/comments/bulk-approve', 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/comments/bulk-approve",
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([
'ownerId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'count' => 10,
'campaignId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]),
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/comments/bulk-approve"
payload := strings.NewReader("{\n \"ownerId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"count\": 10,\n \"campaignId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\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/comments/bulk-approve")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"ownerId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"count\": 10,\n \"campaignId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.goextrovert.com/client/v2/comments/bulk-approve")
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 \"ownerId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"count\": 10,\n \"campaignId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"accepted": 4503599627370495,
"skippedStale": 4503599627370495,
"failedToAccept": 4503599627370495
},
"message": "Operation completed successfully"
}{
"status": "error",
"data": null,
"message": "An error occurred while processing the request"
}Bulk approve comments
Approves the most relevant Need approval comments of one scope in a single request. The cards are selected live at request time: the request names a scope and how many comments to attempt, never card identities, so the result is not bound to any page a client is currently showing and may include comments it has never listed. Every card is claimed on its own — an accepted card enters the ordinary Pending/publication lifecycle and adds 1 to today’s Comment Today progress, a card that is no longer approvable is skipped without side effects, and a failing card never rolls back the cards already accepted. The three counters always sum to the number of cards attempted, which is lower than the requested count when the scope holds fewer approvable comments.
curl --request POST \
--url https://api.goextrovert.com/client/v2/comments/bulk-approve \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"ownerId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"count": 10,
"campaignId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'import requests
url = "https://api.goextrovert.com/client/v2/comments/bulk-approve"
payload = {
"ownerId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"count": 10,
"campaignId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
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({
ownerId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
count: 10,
campaignId: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://api.goextrovert.com/client/v2/comments/bulk-approve', 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/comments/bulk-approve",
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([
'ownerId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'count' => 10,
'campaignId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]),
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/comments/bulk-approve"
payload := strings.NewReader("{\n \"ownerId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"count\": 10,\n \"campaignId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\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/comments/bulk-approve")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"ownerId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"count\": 10,\n \"campaignId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.goextrovert.com/client/v2/comments/bulk-approve")
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 \"ownerId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"count\": 10,\n \"campaignId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"accepted": 4503599627370495,
"skippedStale": 4503599627370495,
"failedToAccept": 4503599627370495
},
"message": "Operation completed successfully"
}{
"status": "error",
"data": null,
"message": "An error occurred while processing the request"
}Authorizations
API Key for authentication
Body
LinkedIn account owner whose comment is addressed. Often a managed account rather than the authenticated user — call user_list-shared first and pick the owner whose LinkedIn profile runs the campaign.
How many of the scope's most relevant comments to attempt, from 1 to 100. The upper bound is a per-request transport limit, not a daily or product maximum.
1 <= x <= 10010
Campaign to stay inside. Omit for the owner-wide feed — every campaign of this owner the caller may update.