WebSystem Provider
Recursos Módulos Planos API Contato
Demonstração
Para desenvolvedores

API Pública

Conecte chatbots, URA, aplicativos e ferramentas de BI ao WebSystem Provider: consulte clientes, contratos e faturas, entregue a segunda via, aplique o desbloqueio de confiança e abra chamados.

Versão v1 REST + JSON Autenticação por chave Incluída na assinatura

Começando

Visão geral Criar uma chave Autenticação Endereço da API Formato das respostas Paginação Erros Limites de uso Permissões

Endpoints

GET/status GET/clientes GET/clientes/{id} GET/contratos/{id} POST/contratos/{id}/desbloqueio-confianca GET/faturas GET/faturas/{id} GET/chamados GET/chamados/{id} POST/chamados GET/planos

Guia

Exemplo: fluxo de chatbot Segurança e boas práticas Versões e mudanças Suporte

Visão geral

A API pública permite que qualquer sistema se integre ao provedor que usa o WebSystem Provider: plataformas de atendimento e chatbot, URA, aplicativos próprios, painéis de BI e automações. Ela é REST, recebe e devolve JSON em UTF-8, e usa nomes de campos em português.

Nesta versão você pode:

  • localizar o cliente pelo CPF/CNPJ ou telefone e ver os contratos, a situação e o status de conexão;
  • listar faturas e entregar a segunda via (link, PDF, PIX copia e cola e linha digitável);
  • aplicar o desbloqueio de confiança, com as mesmas regras do autoatendimento;
  • consultar e abrir chamados;
  • consultar os planos ativos.

Cada provedor tem o seu próprio ambiente e as suas próprias chaves. A chave criada por um provedor só acessa os dados daquele provedor.

Criar uma chave

A chave é criada pelo provedor, dentro do sistema:

  • Acesse Configurações → API pública e clique em Nova chave.
  • Dê um nome que identifique o sistema que vai usá-la (ex.: “Chatbot da Empresa X”).
  • Marque só as permissões necessárias. Opcionalmente, restrinja os IPs de origem, ajuste o limite por minuto e defina uma validade.
  • Copie a chave exibida. Ela começa com wsp_ e só é mostrada uma vez.

Por padrão, apenas usuários com perfil Administrador podem criar e revogar chaves. A permissão pode ser liberada para outros perfis no card de Permissões, em Configurações → Chaves da API pública.

Autenticação

Envie a chave em toda requisição, no cabeçalho Authorization:

Authorization: Bearer wsp_SUA_CHAVE_AQUI

Se a sua ferramenta não permitir esse cabeçalho, use X-API-Key:

X-API-Key: wsp_SUA_CHAVE_AQUI

Chave inexistente, revogada ou expirada recebe 401. Chamada de um IP fora da lista autorizada recebe 403.

Endereço da API

A API fica no mesmo endereço do painel do provedor, seguido de /api/v1. O endereço exato aparece em Configurações → API pública, com botão para copiar.

https://painel.seuprovedor.com.br/api/v1

A API é feita para ser chamada de servidor para servidor. Não use a chave em código que roda no navegador ou em aplicativo instalado no celular do assinante: qualquer pessoa conseguiria lê-la. Nesses casos, chame a API a partir do seu backend.

Formato das respostas

Toda resposta de sucesso tem "sucesso": true e os dados em dados:

{
  "sucesso": true,
  "dados": { "id": 5, "nome": "João Silva" }
}

Convenções:

  • Datas sem hora no formato AAAA-MM-DD; data e hora em ISO 8601, em UTC (2026-10-13T15:04:05.000Z).
  • Valores em reais como número decimal com 2 casas (99.9 = R$ 99,90).
  • Situações e tipos em minúsculas e sem acento (ativo, bloqueado, vencida).
  • Campo sem informação vem como null, nunca omitido.

Paginação

Listas aceitam pagina (começa em 1) e por_pagina (padrão 20, máximo 100), e devolvem o bloco paginacao:

