Entrar

Entrando pelo Nexus…

Abrir fora do Nexus
purchasecron master
painel de workers

Entrar

Use seu email e senha do painel.

Primeiro acesso?

purchasecron master
primeiro acesso

Criar admin inicial

Só funciona enquanto não houver nenhum admin cadastrado. Use o MASTER_ADMIN_SECRET configurado no Worker.

purchasecron
master
Navegação
··
Painel master

Workers

Workers
—
Lojas ativas
—
Lojas inativas
—
Em debug
—

Usuários do painel

EmailRoleCriado emPor

Google Merchant

Uma conexão com a conta central atende todos os clientes autorizados. Em cada worker, informe apenas o ID do Merchant.

Consulte o status da conexão.

A autorização é renovada automaticamente. Se o Google revogar o acesso, reconecte aqui uma única vez para todos os clientes.

Minha API

Verificando seu acesso à API…

Chaves pessoais e manuais vinculadas à sua conta seguem as mesmas permissões atuais. Não permitem alterações.

Até 5 chaves ativas por usuário. Copie a chave na criação, ela não será exibida novamente.
NomeCriada emStatusAções

Gerenciar APIs

Escolha uma conta para revisar suas permissões e chaves. Sua senha de superadmin confirma as alterações e a geração, não a senha do destinatário. Liberar a API não amplia o acesso ao painel.

Permissões de leitura
Tipos de consulta

Até 5 chaves ativas de autoatendimento. Chaves manuais também podem ser revogadas.
NomeOrigemCriada emStatusAções

Documentação v1

Começar

Visão geral Autenticação Primeira consulta

Consultas

Clientes Pedidos Resumo do período NOK atual

Integração

Paginação Uso no n8n Erros

Aprenda / API de leitura

API de leitura

A API permite leitura dos clientes e tipos liberados para sua conta. Só aceita GET e não envia eventos, não faz retry e não altera pedidos ou configurações. Permissões são conferidas a cada requisição, inclusive nas chaves manuais.

O endereço acompanha a origem desta página. O guia não confirma se a API ou seu token já estão configurados neste ambiente.

Da credencial à consulta

  1. Gere sua chave em Minha API e copie para seu consumidor interno.
  2. Consulte Clientes e copie o ID literal da loja.
  3. Use Pedidos, Resumo do período ou NOK atual conforme a leitura necessária.

Antes de começar

O cliente loja-exemplo e o período de 1 a 7 de outubro de 2026 são ilustrativos. Consulte primeiro o inventário e substitua pelo campo cliente literal, sem o prefixo purchasecron-. Não corte espaços, não converta maiúsculas nem tente corrigir o ID.

Autenticação

Gere uma chave em Minha API. Não use o token do login. A chave aparece uma única vez na criação. Credenciais manuais permanecem com o administrador responsável. O painel não executa os exemplos.

Envie Authorization com Bearer <token dedicado> pelo header em HTTPS. Guarde o segredo apenas no consumidor interno, em variável de ambiente privada ou credencial privada do n8n. Nunca coloque em URL, HTML, JavaScript público, console ou logs. Não há CORS público nem autenticação por cookie ou sessão.

Primeira consulta

Execute apenas em um ambiente interno. Configure READ_API_TOKEN de forma privada fora deste painel, sem gravar o valor no histórico do shell. O comando usa essa variável, não um token embutido. Substitua o ID ilustrativo pelo inventário antes de executar.

Requisição · curl

GET/api/read/v1/clients

Clientes

Inventário somente dos clientes autorizados, com clients, total e nextCursor. Cada cliente traz cliente, script_name e has_database. Aceita só limit e cursor. Um worker sem banco continua no inventário, mas não tem pedidos consultáveis.

Parâmetros

Parâmetros de Clientes
Parâmetro Uso
limitinteger · opcional De 1 a 500, padrão 100. Sem sinal ou zeros à esquerda.
cursorstring · opcional O nextCursor anterior, intacto e codificado com URLSearchParams. Comece sem cursor.

Envie cada parâmetro uma vez. Valores vazios ou desconhecidos retornam 400.


Requisição · curl

