PRIMA

PRIMA · API

Documentação para integração · v1

Acessar painel

API pública do PRIMA

Integre os dados de captação de leite do PRIMA ao ERP, BI ou sistema interno do seu laticínio ou cooperativa. A API é somente leitura, responde em JSON e cobre produção em tempo real, fazendas fornecedoras, ranking de produtores, rotas de coleta, planejamento e alertas.

Base URL

https://prima.pastu.agr.br/api/v1

Formato

JSON · UTF-8 · HTTPS

Autenticação

Bearer token de integração

Primeira chamada em 10 segundos
curl -H "Authorization: Bearer prima_SEU_TOKEN" \
  https://prima.pastu.agr.br/api/v1/ping

Autenticação

Toda requisição exige um token de integração no header Authorization. O token é criado pelo administrador da conta no painel do PRIMA, em Configurações → API PRIMA — tokens de integração, e identifica a sua empresa: cada token acessa somente os dados do próprio laticínio/cooperativa.

1

No painel, clique em “Novo token”, dê um nome (ex.: ERP TOTVS) e escolha a validade: 1 ano, 2 anos ou 24 anos.

2

Copie o token exibido — ele começa com prima_ e aparece uma única vez. Guarde em um cofre de segredos.

3

Envie o token no header Authorization: Bearer em todas as chamadas.

4

Para desativar o acesso, revogue o token no painel — o efeito é imediato.

Header de autenticação
Authorization: Bearer prima_4f8a1c...  (token completo)
Resposta · 401 — token inválido, expirado ou revogado
{
  "message": "Token de integração revogado",
  "error": "Unauthorized",
  "statusCode": 401
}

Segurança do token

  • · O PRIMA armazena apenas o hash SHA-256 do token — nem a nossa equipe consegue recuperá-lo. Se você perdê-lo, revogue e gere outro.
  • · Use o token somente em servidor (backend do ERP/integração). Nunca o coloque em aplicativo, site, planilha compartilhada ou repositório de código.
  • · Guarde-o em variável de ambiente ou cofre de segredos (ex.: PRIMA_API_TOKEN).
  • · Crie um token por sistema (ERP, BI, middleware) — assim dá para revogar um sem derrubar os demais.
  • · Em caso de suspeita de vazamento, revogue imediatamente no painel e gere um novo. A revogação vale na hora.

Convenções

Datas e horários

Campos ts/…Em usam ISO 8601 em UTC (sufixo Z). Campos hora são strings no fuso America/Sao_Paulo.

Volumes

Sempre em litros (L), números inteiros ou decimais.

Percentuais

Números decimais — 4.2 significa +4,2%.

Identificadores

Strings opacas (ObjectId). Não interprete o conteúdo, apenas armazene e compare.

Métodos

Somente GET — a API não altera nada na sua conta.

Novos campos

Podem ser adicionados às respostas sem aviso — trate campos desconhecidos de forma tolerante.

Erros e limites

Limite de 120 requisições por minuto por origem. Acima disso a API responde 429 — aplique retry com espera exponencial. Para dados de tempo real, consultar a cada 30–60 s é suficiente (o consolidado tem cache de ~10 s).

200

Sucesso — corpo JSON conforme documentado

400

Parâmetro inválido (ex.: limite não numérico)

401

Token ausente, inválido, expirado ou revogado

404

Recurso inexistente ou de outra empresa

429

Limite de requisições excedido — aguarde e tente novamente

500

Erro interno — tente novamente; persistindo, contate o suporte

Formato padrão de erro
{
  "message": "Descrição do problema",
  "error": "Unauthorized",
  "statusCode": 401
}

Endpoints

Todos relativos à base https://prima.pastu.agr.br/api/v1

GET/ping

Validar token

Confirma que o token é válido e identifica a conta. Use como primeiro teste da integração e como health-check.

Campos principais da resposta

okbooleantrue quando o token é válido
empresastringNome do laticínio/cooperativa dono do token
token.nomestringNome dado ao token no painel
token.expiraEmstring (ISO 8601)Data de expiração do token
agorastring (ISO 8601)Relógio do servidor
Requisição
curl -H "Authorization: Bearer prima_SEU_TOKEN" \
  https://prima.pastu.agr.br/api/v1/ping
Resposta · 200 OK
{
  "ok": true,
  "servico": "prima-api",
  "versao": "v1",
  "empresa": "Laticínio Bom Leite",
  "token": {
    "nome": "ERP TOTVS",
    "expiraEm": "2027-09-12T14:00:00.000Z"
  },
  "agora": "2026-09-12T14:32:08.000Z"
}
GET/overview

KPIs consolidados

Fotografia do dia da operação: produção registrada, projeção, volume disponível para coleta e alertas ativos. Atualizada em tempo quase real (cache de ~10 s).

