Ir para conteúdo principal

WhatsApp API

Gerencie conexões WhatsApp e envie mensagens programaticamente através da API Atys.

Importante: Você precisa ter um 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.

GET

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"]
Dica: Você pode combinar múltiplos parâmetros. Exemplo:
?filter=vendas&logged=true&perPage=20&orderBy=name

Exemplos de Código

JavaScript (Fetch API)
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);
Python (Requests)
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 (cURL)
<?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 (Guzzle HTTP Client)
<?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);

?>
Go (net/http)
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
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.

POST

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")
Obrigatoriedade: Informe id ou key. Pelo menos um dos dois é obrigatório.

Exemplos de Código

JavaScript (Fetch API)
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);
Python (Requests)
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 (cURL)
<?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 (Guzzle HTTP Client)
<?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);

?>
Go (net/http)
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
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.

POST

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

JavaScript (Fetch API)
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);
Python (Requests)
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 (cURL)
<?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 (Guzzle HTTP Client)
<?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);

?>
Go (net/http)
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
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.

POST

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
Obrigatoriedade: Informe id ou key. Pelo menos um dos dois é obrigatório.
Atenção: Se você está atualizando a chave do WhatsApp, você deve informar a chave antiga e a nova chave.

Exemplos de Código

JavaScript (Fetch API)
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);
Python (Requests)
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 (cURL)
<?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 (Guzzle HTTP Client)
<?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);

?>
Go (net/http)
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
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.

POST

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)
Obrigatoriedade: Informe id ou key. Pelo menos um dos dois é obrigatório.
Atenção: Esta ação é irreversível. Ao deletar uma conexão WhatsApp, todas as conversas e mensagens associadas podem ser perdidas.

Exemplos de Código

JavaScript (Fetch API)
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);
Python (Requests)
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 (cURL)
<?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 (Guzzle HTTP Client)
<?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);

?>
Go (net/http)
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
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.

POST

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)
Obrigatoriedade: Informe id ou key. Pelo menos um dos dois é obrigatório.

Exemplos de Código

JavaScript (Fetch API)
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);
Python (Requests)
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 (cURL)
<?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 (Guzzle HTTP Client)
<?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);

?>
Go (net/http)
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
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.

POST

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)
Obrigatoriedade: Informe id ou key. Pelo menos um dos dois é obrigatório.

Exemplos de Código

JavaScript (Fetch API)
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);
Python (Requests)
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 (cURL)
<?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 (Guzzle HTTP Client)
<?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);

?>
Go (net/http)
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
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.

POST

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)
Obrigatoriedade: Informe id ou key. Pelo menos um dos dois é obrigatório.

Exemplos de Código

JavaScript (Fetch API)
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);
Python (Requests)
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 (cURL)
<?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 (Guzzle HTTP Client)
<?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);

?>
Go (net/http)
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
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.

POST

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

JavaScript (Fetch API)
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);
Python (Requests)
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 (cURL)
<?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 (Guzzle HTTP Client)
<?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);

?>
Go (net/http)
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
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.

Documentação Completa: Consulte a documentação de Envio de Mensagens para ver todos os detalhes, exemplos de código e parâmetros disponíveis.
POST

https://api.atys.pro/api/api-send-message

Enviar mensagem via 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 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)
* Importante: Você deve fornecer text OU file. Pelo menos um dos dois é obrigatório.
⚠️ Atenção - Envio para Grupos: Se você está enviando uma mensagem para um grupo (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.
Modo Anúncio: Se o grupo estiver em modo anúncio (announce mode), apenas administradores podem enviar mensagens. O sistema também valida isso automaticamente. Se o remetente não for administrador em um grupo com modo anúncio ativo, a requisição retornará erro 400 Bad Request e a mensagem será marcada como falha por falta de autorização.
Envio de arquivos: para enviar imagem, PDF, vídeo ou outros documentos, use 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

JavaScript (Fetch API)
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);
Python (Requests)
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 (cURL)
<?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 (Guzzle HTTP Client)
<?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);

?>
Go (net/http)
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
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.

JavaScript (Fetch + FormData)
// 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);
Python (Requests)
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 (cURL)
<?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 (Guzzle HTTP Client)
<?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();

?>
Go (multipart/form-data)
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
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.

POST

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
Limitações: apenas mensagens com 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

JavaScript (Fetch API)
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);
Python (Requests)
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 (cURL)
<?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 (Guzzle HTTP Client)
<?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));

?>
Go (net/http)
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
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

200 OK — mensagem atualizada
{
  "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").

POST

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)
Remover apenas para mim (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.
Revogar para todos (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

JavaScript (Fetch API)
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);
Python (Requests)
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 (cURL)
<?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 (Guzzle HTTP Client)
<?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));

?>
Go (net/http)
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
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.

200 OK — mensagens revogadas
[
  {
    "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.

GET

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"]
Incluir o Contact relacionado: por padrão a listagem retorna apenas o contact channel. Para trazer o 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

JavaScript (Fetch API)
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);
Python (Requests)
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 (cURL)
<?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 (Guzzle HTTP Client)
<?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));

?>
Go (net/http)
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
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.

200 OK — listagem paginada
{
  "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_key que 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