SYSLEDDevelopers
API v1 · consultasRevisão · 2026-10-02Referência ↗
Integre com o SYSLED

Consulte seus dados.
Conecte seus fluxos.

Referência pública para clientes e integradores consultarem atendimento, CRM, catálogo e configurações comerciais com segurança de credenciais no servidor.

18Métodos públicos
8Grupos de consulta
Somente servidorToken protegido
Edição pública de consultas
Esta primeira edição inclui somente métodos de consulta e validação selecionados. Operações de escrita, envio de mensagens, pagamentos e webhooks permanecem fora da referência REST pública até homologação específica.

Sua primeira requisição

Peça ao administrador o endereço da sua instância e um token autorizado apenas para os métodos necessários.

01

Obtenha o token

O administrador cria um token de API vinculado à sua empresa.

02

Limite os escopos

Para o exemplo, autorize somente products.list.

03

Use seu servidor

Não exponha o token no navegador, aplicativo móvel ou repositório.

Formato da URL
POST https://SEU_HOST/api/v1/{TOKEN}/{metodo}
Terminal · variáveis de ambiente
# Configure no ambiente seguro do seu servidor:
# SYSLED_URL=https://endereco-informado-pelo-administrador
# SYSLED_TOKEN=token-da-sua-integracao

curl --request POST "$SYSLED_URL/api/v1/$SYSLED_TOKEN/products.list" --header 'Content-Type: application/json' --data '{"offset":0,"limit":10}'

Os exemplos usam dados fictícios. Esta página não solicita credenciais e não chama sua API.

Autenticação e permissões

A API usa um token no caminho /api/v1/{TOKEN}/{metodo}. Use HTTPS, guarde o token no servidor e remova-o de logs, alertas e mensagens de erro.

Escopos recomendados
EscopoUso
nome.do.metodoAutoriza somente o método indicado; é a opção documentada e recomendada nesta edição.

Escopos amplos podem conceder também operações que não fazem parte desta edição pública. Para integrações de consulta, use um escopo exato por método.

O token é uma credencial secreta
Não o inclua em HTML, JavaScript do navegador, links compartilhados, capturas de tela ou ferramentas de terceiros. Lista de IPs e escopos reduzem o risco, mas não substituem o armazenamento seguro.

Dados pessoais, finalidade e retenção

messages.list, leads.list e os métodos de tarefas podem retornar conteúdo de conversas, contatos, descrições e outros dados pessoais ou comerciais. A integração deve ter finalidade definida, base legal aplicável e acesso compatível com as regras de proteção de dados da sua empresa.

  • Conceda somente o escopo exato e, quando possível, limite os IPs autorizados.
  • Solicite apenas os campos e períodos necessários; aplique retenção e descarte seguros.
  • Não registre tokens, URLs completas, conteúdo de mensagens ou payloads pessoais sem necessidade.
  • O serviço mantém contadores e metadados operacionais das chamadas para segurança e limite de uso.

Os exemplos desta documentação são sintéticos e não representam pessoas ou empresas reais.

Respostas e paginação

O envelope de sucesso contém ok, method e result. HTTP 200 não significa necessariamente que um registro foi encontrado; alguns métodos retornam found:false.

Sucesso · envelope
{
  "ok": true,
  "method": "products.list",
  "result": {
    "items": [
      {
        "codigo": "SKU-EXEMPLO",
        "nome": "Produto de exemplo",
        "disponivel": true
      }
    ],
    "total": 1,
    "next_cursor": null
  }
}

Não há paginação única: leia page/limit, offset/limit, limites e significado de total no método escolhido. As respostas podem conter campos adicionais aos exemplos.

Erros, limites e tentativas

Erros globais
HTTPCódigoComo tratar
401INVALID_TOKENToken não encontrado.
403TOKEN_DISABLEDToken desativado.
403IP_BLOCKEDIP não autorizado na lista do token.
403SCOPE_DENIEDEscopo insuficiente.
429RATE_LIMITEDCota do token excedida. Aguarde antes de repetir.
500INTERNAL_ERRORFalha interna ou erro sem status específico.
403NO_COMPANYToken sem empresa associada.
400 / 404 / 422Específico do métodoLeia error, code e as observações do método.

A cota padrão pode variar por instância. Ao receber 429, aguarde e aplique backoff. Não registre a URL completa porque ela contém o token.

Escopo desta edição REST pública

Foram selecionadas consultas e validações que não criam nem alteram dados de negócio, não enviam mensagens e não pagam ou cancelam registros. A existência de outros métodos no aplicativo não os torna parte desta referência REST pública.

Fora desta edição REST
Operações que criam, alteram, movem, arquivam ou excluem registros; Envio de mensagens, mídia e abertura de conversas; Criação, pagamento, reconciliação ou cancelamento de pedidos e checkouts; Listagens pendentes de homologação de isolamento por empresa; Consultas cujas respostas ainda não possuem um contrato público estável e restrito aos campos necessários; Consulta de pedido por identificador numérico; Webhooks e contratos administrativos autenticados por sessão. A liberação futura depende de correção, revisão de segurança e teste de contrato.

A documentação descreve o contrato revisado, mas não comprova que todas as instâncias tenham a mesma versão. Confirme o endereço, a disponibilidade e os escopos com o administrador antes de integrar.

Referência

Encontre o método certo

Busque por recurso, método ou parâmetro. Abra um item para ver exemplos, erros e limitações.

18 métodos

Mensagens

1
POSTmessages.listListar mensagens
Escopo recomendado: messages.listLink direto ↗Página completa ↗

Obtém as mensagens mais recentes de uma conversa da empresa do token, excluindo linhas com deleted=true.

Parâmetros

Parâmetros de messages.list
CampoDescrição
conversation_idstring (UUID)obrigatórioID da conversa.
limitintegeropcionalMáximo de mensagens. Padrão: 50; mínimo 1, máximo 200.
beforestringopcionalCursor opaco retornado em next_cursor para buscar a página seguinte. Por compatibilidade, também aceita o UUID de uma mensagem da mesma conversa. Máximo: 2048 caracteres.

Exemplo de chamada e resultado

Configure SYSLED_URL e SYSLED_TOKEN no servidor. Os dados são fictícios e o resultado pode conter outros campos.

cURL · JSON
curl --request POST \
  "$SYSLED_URL/api/v1/$SYSLED_TOKEN/messages.list" \
  --header 'Content-Type: application/json' \
  --data '{"conversation_id":"22222222-2222-4222-8222-222222222222","limit":50,"before":"eyJ2IjoxLCJpZCI6IjU1NTU1NTU1LTU1NTUtNDU1NS04NTU1LTU1NTU1NTU1NTU1NSIsImF0IjoiMjAyNi0wOS0xOFQxMjowMDowMC4wMDBaIn0"}'