Campos principais da resposta

fazendasConectadasnumberFazendas vinculadas à empresa
fazendasOnlinenumberFazendas com dados recentes
producaoAgoranumber (L)Litros registrados hoje até agora
variacaoVsMediaPctnumber (%)Hoje vs. média 7d no mesmo horário
producaoProjetadanumber (L)Projeção de fechamento do dia
disponivelColetanumber (L)Volume em tanque aguardando coleta
fazendasProntasnumberFazendas com tanque pronto para coleta
alertasAtivosnumberAlertas operacionais abertos
caminhoesEmRotanumberCaminhões em rota neste momento
atualizadoEmstring (ISO 8601)Momento da consolidação
Requisição
curl -H "Authorization: Bearer prima_SEU_TOKEN" \
  https://prima.pastu.agr.br/api/v1/overview
Resposta · 200 OK
{
  "fazendasConectadas": 9,
  "fazendasOnline": 7,
  "producaoAgora": 8420,
  "variacaoVsMediaPct": 4.2,
  "producaoProjetada": 12480,
  "projecaoVsMediaPct": 2.8,
  "disponivelColeta": 6150,
  "fazendasProntas": 2,
  "fazendasEmOrdenha": 3,
  "alertasAtivos": 1,
  "caminhoesEmRota": 2,
  "atualizadoEm": "2026-09-12T14:32:08.000Z"
}
GET/fazendas

Fazendas (estado atual)

Lista todas as fazendas fornecedoras com produção do dia, tanque, qualidade, status de coleta e itens de estoque em baixa/urgência de reposição. Para os registros de ordenha por vaca, use o detalhe da fazenda.

Campos principais da resposta

idstringIdentificador da fazenda (use no detalhe)
nome / produtor / municipiostringIdentificação da fazenda
coordsobjeto { lat, lng }Localização da fazenda
statusstringORDENHANDO · PRONTA_COLETA · NORMAL · ALERTA
producaoHojenumber (L)Litros registrados hoje
tanqueAtualnumber (L)Volume estimado no tanque agora
qualidadeobjetoccs (mil céls/mL), cbt (mil UFC/mL), gordura (%), proteina (%)
volumeDianumber (L)Média diária dos últimos 7 dias
scorenumber (0–100)Score PRIMA (qualidade + regularidade)
prontoDesdestring | nullQuando o produtor sinalizou tanque pronto
etaColetaMinnumber | nullMinutos estimados até o caminhão chegar
ultimaColetaobjeto | nulllitrosInformados, volumeReal (medido pelo motorista) e resolvidoEm
estoqueBaixoobjeto | nullitens[] (id, nome, categoria, quantidadeAtual, quantidadeMinima, unidadeMedida, urgencia: BAIXO|URGENTE), totalBaixo, totalUrgente — null quando nada está em falta
Requisição
curl -H "Authorization: Bearer prima_SEU_TOKEN" \
  https://prima.pastu.agr.br/api/v1/fazendas
Resposta · 200 OK
[
  {
    "id": "66f1a2b3c4d5e6f7a8b9c0d1",
    "nome": "Fazenda Boa Vista",
    "produtor": "José Almeida",
    "municipio": "Garanhuns",
    "coords": { "lat": -8.8829, "lng": -36.4966 },
    "status": "PRONTA_COLETA",
    "producaoHoje": 1240,
    "tanqueAtual": 980,
    "capacidadeTanque": 0,
    "vacasLactacao": 48,
    "vacasOrdenhadas": 46,
    "variacaoPct": 3.1,
    "qualidade": { "ccs": 210, "cbt": 18, "gordura": 3.9, "proteina": 3.3 },
    "janelaColeta": "09:30 – 10:15",
    "score": 87,
    "volumeDia": 1180,
    "scoreQualidade": 92,
    "scoreRegularidade": 84,
    "crescimentoPct": 2.4,
    "ultimaAtualizacao": "2026-09-12T14:31:40.000Z",
    "prontoDesde": "2026-09-12T13:05:00.000Z",
    "etaColetaMin": 24,
    "chegadaPrevista": "2026-09-12T14:56:00.000Z",
    "ultimaColeta": {
      "litrosInformados": 990,
      "volumeReal": 975,
      "resolvidoEm": "2026-09-11T10:02:00.000Z"
    },
    "estoqueBaixo": {
      "itens": [
        {
          "id": "66f1b2c3d4e5f6a7b8c9d0e1",
          "nome": "Ração concentrada 20%",
          "categoria": "Alimentos",
          "quantidadeAtual": 40,
          "quantidadeMinima": 200,
          "unidadeMedida": "KG",
          "urgencia": "BAIXO"
        }
      ],
      "totalBaixo": 1,
      "totalUrgente": 0
    }
  }
]
GET/fazendas/{id}

