curl --request POST \
--url https://api.goextrovert.com/client/v2/dm-replies/{dmId}/send \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"dmId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"mode": "queued"
}
'import requests
url = "https://api.goextrovert.com/client/v2/dm-replies/{dmId}/send"
payload = {
"dmId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"mode": "queued"
}
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({dmId: '3c90c3cc-0d44-4b50-8888-8dd25736052a', mode: 'queued'})
};
fetch('https://api.goextrovert.com/client/v2/dm-replies/{dmId}/send', 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/dm-replies/{dmId}/send",
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([
'dmId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'mode' => 'queued'
]),
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/dm-replies/{dmId}/send"
payload := strings.NewReader("{\n \"dmId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"mode\": \"queued\"\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/dm-replies/{dmId}/send")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"dmId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"mode\": \"queued\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.goextrovert.com/client/v2/dm-replies/{dmId}/send")
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 \"dmId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"mode\": \"queued\"\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"status": "queued",
"processId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"message": "Operation completed successfully"
}{
"status": "error",
"data": null,
"message": "An error occurred while processing the request"
}Send reply
Sends the exact prepared dmId to the LinkedIn prospect. Queued (the default) accepts the reply into the owner’s send queue and returns its process ID, not provider confirmation; Extrovert then sends it spaced by the owner’s send interval and only inside the owner’s Working Hours, with no daily limit. Immediate sends now, outside that spacing and Working Hours, and waits for explicit provider acceptance, not a read receipt. An uncertain immediate outcome may already have sent the reply. History changed leaves the stale reply unsent and refreshes the conversation. A reply whose text repeats a message the owner sent in this conversation in the last 24 hours (ignoring extra whitespace) is never sent: the call fails with a conflict whose message starts with “Duplicate reply:”, or a queued send ends as History changed with error code duplicate-reply.
curl --request POST \
--url https://api.goextrovert.com/client/v2/dm-replies/{dmId}/send \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"dmId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"mode": "queued"
}
'import requests
url = "https://api.goextrovert.com/client/v2/dm-replies/{dmId}/send"
payload = {
"dmId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"mode": "queued"
}
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({dmId: '3c90c3cc-0d44-4b50-8888-8dd25736052a', mode: 'queued'})
};
fetch('https://api.goextrovert.com/client/v2/dm-replies/{dmId}/send', 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/dm-replies/{dmId}/send",
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([
'dmId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'mode' => 'queued'
]),
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/dm-replies/{dmId}/send"
payload := strings.NewReader("{\n \"dmId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"mode\": \"queued\"\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/dm-replies/{dmId}/send")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"dmId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"mode\": \"queued\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.goextrovert.com/client/v2/dm-replies/{dmId}/send")
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 \"dmId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"mode\": \"queued\"\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"status": "queued",
"processId": "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
Path Parameters
Body
Exact reply ID obtained from Prepare reply or Get conversation.
Queued (default): Extrovert sends it spaced by the owner's send interval and only inside the owner's Working Hours; no daily limit applies. Immediate: sends now, ignoring spacing and Working Hours, and waits for LinkedIn to accept it.
queued, immediate