{
  "sucesso": true,
  "dados": [ ... ],
  "paginacao": { "pagina": 1, "por_pagina": 20, "total": 134, "total_paginas": 7 }
}

Erros

Em caso de erro, a resposta tem "sucesso": false e um código estável, que o seu sistema pode tratar:

{
  "sucesso": false,
  "erro": { "codigo": "permissao_insuficiente", "mensagem": "Esta chave não tem a permissão \"financeiro:leitura\"." }
}
HTTPCódigoQuando acontece
400parametro_invalidoParâmetro ou corpo fora do formato esperado. A mensagem diz qual campo.
400cpf_cnpj_invalido · telefone_invalido · id_invalidoValor de busca inválido.
401chave_ausente · chave_invalidaChave não enviada ou inexistente.
401chave_revogada · chave_expiradaA chave foi revogada pelo provedor ou passou da validade.
403ip_nao_autorizadoA chamada veio de um IP fora da lista autorizada da chave.
403permissao_insuficienteA chave não tem a permissão exigida pela rota.
404nao_encontrado · rota_inexistenteRegistro ou rota inexistente.
409desbloqueio_ativoO contrato já está com desbloqueio de confiança em vigor.
422ver cada endpointA regra de negócio não permite a ação (ex.: contrato_nao_bloqueado).
429limite_excedidoLimite de requisições por minuto atingido. Veja limites.
500erro_internoFalha inesperada. Tente de novo; se persistir, fale com o suporte.

Limites de uso

Cada chave tem um limite de requisições por minuto, definido pelo provedor na criação (padrão 120/min, até 1.200/min). Toda resposta informa o consumo:

CabeçalhoSignificado
X-RateLimit-LimitRequisições permitidas por minuto.
X-RateLimit-RemainingQuantas ainda restam na janela atual.
X-RateLimit-ResetSegundos até a janela reiniciar.
Retry-AfterSó na resposta 429: segundos para tentar de novo.

Ao receber 429, aguarde o tempo de Retry-After antes de repetir. Não repita em loop.

Permissões

Cada rota exige uma permissão, marcada pelo provedor ao criar a chave:

PermissãoLibera
clientes:leituraConsultar clientes e contratos.
financeiro:leituraConsultar faturas e segunda via.
contratos:desbloqueioAplicar desbloqueio de confiança.
chamados:leituraConsultar chamados.
chamados:escritaAbrir chamados.
planos:leituraConsultar planos ativos.

Endpoints

Nos exemplos, troque $API pelo endereço da API do provedor e $CHAVE pela chave.

GET/statusqualquer chave válida

Testar a chave

Confirma que a chave funciona e mostra o provedor e as permissões dela. Use para testar a integração.

curl "$API/status" -H "Authorization: Bearer $CHAVE"
{
  "sucesso": true,
  "dados": {
    "provedor": "Fibra Exemplo Telecom",
    "chave": "Chatbot da Empresa X",
    "permissoes": ["clientes:leitura", "financeiro:leitura"],
    "versao": "v1"
  }
}
GET/clientesclientes:leitura

Listar ou buscar clientes

Sem filtros, lista todos os clientes. Com cpf_cnpj, encontra o cliente pelo documento, com ou sem pontuação. Cada cliente vem com os contratos.

Parâmetros (query)

