Limites, erros e boas práticas
Os códigos de resposta da API, o formato do erro, quantas chamadas planejar por minuto, a paginação e como repetir chamadas sem duplicar contatos e envios.
Esta página junta o que o contrato da API diz sobre respostas e erros, o que foi conferido na produção e as regras para tratar falhas sem criar dados repetidos. O que não está aqui não foi confirmado: trate como erro qualquer resposta fora do esperado e guarde o corpo inteiro no seu registro.
Códigos de resposta
| Código | O que quer dizer |
|---|---|
200 | Deu certo. A resposta traz os dados pedidos ou {"success": true}. |
400 | Algum dado da chamada está errado ou faltando. |
401 | A chave de API não veio ou não vale. Acontece em qualquer endereço. |
402 | A operação não foi feita (só em duas chamadas de pedido, abaixo). |
404 | O item não existe na conta. |
O que cada endpoint diz no contrato, além do 200 e do 401:
| Endpoint | Código | Quando |
|---|---|---|
| Consultar contato | 400 | O ID do contato é inválido. |
| Consultar contato | 404 | O contato não existe. |
| Buscar contato por campo personalizado | 400 | Parâmetros inválidos. |
| Listar agentes de IA | 400 | Parâmetros inválidos. |
| Atualizar agente de IA | 400 | O contrato cita o código sem descrever. |
| Listar calendários | 400 | Parâmetros inválidos. |
| Listar disparos | 400 | Parâmetros inválidos. |
| Consultar disparo | 404 | O disparo não existe. |
| Alterar pedido | 400 | O status não é 6, 7, 10 nem 13. |
| Alterar pedido | 402 | O status é o mesmo que o pedido já tem. |
| Alterar pedido | 404 | O pedido não existe. |
| Marcar pedido como pago | 400 | O amount_received é menor que o total do pedido. |
| Marcar pedido como pago | 402 | O pagamento não foi concluído. O contrato diz que o contato recebe uma mensagem no Messenger com o motivo. |
| Marcar pedido como pago | 404 | O pedido não existe. |
O formato do erro
O erro de chave foi conferido na produção. A resposta é 401, em qualquer endereço, com este corpo:
{"error": {"code": 401, "message": "No valid API key provided."}}error.coderepete o código HTTP, eerror.messageexplica em inglês.- O cabeçalho
Content-Typedessa resposta vemtext/html; charset=UTF-8, mas o corpo é JSON. Leia o corpo como JSON sem depender do cabeçalho. - O corpo dos outros erros (
400,402,404) não foi conferido. Decida pelo código HTTP e guarde o corpo inteiro no seu registro para entender o caso.
Limite de uso
Planeje até 100 requisições por minuto por conta. A conta tem uma chave só, então esse total vale para todas as integrações juntas: o seu sistema, o Zapier, o Make, o n8n e o Pabbly.
- Distribua os lotes no tempo. Uma fila com uma chamada por segundo fica em 60 por minuto e deixa folga.
- O código que a API devolve quando o limite passa não foi conferido. Se vier um erro fora da tabela acima (como
429ou um5xx), espere e tente de novo, com espera crescente: 1 segundo, depois 2, 4, 8, até umas cinco tentativas. - Nunca repita na hora, em laço: isso só gasta mais chamadas do limite.
Uma nova tentativa com espera crescente:
async function chamarComNovasTentativas(fazerChamada, tentativas = 5) {
for (let i = 0; i < tentativas; i++) {
const resposta = await fazerChamada();
// 2xx, 4xx e o 401: a resposta é final, não adianta repetir
if (resposta.status < 500 && resposta.status !== 429) return resposta;
await new Promise((r) => setTimeout(r, 1000 * 2 ** i)); // 1 s, 2 s, 4 s, 8 s, 16 s
}
throw new Error('A API não respondeu depois de várias tentativas');
}Use a nova tentativa automática só em consultas (GET) e em chamadas que você conferiu que não duplicam nada (veja abaixo).
Paginação
Três listas têm paginação, com offset (de onde começar) e limit (quantos trazer):
| Endpoint | Parâmetros | Padrão |
|---|---|---|
| Listar pipelines | offset, limit | 0 e 100 |
| Listar oportunidades | offset, limit e contact_id (filtro) | 0 e 100 |
| Listar comentários da oportunidade | offset, limit | 0 e 100 |
Para ler tudo, peça páginas até vir uma com menos itens que o limit:
const base = 'https://app.nextagsai.com.br/api/pipelines/4001/opportunities';
const itens = [];
for (let offset = 0; ; offset += 100) {
const resposta = await fetch(`${base}?offset=${offset}&limit=100`, {
headers: { 'X-ACCESS-TOKEN': process.env.NEXTAGS_API_KEY },
});
const { data } = await resposta.json();
itens.push(...data);
if (data.length < 100) break; // a última página veio incompleta
}
console.log(itens.length);Estas listas não têm paginação e trazem no máximo 100 itens:
| Endpoint | O que vem |
|---|---|
| Buscar contato por campo personalizado | Até 100 contatos, os de mudança mais recente no campo primeiro. |
| Listar agentes de IA | Até 100 agentes. |
| Listar calendários | Até 100 calendários. |
| Listar disparos | Até 100 disparos. |
Tempo limite
- Ponha um tempo limite em toda chamada no seu cliente HTTP. Os exemplos em Python usam
timeout=30(30 segundos). - Se uma chamada que cria ou envia algo estourar o tempo, não repita direto: a NexTags pode ter recebido e feito a operação. Confira antes, como na tabela abaixo.
Repetir sem duplicar
| Tipo de chamada | Pode repetir? | Antes de repetir |
|---|---|---|
Consultas (GET) | Sim. | Nada. |
| Criar contato, etiqueta, campo, oportunidade ou comentário | Só depois de conferir. | Procure o item: Buscar contato por campo personalizado, Buscar etiqueta pelo nome, Buscar campo pelo nome, Listar oportunidades com contact_id, Listar comentários da oportunidade. |
| Enviar fluxo, texto, arquivo, conteúdo ou produtos | Não: o contato recebe de novo. | Registre no seu sistema o que já foi enviado e confira na conversa da Caixa de Entrada. |
| Reenviar disparo | Não: o Broadcast sai de novo. | Consultar disparo. |
| Pôr ou tirar etiqueta, preencher ou limpar campo, mudar a etapa ou o status | Só depois de conferir. | Consulte o contato, o campo, a oportunidade ou o pedido. No pedido, repetir o mesmo status dá 402. |
| Adicionar produto ao carrinho, marcar pedido como pago | Só depois de conferir. | Consultar carrinho ou Consultar pedido. |
A regra geral: procure antes de criar. O contrato não diz se a API recusa um contato, uma etiqueta ou uma oportunidade repetidos, então quem evita a duplicata é a sua integração. Veja o caminho completo em Criar ou atualizar um contato.
Relacionados
Este conteúdo ajudou?
Obrigado! Sua resposta ajuda a melhorar a central.