WhatsApp API
Gerencie conexões WhatsApp e envie mensagens programaticamente através da API Atys.
Baixe nossa coleção completa do Postman com todos os endpoints pré-configurados.
access_token válido para usar estes endpoints.
Consulte a documentação de autenticação para obter seu token.
Como Funciona
A API WhatsApp da Atys permite que você gerencie conexões WhatsApp Web e envie mensagens através de canais conectados. Com esta API você pode:
Conectar WhatsApp
Gere QR codes para conectar números WhatsApp
Gerenciar Conexões
Crie, atualize e delete conexões WhatsApp
Enviar Mensagens
Envie mensagens de texto e arquivos via WhatsApp
Listas e Validações
Obtenha listas de contatos/grupos e valide números em massa
1) Listar WhatsApps
Lista todas as conexões WhatsApp da sua conta com filtros opcionais.
https://api.atys.pro/api/whatsapps
Listar conexões WhatsApp
Headers Obrigatórios
| Header | Valor | Descrição |
|---|---|---|
Authorization |
Bearer YOUR_ACCESS_TOKEN | Token de autenticação |
Accept |
application/json | Tipo de resposta esperada |
Parâmetros de Query (opcionais)
| Parâmetro | Tipo | Descrição | Exemplo |
|---|---|---|---|
filter |
string | Busca textual no nome ou número da conexão | ?filter=suporte |
logged |
boolean | Filtrar por status de conexão (true/false) | ?logged=true |
orderBy |
string | Campo para ordenação (padrão: id) | ?orderBy=name |
orderMode |
string | Modo de ordenação: ASC ou DESC (padrão: ASC) | ?orderMode=DESC |
perPage |
integer | Items por página (padrão: 100) | ?perPage=50 |
created_at |
JSON array | Intervalo de datas de criação [inicio, fim] | ?created_at=["2025-01-01","2025-12-31"] |
updated_at |
JSON array | Intervalo de datas de atualização | ?updated_at=["2025-01-01","2025-12-31"] |
?filter=vendas&logged=true&perPage=20&orderBy=name
Exemplos de Código
const response = await fetch('https://api.atys.pro/api/whatsapps?filter=suporte&logged=true&perPage=20', {
method: 'GET',
headers: {
'Authorization': 'Bearer SEU_ACCESS_TOKEN',
'Accept': 'application/json'
}
});
const data = await response.json();
console.log(data);
import requests
response = requests.get(
'https://api.atys.pro/api/whatsapps',
headers={
'Authorization': 'Bearer SEU_ACCESS_TOKEN',
'Accept': 'application/json'
},
params={
'filter': 'suporte',
'logged': 'true',
'perPage': 20
}
)
data = response.json()
print(data)
<?php
$ch = curl_init('https://api.atys.pro/api/whatsapps?filter=suporte&logged=true&perPage=20');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer SEU_ACCESS_TOKEN',
'Accept: application/json'
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
print_r($data);
?>
<?php
// composer require guzzlehttp/guzzle
use GuzzleHttp\Client;
$client = new Client();
$response = $client->get('https://api.atys.pro/api/whatsapps', [
'headers' => [
'Authorization' => 'Bearer SEU_ACCESS_TOKEN',
'Accept' => 'application/json'
],
'query' => [
'filter' => 'suporte',
'logged' => 'true',
'perPage' => 20
]
]);
$data = json_decode($response->getBody(), true);
print_r($data);
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest(
"GET",
"https://api.atys.pro/api/whatsapps?filter=suporte&logged=true&perPage=20",
nil,
)
req.Header.Set("Authorization", "Bearer SEU_ACCESS_TOKEN")
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
curl -X GET "https://api.atys.pro/api/whatsapps?filter=suporte&logged=true&perPage=20" \ -H "Authorization: Bearer SEU_ACCESS_TOKEN" \ -H "Accept: application/json"
2) Gerar QR Code
Gera um QR code para conectar um número WhatsApp à plataforma. O QR code deve ser escaneado usando o aplicativo WhatsApp no celular.
https://api.atys.pro/api/whatsapp-qrcode
Gerar QR code para conexão WhatsApp
Headers Obrigatórios
| Header | Valor | Descrição |
|---|---|---|
Authorization |
Bearer YOUR_ACCESS_TOKEN | Token de autenticação |
Content-Type |
application/json | Tipo do conteúdo enviado |
Accept |
application/json | Tipo de resposta esperada |
Parâmetros do Body (JSON)
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id |
integer | ⚠️ Sim* | ID da conexão WhatsApp |
key |
string | ⚠️ Sim* | Número de telefone com código do país (formato: 5511999999999) |
os |
string | ✅ Sim | Sistema operacional (ex: "Linux", "Windows", "Mac OS") |
browser |
string | ✅ Sim | Navegador (ex: "Chrome", "Firefox", "Safari") |
Exemplos de Código
const response = await fetch('https://api.atys.pro/api/whatsapp-qrcode', {
method: 'POST',
headers: {
'Authorization': 'Bearer SEU_ACCESS_TOKEN',
'Content-Type': 'application/json',
'Accept': 'application/json'
},
body: JSON.stringify({
id: 123,
key: '5511999999999',
os: 'Linux',
browser: 'Chrome'
})
});
const data = await response.json();
console.log(data);
import requests
response = requests.post(
'https://api.atys.pro/api/whatsapp-qrcode',
headers={
'Authorization': 'Bearer SEU_ACCESS_TOKEN',
'Content-Type': 'application/json',
'Accept': 'application/json'
},
json={
'id': 123,
'key': '5511999999999',
'os': 'Linux',
'browser': 'Chrome'
}
)
data = response.json()
print(data)
<?php
$ch = curl_init('https://api.atys.pro/api/whatsapp-qrcode');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer SEU_ACCESS_TOKEN',
'Content-Type: application/json',
'Accept: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'id' => 123,
'key' => '5511999999999',
'os' => 'Linux',
'browser' => 'Chrome'
]));
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
print_r($data);
?>
<?php
// composer require guzzlehttp/guzzle
use GuzzleHttp\Client;
$client = new Client();
$response = $client->post('https://api.atys.pro/api/whatsapp-qrcode', [
'headers' => [
'Authorization' => 'Bearer SEU_ACCESS_TOKEN',
'Content-Type' => 'application/json',
'Accept' => 'application/json'
],
'json' => [
'id' => 123,
'key' => '5511999999999',
'os' => 'Linux',
'browser' => 'Chrome'
]
]);
$data = json_decode($response->getBody(), true);
print_r($data);
?>
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
func main() {
payload := map[string]interface{}{
"id": 123,
"key": "5511999999999",
"os": "Linux",
"browser": "Chrome",
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest(
"POST",
"https://api.atys.pro/api/whatsapp-qrcode",
bytes.NewBuffer(jsonData),
)
req.Header.Set("Authorization", "Bearer SEU_ACCESS_TOKEN")
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
curl -X POST https://api.atys.pro/api/whatsapp-qrcode \
-H "Authorization: Bearer SEU_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"id": 123,
"key": "5511999999999",
"os": "Linux",
"browser": "Chrome"
}'
3) Criar Conexão WhatsApp
Cria uma nova conexão WhatsApp na plataforma.
https://api.atys.pro/api/whatsapp-create
Criar nova conexão WhatsApp
Headers Obrigatórios
| Header | Valor | Descrição |
|---|---|---|
Authorization |
Bearer YOUR_ACCESS_TOKEN | Token de autenticação |
Content-Type |
application/json | Tipo do conteúdo enviado |
Accept |
application/json | Tipo de resposta esperada |
Parâmetros do Body (JSON)
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name |
string | ✅ Sim | Nome da conexão |
key |
string | ✅ Sim | Número de telefone com código do país (formato: 5511999999999) |
Exemplos de Código
const response = await fetch('https://api.atys.pro/api/whatsapp-create', {
method: 'POST',
headers: {
'Authorization': 'Bearer SEU_ACCESS_TOKEN',
'Content-Type': 'application/json',
'Accept': 'application/json'
},
body: JSON.stringify({
name: 'WhatsApp Suporte',
key: '5511999999999'
})
});
const data = await response.json();
console.log(data);
import requests
response = requests.post(
'https://api.atys.pro/api/whatsapp-create',
headers={
'Authorization': 'Bearer SEU_ACCESS_TOKEN',
'Content-Type': 'application/json',
'Accept': 'application/json'
},
json={
'name': 'WhatsApp Suporte',
'key': '5511999999999'
}
)
data = response.json()
print(data)
<?php
$ch = curl_init('https://api.atys.pro/api/whatsapp-create');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer SEU_ACCESS_TOKEN',
'Content-Type: application/json',
'Accept: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'name' => 'WhatsApp Suporte',
'key' => '5511999999999'
]));
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
print_r($data);
?>
<?php
// composer require guzzlehttp/guzzle
use GuzzleHttp\Client;
$client = new Client();
$response = $client->post('https://api.atys.pro/api/whatsapp-create', [
'headers' => [
'Authorization' => 'Bearer SEU_ACCESS_TOKEN',
'Content-Type' => 'application/json',
'Accept' => 'application/json'
],
'json' => [
'name' => 'WhatsApp Suporte',
'key' => '5511999999999'
]
]);
$data = json_decode($response->getBody(), true);
print_r($data);
?>
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
func main() {
payload := map[string]interface{}{
"name": "WhatsApp Suporte",
"key": "5511999999999",
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest(
"POST",
"https://api.atys.pro/api/whatsapp-create",
bytes.NewBuffer(jsonData),
)
req.Header.Set("Authorization", "Bearer SEU_ACCESS_TOKEN")
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
curl -X POST https://api.atys.pro/api/whatsapp-create \
-H "Authorization: Bearer SEU_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"name": "WhatsApp Suporte",
"key": "5511999999999"
}'
4) Atualizar Conexão WhatsApp
Atualiza os dados de uma conexão WhatsApp existente.
https://api.atys.pro/api/whatsapp-update
Atualizar conexão WhatsApp
Headers Obrigatórios
| Header | Valor | Descrição |
|---|---|---|
Authorization |
Bearer YOUR_ACCESS_TOKEN | Token de autenticação |
Content-Type |
application/json | Tipo do conteúdo enviado |
Accept |
application/json | Tipo de resposta esperada |
Parâmetros do Body (JSON)
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id |
integer | ⚠️ Sim* | ID da conexão a ser atualizada |
key |
string | ⚠️ Sim* | Número de telefone com código do país (formato: 5511999999999) |
name |
string | ❌ Não | Novo nome da conexão |
new_key |
string | ❌ Não | Novo número (formato: 5511999999999) para atualizar a conexão |
Exemplos de Código
const response = await fetch('https://api.atys.pro/api/whatsapp-update', {
method: 'POST',
headers: {
'Authorization': 'Bearer SEU_ACCESS_TOKEN',
'Content-Type': 'application/json',
'Accept': 'application/json'
},
body: JSON.stringify({
id: 123,
key: '5511999999999',
name: 'WhatsApp Vendas',
new_key: '5511888888888'
})
});
const data = await response.json();
console.log(data);
import requests
response = requests.post(
'https://api.atys.pro/api/whatsapp-update',
headers={
'Authorization': 'Bearer SEU_ACCESS_TOKEN',
'Content-Type': 'application/json',
'Accept': 'application/json'
},
json={
'id': 123,
'key': '5511999999999',
'name': 'WhatsApp Vendas',
'new_key': '5511888888888'
}
)
data = response.json()
print(data)
<?php
$ch = curl_init('https://api.atys.pro/api/whatsapp-update');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer SEU_ACCESS_TOKEN',
'Content-Type: application/json',
'Accept: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'id' => 123,
'key' => '5511999999999',
'name' => 'WhatsApp Vendas',
'new_key' => '5511888888888'
]));
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
print_r($data);
?>
<?php
// composer require guzzlehttp/guzzle
use GuzzleHttp\Client;
$client = new Client();
$response = $client->post('https://api.atys.pro/api/whatsapp-update', [
'headers' => [
'Authorization' => 'Bearer SEU_ACCESS_TOKEN',
'Content-Type' => 'application/json',
'Accept' => 'application/json'
],
'json' => [
'id' => 123,
'key' => '5511999999999',
'name' => 'WhatsApp Vendas',
'new_key' => '5511888888888'
]
]);
$data = json_decode($response->getBody(), true);
print_r($data);
?>
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
func main() {
payload := map[string]interface{}{
"id": 123,
"key": "5511999999999",
"name": "WhatsApp Vendas",
"new_key": "5511888888888",
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest(
"POST",
"https://api.atys.pro/api/whatsapp-update",
bytes.NewBuffer(jsonData),
)
req.Header.Set("Authorization", "Bearer SEU_ACCESS_TOKEN")
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
curl -X POST https://api.atys.pro/api/whatsapp-update \
-H "Authorization: Bearer SEU_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"id": 123,
"key": "5511999999999",
"name": "WhatsApp Vendas",
"new_key": "5511888888888"
}'
5) Deletar Conexão WhatsApp
Remove uma conexão WhatsApp da plataforma.
https://api.atys.pro/api/whatsapp-delete
Deletar conexão WhatsApp
Headers Obrigatórios
| Header | Valor | Descrição |
|---|---|---|
Authorization |
Bearer YOUR_ACCESS_TOKEN | Token de autenticação |
Content-Type |
application/json | Tipo do conteúdo enviado |
Accept |
application/json | Tipo de resposta esperada |
Parâmetros do Body (JSON)
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id |
integer | ⚠️ Sim* | ID da conexão a ser deletada |
key |
string | ⚠️ Sim* | Número de telefone com código do país (formato: 5511999999999) |
Exemplos de Código
const response = await fetch('https://api.atys.pro/api/whatsapp-delete', {
method: 'POST',
headers: {
'Authorization': 'Bearer SEU_ACCESS_TOKEN',
'Content-Type': 'application/json',
'Accept': 'application/json'
},
body: JSON.stringify({
id: 29,
key: '5511999999999'
})
});
const data = await response.json();
console.log(data);
import requests
response = requests.post(
'https://api.atys.pro/api/whatsapp-delete',
headers={
'Authorization': 'Bearer SEU_ACCESS_TOKEN',
'Content-Type': 'application/json',
'Accept': 'application/json'
},
json={
'id': 29,
'key': '5511999999999'
}
)
data = response.json()
print(data)
<?php
$ch = curl_init('https://api.atys.pro/api/whatsapp-delete');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer SEU_ACCESS_TOKEN',
'Content-Type: application/json',
'Accept: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'id' => 29,
'key' => '5511999999999'
]));
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
print_r($data);
?>
<?php
// composer require guzzlehttp/guzzle
use GuzzleHttp\Client;
$client = new Client();
$response = $client->post('https://api.atys.pro/api/whatsapp-delete', [
'headers' => [
'Authorization' => 'Bearer SEU_ACCESS_TOKEN',
'Content-Type' => 'application/json',
'Accept' => 'application/json'
],
'json' => [
'id' => 29,
'key' => '5511999999999'
]
]);
$data = json_decode($response->getBody(), true);
print_r($data);
?>
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
func main() {
payload := map[string]interface{}{
"id": 29,
"key": "5511999999999",
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest(
"POST",
"https://api.atys.pro/api/whatsapp-delete",
bytes.NewBuffer(jsonData),
)
req.Header.Set("Authorization", "Bearer SEU_ACCESS_TOKEN")
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
curl -X POST https://api.atys.pro/api/whatsapp-delete \
-H "Authorization: Bearer SEU_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"id": 29,
"key": "5511999999999"
}'
6) Logout do WhatsApp
Desconecta uma sessão WhatsApp ativa, fechando a conexão com o WhatsApp Web.
https://api.atys.pro/api/whatsapp-logout
Fazer logout de uma conexão WhatsApp
Headers Obrigatórios
| Header | Valor | Descrição |
|---|---|---|
Authorization |
Bearer YOUR_ACCESS_TOKEN | Token de autenticação |
Content-Type |
application/json | Tipo do conteúdo enviado |
Accept |
application/json | Tipo de resposta esperada |
Parâmetros do Body (JSON)
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id |
integer | ⚠️ Sim* | ID da conexão WhatsApp |
key |
string | ⚠️ Sim* | Número de telefone com código do país (formato: 5511999999999) |
Exemplos de Código
const response = await fetch('https://api.atys.pro/api/whatsapp-logout', {
method: 'POST',
headers: {
'Authorization': 'Bearer SEU_ACCESS_TOKEN',
'Content-Type': 'application/json',
'Accept': 'application/json'
},
body: JSON.stringify({
id: 29,
key: '5511999999999'
})
});
const data = await response.json();
console.log(data);
import requests
response = requests.post(
'https://api.atys.pro/api/whatsapp-logout',
headers={
'Authorization': 'Bearer SEU_ACCESS_TOKEN',
'Content-Type': 'application/json',
'Accept': 'application/json'
},
json={
'id': 29,
'key': '5511999999999'
}
)
data = response.json()
print(data)
<?php
$ch = curl_init('https://api.atys.pro/api/whatsapp-logout');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer SEU_ACCESS_TOKEN',
'Content-Type: application/json',
'Accept: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'id' => 29,
'key' => '5511999999999'
]));
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
print_r($data);
?>
<?php
// composer require guzzlehttp/guzzle
use GuzzleHttp\Client;
$client = new Client();
$response = $client->post('https://api.atys.pro/api/whatsapp-logout', [
'headers' => [
'Authorization' => 'Bearer SEU_ACCESS_TOKEN',
'Content-Type' => 'application/json',
'Accept' => 'application/json'
],
'json' => [
'id' => 29,
'key' => '5511999999999'
]
]);
$data = json_decode($response->getBody(), true);
print_r($data);
?>
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
func main() {
payload := map[string]interface{}{
"id": 29,
"key": "5511999999999",
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest(
"POST",
"https://api.atys.pro/api/whatsapp-logout",
bytes.NewBuffer(jsonData),
)
req.Header.Set("Authorization", "Bearer SEU_ACCESS_TOKEN")
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
curl -X POST https://api.atys.pro/api/whatsapp-logout \
-H "Authorization: Bearer SEU_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"id": 29,
"key": "5511999999999"
}'
7) Obter Lista de Contatos
Recupera a lista de contatos de uma conexão WhatsApp específica.
https://api.atys.pro/api/whatsapp-contact-list
Obter lista de contatos do WhatsApp
Headers Obrigatórios
| Header | Valor | Descrição |
|---|---|---|
Authorization |
Bearer YOUR_ACCESS_TOKEN | Token de autenticação |
Content-Type |
application/json | Tipo do conteúdo enviado |
Accept |
application/json | Tipo de resposta esperada |
Parâmetros do Body (JSON)
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id |
integer | ⚠️ Sim* | ID da conexão WhatsApp |
key |
string | ⚠️ Sim* | Número de telefone com código do país (formato: 5511999999999) |
Exemplos de Código
const response = await fetch('https://api.atys.pro/api/whatsapp-contact-list', {
method: 'POST',
headers: {
'Authorization': 'Bearer SEU_ACCESS_TOKEN',
'Content-Type': 'application/json',
'Accept': 'application/json'
},
body: JSON.stringify({
id: 123,
key: '5511999999999'
})
});
const data = await response.json();
console.log(data);
import requests
response = requests.post(
'https://api.atys.pro/api/whatsapp-contact-list',
headers={
'Authorization': 'Bearer SEU_ACCESS_TOKEN',
'Content-Type': 'application/json',
'Accept': 'application/json'
},
json={
'id': 123,
'key': '5511999999999',
}
)
data = response.json()
print(data)
<?php
$ch = curl_init('https://api.atys.pro/api/whatsapp-contact-list');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer SEU_ACCESS_TOKEN',
'Content-Type: application/json',
'Accept: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'id' => 123,
'key' => '5511999999999',
]));
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
print_r($data);
?>
<?php
// composer require guzzlehttp/guzzle
use GuzzleHttp\Client;
$client = new Client();
$response = $client->post('https://api.atys.pro/api/whatsapp-contact-list', [
'headers' => [
'Authorization' => 'Bearer SEU_ACCESS_TOKEN',
'Content-Type' => 'application/json',
'Accept' => 'application/json'
],
'json' => [
'id' => 123,
'key' => '5511999999999',
]
]);
$data = json_decode($response->getBody(), true);
print_r($data);
?>
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
func main() {
payload := map[string]interface{}{
"id": 123,
"key": "5511999999999",
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest(
"POST",
"https://api.atys.pro/api/whatsapp-contact-list",
bytes.NewBuffer(jsonData),
)
req.Header.Set("Authorization", "Bearer SEU_ACCESS_TOKEN")
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
curl -X POST https://api.atys.pro/api/whatsapp-contact-list \
-H "Authorization: Bearer SEU_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"id": 123,
"key": "5511999999999"
}'
8) Obter Lista de Grupos
Recupera a lista de grupos de uma conexão WhatsApp específica.
https://api.atys.pro/api/whatsapp-group-list
Obter lista de grupos do WhatsApp
Headers Obrigatórios
| Header | Valor | Descrição |
|---|---|---|
Authorization |
Bearer YOUR_ACCESS_TOKEN | Token de autenticação |
Content-Type |
application/json | Tipo do conteúdo enviado |
Accept |
application/json | Tipo de resposta esperada |
Parâmetros do Body (JSON)
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id |
integer | ⚠️ Sim* | ID da conexão WhatsApp |
key |
string | ⚠️ Sim* | Número de telefone com código do país (formato: 5511999999999) |
Exemplos de Código
const response = await fetch('https://api.atys.pro/api/whatsapp-group-list', {
method: 'POST',
headers: {
'Authorization': 'Bearer SEU_ACCESS_TOKEN',
'Content-Type': 'application/json',
'Accept': 'application/json'
},
body: JSON.stringify({
id: 123,
key: '5511999999999'
})
});
const data = await response.json();
console.log(data);
import requests
response = requests.post(
'https://api.atys.pro/api/whatsapp-group-list',
headers={
'Authorization': 'Bearer SEU_ACCESS_TOKEN',
'Content-Type': 'application/json',
'Accept': 'application/json'
},
json={
'id': 123,
'key': '5511999999999'
}
)
data = response.json()
print(data)
<?php
$ch = curl_init('https://api.atys.pro/api/whatsapp-group-list');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer SEU_ACCESS_TOKEN',
'Content-Type: application/json',
'Accept: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'id' => 123,
'key' => '5511999999999'
]));
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
print_r($data);
?>
<?php
// composer require guzzlehttp/guzzle
use GuzzleHttp\Client;
$client = new Client();
$response = $client->post('https://api.atys.pro/api/whatsapp-group-list', [
'headers' => [
'Authorization' => 'Bearer SEU_ACCESS_TOKEN',
'Content-Type' => 'application/json',
'Accept' => 'application/json'
],
'json' => [
'id' => 123,
'key' => '5511999999999'
]
]);
$data = json_decode($response->getBody(), true);
print_r($data);
?>
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
func main() {
payload := map[string]interface{}{
"id": 123,
"key": "5511999999999",
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest(
"POST",
"https://api.atys.pro/api/whatsapp-group-list",
bytes.NewBuffer(jsonData),
)
req.Header.Set("Authorization", "Bearer SEU_ACCESS_TOKEN")
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
curl -X POST https://api.atys.pro/api/whatsapp-group-list \
-H "Authorization: Bearer SEU_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"id": 123,
"key": "5511999999999"
}'
9) Verificar Números no WhatsApp
Verifica se uma lista de números possui WhatsApp ativo. Útil para validação em massa de números.
https://api.atys.pro/api/whatsapp-check-on-whatsapp
Verificar múltiplos números no WhatsApp
Headers Obrigatórios
| Header | Valor | Descrição |
|---|---|---|
Authorization |
Bearer YOUR_ACCESS_TOKEN | Token de autenticação |
Content-Type |
application/json | Tipo do conteúdo enviado |
Accept |
application/json | Tipo de resposta esperada |
Parâmetros do Body (JSON)
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id |
integer | ⚠️ Sim* | ID da conexão WhatsApp que fará a verificação |
key |
string | ⚠️ Sim* | Número de telefone com código do país (formato: 5511999999999) |
numbers |
array | ✅ Sim | Array de números a verificar (formato: ["5511999999999", "5511888888888"]) |
are_groups |
boolean | ❌ Não | Se os números são de grupos (padrão: false) |
Exemplos de Código
const response = await fetch('https://api.atys.pro/api/whatsapp-check-on-whatsapp', {
method: 'POST',
headers: {
'Authorization': 'Bearer SEU_ACCESS_TOKEN',
'Content-Type': 'application/json',
'Accept': 'application/json'
},
body: JSON.stringify({
id: 123,
key: '5511999999999',
numbers: ['5511999999999', '5511988888888']
})
});
const data = await response.json();
console.log(data);
import requests
response = requests.post(
'https://api.atys.pro/api/whatsapp-check-on-whatsapp',
headers={
'Authorization': 'Bearer SEU_ACCESS_TOKEN',
'Content-Type': 'application/json',
'Accept': 'application/json'
},
json={
'id': 123,
'key': '5511999999999',
'numbers': ['5511999999999', '5511988888888']
}
)
data = response.json()
print(data)
<?php
$ch = curl_init('https://api.atys.pro/api/whatsapp-check-on-whatsapp');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer SEU_ACCESS_TOKEN',
'Content-Type: application/json',
'Accept: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'id' => 123,
'key' => '5511999999999',
'numbers' => ['5511999999999', '5511988888888']
]));
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
print_r($data);
?>
<?php
// composer require guzzlehttp/guzzle
use GuzzleHttp\Client;
$client = new Client();
$response = $client->post('https://api.atys.pro/api/whatsapp-check-on-whatsapp', [
'headers' => [
'Authorization' => 'Bearer SEU_ACCESS_TOKEN',
'Content-Type' => 'application/json',
'Accept' => 'application/json'
],
'json' => [
'id' => 123,
'key' => '5511999999999',
'numbers' => ['5511999999999', '5511988888888']
]
]);
$data = json_decode($response->getBody(), true);
print_r($data);
?>
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
func main() {
payload := map[string]interface{}{
"id": 123,
"key": "5511999999999",
"numbers": []string{"5511999999999", "5511988888888"},
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest(
"POST",
"https://api.atys.pro/api/whatsapp-check-on-whatsapp",
bytes.NewBuffer(jsonData),
)
req.Header.Set("Authorization", "Bearer SEU_ACCESS_TOKEN")
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
curl -X POST https://api.atys.pro/api/whatsapp-check-on-whatsapp \
-H "Authorization: Bearer SEU_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"id": 123,
"key": "5511999999999",
"numbers": ["5511999999999", "5511988888888"]
}'
10) Enviar Mensagem via WhatsApp
Para enviar mensagens via WhatsApp, utilize o endpoint de envio de mensagens. Este endpoint permite enviar mensagens de texto e arquivos.
Headers Obrigatórios
| Header | Valor | Descrição |
|---|---|---|
Authorization |
Bearer YOUR_ACCESS_TOKEN | Token de autenticação |
Content-Type |
application/json | Tipo do conteúdo enviado |
Accept |
application/json | Tipo de resposta esperada |
Parâmetros Principais
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
platform |
string | ✅ Sim | Deve ser "whatsapp" |
sender_key |
string | ✅ Sim | Número do remetente (canal WhatsApp conectado) |
contact_key |
string | ✅ Sim | Número do destinatário. Exemplo: para contato individual "5511999999999" e para grupo "5511999999999-1672123456" ou "5511999999999". Não é necessário @c.us, @g.us ou @s.whatsapp.net. |
contact_is_group |
boolean | ✅ Sim | Se o destinatário é um grupo (true) ou contato individual (false) Nota: Para grupos, o sender_key deve ser
membro do grupo e ter permissão para enviar mensagens (não estar restrito por modo anúncio)
|
enqueue |
boolean | ❌ Não | Se true, enfileira a mensagem. Se false, envia imediatamente: você cuida do envio. (Padrão: true) |
text |
string | ⚠️ Sim* | Texto da mensagem |
file |
file | ⚠️ Sim* | Arquivo a ser enviado (imagem, PDF, vídeo, etc) |
contact_is_group: true), é obrigatório que o número do WhatsApp remetente
(sender_key) seja membro do grupo de destino.
Validação automática: O sistema verifica automaticamente se o remetente é membro do grupo antes de tentar enviar a mensagem. Se não for membro, a requisição retornará erro
400 Bad Request e a mensagem será marcada como falha por falta de autorização.
400 Bad Request e
a mensagem será marcada como falha por falta de autorização.
Content-Type: multipart/form-data e envie o campo file. Não defina o header
Content-Type manualmente quando usar FormData; o navegador/cliente cuidará disso.
Exemplos de Código
const response = await fetch('https://api.atys.pro/api/api-send-message', {
method: 'POST',
headers: {
'Authorization': 'Bearer SEU_ACCESS_TOKEN',
'Content-Type': 'application/json',
'Accept': 'application/json'
},
body: JSON.stringify({
platform: 'whatsapp',
sender_key: '5511999999999',
contact_key: '5511988888888',
contact_is_group: false,
enqueue: true,
text: 'Olá! Como posso ajudar?'
})
});
const data = await response.json();
console.log(data);
import requests
response = requests.post(
'https://api.atys.pro/api/api-send-message',
headers={
'Authorization': 'Bearer SEU_ACCESS_TOKEN',
'Content-Type': 'application/json',
'Accept': 'application/json'
},
json={
'platform': 'whatsapp',
'sender_key': '5511999999999',
'contact_key': '5511988888888',
'contact_is_group': False,
'enqueue': True,
'text': 'Olá! Como posso ajudar?'
}
)
data = response.json()
print(data)
<?php
$ch = curl_init('https://api.atys.pro/api/api-send-message');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer SEU_ACCESS_TOKEN',
'Content-Type: application/json',
'Accept: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'platform' => 'whatsapp',
'sender_key' => '5511999999999',
'contact_key' => '5511988888888',
'contact_is_group' => false,
'enqueue' => true,
'text' => 'Olá! Como posso ajudar?'
]));
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
print_r($data);
?>
<?php
// composer require guzzlehttp/guzzle
use GuzzleHttp\Client;
$client = new Client();
$response = $client->post('https://api.atys.pro/api/api-send-message', [
'headers' => [
'Authorization' => 'Bearer SEU_ACCESS_TOKEN',
'Content-Type' => 'application/json',
'Accept' => 'application/json'
],
'json' => [
'platform' => 'whatsapp',
'sender_key' => '5511999999999',
'contact_key' => '5511988888888',
'contact_is_group' => false,
'enqueue' => true,
'text' => 'Olá! Como posso ajudar?'
]
]);
$data = json_decode($response->getBody(), true);
print_r($data);
?>
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
func main() {
payload := map[string]interface{}{
"platform": "whatsapp",
"sender_key": "5511999999999",
"contact_key": "5511988888888",
"contact_is_group": false,
"enqueue": true,
"text": "Olá! Como posso ajudar?",
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest(
"POST",
"https://api.atys.pro/api/api-send-message",
bytes.NewBuffer(jsonData),
)
req.Header.Set("Authorization", "Bearer SEU_ACCESS_TOKEN")
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
curl -X POST https://api.atys.pro/api/api-send-message \
-H "Authorization: Bearer SEU_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"platform": "whatsapp",
"sender_key": "5511999999999",
"contact_key": "5511988888888",
"contact_is_group": false,
"enqueue": true,
"text": "Olá! Como posso ajudar?"
}'
Exemplos de Código - Mensagem com Arquivo
Use multipart/form-data e envie file junto com os demais campos. Pelo menos
text ou file deve ser enviado.
// Enviar arquivo com FormData
const formData = new FormData();
formData.append('platform', 'whatsapp');
formData.append('sender_key', '5511999999999');
formData.append('contact_key', '5511988888888');
formData.append('contact_is_group', 'false');
formData.append('text', 'Segue o documento solicitado');
formData.append('file', fileInput.files[0]); // arquivo do input type="file"
const response = await fetch('https://api.atys.pro/api/api-send-message', {
method: 'POST',
headers: {
'Authorization': 'Bearer SEU_ACCESS_TOKEN',
'Accept': 'application/json'
// Não defina Content-Type aqui; o navegador define automaticamente
},
body: formData
});
const data = await response.json();
console.log(data);
import requests
files = {'file': open('caminho/para/arquivo.pdf', 'rb')}
data = {
'platform': 'whatsapp',
'sender_key': '5511999999999',
'contact_key': '5511988888888',
'contact_is_group': 'false',
'text': 'Segue o documento solicitado'
}
response = requests.post(
'https://api.atys.pro/api/api-send-message',
headers={
'Authorization': 'Bearer SEU_ACCESS_TOKEN',
'Accept': 'application/json'
},
data=data,
files=files
)
print(response.json())
<?php
$ch = curl_init('https://api.atys.pro/api/api-send-message');
$payload = [
'platform' => 'whatsapp',
'sender_key' => '5511999999999',
'contact_key' => '5511988888888',
'contact_is_group' => 'false',
'text' => 'Segue o documento solicitado',
'file' => new CURLFile('/caminho/para/arquivo.pdf')
];
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer SEU_ACCESS_TOKEN',
'Accept: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
print_r($data);
?>
<?php
// composer require guzzlehttp/guzzle
use GuzzleHttp\Client;
$client = new Client();
$response = $client->post('https://api.atys.pro/api/api-send-message', [
'headers' => [
'Authorization' => 'Bearer SEU_ACCESS_TOKEN',
'Accept' => 'application/json',
],
'multipart' => [
['name' => 'platform', 'contents' => 'whatsapp'],
['name' => 'sender_key', 'contents' => '5511999999999'],
['name' => 'contact_key', 'contents' => '5511988888888'],
['name' => 'contact_is_group', 'contents' => 'false'],
['name' => 'text', 'contents' => 'Segue o documento solicitado'],
[
'name' => 'file',
'contents' => fopen('/caminho/para/arquivo.pdf', 'r'),
'filename' => 'arquivo.pdf'
],
]
]);
echo $response->getBody();
?>
package main
import (
"bytes"
"fmt"
"mime/multipart"
"net/http"
"os"
)
func main() {
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
writer.WriteField("platform", "whatsapp")
writer.WriteField("sender_key", "5511999999999")
writer.WriteField("contact_key", "5511988888888")
writer.WriteField("contact_is_group", "false")
writer.WriteField("text", "Segue o documento solicitado")
file, _ := os.Open("/caminho/para/arquivo.pdf")
defer file.Close()
part, _ := writer.CreateFormFile("file", "arquivo.pdf")
io.Copy(part, file)
writer.Close()
req, _ := http.NewRequest("POST", "https://api.atys.pro/api/api-send-message", body)
req.Header.Set("Authorization", "Bearer SEU_ACCESS_TOKEN")
req.Header.Set("Accept", "application/json")
req.Header.Set("Content-Type", writer.FormDataContentType())
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
respBody, _ := io.ReadAll(resp.Body)
fmt.Println(string(respBody))
}
curl -X POST https://api.atys.pro/api/api-send-message \ -H "Authorization: Bearer SEU_ACCESS_TOKEN" \ -H "Accept: application/json" \ -F "platform=whatsapp" \ -F "sender_key=5511999999999" \ -F "contact_key=5511988888888" \ -F "contact_is_group=false" \ -F "text=Segue o documento solicitado" \ -F "file=@/caminho/para/arquivo.pdf"
11) Editar Mensagem
Edita o conteúdo de uma mensagem de texto já enviada. A edição é propagada ao WhatsApp do destinatário (aparece como "editada") e o conteúdo é atualizado no Atys.
https://api.atys.pro/api/edit-message
Editar o texto de uma mensagem enviada
Headers Obrigatórios
| Header | Valor | Descrição |
|---|---|---|
Authorization |
Bearer YOUR_ACCESS_TOKEN | Token de autenticação |
Content-Type |
application/json | Tipo do conteúdo enviado |
Accept |
application/json | Tipo de resposta esperada |
Request Body
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id |
integer | ✅ Sim | ID interno da mensagem no Atys (não é o ID externo do WhatsApp) |
text |
string | ✅ Sim | Novo conteúdo de texto da mensagem |
external_id (já confirmadas pelo provedor)
podem ser editadas. A edição é suportada nos canais WhatsApp, WhatsApp Oficial e Minichat.
A aceitação final depende do provedor (o WhatsApp permite editar mensagens recentes).
Exemplos de Código
const response = await fetch('https://api.atys.pro/api/edit-message', {
method: 'POST',
headers: {
'Authorization': 'Bearer SEU_ACCESS_TOKEN',
'Content-Type': 'application/json',
'Accept': 'application/json'
},
body: JSON.stringify({
id: 12345,
text: 'Texto corrigido da mensagem'
})
});
const data = await response.json();
console.log(data);
import requests
response = requests.post(
'https://api.atys.pro/api/edit-message',
headers={
'Authorization': 'Bearer SEU_ACCESS_TOKEN',
'Content-Type': 'application/json',
'Accept': 'application/json'
},
json={
'id': 12345,
'text': 'Texto corrigido da mensagem'
}
)
print(response.json())
<?php
$ch = curl_init('https://api.atys.pro/api/edit-message');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer SEU_ACCESS_TOKEN',
'Content-Type: application/json',
'Accept: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'id' => 12345,
'text' => 'Texto corrigido da mensagem'
]));
$response = curl_exec($ch);
curl_close($ch);
print_r(json_decode($response, true));
?>
<?php
// composer require guzzlehttp/guzzle
use GuzzleHttp\Client;
$client = new Client();
$response = $client->post('https://api.atys.pro/api/edit-message', [
'headers' => [
'Authorization' => 'Bearer SEU_ACCESS_TOKEN',
'Content-Type' => 'application/json',
'Accept' => 'application/json'
],
'json' => [
'id' => 12345,
'text' => 'Texto corrigido da mensagem'
]
]);
print_r(json_decode($response->getBody(), true));
?>
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
func main() {
payload := map[string]interface{}{
"id": 12345,
"text": "Texto corrigido da mensagem",
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", "https://api.atys.pro/api/edit-message", bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer SEU_ACCESS_TOKEN")
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
curl -X POST https://api.atys.pro/api/edit-message \
-H "Authorization: Bearer SEU_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"id": 12345,
"text": "Texto corrigido da mensagem"
}'
Resposta de Sucesso
{
"id": 12345,
"text": "Texto corrigido da mensagem",
"edited": true,
"external_id": "3EB0XXXXXXXXXXXXXXXX",
"company_channel_id": 87,
"contact_channel_id": 4521,
"message_type_id": 1,
"updated_at": "2025-06-24T14:32:10.000000Z"
}
Erros Possíveis
| Código | Mensagem | Causa |
|---|---|---|
509 |
Parâmetros inválidos | id ou text ausentes no corpo da requisição |
509 |
Registro não encontrado | Não existe mensagem com o id informado |
509 |
Mensagem sem ID externo, não é possível editar no WhatsApp | A mensagem ainda não tem external_id (não confirmada pelo provedor) |
401 |
Unauthenticated | Token inválido, expirado ou ausente |
12) Revogar / Eliminar Mensagem
Remove ou revoga uma ou mais mensagens. Permite remover apenas para você (somente no Atys) ou revogar para todos (apaga no WhatsApp do destinatário, exibindo "Esta mensagem foi apagada").
https://api.atys.pro/api/revoke-messages
Revogar / eliminar mensagens
Headers Obrigatórios
| Header | Valor | Descrição |
|---|---|---|
Authorization |
Bearer YOUR_ACCESS_TOKEN | Token de autenticação |
Content-Type |
application/json | Tipo do conteúdo enviado |
Accept |
application/json | Tipo de resposta esperada |
Request Body
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
ids |
array<integer> | ✅ Sim | Lista de IDs internos das mensagens a remover/revogar |
scope |
string | ❌ Não |
me (padrão) = remover apenas para mim · all = revogar para todos
|
remove_media |
boolean | ❌ Não | Se true, também remove o arquivo de mídia associado (padrão: false) |
scope: "me"): a mensagem é apagada somente no Atys.
Não há chamada ao provedor — o destinatário continua vendo a mensagem no WhatsApp. O registro é excluído
fisicamente da base.
scope: "all"): a mensagem é revogada no provedor e
aparece como "Esta mensagem foi apagada" para o destinatário. A mensagem é marcada como revogada no Atys
(ou excluída, se já estava revogada). Suportado em WhatsApp e WhatsApp Oficial. Instagram e
Messenger não suportam revogação; Minichat e Telegram não estão habilitados.
Exemplos de Código
const response = await fetch('https://api.atys.pro/api/revoke-messages', {
method: 'POST',
headers: {
'Authorization': 'Bearer SEU_ACCESS_TOKEN',
'Content-Type': 'application/json',
'Accept': 'application/json'
},
body: JSON.stringify({
ids: [12345, 12346],
scope: 'all', // 'me' = só para mim · 'all' = para todos
remove_media: false
})
});
const data = await response.json();
console.log(data);
import requests
response = requests.post(
'https://api.atys.pro/api/revoke-messages',
headers={
'Authorization': 'Bearer SEU_ACCESS_TOKEN',
'Content-Type': 'application/json',
'Accept': 'application/json'
},
json={
'ids': [12345, 12346],
'scope': 'all', # 'me' = só para mim · 'all' = para todos
'remove_media': False
}
)
print(response.json())
<?php
$ch = curl_init('https://api.atys.pro/api/revoke-messages');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer SEU_ACCESS_TOKEN',
'Content-Type: application/json',
'Accept: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'ids' => [12345, 12346],
'scope' => 'all',
'remove_media' => false
]));
$response = curl_exec($ch);
curl_close($ch);
print_r(json_decode($response, true));
?>
<?php
// composer require guzzlehttp/guzzle
use GuzzleHttp\Client;
$client = new Client();
$response = $client->post('https://api.atys.pro/api/revoke-messages', [
'headers' => [
'Authorization' => 'Bearer SEU_ACCESS_TOKEN',
'Content-Type' => 'application/json',
'Accept' => 'application/json'
],
'json' => [
'ids' => [12345, 12346],
'scope' => 'all',
'remove_media' => false
]
]);
print_r(json_decode($response->getBody(), true));
?>
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
func main() {
payload := map[string]interface{}{
"ids": []int{12345, 12346},
"scope": "all",
"remove_media": false,
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", "https://api.atys.pro/api/revoke-messages", bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer SEU_ACCESS_TOKEN")
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
curl -X POST https://api.atys.pro/api/revoke-messages \
-H "Authorization: Bearer SEU_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"ids": [12345, 12346],
"scope": "all",
"remove_media": false
}'
Resposta de Sucesso
Retorna um array com a resposta do provedor para cada mensagem processada.
[
{
"Status": true,
"Message": "Message revoked successfully"
},
{
"Status": true,
"Message": "Message revoked successfully"
}
]
Erros Possíveis
| Código | Mensagem | Causa |
|---|---|---|
509 |
Parâmetros inválidos | ids ausente/não-array, ou scope diferente de me/all |
509 |
Erro ao revogar mensagens | Falha interna ao processar a revogação |
401 |
Unauthenticated | Token inválido, expirado ou ausente |
13) Listar Contact Channels
Lista as conversas (contact channels) da empresa, com paginação, ordenação e um amplo conjunto de filtros.
Pode incluir o contato relacionado e outras entidades através do parâmetro with.
https://api.atys.pro/api/contact-channels
Listar conversas / contact channels
Headers Obrigatórios
| Header | Valor | Descrição |
|---|---|---|
Authorization |
Bearer YOUR_ACCESS_TOKEN | Token de autenticação |
Accept |
application/json | Tipo de resposta esperada |
Paginação, Ordenação e Inclusão
| Parâmetro | Tipo | Descrição | Exemplo |
|---|---|---|---|
perPage |
integer | Itens por página (padrão: 20) | ?perPage=50 |
orderBy |
string | Campo de ordenação (padrão: id) | ?orderBy=last_message_at |
orderMode |
string | ASC ou DESC (padrão: desc) | ?orderMode=DESC |
with |
JSON array | Relações a incluir. Use contact para trazer o contato relacionado |
?with=["contact","tags","sector","user"] |
contact aninhado (e outras relações), envie o parâmetro
with como um array JSON, por exemplo ?with=["contact"].
Filtros Disponíveis
| Filtro | Parâmetro(s) | Descrição |
|---|---|---|
| Texto | filter |
Busca por nome/chave do canal e por nome/email do contato |
| Etiqueta (tags) | tags_ids, tags_operation |
tags_ids é um JSON com contactTags, ticketTags e
crmBusinessTags. tags_operation: XAND (todas),
XOR (qualquer) ou AND padrão |
| Setor | sector_id, without_sector |
Filtra por setor; without_sector=true traz os sem setor |
| Status | status_id, status_ids, show_all_statuses,
include_closed |
Por padrão exclui Resolvidos/Cancelados/Spam/Banidos. status_ids é um array JSON |
| Canal | channel_type_id, channelable_type, channel_key,
company_channel_id |
Tipo de canal (1=Minichat, 2=WhatsApp, 3=WhatsApp Oficial, 4=Instagram, 5=Messenger, 6=Telegram) |
| Canal oficial | channel_type_id=3, ofc_window_min_minutes,
ofc_window_max_minutes |
WhatsApp Oficial via channel_type_id=3; janela de atendimento (em minutos) por
ofc_window_* |
| Atendente | user_id, without_user, never_responded_attendant |
Filtra por atendente atribuído; sem atendente; nunca respondidos por atendente |
| Origem | contact_channel_origin_id |
Filtra por origem do contact channel |
| Datas | created_at, updated_at, last_message_at |
Intervalos como array JSON [início, fim] |
| Outros | is_group, muted, pinned, opened,
only_unread |
Filtros booleanos diversos (grupo, silenciado, fixado, aberto, apenas não lidos) |
Exemplos de Código
const params = new URLSearchParams({
with: JSON.stringify(['contact', 'tags', 'sector', 'user']),
perPage: '20',
orderBy: 'last_message_at',
orderMode: 'DESC',
channel_type_id: '2', // 2 = WhatsApp
sector_id: '3'
});
const response = await fetch(`https://api.atys.pro/api/contact-channels?${params}`, {
method: 'GET',
headers: {
'Authorization': 'Bearer SEU_ACCESS_TOKEN',
'Accept': 'application/json'
}
});
const data = await response.json();
console.log(data);
import json
import requests
params = {
'with': json.dumps(['contact', 'tags', 'sector', 'user']),
'perPage': 20,
'orderBy': 'last_message_at',
'orderMode': 'DESC',
'channel_type_id': 2, # 2 = WhatsApp
'sector_id': 3
}
response = requests.get(
'https://api.atys.pro/api/contact-channels',
headers={
'Authorization': 'Bearer SEU_ACCESS_TOKEN',
'Accept': 'application/json'
},
params=params
)
print(response.json())
<?php
$query = http_build_query([
'with' => json_encode(['contact', 'tags', 'sector', 'user']),
'perPage' => 20,
'orderBy' => 'last_message_at',
'orderMode' => 'DESC',
'channel_type_id' => 2,
'sector_id' => 3
]);
$ch = curl_init('https://api.atys.pro/api/contact-channels?' . $query);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer SEU_ACCESS_TOKEN',
'Accept: application/json'
]);
$response = curl_exec($ch);
curl_close($ch);
print_r(json_decode($response, true));
?>
<?php
// composer require guzzlehttp/guzzle
use GuzzleHttp\Client;
$client = new Client();
$response = $client->get('https://api.atys.pro/api/contact-channels', [
'headers' => [
'Authorization' => 'Bearer SEU_ACCESS_TOKEN',
'Accept' => 'application/json'
],
'query' => [
'with' => json_encode(['contact', 'tags', 'sector', 'user']),
'perPage' => 20,
'orderBy' => 'last_message_at',
'orderMode' => 'DESC',
'channel_type_id' => 2,
'sector_id' => 3
]
]);
print_r(json_decode($response->getBody(), true));
?>
package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
params := url.Values{}
params.Set("with", `["contact","tags","sector","user"]`)
params.Set("perPage", "20")
params.Set("orderBy", "last_message_at")
params.Set("orderMode", "DESC")
params.Set("channel_type_id", "2")
params.Set("sector_id", "3")
endpoint := "https://api.atys.pro/api/contact-channels?" + params.Encode()
req, _ := http.NewRequest("GET", endpoint, nil)
req.Header.Set("Authorization", "Bearer SEU_ACCESS_TOKEN")
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
curl -X GET "https://api.atys.pro/api/contact-channels?with=%5B%22contact%22%5D&perPage=20&orderBy=last_message_at&orderMode=DESC&channel_type_id=2§or_id=3" \ -H "Authorization: Bearer SEU_ACCESS_TOKEN" \ -H "Accept: application/json"
Resposta de Sucesso
Resposta paginada (padrão do Laravel). Cada item inclui o
contact quando solicitado via with.
{
"current_page": 1,
"per_page": 20,
"total": 134,
"data": [
{
"id": 4521,
"company_id": 10,
"contact_id": 980,
"channel_type_id": 2,
"name": "João Silva",
"key": "5511988888888",
"is_group": false,
"sector_id": 3,
"user_id": 7,
"status_id": 67,
"last_message_at": "2025-06-24T14:30:00.000000Z",
"contact": {
"id": 980,
"name": "João Silva",
"email": "joao@exemplo.com"
},
"tags": [],
"sector": { "id": 3, "name": "Vendas" },
"user": { "id": 7, "name": "Atendente 1" }
}
]
}
Erros Possíveis
| Código | Mensagem | Causa |
|---|---|---|
401 |
Unauthenticated | Token inválido, expirado ou ausente |
403 |
Forbidden | Usuário sem permissão para visualizar os canais filtrados |
14) Erros Comuns
Causa: Token de autenticação inválido, expirado ou não fornecido.
Solução: Obtenha um novo access_token através do endpoint de autenticação.
Causa: O ID da conexão WhatsApp especificado não existe ou não pertence à sua conta.
Solução: Verifique se o ID está correto usando o endpoint
GET /api/whatsapps.
Causas possíveis:
- Parâmetros obrigatórios não foram fornecidos ou estão em formato inválido
- Envio para grupos: O número do WhatsApp remetente (
sender_key) não é membro do grupo de destino - Modo anúncio: O grupo está em modo anúncio e o remetente não é administrador
Solução:
- Verifique se todos os parâmetros obrigatórios estão presentes e no formato correto
- Para grupos: certifique-se de que o
sender_keyé membro do grupo antes de enviar - Para grupos em modo anúncio: use um
sender_keyque seja administrador do grupo
Exemplos de resposta:
Remetente não é membro do grupo:
{
"message": "Sender WhatsApp number is not a member of the group.",
"sender_key": "5521999999999",
"group_key": "120363123456789@g.us"
}
Grupo em modo anúncio e remetente não é admin:
{
"message": "Sender cannot send messages to this group. Group is in announce mode and sender is not an admin.",
"sender_key": "5521999999999",
"group_key": "120363123456789@g.us",
"is_announce_mode": true
}
Dicas e Boas Práticas
Recomendações
- ✅ Sempre valide números antes de enviar mensagens
- ✅ Mantenha suas conexões ativas e monitore o status
- ✅ Use nomes descritivos para suas conexões
- ✅ Armazene o QR code com segurança
- ✅ Implemente tratamento de erros apropriado
- ✅ Monitore logs de eventos no painel
Limitações
- ⚠️ Cada conexão suporta apenas um número WhatsApp
- ⚠️ QR codes expiram após alguns minutos
- ⚠️ Respeite as políticas do WhatsApp para evitar bloqueios
- ⚠️ Evite envio em massa não autorizado
- ⚠️ A sessão pode expirar por inatividade
- ⚠️ Não compartilhe suas credenciais de API