HTTP 200 · exemplo
{
  "ok": true,
  "method": "messages.list",
  "result": {
    "total": 1,
    "total_count": 1,
    "messages": [
      {
        "id": "55555555-5555-4555-8555-555555555555",
        "sender_type": "system",
        "content": "Nota de exemplo",
        "message_type": "note",
        "media_url": null,
        "delivery_status": null,
        "created_at": "2026-09-18T12:00:00.000Z",
        "delivered_at": null,
        "read_at": null
      }
    ],
    "hasMore": false,
    "next_cursor": null
  }
}

Comportamento e observações

  • Ordenação estável por created_at decrescente, com valores null primeiro, e id decrescente para desempate.
  • total é o tamanho do lote retornado; total_count conta todo o histórico não excluído da conversa. hasMore indica continuação e next_cursor contém o cursor opaco da próxima página ou null.
  • Reenvie next_cursor em before sem interpretar ou modificar seu conteúdo. O UUID legado de uma mensagem da mesma conversa também é aceito como âncora.
  • Conversa inexistente/de outra empresa ou cursor ausente desse histórico retorna HTTP 404 NOT_FOUND. Cursor malformado, adulterado ou maior que 2048 caracteres retorna HTTP 400 BAD_REQUEST.
  • Cada item inclui delivered_at e read_at; ambos podem ser null. Eles representam a primeira evidência persistida pelo SYSLED, não o instante físico exato no aparelho. Em linhas legadas/incompletas, até status delivered/read pode permanecer sem horário até surgir evidência correspondente.
  • Resposta ilustrativa do campo result; IDs, nomes e valores são fictícios. Campos adicionais podem existir.
  • Pode retornar conteúdo de conversas e URLs de mídia. Use escopo exclusivo, aplique as regras de proteção de dados da sua empresa e não registre o conteúdo sem necessidade.

Erros e condições específicas

Erros de messages.list
HTTP / códigoCondição
400
BAD_REQUEST
conversation_id ausente/inválido ou cursor before inválido.
403
NO_COMPANY
Token sem empresa associada.
404
NOT_FOUND
Conversa inexistente/de outra empresa, ou cursor que não pertence ao histórico consultado.

Também se aplicam os erros globais de autenticação, permissão e limite.

Leads

1
POSTleads.listListar leads
Escopo recomendado: leads.listLink direto ↗Página completa ↗

Lista leads com total real, contagem por status e paginação.

Parâmetros

Parâmetros de leads.list
CampoDescrição
statusstringopcionalStatus: new, converted ou junk. Sem filtro inclui todos.
status_instring[] | string CSVopcionalStatus aceitos; pode combinar com status.
searchstringopcionalBusca parcial em nome, título, telefone e e-mail.
assigned_tostring (uuid)opcionalID do responsável.
assigned_to_instring[] | string CSVopcionalIDs de responsáveis.
source_id_ininteger[] | string CSVopcionalIDs de origens.
created_fromstring (date/date-time)opcionalData inicial inclusiva.
created_tostring (date/date-time)opcionalInclui até o dia final; implementação usa limite menor que data + 1 dia.
junked_fromstring (date/date-time)opcionalData inicial inclusiva.
junked_tostring (date/date-time)opcionalInclui até o dia final; implementação usa limite menor que data + 1 dia.
converted_fromstring (date/date-time)opcionalData inicial inclusiva.
converted_tostring (date/date-time)opcionalInclui até o dia final; implementação usa limite menor que data + 1 dia.
opportunity_minnumberopcionalValor mínimo inclusivo.
opportunity_maxnumberopcionalValor máximo inclusivo.
has_conversationbooleanopcionaltrue com conversa; false sem conversa.
pageintegeropcionalPágina iniciada em 1; padrão 1.
limitintegeropcionalPadrão 50; máximo 200. Use valores positivos; limite negativo não é validado corretamente.
order_bystringopcionalcreated_at_desc (padrão), created_at_asc, opportunity_desc, opportunity_asc ou name_asc.

Exemplo de chamada e resultado

Configure SYSLED_URL e SYSLED_TOKEN no servidor. Os dados são fictícios e o resultado pode conter outros campos.

cURL · JSON
curl --request POST \
  "$SYSLED_URL/api/v1/$SYSLED_TOKEN/leads.list" \
  --header 'Content-Type: application/json' \
  --data '{"status":"new","page":1,"limit":50}'
HTTP 200 · exemplo
{
  "ok": true,
  "method": "leads.list",
  "result": {
    "rows": [
      {
        "id": 101,
        "name": "Pessoa Exemplo",
        "status": "new",
        "opportunity": "1500.00",
        "phone": [
          {
            "value": "+5585000000000",
            "type": "WORK"
          }
        ],
        "email": [
          {
            "value": "pessoa@example.com",
            "type": "WORK"
          }
        ]
      }
    ],
    "total": 1,
    "by_status": {
      "new": 1,
      "converted": 0,
      "junk": 0
    },
    "page": 1,
    "limit": 50
  }
}

Comportamento e observações

  • Exemplos ilustrativos e parciais: os registros podem retornar outros campos; não representam dados reais.
  • total e by_status correspondem a todos os registros que atendem aos filtros, não só à página.
  • Não existe parâmetro pipeline_id para lead.
  • Pode retornar dados pessoais e comerciais. Restrinja o token ao método, limite a retenção e aplique as regras de proteção de dados da sua empresa.

Também se aplicam os erros globais de autenticação, permissão e limite.

Funis

2
POSTpipelines.getObter funil
Escopo recomendado: pipelines.getLink direto ↗Página completa ↗

Obtém um funil ativo com etapas e agregados.

Parâmetros

Parâmetros de pipelines.get
CampoDescrição
idintegerobrigatórioIdentificador numérico do registro.

Exemplo de chamada e resultado

Configure SYSLED_URL e SYSLED_TOKEN no servidor. Os dados são fictícios e o resultado pode conter outros campos.

cURL · JSON
curl --request POST \
  "$SYSLED_URL/api/v1/$SYSLED_TOKEN/pipelines.get" \
  --header 'Content-Type: application/json' \
  --data '{"id":10}'
HTTP 200 · exemplo
{
  "ok": true,
  "method": "pipelines.get",
  "result": {
    "found": true,
    "pipeline": {
      "id": 10,
      "name": "Funil Exemplo",
      "slug": "funil-exemplo",
      "is_default": false,
      "type": "sales",
      "color": "#2684FF",
      "sort_order": 100,
      "total_deals": 1,
      "total_value": 1500,
      "stages": [
        {
          "id": 11,
          "name": "Em andamento",
          "slug": "em-andamento-exemplo",
          "type": "process",
          "color": "#3b82f6",
          "sort_order": 10,
          "deals_count": 1,
          "open_count": 1,
          "deals_value": 1500
        }
      ]
    }
  }
}