200 · JSON ilustrativo
{
  "clients": [
    {
      "cliente": "loja-exemplo",
      "script_name": "purchasecron-loja-exemplo",
      "has_database": true
    }
  ],
  "total": 1,
  "nextCursor": null
}

Dados inventados para explicar o formato. Não são resultados deste ambiente.

GET/api/read/v1/clients/:cliente/orders

Pedidos

Retorna orders, totals e nextCursor. Traz IDs, status técnico, valores, origem e datas, sem payload ou dados pessoais. Preserve os IDs textuais, inclusive zeros à esquerda. totals cobre todo o filtro na primeira página, não só as linhas retornadas. Nas continuações é null.

totals traz total_count, total_value, processed_count e processed_value. VTEX pode incluir siblings_count. O valor processado usa confirm_value quando existe, senão value. Os opcionais ausentes são null.

Parâmetros

Parâmetros de Pedidos
Parâmetro Uso
clientestring · obrigatório no caminho ID literal do inventário, sem purchasecron-. Não corte espaços, não converta maiúsculas nem tente corrigir o ID. master e v2 são reservados.
limitinteger · opcional De 1 a 500, padrão 100. Sem sinal ou zeros à esquerda.
cursorstring · opcional O nextCursor anterior, intacto e codificado com URLSearchParams. Comece sem cursor.
date_fromdate · opcional Data real YYYY-MM-DD. Início inclusivo em BRT, UTC-03:00, sobre created_at.
date_todate · opcional Data real YYYY-MM-DD. Fim inclusivo em BRT. O início não pode superar o fim. Sem limites, consulta o histórico armazenado.
statusstring · opcional NOK, RETIDO, OK, OK - V.I, OK - S.V ou DEBUG. Separe por vírgula, sem repetição. NOK exclui retidos; RETIDO retorna linhas com status gravado NOK. Não é status financeiro.
sourcestring · opcional Origem exata do registro, como webhook, polling ou retroativo. De 1 a 128 caracteres, sem controles. Letras, números, espaço e _ . : / + -.
confirm_sourcestring · opcional Origem exata da confirmação. __none__ seleciona NULL ou vazio. Mesmos caracteres e limite de source.

Envie cada parâmetro uma vez. Valores vazios ou desconhecidos retornam 400.


Requisição · curl

200 · JSON ilustrativo
{
  "orders": [
    {
      "order_number": 1042,
      "transaction_id": "0001042",
      "order_id": "0001042",
      "platform": "shopify",
      "status": "NOK",
      "value": 149.9,
      "confirm_value": null,
      "source": "webhook",
      "confirm_source": null,
      "created_at": "2026-10-06T14:20:00-03:00",
      "processed_at": null,
      "last_sent_at": null
    }
  ],
  "totals": {
    "total_count": 1,
    "total_value": 149.9,
    "processed_count": 0,
    "processed_value": 0
  },
  "nextCursor": null
}

Dados inventados para explicar o formato. Não são resultados deste ambiente.

GET/api/read/v1/clients/:cliente/metrics/summary

Resumo do período

Retorna cliente, date_from, date_to e totals do filtro completo sem listar pedidos. Aceita os filtros de pedidos, mas não aceita limit nem cursor.

Datas omitidas significam histórico sem aquele limite, não D-1. Os totais seguem o contrato de pedidos, inclusive o campo opcional siblings_count em VTEX.

Parâmetros

Parâmetros de Resumo do período
Parâmetro Uso
clientestring · obrigatório no caminho ID literal do inventário, sem purchasecron-. Não corte espaços, não converta maiúsculas nem tente corrigir o ID. master e v2 são reservados.
date_fromdate · opcional Data real YYYY-MM-DD. Início inclusivo em BRT, UTC-03:00, sobre created_at.
date_todate · opcional Data real YYYY-MM-DD. Fim inclusivo em BRT. O início não pode superar o fim. Sem limites, consulta o histórico armazenado.
statusstring · opcional NOK, RETIDO, OK, OK - V.I, OK - S.V ou DEBUG. Separe por vírgula, sem repetição. NOK exclui retidos; RETIDO retorna linhas com status gravado NOK. Não é status financeiro.
sourcestring · opcional Origem exata do registro, como webhook, polling ou retroativo. De 1 a 128 caracteres, sem controles. Letras, números, espaço e _ . : / + -.
confirm_sourcestring · opcional Origem exata da confirmação. __none__ seleciona NULL ou vazio. Mesmos caracteres e limite de source.