NomeDescrição
cpf_cnpjCPF (11 dígitos) ou CNPJ (14 dígitos).
telefoneTelefone com DDD. Compara pelos últimos 8 dígitos.
situacaoativo, bloqueado, cancelado, inativo, observacao ou pre_cadastro.
pagina, por_paginaPaginação.
curl "$API/clientes?cpf_cnpj=123.456.789-09" -H "Authorization: Bearer $CHAVE"
{
  "sucesso": true,
  "dados": [
    {
      "id": 5,
      "nome": "João Silva",
      "nome_fantasia": null,
      "tipo": "pf",
      "cpf_cnpj": "123.456.789-09",
      "email": "joao@email.com",
      "telefones": ["95999990000"],
      "situacao": "ativo",
      "data_nascimento": null,
      "criado_em": "2026-01-10T12:00:00.000Z",
      "endereco": { "cep": "69300000", "logradouro": "Rua A", "numero": "10", "complemento": null, "bairro": "Centro", "cidade": "Boa Vista", "uf": "RR" },
      "contratos": [
        {
          "id": 10,
          "cliente_id": 5,
          "situacao": "ativo",
          "conexao": "online",
          "tipo_conexao": "pppoe",
          "login": "joao",
          "mac": null,
          "ip": "100.64.0.10",
          "tipo_cobranca": "pos_pago",
          "dia_vencimento": 10,
          "valor": 99.9,
          "ativado_em": "2026-01-15",
          "bloqueado_em": null,
          "desbloqueio_confianca": { "ativo": false, "ate": null },
          "plano": { "id": 3, "nome": "300 Mega", "download_mbps": 300, "upload_mbps": 150 },
          "endereco_instalacao": { "cep": "69300000", "logradouro": "Rua A", "numero": "10", "complemento": null, "bairro": "Centro", "cidade": "Boa Vista", "uf": "RR" }
        }
      ]
    }
  ],
  "paginacao": { "pagina": 1, "por_pagina": 20, "total": 1, "total_paginas": 1 }
}

situacao do contrato: pendente, ativo, bloqueado, inativo, cancelado ou cancelado_definitivo. conexao: online, offline ou desconhecido. tipo_cobranca: pos_pago, pre_pago ou isento.

GET/clientes/{id}clientes:leitura

Consultar um cliente

Mesmo formato de um item de /clientes, com os contratos.

curl "$API/clientes/5" -H "Authorization: Bearer $CHAVE"
GET/contratos/{id}clientes:leitura

Consultar um contrato

Mesmo formato do contrato dentro do cliente: situação, status de conexão, plano, valor, vencimento e desbloqueio de confiança em vigor.

curl "$API/contratos/10" -H "Authorization: Bearer $CHAVE"
POST/contratos/{id}/desbloqueio-confiancacontratos:desbloqueio

Aplicar desbloqueio de confiança

Libera a conexão de um contrato bloqueado por falta de pagamento, pelo prazo definido nas regras de cobrança do provedor. Valem as mesmas regras do autoatendimento (Central do Assinante e WhatsApp):

  • o desbloqueio de confiança precisa estar habilitado nas regras de cobrança do provedor;
  • o contrato precisa estar bloqueado por cobrança: bloqueio feito manualmente pelo provedor só sai pelo atendimento;
  • depois do primeiro uso, um novo desbloqueio só é liberado quando a fatura que motivou o anterior for quitada.

Corpo (opcional)

CampoDescrição
motivoTexto livre, até 500 caracteres. Aparece no histórico do contrato.
curl -X POST "$API/contratos/10/desbloqueio-confianca" \
  -H "Authorization: Bearer $CHAVE" -H "Content-Type: application/json" \
  -d '{"motivo": "Cliente informou que paga amanhã"}'
{
  "sucesso": true,
  "dados": { "contrato_id": 10, "dias": 3, "ate": "2026-10-16T15:00:00.000Z" }
}

Recusas possíveis

HTTPCódigoSignificado
422desbloqueio_desabilitadoO provedor não habilitou o desbloqueio de confiança.
422contrato_nao_bloqueadoO contrato não está bloqueado.
422bloqueio_manualO bloqueio foi feito pelo provedor; só o atendimento libera.
422fatura_anterior_em_abertoO desbloqueio já foi usado e a fatura anterior não foi paga.
409desbloqueio_ativoJá existe um desbloqueio em vigor.
GET/faturasfinanceiro:leitura

Listar faturas

Lista faturas, da mais recente para a mais antiga. As faturas em aberto já vêm com a segunda via.

Parâmetros (query)

