UNO API
Baixar documento OpenAPIConverta o PDF de duas páginas (etiqueta logística + DANFE) em uma etiqueta 100×150 mm pronta para a térmica. A API é assíncrona, usa JSON UTF-8 e autenticação Bearer, com idempotência e webhooks assinados. Toda resposta traz requestId.
Autenticação
As chaves de API ficam disponíveis com o adicional + API, contratado sobre qualquer plano pago. A chave aparece uma única vez na criação — guarde-a no cofre de segredos do ERP e envie no cabeçalho Authorization. Sem o adicional ou sem um plano pago vigente, as chamadas respondem 403.
/api/v1/conversionsCriar uma conversão
Envie um PDF multipart com uma etiqueta logística e uma DANFE. O servidor reserva a cota e responde 202 sem esperar o processamento terminar.
Corpo · multipart/form-data
filebinaryobrigatórioPDF de duas páginas (etiqueta + DANFE).
sizestringobrigatório100x150, 100x100, a6 ou custom.
widthMmnumberopcionalLargura 50–210, quando size=custom.
heightMmnumberopcionalAltura 50–300, quando size=custom.
Idempotency-KeyheaderobrigatórioRepetir a mesma chave retorna o mesmo resultado.
curl --fail-with-body "$UNO_API_URL/api/v1/conversions" \
-H "Authorization: Bearer $UNO_API_KEY" \
-H "Idempotency-Key: pedido-001-v1" \
-F "file=@etiqueta.pdf;type=application/pdf" \
-F "size=100x150"{
"requestId": "req_…",
"id": "cnv_…",
"status": "queued",
"progress": 0,
"createdAt": "2026-01-01T00:00:00Z"
}/api/v1/conversions/{id}Consultar uma conversão
Uma etiqueta digital fica pronta em cerca de um segundo após o 202. Comece o polling 500 ms depois e repita a cada 500 ms–1 s até completed ou failed — ou receba o webhook.
queuedAceita, aguardando o worker.
processingA engine está executando.
completedInclui downloadUrl e expiresAt.
failedInclui código e mensagem.
curl "$UNO_API_URL/api/v1/conversions/cnv_123" \
-H "Authorization: Bearer $UNO_API_KEY"{
"id": "cnv_…",
"status": "completed",
"downloadUrl": "https://…",
"expiresAt": "2026-01-01T01:00:00Z"
}/api/v1/batchesCriar um lote
Envie o campo files repetido. O lote reserva a cota inteira ou rejeita a operação; o ZIP final inclui só as etiquetas aprovadas, com os contadores e erros dos demais itens.
curl --fail-with-body "$UNO_API_URL/api/v1/batches" \
-H "Authorization: Bearer $UNO_API_KEY" \
-H "Idempotency-Key: lote-001-v1" \
-F "files=@a.pdf;type=application/pdf" \
-F "files=@b.pdf;type=application/pdf" \
-F "size=100x150"{
"id": "bat_…",
"status": "queued",
"itemCount": 2
}/api/v1/batches/{id}Consultar um lote
Consulte o estado até a composição do ZIP terminar. O download é uma URL assinada com expiração.
curl "$UNO_API_URL/api/v1/batches/bat_123" \
-H "Authorization: Bearer $UNO_API_KEY"{
"id": "bat_…",
"status": "completed",
"completedCount": 2,
"failedCount": 0,
"downloadUrl": "https://…"
}/api/v1/usageConsultar o uso
O consumo da cota no período vigente: limit, reserved, confirmed e remaining.
curl "$UNO_API_URL/api/v1/usage" \
-H "Authorization: Bearer $UNO_API_KEY"{
"periodStart": "2026-01-01T00:00:00Z",
"periodEnd": "2026-02-01T00:00:00Z",
"limit": 2000,
"reserved": 3,
"confirmed": 180,
"remaining": 1817
}Webhooks
A UNO envia conversion.completed, conversion.failed e batch.completed. Calcule HMAC-SHA-256 sobre <timestamp>.<corpo exato> e compare com X-Label-Signature.
- Valide a assinatura antes de interpretar o JSON.
- Rejeite timestamps antigos conforme a sua tolerância.
- Deduplicate pelo X-Label-Delivery.
- Responda 2xx só depois de persistir o evento.
Reentregas após 1 min, 5 min, 30 min, 2 h e 12 h.
X-Label-Timestamp: 1790812800
X-Label-Delivery: dlv_…
X-Label-Signature: v1=<hex-hmac-sha256>Erros
Toda falha traz um código estável e uma mensagem segura, dentro do envelope com requestId.
| Código | HTTP | Significado |
|---|---|---|
invalid_request | 400 | Campos ausentes ou inválidos. |
plan_required | 403 | Sem plano pago vigente ou sem o adicional + API. |
file_too_large | 413 | O arquivo excede o limite do plano. |
pdf_encrypted | 422 | O PDF exige senha. |
unsupported_template | 422 | O template não é reconhecido. |
ambiguous_template | 422 | A detecção não encontrou correspondência segura. |
quota_exceeded | 403 | Cota mensal atingida. |
rate_limited | 429 | Limite de requisições atingido. |
Limites
Com o adicional + API, o limite por minuto segue o plano: Starter 30, Pro 60 e Business 120 requisições. Um 429 inclui Retry-After. Tamanho de arquivo, lote e retenção seguem o plano ativo.