Ir para o conteúdo principal

API Standard

O seu ERP envia as doações de excedente para a Optima por REST. Cada doação entra no mural das ONGs da região e segue o mesmo caminho de uma doação feita na tela: pedido da ONG, coleta e recibo assinado eletronicamente pelas duas partes. Disponível a partir do plano Pro.

Endereço base: https://edmunmfpzvbjzcocncdf.supabase.co/functions/v1/erp-standard-api/api/v1

Autenticação

Gere a chave em Conta › Integrações. Ela aparece uma vez só. Envie a chave em todo pedido no cabeçalho X-Optima-Key. Também aceitamos Authorization: Bearer com a mesma chave.

A chave fica no servidor do ERP. Nunca coloque a chave no navegador nem em aplicativo de celular. O plano da empresa é conferido em toda chamada: se a conta sair do Pro, a chave para de funcionar até a empresa voltar.

Enviar uma doação

POST /doacoes. O cabeçalho Idempotency-Key é obrigatório, com 8 caracteres ou mais: se a rede cair e você enviar de novo com a mesma chave e o mesmo conteúdo, a doação não duplica e a resposta devolve a doação já criada.

cURL

curl -X POST "https://edmunmfpzvbjzcocncdf.supabase.co/functions/v1/erp-standard-api/api/v1/doacoes" \
  -H "X-Optima-Key: SUA_CHAVE" \
  -H "Idempotency-Key: ERP-TRX-0001" \
  -H "Content-Type: application/json" \
  -d '{"external_id":"ERP-TRX-0001","product_name":"Arroz 5kg","tipo_embalagem":"embalado","product_expiration_date":"2027-01-14","expiration_date":"2026-10-30","quantity":100,"unit_weight":5,"unit_type":"kg","estimated_value":2500}'

Resposta 201

{
  "ok": true,
  "donation_id": "d6b2c1e0-0000-4000-8000-0000000041f0",
  "status": "available",
  "trace_id": "3b1f0c2a-0000-4000-8000-00000000a92c",
  "created_at": "2026-10-14T17:32:08Z"
}

As datas do exemplo andam com o dia, para o exemplo nunca nascer vencido.

Campos

CampoTipoObrigatórioO que significa
external_idtextosimO código da doação no seu sistema. Use um valor único por doação.
product_nametextosimNome do produto como a ONG vai ler.
quantitynúmero inteirosimQuantas unidades. Maior que zero.
unit_weightnúmerosimPeso de uma unidade, em kg, com ponto decimal. 500 g = 0.5.
tipo_embalagemtextonãoembalado (padrão), in_natura ou preparado.
product_expiration_datedata AAAA-MM-DDuma das duas datasValidade impressa na embalagem. Produto embalado precisa de validade; sem este campo, vale expiration_date.
expiration_datedata AAAA-MM-DDuma das duas datasValidade do produto ou data limite para a ONG recolher. Sem este campo, vale a validade impressa.
estimated_valuenúmeronãoValor estimado da doação, em reais. Sem o campo, fica zero.
unit_typetextonãoUnidade do peso. Padrão kg.
skutextonãoCódigo interno do produto (também aceita product_code).
erp_batch_idtextonãoLote no seu ERP.
logisticsobjetonãoEndereço de retirada (cep, street, city, state) e will_deliver: true quando a empresa entrega.

Respostas

Toda resposta é JSON com ok. No envio aceito, 201 com o id da doação, a situação (available, disponível no mural) e um código de rastreio. Quando a doação não passa nas regras, 400 com a lista erros: cada item diz o campo, o problema e como corrigir.

Resposta 400

{
  "ok": false,
  "error": "product_expiration_date (validade impressa) é obrigatória para produto embalado.",
  "erros": [
    {
      "campo": "product_expiration_date",
      "mensagem": "product_expiration_date (validade impressa) é obrigatória para produto embalado.",
      "como_corrigir": "Envie a validade impressa na embalagem no formato AAAA-MM-DD. Se o produto não for embalado, informe tipo_embalagem in_natura ou preparado."
    }
  ]
}

Erros e como corrigir

CódigoMensagem da APIComo corrigir
401Chave ausente: envie X-Optima-Key ou Authorization: Bearer.Envie a chave no cabeçalho X-Optima-Key.
401Chave de integração inválida ou desativada.A chave foi trocada ou desativada. Gere outra em Conta › Integrações.
403O plano atual da empresa não inclui a API StandardA API faz parte do plano Pro. A mesma chave volta a funcionar quando a empresa voltar ao Pro.
403A conta da empresa está em modo de registro apenasNesse modo a conta não tem integração. Fale com a Optima pelo painel.
403Acesso negado: IP de origem não autorizado para esta chave de integração.A chave aceita só os IPs cadastrados para ela. Envie de um deles.
400Idempotency-Key obrigatória, com pelo menos 8 caracteres.Envie o cabeçalho Idempotency-Key com 8 caracteres ou mais. Pode ser o external_id.
400product_expiration_date (validade impressa) é obrigatória para produto embalado.Envie a validade impressa ou informe tipo_embalagem in_natura ou preparado. A lista "erros" da resposta diz o que corrigir em cada campo.
409Idempotency-Key já usada com outro conteúdo.Para uma doação nova, use uma chave de idempotência nova.
429Limite de chamadas excedido. Aguarde um minuto e tente de novo.São 120 chamadas por minuto por chave. Espere um minuto e envie de novo.
404Rota não encontrada nesta versão da API.Confira o método e o caminho. Todo caminho começa em /api/v1.

Limites e teste

Até 120 chamadas por minuto por chave, contando todas as rotas. Para testar sem publicar no mural, envie para POST /doacoes/teste: a API confere tudo com as mesmas regras e responde 200 quando a doação passaria, ou 400 com a lista de erros, sem criar a doação. No painel, o botão "Enviar doação de teste" em Conta › Integrações faz o mesmo sem colar a chave.

Teste sem gravar

curl -X POST "https://edmunmfpzvbjzcocncdf.supabase.co/functions/v1/erp-standard-api/api/v1/doacoes/teste" \
  -H "X-Optima-Key: SUA_CHAVE" \
  -H "Idempotency-Key: ERP-TRX-0001" \
  -H "Content-Type: application/json" \
  -d '{"external_id":"ERP-TRX-0001","product_name":"Arroz 5kg","tipo_embalagem":"embalado","product_expiration_date":"2027-01-14","expiration_date":"2026-10-30","quantity":100,"unit_weight":5,"unit_type":"kg","estimated_value":2500}'

Todas as rotas

  • POST /doacoesEnvia uma doação. Ela entra no mural das ONGs da região como qualquer doação feita na tela.
  • POST /doacoes/testeConfere a doação com as mesmas regras do envio e não grava nada.
  • GET /doacoes/{donation_id}Situação de uma doação enviada pela API. Também aceita /doacoes/?external_id=SEU_ID.

Situação da doação: available, requested, confirmed, received ou cancelled. A consulta só encontra doações da empresa dona da chave.

Não conseguiu integrar? Quem já é cliente fala com a Optima em Conta › Integrações, depois do teste. Respondemos em até 2 dias úteis.

Privacidade e cookies de preferência

A plataforma usa armazenamento estritamente necessário para autenticação e operação. Cookies e armazenamentos de preferência são opcionais e servem apenas para lembrar configurações da interface.

Consulte a Política de Privacidade, a Política de Cookies e os Termos de Uso.