Your AI Connector Docs

Erros e Paginação

Esta página aborda duas coisas que toda integração precisa lidar: como é uma solicitação com falha e como paginar endpoints que retornam listas.


O envelope de erro

Quando uma solicitação falha, a resposta é sempre um JSON com o mesmo formato — um sinalizador success definido como false, uma mensagem error legível por humanos e um error_code numérico que corresponde ao status HTTP:

{
  "success": false,
  "error": "Invalid cursor",
  "error_code": 400
}

Como success e error_code estão sempre presentes, você pode criar ramificações com base neles sem precisar inspecionar códigos de status HTTP brutos, se preferir. Uma resposta bem-sucedida sempre tem success: true.


Códigos de status

Status error_code Significado O que fazer
200 — Sucesso Leia os dados da resposta.
201 — Recurso criado Salve o ID retornado (por exemplo, campaign_id, contactId).
400 400 Solicitação inválida Um parâmetro está faltando ou é inválido. Leia a mensagem error e corrija a solicitação.
401 401 Não autorizado Sua chave de API está faltando ou é inválida. Verifique a chave e como você a está enviando — veja Autenticação.
403 403 Proibido Seu plano não inclui acesso à API. Veja Acesso à API ou entre em contato com hi@youraiconnector.com.
404 404 Não encontrado O recurso (por exemplo, um ID de contato, campanha ou tarefa) não existe em sua conta.
409 409 Conflito O recurso já existe — por exemplo, criar um contato cujo número de telefone já está em sua conta.
429 429 Limite de taxa excedido Você excedeu 300 solicitações por minuto (ou o limite mais amplo de 1.200/minuto da conta). Aguarde e tente novamente em breve.
500 500 Erro no servidor Algo deu errado do nosso lado. Tente novamente após uma breve espera; envie um e-mail para hi@youraiconnector.com se o problema persistir.

Alguns exemplos de como isso se parece na prática:

{
  "success": false,
  "error_code": 401,
  "error": "Invalid API key"
}
{
  "success": false,
  "error": "A contact with this phone number already exists",
  "error_code": 409
}
{
  "success": false,
  "error_code": 429,
  "error": "Rate limit exceeded. Please try again later."
}

Lidando bem com erros

  • Verifique success (ou o código de status) antes de ler os dados. Não presuma que o corpo da resposta tenha o campo que você espera.
  • Tente novamente 429 e 500 com um curto intervalo — aguarde e tente novamente. Não tente novamente 400, 401, 403, 404 ou 409; eles continuarão falhando até que você altere a solicitação.
  • Leia a mensagem error. Ela geralmente informa exatamente qual campo está incorreto.

Paginação

Endpoints de lista (como GET /contacts, GET /campaigns e GET /tasks) retornam resultados em páginas para que uma única chamada nunca precise carregar toda a sua conta. A paginação usa um cursor opaco.

Dois parâmetros de consulta controlam isso:

Parâmetro Descrição
limit Quantos itens retornar por página. Os padrões variam de acordo com o endpoint (geralmente 50); o máximo é 100.
cursor Um ponteiro opaco para a próxima página. Deixe-o de fora na primeira página.

Cada página inclui um campo next_cursor na resposta:

  • Se next_cursor for uma string, há mais resultados — passe-a como cursor na sua próxima solicitação.
  • Se next_cursor for null, você chegou à última página. Pare.

Uma única página de contatos tem esta aparência:

{
  "success": true,
  "contacts": [
    { "id": "abc123", "first_name": "Jane", "phone_number": "+15551234567" },
    { "id": "def456", "first_name": "John", "phone_number": "+15557654321" }
  ],
  "next_cursor": "eyJsYXN0IjoiZGVmNDU2In0"
}

Nota: Um cursor é opaco — não tente analisar, construir ou modificá-lo. Apenas passe de volta um valor next_cursor que você recebeu de uma resposta anterior.


Paginação de todos os contatos

Para coletar uma lista inteira, comece sem um cursor e continue chamando até que next_cursor retorne null.

cURL

Este exemplo percorre as duas primeiras páginas manualmente. Execute a primeira chamada, copie o next_cursor da resposta para CURSOR e, em seguida, execute a segunda chamada. Repita até que next_cursor seja null.

# First page
curl "https://api.youraiconnector.com/v1/contacts?apiKey=YOUR_API_KEY&limit=100"

# Next page — paste the next_cursor from the previous response
CURSOR="eyJsYXN0IjoiZGVmNDU2In0"
curl "https://api.youraiconnector.com/v1/contacts?apiKey=YOUR_API_KEY&limit=100&cursor=$CURSOR"

JavaScript

async function getAllContacts() {
  const all = [];
  let cursor = null;

  do {
    const url = new URL("https://api.youraiconnector.com/v1/contacts");
    url.searchParams.set("limit", "100");
    if (cursor) url.searchParams.set("cursor", cursor);

    const res = await fetch(url, {
      headers: { "X-API-Key": "YOUR_API_KEY" },
    });
    const data = await res.json();

    if (!data.success) throw new Error(data.error);

    all.push(...data.contacts);
    cursor = data.next_cursor;
  } while (cursor);

  return all;
}

Python

import requests

def get_all_contacts():
    all_contacts = []
    cursor = None

    while True:
        params = {"limit": 100}
        if cursor:
            params["cursor"] = cursor

        res = requests.get(
            "https://api.youraiconnector.com/v1/contacts",
            params=params,
            headers={"X-API-Key": "YOUR_API_KEY"},
        )
        data = res.json()

        if not data["success"]:
            raise Exception(data["error"])

        all_contacts.extend(data["contacts"])
        cursor = data["next_cursor"]

        if not cursor:
            break

    return all_contacts

O mesmo loop funciona para qualquer endpoint paginado — basta alterar o caminho e o campo que você lê da resposta (campaigns, tasks, e assim por diante).


Próximos passos

  • Autenticação — as quatro maneiras de enviar sua chave.
  • Contatos — os endpoints completos de contatos usados nos exemplos acima.
  • Chaves de API — verifique o uso do seu limite de taxa em tempo real para evitar 429s.