NomeDescrição
cliente_idFaturas de um cliente.
contrato_idFaturas de um contrato.
situacaoaberta (pendente + vencida), pendente, vencida, paga, cancelada, estornada ou todas (padrão).
vencimento_de, vencimento_atePeríodo de vencimento, no formato AAAA-MM-DD.
pagina, por_paginaPaginação.
curl "$API/faturas?cliente_id=5&situacao=aberta" -H "Authorization: Bearer $CHAVE"
{
  "sucesso": true,
  "dados": [
    {
      "id": 77,
      "cliente_id": 5,
      "contrato_id": 10,
      "descricao": "Mensalidade 300 Mega",
      "situacao": "vencida",
      "tipo": "boleto",
      "valor": 99.9,
      "valor_atualizado": null,
      "valor_pago": 0,
      "vencimento": "2026-10-10",
      "emitida_em": "2026-09-25T10:00:00.000Z",
      "pago_em": null,
      "segunda_via": {
        "link_pagamento": "https://banco.exemplo/boleto/77",
        "pdf": "https://banco.exemplo/boleto/77.pdf",
        "pagina_pix": "https://painel.seuprovedor.com.br/api/billings/77/pix",
        "pix_copia_cola": "00020126580014br.gov.bcb.pix...",
        "linha_digitavel": "23793.38128 60000.000003 00000.000000 1 00000000000000",
        "codigo_barras": "23791000000000000003381286000000000000000000"
      }
    }
  ],
  "paginacao": { "pagina": 1, "por_pagina": 20, "total": 1, "total_paginas": 1 }
}
  • segunda_via só vem preenchida em fatura pendente ou vencida; nas demais é null.
  • Cada campo da segunda via pode ser null, conforme o banco e o tipo de cobrança. Fatura só PIX não tem linha digitável.
  • pagina_pix é a página de pagamento PIX do provedor. O QR é gerado de novo a cada abertura, então o link não expira.
  • valor_atualizado aparece quando o PIX foi recalculado com multa e juros: é o valor a pagar hoje.
  • tipo: boleto, pix, carne ou carteira.
GET/faturas/{id}financeiro:leitura

Consultar uma fatura

Mesmo formato de um item de /faturas, com a segunda via quando em aberto.

curl "$API/faturas/77" -H "Authorization: Bearer $CHAVE"
GET/chamadoschamados:leitura

Listar chamados

Parâmetros (query)

NomeDescrição
cliente_id, contrato_idFiltra por cliente ou contrato.
situacaoaberto, pendente, pendente_terceiro, em_andamento, reaberto, solucionado, cancelado ou em_aberto (todos que ainda não foram encerrados).
pagina, por_paginaPaginação.
curl "$API/chamados?cliente_id=5&situacao=em_aberto" -H "Authorization: Bearer $CHAVE"
{
  "sucesso": true,
  "dados": [
    {
      "id": 300,
      "cliente_id": 5,
      "contrato_id": 10,
      "situacao": "aberto",
      "prioridade": "alta",
      "categoria": "TECNICO",
      "assunto": "Sem internet",
      "descricao": "Luz vermelha no roteador desde ontem.",
      "solucao": null,
      "aberto_em": "2026-10-13T12:00:00.000Z",
      "fechado_em": null,
      "agendado_para": null
    }
  ],
  "paginacao": { "pagina": 1, "por_pagina": 20, "total": 1, "total_paginas": 1 }
}

Antes de abrir um chamado novo, consulte os chamados em_aberto do cliente para não duplicar o atendimento.

GET/chamados/{id}chamados:leitura

Consultar um chamado

curl "$API/chamados/300" -H "Authorization: Bearer $CHAVE"
POST/chamadoschamados:escrita

Abrir chamado

O chamado entra na fila do provedor como qualquer outro, e a equipe recebe o aviso de chamado novo com origem API.

Corpo

