Pressione Enter.
Obtenha seus dados.
API REST /api/v1, 53 escopos, 239 endpoints, 11 eventos de webhook e uma API JS para o widget. Bate‑papos, contatos, IA, base de conhecimento, tickets e cobrança: tudo o que o painel faz, seu código também pode fazer.
# pressione Enter ou a marca à direita $ curl -H "Authorization: Bearer sb_••••" \ https://smartbtn.me/api/v1/chats?limit=1
Início rápido
Três passos de zero até a primeira resposta. Cada solicitação está vinculada a um widget e autenticada com um token de portador.
- Emitir um tokenPainel → tokens de API: um nome, uma expiração opcional e os escopos necessários. Um token pertence a exatamente um widget. O token de texto simples é mostrado uma vez; O Smartbtn armazena apenas um hash unilateral, portanto, um token perdido não pode ser recuperado – apenas revogado e reemitido.
- Ative a API do widgetNas configurações do widget, ative «Permitir API de widget (JS e REST)». A emissão de um token não altera essa opção para você.
- Envie a primeira solicitaçãoO token vai apenas para o cabeçalho
Autorização— nunca para o URL.
# listar os chats do widget curl -H "Authorization: Bearer $SMARTBTN_TOKEN" \ https://smartbtn.me/api/v1/chats
// 200 OK · paginação do cursor { "data": [ { "id": 48211, "status": "open", "last_message_at": "2026-10-17T09:41:12+03:00" }, … ], "next_cursor": "eyJpZCI6NDgyMTB9" // null — na última página }
https://smartbtn.me/api/v1 é o endpoint primário da API para todos os dados do projeto. Sempre envie solicitações por HTTPS e nunca encaminhe o token em redirecionamentos.401 ou 403 com um corpo application/problem+json RFC‑7807 — consulte Erros.Autenticação
Três caminhos, dependendo de quem liga para quem. O acesso é negado por padrão: sem escopo – sem chamada.
Cada solicitação carrega Autorização: Bearer . No servidor, o token é resolvido para um widget e seus escopos.
As solicitações de saída são assinadas com um segredo por locatário: X‑Smartbtn‑Signature. Uma credencial de portador extra pode ser adicionada se o seu lado precisar de uma.
POST /v1/ai/replies usa seu próprio quadro assinado, fixado em seu operador e widget de IA e codificado por um causation_id durável.
A mudança que as pessoas esquecem
«Permitir API de widget (JS e REST)» nas configurações do widget abre a API REST e a API JS do widget. A emissão de um token não o habilita. Os escopos de uma chave existente podem ser editados no painel (tokens de API → chave → Editar escopos) sem reemitir — as integrações continuam funcionando.
Predefinições
| Predefinido | Escopos | Quando |
|---|---|---|
| Configuração de IA 9 | widget:read · widget:write · ai:read · ai:write · ai:apply · kb:read · kb:write · files:write · stats:read | Seu aplicativo de IA configura o widget: assistente, base de conhecimento, textos. Substitui toda a seleção de escopo. |
| Somente leitura (conjunto de exemplos) | chats:read · messages:read · contacts:read · stats:read | Dashboards, BI, exportações. |
| Ponte de helpdesk (conjunto de exemplos) | chats:read · messages:read · messages:write · webhooks:write · support:read | Espelhe caixas de diálogo e tickets em seu CRM. |
ai:credentials:write somente quando o proprietário autorizar a configuração da chave do provedor. Os direitos de conta, faturamento e parceiro não são necessários para a configuração da IA. A chave é mostrada uma vez – revogue‑a quando a configuração for concluída.Escopos
53 escopos de rota, mais um condicional e um reservado. Uma solicitação só será bem‑sucedida se o token contiver o escopo da rota (ou uma alternativa listada).
| Escopo | Subsídios |
|---|---|
| chats · 2 | |
| chats:read | Leia bate‑papos e seus metadados |
| chats:write | Fechar um chat, solicitar uma classificação, transferir, reivindicar, anexar ou desanexar um agente |
| messages · 2 | |
| messages:read | Ler o histórico de mensagens de um bate‑papo |
| messages:write | Envie mensagens, digitando indicadores e leia recibos como agente |
| contacts · 2 | |
| contacts:read | Ler contatos |
| contacts:write | Atualizar campos e atributos de contato |
| agents · 3 | |
| agents:read | Leia os agentes e sua presença |
| agents:writesensível | Convidar, atualizar, suspender, restaurar ou remover agentes; um convidado vê todos os chats do widget |
| agents:events:read | Leia o log de eventos de um agente e as métricas por agente |
| tags · 2 | |
| tags:read | Ler tags |
| tags:write | Anexar tags a um contato |
| files · 2 | |
| files:read | Baixar um arquivo enviado |
| files:write | Carregar um novo arquivo |
| stats · 1 | |
| stats:read | Leia estatísticas agregadas de bate‑papo, mensagem e classificação |
| channels · 3 | |
| channels:read | Ler o status on‑line de um canal personalizado |
| channels:write | Entregue uma mensagem de entrada em um canal personalizado |
| channels:register | Registre um novo canal personalizado (somente aplicativos instalados) |
| webhooks · 2 | |
| webhooks:read | Listar assinaturas de webhook |
| webhooks:write | Criar, excluir ou entregar novamente uma assinatura |
| quick_phrases · 2 | |
| quick_phrases:read | Leia as frases rápidas de um agente |
| quick_phrases:write | Crie, edite ou exclua frases rápidas |
| ratings · 1 | |
| ratings:read | Leia as avaliações dos visitantes e qual agente cada um pontua |
| responder · 2 | |
| responder:injectsensível | Injete uma resposta em um chat ao vivo como um operador ou bot externo de IA |
| responder:escalatecondicional | Para POST /v1/ai/replies: transferência direcionada ao chamador via escalate=true |
| widget · 2 | |
| widget:read | Leia a aparência, o comportamento e as configurações de incorporação do widget |
| widget:write | Atualize as configurações do widget e limpe o cache do widget |
| departments · 2 | |
| departments:read | Leia departamentos, seus agentes e horários |
| departments:write | Crie, atualize ou exclua departamentos e programações |
| messengers · 2 | |
| messengers:read | Leia quais mensageiros estão conectados (nunca credenciais) |
| messengers:writesensível | Conecte ou desconecte um mensageiro; grava credenciais do provedor |
| ai · 4 | |
| ai:read | Leia assistentes de IA, suas configurações e alertas |
| ai:write | Crie e atualize assistentes, configurações de IA e operadores de IA, persona e prompt incluídos |
| ai:credentials:writesensível | Armazene credenciais de provedor LLM de terceiros (BYOK) |
| ai:apply | Aprovar uma melhoria que reescreva a personalidade de um assistente ao vivo |
| kb · 2 | |
| kb:read | Ler regras da base de conhecimento e fontes ingeridas |
| kb:write | Criar, atualizar ou excluir regras e fontes da base de conhecimento |
| transcripts · 1 | |
| transcripts:read | Exportar uma transcrição de bate‑papo |
| account · 2 | |
| account:read | Leia o perfil da conta e todas as suas entidades legais |
| account:write | Atualize apenas o nome, sobrenome e telefone da conta |
| billing · 2 | |
| billing:read | Leia os registros de cobrança e entidades legais do widget |
| billing:write | Criar, atualizar, excluir pessoas jurídicas; não emite faturas, não movimenta dinheiro |
| partners · 2 | |
| partners:read | Leia dados de parceiros e referências |
| partners:withdrawreservado | Reservado: nenhuma operação de pagamento o utiliza hoje |
| support · 4 | |
| support:read | Leia tickets, chats ativos, suas mensagens e ações auditadas próprias |
| support:replysensível | Responder a um cliente como operador de suporte |
| support:write | Reivindique ou libere um bate‑papo, feche sem responder, reabra |
| support:tickets:close | Feche apenas um ticket – nada mais |
| marketing · 2 | |
| marketing:read | Leia campanhas de marketing: banners, pop‑ups, e‑mail |
| marketing:write | Crie e edite campanhas, altere status, inicie um envio de e‑mail |
| broadcasts · 2 | |
| broadcasts:read | Leia transmissões de mensageiros (WhatsApp, Telegram, Messenger, Viber, VK, MAX) |
| broadcasts:write | Crie, edite e inicie uma transmissão |
| problems · 2 | |
| problems:read | Leia clusters e configurações de problemas do cliente |
| problems:write | Alterar configurações e status do cluster: novo, em andamento, resolvido, recorrente |
| invitations · 2 | |
| invitations:read | Leia regras de convite, variantes A/B, modelos e funil |
| invitations:write | Criar, editar, ativar ou excluir regras e modelos |
Pontos finais
Toda a superfície pública em uma lista. Filtre por recurso, pesquise por caminho, clique em uma linha para copiar um curl pronto.
ai Assistentes, operadores, chaves, aprendizagem, mercado54
chats Diálogos, mensagens, transferência, classificações18
kb Base de conhecimento: regras, rastreador, arquivos, pesquisa16
agents Agentes, convites, métricas14
messengers Mensageiros, redes sociais e canais de mercado13
billing Saldo, assinaturas, faturas, entidades12
support Agente de suporte: tickets e chats12
widget Configurações, idioma, traduções, skins, cache12
channels Canais personalizados8
external‑operators Seu bot como operador8
webhook‑subscriptions Assinaturas de webhook8
broadcasts Transmissões do Messenger7
departments Departamentos e cronograma7
invitations Convites inteligentes7
marketing Campanhas de marketing7
partner Programa de parceria7
wishes Desejos para a IA7
contacts Contatos e tags5
problems Análise de problemas do cliente4
quick‑phrases Frases rápidas4
compat Compatibilidade de migração3
stats Estatísticas3
account Conta2
files Arquivos2
ratings Avaliações1
tags Etiquetas1
v1 1
webhook‑events Catálogo de eventos1
Os caminhos são relativos a https://smartbtn.me/api. As gravações precisam de Content‑Type: application/json e X‑Smartbtn‑Idempotency‑Key. O grupo compat é uma camada de compatibilidade para equipes que migram de outra plataforma de chat.
Webhooks
Um JSON POST assinado para sua URL sempre que um evento assinado acontecer. Gerencie assinaturas via /v1/webhook‑subscriptions ou no painel.
{
"id": "evt_01JAB3K9Q7",
"type": "ticket.created",
"data": {
"button_guid": "b_3f9c2e",
"ticket_number": 10482,
"chat_id": 48211,
"client_id": 9134,
"reason": "human_request",
"priority": "high",
"sla_hours": 4,
"source": "chat",
"created_at": "2026-10-17T10:15:00+03:00"
}
}motivo: solicitação_humana | faturamento | ai_não resolvido | pedido_de_ação | …; prioridade: alta | normal; fonte: bate‑papo | aplicativo | site. Leia o ticket e sua caixa de diálogo com GET /v1/support/tickets/{number}.
Cabeçalhos de entrega
| X‑Smartbtn‑Event | Tipo de evento, por ex. message.created. |
| X‑Smartbtn‑Signature | sha256=v1: do corpo bruto. |
| X‑Smartbtn‑Idempotency‑Key | Um valor por evento, estável entre novas tentativas. Desduplicar isso. |
| X‑Smartbtn‑Delivery | Um valor por tentativa de entrega — para seus logs. |
| X‑Smartbtn‑Timestamp | Hora de envio do Unix. Informativo, não assinado. |
Verificação de assinatura
HMAC‑SHA256 do corpo bruto (bytes conforme recebidos, antes da análise JSON) com seu segredo do endpoint; comparar em tempo constante. O segredo é mostrado uma vez, quando a assinatura é criada; gire‑o com POST /v1/webhook‑subscriptions/{id}/rotate‑secret.
// Node.js · por exemplo, o segredo é um espaço reservado import crypto from 'node:crypto'; function verify(rawBody, header, secret) { const expected = 'sha256=v1:' + crypto.createHmac('sha256', secret).update(rawBody).digest('hex'); const a = Buffer.from(expected), b = Buffer.from(header || ''); return a.length === b.length && crypto.timingSafeEqual(a, b); }
// PHP $expected = 'sha256=v1:' . hash_hmac('sha256', file_get_contents('php://input'), $secret); if (!hash_equals($expected, $_SERVER['HTTP_X_SMARTBTN_SIGNATURE'] ?? '')) { http_response_code(401); exit; }
Novas tentativas e pedidos
- Até 4 tentativas (o primeiro envio mais 3 novas tentativas), espera
min(60, 2^attempt × 5)s — cerca de 10, 20, 40 s. - Não‑2xx ou um tempo limite conta como uma tentativa falhada. Entregas com falha podem ser reenviadas com
POST /v1/webhook‑subscriptions/{id}/redeliver— mesma chave de idempotência, novo ID de entrega. - A entrega é feita pelo menos uma vez e não solicitada. As cargas úteis são mínimas – ids, não registros completos; buscar detalhes por meio da API REST.
JS API
Passe o que você já sabe sobre o visitante direto para o agente. As chamadas são aceitas apenas do domínio definido nas configurações do widget.
smartbtn_widget_api.setContactInfo(info)
Define os dados de contato do visitante. O agente vê como se o visitante preenchesse o formulário de introdução. Nome, telefone e e‑mail desempenham um papel especial no Smartbtn – portanto, um método separado.
| Nome | Tipo | Descrição |
|---|---|---|
| name | string | Nome do visitante |
| string | E‑mail do visitante | |
| phone | string | Telefone do visitante |
| description | string | Qualquer informação extra sobre o cliente |
Smartbtn_api.setClientInfo({ name: "Alex Morgan", email: "email@example.com", phone: "+17584987855", description: "Description text" });
smartbtn_widget_api.setCustomData(fields)
Quaisquer dados extras para o painel de informações à direita do aplicativo do agente. Chame‑o quantas vezes quiser — em uma caixa de diálogo aberta, o painel é atualizado em tempo real. Os campos são mostrados em ordem de matriz.
| Nome | Tipo | Descrição |
|---|---|---|
| fields | array | Lista de campos de dados |
| field.title | string | Indo acima do campo |
| field.content | string | Conteúdo do campo; tags são escapadas |
| field.link | string | URL aberto ao clicar |
Smartbtn_api.setClientCustomData([ { title: "Order", content: "#10482 · 3 items", link: "https://shop.example/orders/10482" }, { title: "Actions", content: "Open customer profile", link: "https://crm.example/c/9134" } ]);
smartbtn_widget_api.setSkin(skin, opts) · open() · close()
Mude o tema do widget rapidamente sem recarregar a página (classic, minimal, capsule, liquid) ou controle a janela de bate‑papo programaticamente. Para personalização permanente por projeto, passe os mesmos campos para PATCH /v1/widget/settings.
// JS API · mudar a aparência da página em tempo real smartbtn_widget_api.setSkin("minimal"); smartbtn_widget_api.setSkin("capsule", { capsuleTitle: "Smartbtn AI", capsuleSubtitle: "Respostas em aproximadamente 1 s" }); // REST API · PATCH /v1/widget/settings (escopo widget:write) { "skin": "minimal", "widget_header_align": "center", "widget_show_operator_avatars": false, "widget_show_tabs_bar": false, "chat_bg": "#FAF8F5", "capsule_title": "Smartbtn AI", "capsule_subtitle": "On-line 24 horas por dia, 7 dias por semana" }
widget_api_contact_sync ativado, essas chamadas também acionam o webhook contact.updated.Support‑agent API
Um agente de suporte automatizado atende a fila de tickets e bate‑papos com clientes: inicia um chat, atende como seu operador de suporte humano e fecha o ticket. Desativado até que o proprietário do widget o ative.
- O proprietário permiteLista os tokens autorizados a atuar como agentes de suporte e os IPs de onde eles podem ligar.
- Leia a fila
GET /v1/support/tickets·GET /v1/support/chats - Alugue um chat
POST …/chats/{id}/claim·…/release - ResponderTexto simples, links apenas para os hosts permitidos do widget.
201somente quando a mensagem for armazenada. - Fechar ou reabrir
POST …/tickets/{number}/close·…/reopen
| Escopo | Permite |
|---|---|
| support:read | Tickets, chats ativos, mensagens rotuladas como cliente/ai/suporte/sistema, ações auditadas próprias |
| support:write | Reivindique/libere um bate‑papo, feche sem responder, reabra |
| support:reply | Responder ao cliente como operador de suporte (sensível) |
| support:tickets:close | Feche apenas um ticket - para um botão de “pergunta resolvida” em seu backend |
curl -X POST https://smartbtn.me/api/v1/support/chats/48211/reply \ -H "Authorization: Bearer $AGENT_TOKEN" \ -H "Content-Type: application/json" \ -H "X-Smartbtn-Idempotency-Key: $(uuidgen)" \ -d '{"text":"Concluído, o acesso foi restaurado."}'
API de IA
Tudo o que a seção AI do painel faz: assistentes, chaves de provedor próprias, base de conhecimento, autoaprendizagem com reversão, desejos, problemas, sinais de demanda e um assistente dentro do seu aplicativo.
Vários assistentes com função e idioma próprios, teste antes de entrar em operação, operadores nomeados por idioma.
- GET/v1/ai/assistants
- POST/v1/ai/assistants/{id}/test
- PATCH/v1/ai/operators/{id}
- POST/v1/ai/handoff
Claude, ChatGPT, DeepSeek, Gemini, Mistral, LLMs regionais ou qualquer compatível com OpenAI. Os modelos são listados por chave.
- GET/v1/ai/credentials
- POST/v1/ai/credentials
- GET/v1/ai/credentials/{id}/models
Um rastreador para seu site, uploads de PDF e DOCX, regras, pesquisa e status de indexação.
- PUT/v1/kb/crawler
- POST/v1/kb/uploads
- POST/v1/kb/rules
- GET/v1/kb/search
Ajustando execuções, ciclos, histórico, versões de persona com rollback e kill switch.
- POST/v1/ai/learning/tune
- GET/v1/ai/learning/cycles
- POST/v1/ai/learning/persona‑versions/{version}/revert
- GET/v1/ai/learning/kill‑switch
Um desejo em palavras simples → uma visualização sem efeitos colaterais → aprovar, rejeitar ou reverter.
- POST/v1/wishes
- GET/v1/wishes/{id}/preview
- POST/v1/wishes/{id}/approve
- POST/v1/wishes/{id}/revert
Clusters de problemas com status e limite de gastos mensais; o que os clientes pediram e você não oferece.
- GET/v1/problems
- PATCH/v1/problems/settings
- POST/v1/problems/{id}/status
- GET/v1/ai/demand‑signals
Seu back‑end envia o status do cliente (registrado, pago, cliente desde então, estado do serviço) em uma solicitação assinada pelo HMAC – a IA avalia isso ao responder e escalar.
- POST/v1/ai/customer‑status
- POST/v1/ai/tickets
- GET/v1/ai/alerts
Turnos de diálogo, vinculação de contas, conversão de fala em texto e conversão de texto em fala, tickets de aplicativos — por meio de uma integração assinada.
- POST/v1/ai/assistant/turn
- POST/v1/ai/assistant/account‑link
- POST/v1/ai/assistant/speech‑to‑text
- POST/v1/ai/assistant/text‑to‑speech
Assistentes prontos por nicho: café, clínica, loja, serviço de automóveis. Inscreva‑se em uma solicitação.
- GET/v1/ai/marketplace/templates
- POST/v1/ai/marketplace/templates/{slug}/apply
Seu próprio bot responde a chats: respostas assíncronas, transferência, testes e ciclo de vida.
- POST/v1/ai/replies
- POST/v1/external‑operators/{public_id}/tests
- POST/v1/external‑operators/{public_id}/lifecycle
Limites de taxa
Por token, dois contadores: leituras e gravações são contadas separadamente, de modo que a pesquisa nunca consome o orçamento de gravação.
| X‑RateLimit‑Limit | Tamanho do contador em que esta solicitação foi contada (600 ou 120) |
| X‑RateLimit‑Remaining | Solicitações restantes na janela atual |
| X‑RateLimit‑Reset | Quando a janela for reiniciada |
| Retry‑After | Em 429: segundos para esperar |
HTTP/1.1 429 Too Many Requests Content-Type: application/problem+json Retry-After: 12 X-RateLimit-Limit: 120 X-RateLimit-Remaining: 0 { "status": 429, "title": "Too Many Requests", "reason": "rate_limited" }
/v1/ai/assistant/tickets/status e /v1/ai/assistant/account‑link têm seus próprios contadores; a API do agente de suporte pode ter uma substituição por widget.
Erros
Cada erro é RFC‑7807 application/problem+json: um status e motivo legíveis por máquina, um detalhe legível por humanos.
HTTP/1.1 403 · Content-Type: application/problem+json { "type": "https://smartbtn.me/problems/forbidden", "title": "Forbidden", "status": 403, "detail": "Token lacks scope chats:write.", "required_scopes": [ "chats:write" ], "hint": "Dashboard → API tokens → key → Edit scopes" }
Os nomes do corpo require_scopes e onde concedê-los. Não há necessidade de reemitir a chave.
| Estado | Significado |
|---|---|
| 400 | Solicitação malformada ou falta uma chave de idempotência necessária |
| 401 | Nenhum token, token inválido ou revogado |
| 403 | O token não tem escopo; o corpo adiciona required_scopes e onde concedê-lo |
| 404 | Não encontrado neste widget |
| 405 | Método não permitido – pare e relate; não procure gravações alternativas |
| 409 | Chave de idempotência reutilizada em 24 horas ou conflito de estado |
| 422 | Falha na validação (por exemplo, um campo somente leitura foi enviado) |
| 429 | Limite de taxa; respeito Tentar novamente depois |
Idempotência
As redes falham. Uma chave torna segura uma nova tentativa de gravação: a mesma operação nunca é aplicada duas vezes.
- Envie
X‑Smartbtn‑Idempotency‑Keyem cada POST / PATCH / PUT / DELETE: um novo UUID para uma nova operação, a mesma chave para uma nova tentativa da mesma. - Operações marcadas como
x‑idempotency: obrigatóriano OpenAPI: nenhuma chave → 400, a chave reutilizada dentro de 24 horas → 409 (não foi um sucesso em cache). - Não tem certeza se foi aprovado? Leia o estado primeiro. Nunca altere a chave automaticamente; respeite Repetir‑Depois.
- Um
502de um provedor upstream libera a chave – tente novamente com a mesma chave.
KEY=$(uuidgen) curl -X PATCH https://smartbtn.me/api/v1/widget/settings \ -H "Authorization: Bearer $SMARTBTN_TOKEN" \ -H "Content-Type: application/json" \ -H "X-Smartbtn-Idempotency-Key: $KEY" \ -d '{"language":"ru"}' # erro de rede? repita com a mesma $KEY
Changelog
Mudanças na API pública e nos webhooks em 2026. Tudo abaixo é aditivo e permanece em v1.
Novo ticket de evento ao vivo.criado. GET /v1/support/tickets responde a qualquer chave com support:read até que um agente de suporte seja configurado. Os escopos principais são editáveis sem reemissão. 403 ganha escopos_requeridos.
POST/PATCH /v1/ai/operadores aceitam nome_i18n; os nomes padrão são traduzidos para o idioma do widget; escolha de saudação previsível.
Lê – 600 por minuto, escreve – 120. As pesquisas não consomem mais o orçamento de gravação. X‑RateLimit-* descreve o contador que foi usado.
Conversa com atividade desde um instante, independentemente da idade. Cada chat agora carrega last_message_at.
chat.account.email_requested — o chat aguarda o endereço; os agentes não devem iniciar outro fluxo de código.
Feche um ticket e nada mais — para obter um botão de “pergunta resolvida” em seu backend.
Filtra has_client_messages=1 e q (2–100 caracteres).
POST /v1/ai/assistant/account‑link e /revoke. Desligado até que o proprietário o habilite.
As regras são incorporadas à chave do widget ou a uma chave de assistente habilitada; um 502 libera a chave de idempotência.
A conta fica visível enquanto o ticket estiver aberto e por 7 dias depois.
Novo grupo /v1/support: fila, chats, concessões, respostas, fechamento e reabertura de tickets. Desligado até que o proprietário o habilite.
Campos code_pending, code_expires_at, last_code_result e last_code_at.
Plug‑in WordPress
O widget em um site WordPress sem tocar no código do tema.
- Baixaro arquivo do plugin para o seu computador.
- InstalarColoque a pasta descompactada em
wp‑content/plugins/— ou carregue‑a no administrador do WordPress. - AtivarUm item Smartbtn aparece no menu.
- Cole o tokenCopie o token de segurança das configurações do widget em seu painel.
Quando você altera sua senha, o token de segurança também muda e o antigo para de funcionar – cole o novo no plugin.
Amostras de código
Liste todos os bate‑papos em atividade desde sua última enquete - seguindo o cursor até o final.
# primeira página curl -G https://smartbtn.me/api/v1/chats \ -H "Authorization: Bearer $SMARTBTN_TOKEN" \ --data-urlencode "updated_since=2026-10-17T09:00:00+03:00" # next — com next_cursor da resposta curl -G https://smartbtn.me/api/v1/chats \ -H "Authorization: Bearer $SMARTBTN_TOKEN" \ --data-urlencode "cursor=eyJpZCI6NDgyMDd9"