Comportamento e observações

  • Exemplos ilustrativos e parciais: os registros podem retornar outros campos; não representam dados reais.
  • Resposta singular {found,pipeline}, não {total,pipelines}.
  • Ausente, inativo ou fora da empresa (exceto global): {found:false,pipeline:null}.

Erros e condições específicas

Erros de pipelines.get
HTTP / códigoCondição
400
PIPELINE_ID_REQUIRED
id ausente ou diferente de inteiro positivo.

Também se aplicam os erros globais de autenticação, permissão e limite.

POSTpipelines.listListar funis
Escopo recomendado: pipelines.listLink direto ↗Página completa ↗

Lista funis ativos da empresa e globais, com etapas e agregados dos negócios da empresa.

Parâmetros

Parâmetros de pipelines.list
CampoDescrição
pipeline_idintegeropcionalFiltro opcional por um funil. Valor inválido é ignorado.

Exemplo de chamada e resultado

Configure SYSLED_URL e SYSLED_TOKEN no servidor. Os dados são fictícios e o resultado pode conter outros campos.

cURL · JSON
curl --request POST \
  "$SYSLED_URL/api/v1/$SYSLED_TOKEN/pipelines.list" \
  --header 'Content-Type: application/json' \
  --data '{"pipeline_id":10}'
HTTP 200 · exemplo
{
  "ok": true,
  "method": "pipelines.list",
  "result": {
    "total": 1,
    "pipelines": [
      {
        "id": 10,
        "name": "Funil Exemplo",
        "slug": "funil-exemplo",
        "is_default": false,
        "type": "sales",
        "color": "#2684FF",
        "sort_order": 100,
        "total_deals": 1,
        "total_value": 1500,
        "stages": [
          {
            "id": 11,
            "name": "Em andamento",
            "slug": "em-andamento-exemplo",
            "type": "process",
            "color": "#3b82f6",
            "sort_order": 10,
            "deals_count": 1,
            "open_count": 1,
            "deals_value": 1500
          }
        ]
      }
    ]
  }
}

Comportamento e observações

  • Exemplos ilustrativos e parciais: os registros podem retornar outros campos; não representam dados reais.
  • Não possui paginação. total é a quantidade de funis retornados.
  • deals_count inclui negócios abertos e encerrados com archived=false; open_count restringe is_closed=false. Valores archived NULL não entram no agregado atual.
  • total_value/deals_value são números; total_value arredondado a duas casas.

Também se aplicam os erros globais de autenticação, permissão e limite.

Etapas

1
POSTstages.listListar etapas
Escopo recomendado: stages.listLink direto ↗Página completa ↗

Lista as etapas de um funil da empresa, por sort_order e id.

Parâmetros

Parâmetros de stages.list
CampoDescrição
pipeline_idintegerobrigatórioFunil pertencente à empresa do token.

Exemplo de chamada e resultado

Configure SYSLED_URL e SYSLED_TOKEN no servidor. Os dados são fictícios e o resultado pode conter outros campos.

cURL · JSON
curl --request POST \
  "$SYSLED_URL/api/v1/$SYSLED_TOKEN/stages.list" \
  --header 'Content-Type: application/json' \
  --data '{"pipeline_id":10}'
HTTP 200 · exemplo
{
  "ok": true,
  "method": "stages.list",
  "result": {
    "total": 1,
    "stages": [
      {
        "id": 11,
        "pipeline_id": 10,
        "name": "Em andamento",
        "slug": "em-andamento-exemplo",
        "type": "process",
        "color": "#3b82f6",
        "sort_order": 10
      }
    ]
  }
}

Comportamento e observações

  • Exemplos ilustrativos e parciais: os registros podem retornar outros campos; não representam dados reais.
  • Não possui paginação. O método não aceita funil global, mesmo quando pipelines.list o apresenta.

Erros e condições específicas

Erros de stages.list
HTTP / códigoCondição
400
BAD_REQUEST
Parâmetro obrigatório ausente ou valor inválido.
404
PIPELINE_NOT_FOUND
Funil não encontrado ou não pertence à empresa do token (inclui funil global).

Também se aplicam os erros globais de autenticação, permissão e limite.

Tarefas

2
POSTtasks.getObter tarefa
Escopo recomendado: tasks.getLink direto ↗Página completa ↗

Obtém atividade e nome do responsável.

Parâmetros

Parâmetros de tasks.get
CampoDescrição
idintegerobrigatórioIdentificador numérico do registro.

Exemplo de chamada e resultado

Configure SYSLED_URL e SYSLED_TOKEN no servidor. Os dados são fictícios e o resultado pode conter outros campos.

cURL · JSON
curl --request POST \
  "$SYSLED_URL/api/v1/$SYSLED_TOKEN/tasks.get" \
  --header 'Content-Type: application/json' \
  --data '{"id":401}'
HTTP 200 · exemplo
{
  "ok": true,
  "method": "tasks.get",
  "result": {
    "found": true,
    "task": {
      "id": 401,
      "owner_type": "deal",
      "owner_id": 201,
      "type": "todo",
      "subject": "Revisar proposta",
      "completed": false,
      "responsible_id": null,
      "deadline": "2026-09-25T10:00:00",
      "responsible_name": null
    }
  }
}

Comportamento e observações

  • Exemplos ilustrativos e parciais: os registros podem retornar outros campos; não representam dados reais.
  • Ausente/fora da empresa: {found:false,task:null}.
  • deadline não traz offset de fuso horário em list/get.

Erros e condições específicas

Erros de tasks.get
HTTP / códigoCondição
400
BAD_REQUEST
Parâmetro obrigatório ausente ou valor inválido.

Também se aplicam os erros globais de autenticação, permissão e limite.

POSTtasks.listListar tarefas
Escopo recomendado: tasks.listLink direto ↗Página completa ↗

Lista atividades do CRM por dono, conclusão, responsável e atraso.

Parâmetros

Parâmetros de tasks.list
CampoDescrição
owner_typestringopcionaldeal (padrão), contact (contato comercial) ou lead.
owner_idintegeropcionalObrigatório se owner_type for enviado; se apenas owner_id for enviado, owner_type=deal.
completedbooleanopcionaltrue concluídas; false pendentes. Ausente inclui ambas.
responsible_idstring (uuid) | nullopcionalUsuário com acesso à empresa por vínculo principal ou multifilial.
overduebooleanopcionaltrue: somente pendentes com prazo anterior a NOW().
pageintegeropcionalPágina iniciada em 1; padrão 1.
limitintegeropcionalPadrão 25; mínimo 1, máximo 100.