CampoDescrição
cliente_id *Cliente do chamado.
contrato_idContrato relacionado (precisa ser do mesmo cliente).
assunto *De 3 a 300 caracteres.
descricao *De 3 a 5.000 caracteres.
prioridadebaixa, normal (padrão), alta ou urgente.
categoriaTECNICO, FINANCEIRO, COMERCIAL, INSTALACAO, CANCELAMENTO ou OUTRO.
curl -X POST "$API/chamados" \
  -H "Authorization: Bearer $CHAVE" -H "Content-Type: application/json" \
  -d '{
    "cliente_id": 5,
    "contrato_id": 10,
    "assunto": "Sem internet",
    "descricao": "Luz vermelha no roteador desde ontem. Cliente prefere visita pela manhã.",
    "prioridade": "alta",
    "categoria": "TECNICO"
  }'

Responde 201 com o chamado criado, no mesmo formato de /chamados/{id}.

GET/planosplanos:leitura

Listar planos ativos

curl "$API/planos" -H "Authorization: Bearer $CHAVE"
{
  "sucesso": true,
  "dados": [
    { "id": 3, "nome": "300 Mega", "download_mbps": 300, "upload_mbps": 150, "valor": 99.9, "tecnologia": "FIBRA", "descricao": null }
  ]
}

Exemplo: fluxo de chatbot

Um atendimento típico de segunda via e desbloqueio pelo WhatsApp:

  • 1. O assinante informa o CPF → GET /clientes?cpf_cnpj=....
  • 2. Se houver mais de um contrato, pergunte qual. A situação e a conexao de cada um ajudam a orientar.
  • 3. Pediu o boleto → GET /faturas?contrato_id=...&situacao=aberta e envie o link_pagamento ou o pix_copia_cola.
  • 4. Contrato bloqueado e o cliente promete pagar → POST /contratos/{id}/desbloqueio-confianca. Em caso de recusa, a mensagem já explica o motivo ao cliente.
  • 5. Problema técnico → consulte GET /chamados?cliente_id=...&situacao=em_aberto; se não houver chamado sobre o mesmo assunto, POST /chamados.

Segurança e boas práticas

  • Guarde a chave como senha. Nunca a coloque em código de navegador, aplicativo de celular, repositório público ou URL.
  • Uma chave por sistema. Assim o provedor revoga só o que precisa, e a auditoria mostra quem fez cada ação.
  • Permissões mínimas e, sempre que possível, restrição de IP ao servidor da integração.
  • Revogue a chave assim que a integração deixar de ser usada ou houver suspeita de vazamento. A revogação vale na hora.
  • Toda ação que altera dados (desbloqueio, abertura de chamado) aparece na Auditoria de Usuários do provedor, com o nome da chave e o IP de origem.
  • A API devolve dados pessoais de assinantes. Quem integra é responsável por tratá-los conforme a LGPD, só para a finalidade combinada com o provedor.

Versões e mudanças

A versão faz parte do endereço (/api/v1). Dentro da v1, nenhum campo existente muda de nome ou de tipo, e nenhum é removido. Podem entrar campos e rotas novos, então ignore campos que o seu sistema não conhece. Mudanças incompatíveis, se um dia forem necessárias, virão numa /api/v2, com a v1 mantida por um período de transição.

DataMudança
13/10/2026Lançamento da v1: clientes, contratos, faturas e segunda via, desbloqueio de confiança, chamados e planos.

Suporte

Dúvidas técnicas sobre a integração podem ser enviadas pelos nossos canais. Para pedir acesso a um provedor específico, fale diretamente com ele: as chaves são criadas e controladas pelo próprio provedor.

  • E-mail: websystemprovider@gmail.com
  • WhatsApp: (95) 98109-6166
WebSystem Provider

Sistema completo de gestão para provedores de internet — financeiro, rede, atendimento e muito mais.

(95) 98109-6166 websystemprovider@gmail.com @websystempro @WebsystemProvider
Início API Pública Política de Privacidade Termos de Uso
© WebSystem Provider