Fazenda (detalhe)

Mesmos campos da listagem, mais os últimos registros de ordenha por vaca (campo registros). Retorna 404 se o id não pertencer à sua empresa.

Parâmetros de caminho

idstringId da fazenda obtido em GET /fazendas

Campos principais da resposta

registros[]arrayÚltimas ordenhas: vaca (ex.: "#184"), litros, ts (ISO) e hora (HH:mm)
Requisição
curl -H "Authorization: Bearer prima_SEU_TOKEN" \
  https://prima.pastu.agr.br/api/v1/fazendas/66f1a2b3c4d5e6f7a8b9c0d1
Resposta · 200 OK
{
  "id": "66f1a2b3c4d5e6f7a8b9c0d1",
  "nome": "Fazenda Boa Vista",
  "status": "PRONTA_COLETA",
  "producaoHoje": 1240,
  "tanqueAtual": 980,
  "registros": [
    { "vaca": "#184", "litros": 12.4, "ts": "2026-09-12T14:31:40.000Z", "hora": "11:31" },
    { "vaca": "#207", "litros": 9.8, "ts": "2026-09-12T14:29:12.000Z", "hora": "11:29" }
  ]
}
GET/producao/eventos

Eventos de produção

Feed dos últimos registros de ordenha recebidos das fazendas, do mais recente para o mais antigo. Ideal para alimentar filas/integrações incrementais no ERP.

Parâmetros de consulta

limitenumber (opcional)Quantidade de eventos — padrão 50, máximo 200

Campos principais da resposta

idstringId único do evento (use para deduplicar)
tsstring (ISO 8601)Momento do registro
horastringHH:mm:ss no fuso America/Sao_Paulo
fazendaId / fazendaNomestringOrigem do evento
vacastringIdentificação do animal
litrosnumber (L)Volume da ordenha
Requisição
curl -H "Authorization: Bearer prima_SEU_TOKEN" \
  https://prima.pastu.agr.br/api/v1/producao/eventos
Resposta · 200 OK
[
  {
    "id": "66f1e0a1b2c3d4e5f6a7b8c9",
    "ts": "2026-09-12T14:31:52.000Z",
    "hora": "11:31:52",
    "fazendaId": "66f1a2b3c4d5e6f7a8b9c0d1",
    "fazendaNome": "Fazenda Boa Vista",
    "vaca": "#184",
    "litros": 12.4
  }
]
GET/produtores

Ranking de produtores

Produtores ordenados pelo score PRIMA (volume, qualidade e regularidade). Útil para bonificação e pagamento por qualidade no ERP.

Campos principais da resposta

posicaonumberPosição no ranking
fazendaIdstringId da fazenda
scorenumber (0–100)Score PRIMA consolidado
volumeDianumber (L)Média diária 7d
qualidade / regularidadenumber (0–100)Componentes do score
crescimentoPctnumber (%)Média 7d vs. 7d anteriores
producaoHojenumber (L)Litros de hoje
Requisição
curl -H "Authorization: Bearer prima_SEU_TOKEN" \
  https://prima.pastu.agr.br/api/v1/produtores
Resposta · 200 OK
[
  {
    "posicao": 1,
    "fazendaId": "66f1a2b3c4d5e6f7a8b9c0d1",
    "nome": "Fazenda Boa Vista",
    "produtor": "José Almeida",
    "municipio": "Garanhuns",
    "score": 87,
    "volumeDia": 1180,
    "qualidade": 92,
    "regularidade": 84,
    "crescimentoPct": 2.4,
    "producaoHoje": 1240,
    "status": "NORMAL"
  }
]
GET/rotas

Rotas e frota

Logística de captação em tempo real: usina, caminhões com rota ativa (sequência de paradas, volumes coletado/estimado, próxima parada e ETA) e sugestão de otimização.

Campos principais da resposta

usinaobjetoNome e coordenadas da unidade de recepção
caminhoes[].placa / motoristastringIdentificação do veículo
caminhoes[].capacidadenumber (L)Capacidade do tanque do caminhão
caminhoes[].volumeColetadonumber (L)Já coletado hoje na rota
caminhoes[].volumeEstimadonumber (L)Restante a coletar (tanques atuais)
caminhoes[].rotaFazendasstring[]Sequência de paradas da rota
caminhoes[].proximaParadastringPróximo destino do caminhão
caminhoes[].etaProximaParadaMinnumber (min)Estimativa até a próxima parada
caminhoes[].viagemstringCOLETANDO · RETORNANDO · NA_BASE
otimizacaoobjetoGanho estimado ao reordenar paradas (km/min)
Requisição
curl -H "Authorization: Bearer prima_SEU_TOKEN" \
  https://prima.pastu.agr.br/api/v1/rotas