Exemplo de chamada e resultado

Configure SYSLED_URL e SYSLED_TOKEN no servidor. Os dados são fictícios e o resultado pode conter outros campos.

cURL · JSON
curl --request POST \
  "$SYSLED_URL/api/v1/$SYSLED_TOKEN/tasks.list" \
  --header 'Content-Type: application/json' \
  --data '{"owner_type":"deal","owner_id":201,"completed":false,"page":1,"limit":25}'
HTTP 200 · exemplo
{
  "ok": true,
  "method": "tasks.list",
  "result": {
    "total": 1,
    "tasks": [
      {
        "id": 401,
        "owner_type": "deal",
        "owner_id": 201,
        "type": "todo",
        "subject": "Revisar proposta",
        "completed": false,
        "responsible_id": null,
        "deadline": "2026-09-25T10:00:00",
        "responsible_name": null
      }
    ]
  }
}

Comportamento e observações

  • Exemplos ilustrativos e parciais: os registros podem retornar outros campos; não representam dados reais.
  • total é tamanho da página, não total global. page/limit não são devolvidos.
  • Ordenação: pendentes primeiro, deadline crescente (nulos por último), criação decrescente.
  • O filtro responsible_id é de igualdade; null não serve para selecionar tarefas sem responsável.

Erros e condições específicas

Erros de tasks.list
HTTP / códigoCondição
400
BAD_REQUEST
Parâmetro obrigatório ausente ou valor inválido.
400
INVALID_OWNER_TYPE
owner_type fora de deal, contact, lead.

Também se aplicam os erros globais de autenticação, permissão e limite.

Catálogo

5
POSTproducts.brandsListar marcas
Escopo recomendado: products.brandsLink direto ↗Página completa ↗

Marcas ativas com produtos ativos, contagem por marca e ordenação alfabética.

Este método não exige parâmetros.

Exemplo de chamada e resultado

Configure SYSLED_URL e SYSLED_TOKEN no servidor. Os dados são fictícios e o resultado pode conter outros campos.

cURL · JSON
curl --request POST \
  "$SYSLED_URL/api/v1/$SYSLED_TOKEN/products.brands" \
  --header 'Content-Type: application/json' \
  --data '{}'
HTTP 200 · exemplo
{
  "ok": true,
  "method": "products.brands",
  "result": {
    "marcas": [
      {
        "marca_id": "22222222-2222-4222-8222-222222222222",
        "marca": "Marca exemplo",
        "total": 1
      }
    ]
  }
}

Comportamento e observações

  • Com Tiny conectado, considera apenas produtos de fonte tiny.
  • Marcas configuradas como ocultas não são devolvidas.
  • Use o campo marca, não marca_id, no filtro de products.list/search.

Erros e condições específicas

Erros de products.brands
HTTP / códigoCondição
403
TOKEN_NO_COMPANY
Token sem empresa associada.

Também se aplicam os erros globais de autenticação, permissão e limite.

POSTproducts.categoriesListar categorias
Escopo recomendado: products.categoriesLink direto ↗Página completa ↗

Categorias ativas com produtos ativos, contagem por categoria e ordenação alfabética.

Este método não exige parâmetros.

Exemplo de chamada e resultado

Configure SYSLED_URL e SYSLED_TOKEN no servidor. Os dados são fictícios e o resultado pode conter outros campos.

cURL · JSON
curl --request POST \
  "$SYSLED_URL/api/v1/$SYSLED_TOKEN/products.categories" \
  --header 'Content-Type: application/json' \
  --data '{}'
HTTP 200 · exemplo
{
  "ok": true,
  "method": "products.categories",
  "result": {
    "categorias": [
      {
        "categoria_id": "33333333-3333-4333-8333-333333333333",
        "categoria": "Categoria exemplo",
        "total": 1
      }
    ]
  }
}

Comportamento e observações

  • Com Tiny conectado, considera apenas produtos de fonte tiny.
  • Use o campo categoria, não categoria_id, no filtro de products.list/search.

Erros e condições específicas

Erros de products.categories
HTTP / códigoCondição
403
TOKEN_NO_COMPANY
Token sem empresa associada.

Também se aplicam os erros globais de autenticação, permissão e limite.

POSTproducts.getDetalhar produto
Escopo recomendado: products.getLink direto ↗Página completa ↗

Busca um SKU ativo da empresa e acrescenta descricao ao objeto de produto.

Parâmetros

Parâmetros de products.get
CampoDescrição
codigostringum dos dois obrigatórioSKU exato. Informe codigo OU sku; codigo tem precedência quando ambos são preenchidos.
skustringum dos dois obrigatórioAlternativa a codigo. Ao menos um dos dois deve ser informado.

Exemplo de chamada e resultado

Configure SYSLED_URL e SYSLED_TOKEN no servidor. Os dados são fictícios e o resultado pode conter outros campos.

cURL · JSON
curl --request POST \
  "$SYSLED_URL/api/v1/$SYSLED_TOKEN/products.get" \
  --header 'Content-Type: application/json' \
  --data '{"codigo":"DEMO-01"}'
HTTP 200 · exemplo
{
  "ok": true,
  "method": "products.get",
  "result": {
    "product": {
      "id": "11111111-1111-4111-8111-111111111111",
      "nome": "Produto de demonstração",
      "codigo": "DEMO-01",
      "idCatalogo": "100.000001",
      "marca": "Marca exemplo",
      "categoria": "Categoria exemplo",
      "imagemThumb": "https://assets.example.com/produto.png",
      "imagens": [
        "https://assets.example.com/produto.png"
      ],
      "imagensCount": 1,
      "specs": {
        "potencia": "10 W",
        "tensao": "220V"
      },
      "preco_venda": 25,
      "estoque": 12,
      "reservado": 2,
      "disponivel_qtd": 10,
      "disponivel": true,
      "motivo_indisponivel": null,
      "descricao": "Descrição ilustrativa do produto."
    }
  }
}

Comportamento e observações

  • Inclui os mesmos campos de estoque e disponibilidade da listagem mais descricao.
  • Não aplica o filtro fonte=tiny usado na listagem; um SKU conhecido pode ser consultado sem aparecer na grade filtrada.
  • descricao pode ser string vazia; não assuma HTML seguro para renderização.

Erros e condições específicas

Erros de products.get
HTTP / códigoCondição
403
TOKEN_NO_COMPANY
Token sem empresa associada.
400
BAD_REQUEST
codigo/sku não informado.
404
NOT_FOUND
Produto ativo não encontrado na empresa.