Envie cada parâmetro uma vez. Valores vazios ou desconhecidos retornam 400.


Requisição · curl

200 · JSON ilustrativo
{
  "cliente": "loja-exemplo",
  "date_from": "2026-10-01",
  "date_to": "2026-10-07",
  "totals": {
    "total_count": 1,
    "total_value": 149.9,
    "processed_count": 0,
    "processed_value": 0
  }
}

Dados inventados para explicar o formato. Não são resultados deste ambiente.

GET/api/read/v1/clients/:cliente/metrics/nok

NOK atual

Não aceita parâmetros. É um snapshot corrente de todos os pedidos armazenados do cliente, não é D-1 nem uma série histórica. nok_count exclui retidos. held_count conta os retidos que nunca foram tentados e ainda estão na janela de atraso. snapshot_at marca o início da leitura, sem garantir isolamento entre consultas.

NOK é falta de confirmação técnica no Purchasecron. OK também não prova recebimento pelo Google Ads, Meta ou GA4. A origem registrada não prova atribuição de mídia.

revenue_ok usa value pela regra atual de stats, não a regra de valor processado dos totais. As leituras de stats e retidos são separadas.

Parâmetros

Parâmetros de NOK atual
Parâmetro Uso
clientestring · obrigatório no caminho ID literal do inventário, sem purchasecron-. Não corte espaços, não converta maiúsculas nem tente corrigir o ID. master e v2 são reservados.

Não aceita parâmetros de consulta.


Requisição · curl

200 · JSON ilustrativo
{
  "cliente": "loja-exemplo",
  "scope": "current_snapshot",
  "snapshot_at": "2026-10-07T18:00:00.000Z",
  "nok_count": 1,
  "ok_count": 0,
  "debug_count": 0,
  "total": 1,
  "revenue_ok": 0,
  "held_count": 0,
  "held_oldest_at": null,
  "send_delay_minutes": 0
}

Dados inventados para explicar o formato. Não são resultados deste ambiente.

Filtros e paginação

  • date_from e date_to usam datas reais YYYY-MM-DD em BRT, UTC-03:00, sobre created_at. Os limites são inclusivos. Se informar os dois, o início não pode superar o fim. Sem um limite, vale todo o histórico armazenado daquele lado, não um D-1 automático.
  • status aceita NOK, RETIDO, OK, OK - V.I, OK - S.V e DEBUG, separados por vírgula sem repetição. status=NOK exclui retidos. status=RETIDO seleciona o pseudo-status de retenção, mas a linha continua com status gravado NOK. Não é status financeiro.
  • source filtra a origem exata do registro, como webhook, polling ou retroativo. confirm_source filtra a origem exata da confirmação. Use __none__ para confirmação com origem NULL ou vazia. Ambos aceitam de 1 a 128 caracteres de letras, números, espaço, _ . : / + -, sem controles. Não há busca por email, documento ou q.
  • Em clientes e pedidos, limit é um inteiro de 1 a 500, padrão 100, sem sinal ou zeros à esquerda. Envie cada parâmetro uma vez. Valores vazios, filtros desconhecidos ou datas inválidas retornam 400.
  • Comece sem cursor. Passe o nextCursor recebido intacto como cursor, codificado com URLSearchParams ou equivalente, mantendo os mesmos filtros e endpoint. Não divida nem remonte o cursor. Continue até nextCursor ser null. Resumo e NOK não são paginados.
  • A paginação não é um snapshot transacional. Novos registros e mudanças de status podem alterar a coleta. Reinicie o inventário a cada ciclo e não use cursores como checkpoints permanentes.

Uso no n8n

Crie um nó HTTP Request. Em uma credencial privada Header Auth, informe o nome do header e guarde o valor com o token recebido do administrador. Selecione essa credencial no nó. O placeholder abaixo não é um token válido. Não cole o segredo no campo URL, no código do fluxo nem neste painel.