Resposta · 200 OK
{
  "usina": {
    "nome": "Unidade principal",
    "coords": { "lat": -8.882, "lng": -36.496 }
  },
  "caminhoes": [
    {
      "id": "66f1c0d1e2f3a4b5c6d7e8f9",
      "nome": "Caminhão 01",
      "placa": "KJU2E11",
      "motorista": "Carlos Lima",
      "capacidade": 15000,
      "volumeEstimado": 6150,
      "volumeColetado": 4890,
      "distanciaKm": 86,
      "tempoRota": "1h55",
      "rotaFazendas": ["Fazenda Boa Vista", "Sítio Riacho Doce"],
      "proximaParada": "Fazenda Boa Vista",
      "etaProximaParadaMin": 24,
      "emRota": true,
      "viagem": "COLETANDO"
    }
  ],
  "otimizacao": {
    "kmEvitados": 12,
    "minEconomizados": 16,
    "litrosAdicionais": 0,
    "mensagem": "Reordenar as paradas reduz a rota de 86 km para 74 km."
  }
}
GET/planejamento

Planejamento de captação (D+1)

Projeção de captação para amanhã por fazenda e por rota: volume previsto, litros em risco, fazendas sem cobertura de rota e capacidade da frota.

Campos principais da resposta

dataAmanhastring (YYYY-MM-DD)Dia projetado (America/Sao_Paulo)
projecaoAmanhanumber (L)Captação total prevista
litrosEmRisconumber (L)Volume previsto em fazendas com risco
volumeSemCoberturanumber (L)Previsto em fazendas fora de rota
capacidadeFrotanumber (L)Soma da capacidade dos caminhões ativos
fazendas[]arrayProjeção por fazenda com motivoRisco (SEM_ORDENHA · QUEDA · SEM_ROTA · AGUARDANDO_COLETA)
rotas[]arrayOcupação projetada por rota, com excedente e paradas que não cabem
porMunicipio[]arrayResumo por município
Requisição
curl -H "Authorization: Bearer prima_SEU_TOKEN" \
  https://prima.pastu.agr.br/api/v1/planejamento
Resposta · 200 OK
{
  "dataAmanha": "2026-09-13",
  "projecaoAmanha": 12140,
  "tendenciaPct": 1.9,
  "fazendasProjetadas": 9,
  "litrosEmRisco": 1180,
  "fazendasEmRisco": 1,
  "volumeSemCobertura": 640,
  "fazendasSemRota": 1,
  "excedenteRotas": 0,
  "rotasSobrecarregadas": 0,
  "capacidadeFrota": 27000,
  "fazendas": [
    {
      "fazendaId": "66f1a2b3c4d5e6f7a8b9c0d1",
      "nome": "Fazenda Boa Vista",
      "projecaoAmanha": 1215,
      "tendenciaPct": 2.9,
      "cobertura": "EM_ROTA",
      "rotaNome": "Rota Agreste 01",
      "caminhaoNome": "Caminhão 01",
      "litrosEmRisco": 0,
      "motivoRisco": null
    }
  ],
  "rotas": [
    {
      "rotaId": "66f1d0e1f2a3b4c5d6e7f8a9",
      "nome": "Rota Agreste 01",
      "caminhaoNome": "Caminhão 01",
      "capacidade": 15000,
      "paradas": 5,
      "volumeProjetado": 6480,
      "ocupacaoPct": 43,
      "excedente": 0,
      "fazendasExcedentes": []
    }
  ],
  "geradoEm": "2026-09-12T14:32:08.000Z"
}
GET/alertas

Alertas operacionais

Alertas ativos da operação: queda de produção, tanque parado sem coleta, divergência entre volume informado e medido, capacidade de rota, etc.

Campos principais da resposta

tipostringqueda · acima · coleta · capacidade · sem_coleta · divergencia · divergencia_km · desvio_rota · sem_sinal · parada_fora_rota · coleta_distante · estoque_baixo · estoque_urgente
severidadestringcritico · positivo · info
titulo / descricao / origemstringConteúdo do alerta
fazendaId / caminhaoIdstring (opcional)Entidade relacionada
Requisição
curl -H "Authorization: Bearer prima_SEU_TOKEN" \
  https://prima.pastu.agr.br/api/v1/alertas
Resposta · 200 OK
[
  {
    "id": "divergencia-66f1a2b3",
    "tipo": "divergencia",
    "severidade": "critico",
    "titulo": "Divergência informado × medido",
    "origem": "Fazenda Boa Vista",
    "descricao": "Volume medido pelo motorista (975 L) ficou 10,2% abaixo do informado (1.086 L).",
    "hora": "10:05",
    "ts": "2026-09-12T13:05:00.000Z",
    "fazendaId": "66f1a2b3c4d5e6f7a8b9c0d1"
  }
]