Também se aplicam os erros globais de autenticação, permissão e limite.

POSTproducts.listListar produtos
Escopo recomendado: products.listLink direto ↗Página completa ↗

Catálogo ativo da empresa do token com filtros e paginação por deslocamento.

Parâmetros

Parâmetros de products.list
CampoDescrição
qstringopcionalBusca tolerante por nome/SKU. Espaços ou * separam até 10 termos combinados com AND; cada termo e os campos comparados são normalizados para minúsculas e caracteres alfanuméricos, ignorando acentos, espaços e pontuação. Termos brutos formados apenas por dígitos e pontos também procuram idCatalogo sem pontos. products.search e products.list usam a mesma função.
marcastringopcionalNome exato da marca, não seu UUID.
categoriastringopcionalNome exato da categoria, não seu UUID.
familiastringopcionalFamília exata do cadastro.
tagstringopcionalTexto contido nas tags de origem do cadastro.
preco_minnumberopcionalPreço mínimo, em reais; valor não numérico é ignorado.
preco_maxnumberopcionalPreço máximo, em reais.
orderstringopcionalnome (padrão), preco_asc, preco_desc ou estoque. Valor desconhecido usa nome.
offsetintegeropcionalDeslocamento a partir de zero. Passe aqui o next_cursor convertido em número.
limitintegeropcionalRecomendado de 1 a 60; padrão 24 e teto 60. Use valores positivos; números negativos podem retornar INTERNAL_ERROR.

Exemplo de chamada e resultado

Configure SYSLED_URL e SYSLED_TOKEN no servidor. Os dados são fictícios e o resultado pode conter outros campos.

cURL · JSON
curl --request POST \
  "$SYSLED_URL/api/v1/$SYSLED_TOKEN/products.list" \
  --header 'Content-Type: application/json' \
  --data '{"limit":24,"offset":0}'
HTTP 200 · exemplo
{
  "ok": true,
  "method": "products.list",
  "result": {
    "items": [
      {
        "id": "11111111-1111-4111-8111-111111111111",
        "nome": "Produto de demonstração",
        "codigo": "DEMO-01",
        "idCatalogo": "100.000001",
        "marca": "Marca exemplo",
        "categoria": "Categoria exemplo",
        "imagemThumb": "https://assets.example.com/produto.png",
        "imagens": [
          "https://assets.example.com/produto.png"
        ],
        "imagensCount": 1,
        "specs": {
          "potencia": "10 W",
          "tensao": "220V"
        },
        "preco_venda": 25,
        "estoque": 12,
        "reservado": 2,
        "disponivel_qtd": 10,
        "disponivel": true,
        "motivo_indisponivel": null
      }
    ],
    "total": 1,
    "next_cursor": null
  }
}

Comportamento e observações

  • disponivel é a decisão pronta de compra; estoque é o saldo físico, reservado é o saldo comprometido e disponivel_qtd desconta reservas. Valores de estoque e preço podem ser null.
  • Indisponibilidade: sem_preco, sem_saldo ou esgotado. Produtos indisponíveis continuam na listagem dentro do recorte de fonte.
  • Com Tiny conectado, listagem, marcas e categorias consideram fonte tiny. products.get consulta SKU ativo da própria empresa sem esse filtro de fonte.
  • next_cursor é um deslocamento textual, não um cursor opaco: use como offset da próxima chamada até receber null.
  • Use o escopo exato do método. Escopos amplos não fazem parte deste perfil público.
  • O parâmetro herdado favoritos depende de usuário e não é utilizável nesta API por token.
  • A busca q não consulta descrição, ficha técnica nem specs; cada termo precisa aparecer no nome, SKU ou, quando numérico, em idCatalogo.

Erros e condições específicas

Erros de products.list
HTTP / códigoCondição
403
TOKEN_NO_COMPANY
Token sem empresa associada.

Também se aplicam os erros globais de autenticação, permissão e limite.

POSTproducts.searchBuscar produtos
Escopo recomendado: products.searchLink direto ↗Página completa ↗

Alias funcional de products.list. q é aceito mas não obrigatório na implementação.

Parâmetros

Parâmetros de products.search
CampoDescrição
qstringopcionalBusca tolerante por nome/SKU. Espaços ou * separam até 10 termos combinados com AND; cada termo e os campos comparados são normalizados para minúsculas e caracteres alfanuméricos, ignorando acentos, espaços e pontuação. Termos brutos formados apenas por dígitos e pontos também procuram idCatalogo sem pontos. products.search e products.list usam a mesma função.
marcastringopcionalNome exato da marca, não seu UUID.
categoriastringopcionalNome exato da categoria, não seu UUID.
familiastringopcionalFamília exata do cadastro.
tagstringopcionalTexto contido nas tags de origem do cadastro.
preco_minnumberopcionalPreço mínimo, em reais; valor não numérico é ignorado.
preco_maxnumberopcionalPreço máximo, em reais.
orderstringopcionalnome (padrão), preco_asc, preco_desc ou estoque. Valor desconhecido usa nome.
offsetintegeropcionalDeslocamento a partir de zero. Passe aqui o next_cursor convertido em número.
limitintegeropcionalRecomendado de 1 a 60; padrão 24 e teto 60. Use valores positivos; números negativos podem retornar INTERNAL_ERROR.

Exemplo de chamada e resultado

Configure SYSLED_URL e SYSLED_TOKEN no servidor. Os dados são fictícios e o resultado pode conter outros campos.

cURL · JSON
curl --request POST \
  "$SYSLED_URL/api/v1/$SYSLED_TOKEN/products.search" \
  --header 'Content-Type: application/json' \
  --data '{"q":"produto","limit":24}'
HTTP 200 · exemplo
{
  "ok": true,
  "method": "products.search",
  "result": {
    "items": [
      {
        "id": "11111111-1111-4111-8111-111111111111",
        "nome": "Produto de demonstração",
        "codigo": "DEMO-01",
        "idCatalogo": "100.000001",
        "marca": "Marca exemplo",
        "categoria": "Categoria exemplo",
        "imagemThumb": "https://assets.example.com/produto.png",
        "imagens": [
          "https://assets.example.com/produto.png"
        ],
        "imagensCount": 1,
        "specs": {
          "potencia": "10 W",
          "tensao": "220V"
        },
        "preco_venda": 25,
        "estoque": 12,
        "reservado": 2,
        "disponivel_qtd": 10,
        "disponivel": true,
        "motivo_indisponivel": null
      }
    ],
    "total": 1,
    "next_cursor": null
  }
}

