WhatsApp
Move WhatsApp conversation between responders
Pass a conversation to another role (such as Meta’s AI agent), take it, or release it. Only the current owner can pass or release; only the escalation partner can take.
POST
/
orgs
/
{org_id}
/
connections
/
{connection_id}
/
whatsapp
/
phone-numbers
/
{phone_number_id}
/
thread-control
Move WhatsApp conversation between responders
curl --request POST \
--url https://api.useinvent.com/orgs/{org_id}/connections/{connection_id}/whatsapp/phone-numbers/{phone_number_id}/thread-control \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"to": "<string>",
"recipient": "<string>",
"metadata": "<string>"
}
'import requests
url = "https://api.useinvent.com/orgs/{org_id}/connections/{connection_id}/whatsapp/phone-numbers/{phone_number_id}/thread-control"
payload = {
"to": "<string>",
"recipient": "<string>",
"metadata": "<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({to: '<string>', recipient: '<string>', metadata: '<string>'})
};
fetch('https://api.useinvent.com/orgs/{org_id}/connections/{connection_id}/whatsapp/phone-numbers/{phone_number_id}/thread-control', 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.useinvent.com/orgs/{org_id}/connections/{connection_id}/whatsapp/phone-numbers/{phone_number_id}/thread-control",
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([
'to' => '<string>',
'recipient' => '<string>',
'metadata' => '<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://api.useinvent.com/orgs/{org_id}/connections/{connection_id}/whatsapp/phone-numbers/{phone_number_id}/thread-control"
payload := strings.NewReader("{\n \"to\": \"<string>\",\n \"recipient\": \"<string>\",\n \"metadata\": \"<string>\"\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.useinvent.com/orgs/{org_id}/connections/{connection_id}/whatsapp/phone-numbers/{phone_number_id}/thread-control")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"to\": \"<string>\",\n \"recipient\": \"<string>\",\n \"metadata\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.useinvent.com/orgs/{org_id}/connections/{connection_id}/whatsapp/phone-numbers/{phone_number_id}/thread-control")
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 \"to\": \"<string>\",\n \"recipient\": \"<string>\",\n \"metadata\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"messaging_product": "<string>",
"request_id": "<string>"
}Authorizations
Bearer token authentication using your API key
Path Parameters
The ID of the org
The ID of the connection
The ID of the WhatsApp phone number
Body
application/jsonmultipart/form-data
pass hands the conversation to another role, take claims it (escalation partner only), release hands it back to the entry point owner.
Available options:
pass, take, release The customer phone number or WhatsApp ID.
Maximum string length:
32The customer business-scoped user ID, instead of to.
Maximum string length:
128Where a pass goes. Without it the conversation goes to the escalation partner.
Show child attributes
Show child attributes
Free text Meta forwards to the new owner in the handover.
Maximum string length:
2000Was this page helpful?
⌘I
Move WhatsApp conversation between responders
curl --request POST \
--url https://api.useinvent.com/orgs/{org_id}/connections/{connection_id}/whatsapp/phone-numbers/{phone_number_id}/thread-control \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"to": "<string>",
"recipient": "<string>",
"metadata": "<string>"
}
'import requests
url = "https://api.useinvent.com/orgs/{org_id}/connections/{connection_id}/whatsapp/phone-numbers/{phone_number_id}/thread-control"
payload = {
"to": "<string>",
"recipient": "<string>",
"metadata": "<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({to: '<string>', recipient: '<string>', metadata: '<string>'})
};
fetch('https://api.useinvent.com/orgs/{org_id}/connections/{connection_id}/whatsapp/phone-numbers/{phone_number_id}/thread-control', 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.useinvent.com/orgs/{org_id}/connections/{connection_id}/whatsapp/phone-numbers/{phone_number_id}/thread-control",
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([
'to' => '<string>',
'recipient' => '<string>',
'metadata' => '<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://api.useinvent.com/orgs/{org_id}/connections/{connection_id}/whatsapp/phone-numbers/{phone_number_id}/thread-control"
payload := strings.NewReader("{\n \"to\": \"<string>\",\n \"recipient\": \"<string>\",\n \"metadata\": \"<string>\"\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.useinvent.com/orgs/{org_id}/connections/{connection_id}/whatsapp/phone-numbers/{phone_number_id}/thread-control")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"to\": \"<string>\",\n \"recipient\": \"<string>\",\n \"metadata\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.useinvent.com/orgs/{org_id}/connections/{connection_id}/whatsapp/phone-numbers/{phone_number_id}/thread-control")
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 \"to\": \"<string>\",\n \"recipient\": \"<string>\",\n \"metadata\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"messaging_product": "<string>",
"request_id": "<string>"
}