O nó retorna a primeira página de pedidos do intervalo ilustrativo. Para continuar, repita o GET com o nextCursor da resposta, intacto no query parameter cursor, sem mudar os filtros. Pare quando vier null.

HTTP Request · n8n

Erros

A resposta usa o formato { "error": "codigo" }. Não registre o header de autenticação ao investigar.

HTTP Significado e ação
400 invalid_client ou invalid_query. Confira ID literal, filtros, datas e cursor recebido.
401 unauthorized. Confira o Bearer dedicado com o administrador. A sessão do painel não serve.
403 Cliente ou tipo de consulta não autorizado para esta conta. Confira as permissões em Minha API. Uma chave existente também segue as alterações de acesso.
404 not_found para rota ou versão desconhecida. client_not_found para cliente sem D1 ou store.
405 method_not_allowed. Use GET. HEAD e OPTIONS também são negados.
502 upstream_unavailable. Falha do provedor ou leitura incompleta. Não transforme em zero pedidos ou zero NOK.
503 read_api_unavailable. Token dedicado ausente ou reutilizado, ou credenciais do provedor ausentes. Solicite revisão da configuração ao administrador.

A autenticação vem antes da validação de método, rota e filtros. Sem configuração do token, toda a API responde 503. Com configuração válida e Bearer errado, responde 401. Nenhum exemplo desta aba envia uma consulta automaticamente.

Códigos globais

Os códigos que a gente instala no site do cliente. Copie daqui e cole no arquivo indicado em cada bloco. São iguais para todas as lojas da mesma plataforma: o que muda por cliente vai na configuração, não no código.

Como o purchasecron funciona

Cada loja roda num worker isolado que coleta os pedidos e os envia ao n8n, que dispara o evento de compra no GA4. Um pedido entra como NOK (aguardando); quando o n8n processa e chama POST /confirm, vira OK. Pedidos não confirmados são reenviados automaticamente (retry). Este painel master gerencia os workers — criar, editar, versão/atualização e backfill.

Como cada plataforma coleta os pedidos
shopifyWebhook + GET (fallback)
nuvemshopWebhook + GET (fallback)
wbuyWebhook + GET (fallback)
yampiWebhook + GET (fallback)
bagySó webhook
wakeColeta explícita · DEBUG · sem envio
whmcsSó webhook
vtexSó GET (polling)
Perguntas frequentes

Cliente

Geral
Integrações
.myshopify.com
.vtexcommercestable.com.br
.soureicdn.com
Google Merchant · produtos mais vendidos

Este cliente usa a conexão central do Google Merchant.

shopify_BANDEIRA_IDPRODUTO_IDVARIANTE

Consulta os itens na Shopify para os pedidos já recebidos. Não reenvia pedidos ao n8n. Histórico disponível conforme o acesso da loja, até 60 dias.

Secrets (raramente editado)
Preencha só os que quiser substituir. Valores não são exibidos por segurança.
Usuários (login do dashboard)
Quem está aqui acessa o dashboard deste worker com email + senha. Worker sem usuário continua abrindo via ADMIN_SECRET.
O convite não tem senha: o cliente cria a dele no primeiro acesso. Clique em Liberar 1º acesso quando ele estiver pronto pra entrar — a janela dura 24 horas e, fora dela, ninguém reivindica o convite.
—

Novo worker

Configuração da loja
Secret WAKE_API_TOKEN, nunca no D1. DEBUG obrigatório. Histórico mínimo automático de até um ano antes da criação; sem n8n, GA4, coleta normal ou webhook.
Sem as duas confirmações, o job nasce pendente e não consulta a API. O agendamento exclusivo de histórico não ativa outros envios.
.myshopify.com
.vtexcommercestable.com.br
.soureicdn.com

Acessos de viewers

Defina os recursos e os clientes de cada viewer. As permissões abaixo valem apenas nos clientes selecionados. Sem clientes selecionados, não há acesso.

O que este viewer pode acessar

Painel e pedidos: consulta disponível nos clientes selecionados.

Clientes autorizados

Nenhum cliente encontrado.

Novo usuário

Copie sua chave agora

Ela aparece uma única vez. Guarde em uma credencial privada do consumidor. Ao fechar, o valor é apagado desta tela.