Comportamento e observações

  • disponivel é a decisão pronta de compra; estoque é o saldo físico, reservado é o saldo comprometido e disponivel_qtd desconta reservas. Valores de estoque e preço podem ser null.
  • Indisponibilidade: sem_preco, sem_saldo ou esgotado. Produtos indisponíveis continuam na listagem dentro do recorte de fonte.
  • Com Tiny conectado, listagem, marcas e categorias consideram fonte tiny. products.get consulta SKU ativo da própria empresa sem esse filtro de fonte.
  • next_cursor é um deslocamento textual, não um cursor opaco: use como offset da próxima chamada até receber null.
  • Use o escopo exato do método. Escopos amplos não fazem parte deste perfil público.
  • O parâmetro herdado favoritos depende de usuário e não é utilizável nesta API por token.
  • A busca q não consulta descrição, ficha técnica nem specs; cada termo precisa aparecer no nome, SKU ou, quando numérico, em idCatalogo.

Erros e condições específicas

Erros de products.search
HTTP / códigoCondição
403
TOKEN_NO_COMPANY
Token sem empresa associada.

Também se aplicam os erros globais de autenticação, permissão e limite.

Shop

5
POSTshop.banners.listListar banners e carrossel
Escopo recomendado: shop.banners.listLink direto ↗Página completa ↗

Banners ativos dentro da janela de exibição, em ordem de prioridade e criação; inclui configuração do carrossel.

Parâmetros

Parâmetros de shop.banners.list
CampoDescrição
slotstringopcionalPosição exata do banner. Sem slot, retorna todas as posições.

Exemplo de chamada e resultado

Configure SYSLED_URL e SYSLED_TOKEN no servidor. Os dados são fictícios e o resultado pode conter outros campos.

cURL · JSON
curl --request POST \
  "$SYSLED_URL/api/v1/$SYSLED_TOKEN/shop.banners.list" \
  --header 'Content-Type: application/json' \
  --data '{"slot":"home"}'
HTTP 200 · exemplo
{
  "ok": true,
  "method": "shop.banners.list",
  "result": {
    "banners": [
      {
        "id": "44444444-4444-4444-8444-444444444444",
        "slot": "home",
        "titulo": "Banner de demonstração",
        "imagem_url": "https://assets.example.com/banner.png",
        "link_url": "https://loja.example.com/catalogo",
        "ordem": 0
      }
    ],
    "carrossel": {
      "efeito": "slide",
      "intervalo_ms": 5000,
      "transicao_ms": 600,
      "autoplay": true,
      "laco": true,
      "mostrar_setas": true,
      "mostrar_pontos": true,
      "pausar_no_hover": true
    }
  }
}

Comportamento e observações

  • carrossel pode ser null quando ausente, inválido ou indisponível. O consumidor deve ter fallback.
  • Configuração administrativa admite efeitos slide, fade, zoom, cover e none; intervalo de 1000 a 30000 ms e transição de 0 a 3000 ms.
  • Caminhos de imagem relativos são prefixados pela base pública configurada no servidor.

Erros e condições específicas

Erros de shop.banners.list
HTTP / códigoCondição
403
TOKEN_NO_COMPANY
Token sem empresa associada.

Também se aplicam os erros globais de autenticação, permissão e limite.

POSTshop.desconto.validarValidar cupom e descontos automáticos
Escopo recomendado: shop.desconto.validarLink direto ↗Página completa ↗

Calcula descontos com os preços atuais do catálogo. Retorna descontos aplicáveis e eventual recusa do código informado.

Parâmetros

Parâmetros de shop.desconto.validar
CampoDescrição
codigostringopcionalCupom informado. Normaliza para maiúsculas e remove espaços. Sem código, calcula automáticos.
itensarray<object> | string JSONobrigatórioLista de itens. Aceita array JSON ou string JSON. Preço enviado pelo cliente é ignorado.
itens[].skustringum dos dois obrigatórioSKU do produto. Em cada item informado, envie sku OU codigo; sku tem precedência quando ambos são preenchidos.
itens[].codigostringum dos dois obrigatórioAlternativa a itens[].sku. Em cada item informado, é necessário identificar o produto por sku OU codigo.
itens[].qtdintegeropcionalQuantidade; quantidade é alias; mínimo efetivo 1.
frete_centsintegeropcionalCotação de frete em centavos, usada somente para estimar o desconto; o valor final deve ser recalculado no fluxo comercial autorizado.
clienteobjectopcionalCPF/cpf_cnpj ou email para restrições de uso por comprador. Envie objeto JSON, não string.

Exemplo de chamada e resultado

Configure SYSLED_URL e SYSLED_TOKEN no servidor. Os dados são fictícios e o resultado pode conter outros campos.

cURL · JSON
curl --request POST \
  "$SYSLED_URL/api/v1/$SYSLED_TOKEN/shop.desconto.validar" \
  --header 'Content-Type: application/json' \
  --data '{"codigo":"DEMO10","itens":[{"sku":"DEMO-01","qtd":2}],"frete_cents":900,"cliente":{"email":"comprador@example.com"}}'
HTTP 200 · exemplo
{
  "ok": true,
  "method": "shop.desconto.validar",
  "result": {
    "descontos": [
      {
        "id": "66666666-6666-4666-8666-666666666666",
        "tipo": "pedido",
        "metodo": "codigo",
        "codigo": "DEMO10",
        "nome": "Desconto de demonstração",
        "valor_cents": 500,
        "valor": 5,
        "skus": [],
        "frete_gratis": false,
        "combina": {
          "produto": false,
          "pedido": false,
          "frete": false
        }
      }
    ],
    "valor_cents": 500,
    "frete_gratis": false,
    "frete_desconto_cents": 0,
    "valor": 5,
    "recusa": null
  }
}

Comportamento e observações

  • Tipos: produtos, compre_leve, pedido e frete. Esta consulta não registra o uso do cupom.
  • valor_cents e valor representam desconto nos produtos; frete_desconto_cents é separado. Não some frete grátis ao desconto de produtos duas vezes.
  • recusa, quando presente, contém codigo, motivo, min_valor_cents, min_itens e texto; é retorno de negócio HTTP 200.
  • Motivos: nao_encontrado, inativo, ainda_nao_comecou, expirado, esgotado, ja_usado, exige_identificacao, minimo_valor, minimo_itens, sem_itens_no_alvo, combo_nao_atingido, sem_frete, frete_acima_do_teto e tipo_desconhecido.
  • Item não encontrado ou sem preço positivo é ignorado nesta estimativa; a validação não garante disponibilidade do carrinho.
  • Pode haver descontos automáticos mesmo quando o cupom explícito é recusado. Um fluxo comercial posterior deve revalidar o resultado.

Erros e condições específicas

Erros de shop.desconto.validar
HTTP / códigoCondição
403
TOKEN_NO_COMPANY
Token sem empresa associada.

Também se aplicam os erros globais de autenticação, permissão e limite.

POSTshop.frete.calcularCalcular opções de frete
Escopo recomendado: shop.frete.calcularLink direto ↗Página completa ↗

Calcula tarifas compatíveis com o carrinho e destino, combinando perfis quando necessário.

Parâmetros

Parâmetros de shop.frete.calcular
CampoDescrição
cepstringobrigatórioCEP de destino; pontuação é normalizada. Envie 8 dígitos.
itensarray<object> | string JSONobrigatórioLista de SKU e quantidade. Este método aceita array JSON ou string JSON; string inválida vira lista vazia.
itens[].skustringum dos dois obrigatórioSKU do produto. Em cada item informado, envie sku OU codigo; sku tem precedência quando ambos são preenchidos.
itens[].codigostringum dos dois obrigatórioAlternativa a itens[].sku. Em cada item informado, é necessário identificar o produto por sku OU codigo.
itens[].qtdintegeropcionalQuantidade; quantidade é alias; valores são arredondados para baixo e limitados ao mínimo 1.

Exemplo de chamada e resultado

Configure SYSLED_URL e SYSLED_TOKEN no servidor. Os dados são fictícios e o resultado pode conter outros campos.

cURL · JSON
curl --request POST \
  "$SYSLED_URL/api/v1/$SYSLED_TOKEN/shop.frete.calcular" \
  --header 'Content-Type: application/json' \
  --data '{"cep":"01001000","itens":[{"sku":"DEMO-01","qtd":2}]}'
HTTP 200 · exemplo
{
  "ok": true,
  "method": "shop.frete.calcular",
  "result": {
    "cep": "01001000",
    "uf": "SP",
    "opcoes": [
      {
        "opcao_ids": [
          "55555555-5555-4555-8555-555555555555"
        ],
        "nome": "Entrega padrão",
        "valor_cents": 900,
        "prazo_min_dias": 2,
        "prazo_max_dias": 4,
        "id": "55555555-5555-4555-8555-555555555555",
        "valor": 9,
        "entrega_estimada": null
      }
    ],
    "retirada": null,
    "entrega_local": null,
    "origem": {
      "cep": "01001000",
      "uf": "SP"
    },
    "motivo": null,
    "itens_sem_frete": [],
    "peso_incompleto": false
  }
}

Comportamento e observações

  • Respostas sem cotação usam HTTP 200 e motivo cep_invalido, sem_itens, nao_configurado ou sem_cobertura. Não são falhas HTTP.
  • Use todos os opcao_ids para identificar a composição da opção calculada; id identifica somente a linha.
  • valor_cents é inteiro em centavos; valor é reais. Valor zero significa frete grátis.
  • entrega_estimada é null ou {de, ate, processamento_dias}; o cálculo considera dias úteis e processamento configurado.
  • entrega_local pode ser {ativo:true,elegivel:false} ou elegível com nome, valor_cents, valor, minimo_pedido_cents e instrucoes; zonas por raio podem acrescentar distancia, raio e unidade.
  • entrega_local pode coexistir com motivo sem_cobertura. Sua presença não garante elegibilidade em um fluxo comercial posterior.
  • peso_incompleto indica produtos cujo peso foi tratado como zero. O cálculo não é prova de disponibilidade/estoque.
  • Uma falta de cobertura em qualquer perfil impede cotação parcial do carrinho.
  • O cálculo por raio pode consultar um serviço de geocodificação e manter um cache técnico do CEP. Ele não cria nem altera pedidos, tarifas ou outras regras comerciais.

Erros e condições específicas

Erros de shop.frete.calcular
HTTP / códigoCondição
403
TOKEN_NO_COMPANY
Token sem empresa associada.

Também se aplicam os erros globais de autenticação, permissão e limite.

POSTshop.frete.configLer opções gerais de entrega
Escopo recomendado: shop.frete.configLink direto ↗Página completa ↗

Resumo para mostrar retirada e entrega local antes do CEP. Zonas e tarifas detalhadas não são expostas.

Este método não exige parâmetros.

Exemplo de chamada e resultado

Configure SYSLED_URL e SYSLED_TOKEN no servidor. Os dados são fictícios e o resultado pode conter outros campos.

cURL · JSON
curl --request POST \
  "$SYSLED_URL/api/v1/$SYSLED_TOKEN/shop.frete.config" \
  --header 'Content-Type: application/json' \
  --data '{}'
HTTP 200 · exemplo
{
  "ok": true,
  "method": "shop.frete.config",
  "result": {
    "retirada": {
      "ativo": true,
      "prazo": "24h",
      "prazo_label": "Normalmente pronto em 24 horas",
      "mensagem": "Aguarde a confirmação.",
      "instrucoes": "Retirada no balcão."
    },
    "entrega_local": {
      "ativo": true,
      "a_partir_de_cents": 900,
      "a_partir_de": 9,
      "zonas": 2
    },
    "datas_estimadas": true,
    "origem": {
      "cep": "01001000",
      "uf": "SP"
    }
  }
}

Comportamento e observações

  • retirada e entrega_local podem ser null.
  • a_partir_de é o menor preço cadastrado, não uma cotação para o cliente.
  • A filial pode herdar regras da matriz; a origem é resolvida para a filial.

Erros e condições específicas

Erros de shop.frete.config
HTTP / códigoCondição
403
TOKEN_NO_COMPANY
Token sem empresa associada.

Também se aplicam os erros globais de autenticação, permissão e limite.

POSTshop.loja.configLer identidade e aparência da loja
Escopo recomendado: shop.loja.configLink direto ↗Página completa ↗

Configuração pública de marca, contatos, políticas, avisos, rodapé, formas de pagamento anunciadas e aparência.

Este método não exige parâmetros.

Exemplo de chamada e resultado

Configure SYSLED_URL e SYSLED_TOKEN no servidor. Os dados são fictícios e o resultado pode conter outros campos.

cURL · JSON
curl --request POST \
  "$SYSLED_URL/api/v1/$SYSLED_TOKEN/shop.loja.config" \
  --header 'Content-Type: application/json' \
  --data '{}'
HTTP 200 · exemplo
{
  "ok": true,
  "method": "shop.loja.config",
  "result": {
    "nome": "Loja de demonstração",
    "logo_url": "https://assets.example.com/logo.png",
    "logo_quadrada_url": "https://assets.example.com/logo-square.png",
    "descricao": "Descrição ilustrativa.",
    "slogan": null,
    "cores": {
      "principal": "#2684ff",
      "texto": "#0f1621"
    },
    "contato": {
      "whatsapp": null,
      "email": "loja@example.com",
      "endereco": null,
      "telefone": null,
      "cnpj": null
    },
    "busca_placeholder": null,
    "rodape": {
      "colunas": null
    },
    "topbar": {
      "avisos": [],
      "frete_gratis_acima": null,
      "desconto_pix": null,
      "atacado_url": null,
      "atendimento": null
    },
    "pagamentos": [
      "pix"
    ],
    "politicas": {
      "troca": null,
      "privacidade": null,
      "entrega": null
    },
    "aparencia": {
      "cores": {
        "fundo": null,
        "superficie": null,
        "botao": null,
        "botao_texto": null
      },
      "fonte": null,
      "banner": {
        "ativo": false,
        "titulo": null,
        "subtitulo": null,
        "imagem_url": null,
        "cta_texto": null,
        "cta_url": null
      },
      "destaques": {
        "ativo": false,
        "titulo": null,
        "skus": []
      }
    },
    "completa": true
  }
}

Comportamento e observações

  • Campos não configurados podem ser null, arrays vazios ou blocos com defaults. completa exige nome e logo própria da loja: a implementação atual não considera a logo herdada da empresa nesse indicador.
  • Nome e logo podem usar fallback da empresa. URLs de logo devem ser HTTP(S) absolutas.
  • topbar.avisos é lista resolvida de {texto,destaque?,url?}. rodape.colunas é null ou lista de {titulo,links:[{rotulo,url?}]}. Lista vazia é escolha explícita de não mostrar colunas.
  • pagamentos descreve meios anunciados: pix, visa, mastercard, elo, amex, hipercard e boleto. Não é consulta da capacidade efetiva do gateway.
  • Aparência inclui fonte inter, poppins, roboto, lato, playfair ou system (ou null), banner e até 24 SKUs de destaque.
  • Políticas são conteúdo textual cadastrado pela loja; renderize como texto seguro.

Erros e condições específicas

Erros de shop.loja.config
HTTP / códigoCondição
403
TOKEN_NO_COMPANY
Token sem empresa associada.

Também se aplicam os erros globais de autenticação, permissão e limite.

Marketing

1
POSTmarketing.funnelConsultar funil de marketing
Escopo recomendado: marketing.funnelLink direto ↗Página completa ↗

Agrega leads de mídia paga, oportunidades e vendas por dia em um funil, incluindo dias sem atividade e fotografia atual de oportunidades paradas.

Parâmetros

Parâmetros de marketing.funnel
CampoDescrição
fromstring (YYYY-MM-DD)obrigatórioData inicial inclusiva.
tostring (YYYY-MM-DD)obrigatórioData final inclusiva. Intervalo de 1 a 92 dias.
pipeline_idintegerobrigatórioID positivo do funil acessível à empresa.

Exemplo de chamada e resultado

Configure SYSLED_URL e SYSLED_TOKEN no servidor. Os dados são fictícios e o resultado pode conter outros campos.

cURL · JSON
curl --request POST \
  "$SYSLED_URL/api/v1/$SYSLED_TOKEN/marketing.funnel" \
  --header 'Content-Type: application/json' \
  --data '{"from":"2026-09-18","to":"2026-09-18","pipeline_id":1}'
HTTP 200 · exemplo
{
  "ok": true,
  "method": "marketing.funnel",
  "result": {
    "company_id": "44444444-4444-4444-8444-444444444444",
    "from": "2026-09-18",
    "to": "2026-09-18",
    "generated_at": "2026-09-18T15:00:00.000Z",
    "days": [
      {
        "date": "2026-09-18",
        "leads": {
          "total": 0,
          "google": 0,
          "meta": 0,
          "other": 0,
          "junk": 0,
          "junk_by_reason": []
        },
        "opportunities": {
          "created": 0,
          "value": 0,
          "by_channel": [],
          "by_pipeline": []
        },
        "sales": {
          "won": 0,
          "value": 0,
          "by_channel": [],
          "by_pipeline": [],
          "lost": 0,
          "lost_by_reason": []
        }
      }
    ],
    "stalled": {
      "snapshot_date": "2026-09-18",
      "buckets": [
        {
          "label": "Mais de 15 dias",
          "count": 0,
          "value": 0
        },
        {
          "label": "11 a 15 dias",
          "count": 0,
          "value": 0
        },
        {
          "label": "8 a 10 dias",
          "count": 0,
          "value": 0
        },
        {
          "label": "4 a 7 dias",
          "count": 0,
          "value": 0
        },
        {
          "label": "Até 3 dias",
          "count": 0,
          "value": 0
        }
      ]
    },
    "pipelines": [
      {
        "id": 1,
        "name": "Funil de exemplo"
      }
    ]
  }
}

Comportamento e observações

  • Leads são contatos criados no período com sinais de mídia paga no rastreio ou nas classificações configuradas; não equivalem a todos os leads cadastrados no CRM.
  • Oportunidades/vendas/perdas consideram negócios ligados à coorte de contatos do período e ao pipeline_id; descartes contam a data de junk e podem envolver contatos criados antes do período.
  • stalled é uma fotografia atual de todos os negócios em processo no funil, não um histórico filtrado por from/to.
  • by_pipeline pode incluir uma segmentação adicional de tipo de orçamento; by_channel pode conter mais de uma entrada com o mesmo label e exigir soma no consumidor.
  • As datas da consulta usam o fuso configurado na instância; generated_at e snapshot_date são produzidos em UTC. Não é cálculo de ROAS e não retorna gasto de mídia.
  • Resposta ilustrativa do campo result; IDs, nomes e valores são fictícios. Campos adicionais podem existir.

Erros e condições específicas

Erros de marketing.funnel
HTTP / códigoCondição
400
INVALID_DATE_RANGE
Datas ausentes/inválidas ou intervalo fora de 1 a 92 dias.
400
PIPELINE_ID_REQUIRED
pipeline_id ausente ou não inteiro positivo.
400
PIPELINE_NOT_FOUND
Funil não encontrado para a empresa.
403
TOKEN_NO_COMPANY
Token sem empresa associada.

Também se aplicam os erros globais de autenticação, permissão e limite.

Downloads e ferramentas

O OpenAPI e o catálogo JSON contêm exatamente os mesmos 18 métodos desta edição pública.

Cada método possui schemas próprios de requisição, resultado e envelope. Tipos derivados dos exemplos são conservadores e objetos permanecem extensíveis para campos adicionais.

Sobre

Esta edição cobre a API externa por token, exclusivamente nos métodos apresentados. APIs administrativas, operações de escrita e integrações de eventos possuem processos de liberação separados.

Revisão documental 2026-10-02. Exemplos sintéticos; sem credenciais, dados de clientes, caminhos internos ou detalhes de infraestrutura.