Gerar DANFE
curl --request GET \
--url https://api.validanfe.com/GuardaNFe/GerarDanfe/{chaveNfe} \
--header 'X-API-KEY: <x-api-key>'import requests
url = "https://api.validanfe.com/GuardaNFe/GerarDanfe/{chaveNfe}"
headers = {"X-API-KEY": "<x-api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<x-api-key>'}};
fetch('https://api.validanfe.com/GuardaNFe/GerarDanfe/{chaveNfe}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.validanfe.com/GuardaNFe/GerarDanfe/{chaveNfe}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-KEY: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.validanfe.com/GuardaNFe/GerarDanfe/{chaveNfe}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-KEY", "<x-api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.validanfe.com/GuardaNFe/GerarDanfe/{chaveNfe}")
.header("X-API-KEY", "<x-api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.validanfe.com/GuardaNFe/GerarDanfe/{chaveNfe}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-KEY"] = '<x-api-key>'
response = http.request(request)
puts response.read_body{
"200": {},
"400": {},
"401": {},
"404": {},
"500": {},
"503": {}
}API Guarda
Gerar DANFE
Gere DANFE em PDF a partir do XML da NFe armazenada no GuardaNFe
GET
/
GuardaNFe
/
GerarDanfe
/
{chaveNfe}
Gerar DANFE
curl --request GET \
--url https://api.validanfe.com/GuardaNFe/GerarDanfe/{chaveNfe} \
--header 'X-API-KEY: <x-api-key>'import requests
url = "https://api.validanfe.com/GuardaNFe/GerarDanfe/{chaveNfe}"
headers = {"X-API-KEY": "<x-api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<x-api-key>'}};
fetch('https://api.validanfe.com/GuardaNFe/GerarDanfe/{chaveNfe}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.validanfe.com/GuardaNFe/GerarDanfe/{chaveNfe}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-KEY: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.validanfe.com/GuardaNFe/GerarDanfe/{chaveNfe}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-KEY", "<x-api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.validanfe.com/GuardaNFe/GerarDanfe/{chaveNfe}")
.header("X-API-KEY", "<x-api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.validanfe.com/GuardaNFe/GerarDanfe/{chaveNfe}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-KEY"] = '<x-api-key>'
response = http.request(request)
puts response.read_body{
"200": {},
"400": {},
"401": {},
"404": {},
"500": {},
"503": {}
}Visão Geral
Gera um DANFE (Documento Auxiliar da Nota Fiscal Eletrônica) em formato PDF a partir de uma NFe armazenada no GuardaNFe.Parâmetros
string
required
Chave de acesso da NFe (44 caracteres numéricos)Exemplo:
35170608530528000184550000000154301000771561Headers
string
required
Token de autenticação da API
string
default:"application/pdf"
Tipo de conteúdo aceito na resposta
Exemplos de Requisição
curl -X GET "https://api.validanfe.com/GuardaNFe/GerarDanfe/35170608530528000184550000000154301000771561" \
-H "Accept: application/pdf" \
-H "X-API-KEY: SEU_TOKEN_AQUI" \
--output danfe_35170608530528000184550000000154301000771561.pdf
const response = await fetch(
'https://api.validanfe.com/GuardaNFe/GerarDanfe/35170608530528000184550000000154301000771561',
{
method: 'GET',
headers: {
'Accept': 'application/pdf',
'X-API-KEY': 'SEU_TOKEN_AQUI'
}
}
);
if (response.ok) {
const blob = await response.blob();
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'danfe.pdf';
a.click();
}
import requests
url = "https://api.validanfe.com/GuardaNFe/GerarDanfe/35170608530528000184550000000154301000771561"
headers = {
"Accept": "application/pdf",
"X-API-KEY": "SEU_TOKEN_AQUI"
}
response = requests.get(url, headers=headers)
if response.status_code == 200:
with open('danfe.pdf', 'wb') as f:
f.write(response.content)
print("DANFE gerado com sucesso!")
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.validanfe.com/GuardaNFe/GerarDanfe/35170608530528000184550000000154301000771561');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Accept: application/pdf',
'X-API-KEY: SEU_TOKEN_AQUI'
]);
$pdfContent = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($httpCode === 200) {
file_put_contents('danfe.pdf', $pdfContent);
echo "DANFE gerado com sucesso!";
}
curl_close($ch);
?>
Códigos de Resposta
Success
DANFE gerado com sucesso - retorna arquivo PDFContent-Type:
application/pdfContent-Disposition: attachment; filename="danfe_{chaveNfe}.pdf"Bad Request
Chave NFe inválida ou malformada
Unauthorized
Token de autenticação ausente ou inválido
Not Found
NFe não encontrada ou não pertence ao cliente
Internal Server Error
Erro interno ao gerar DANFE
Service Unavailable
Serviço de geração de DANFE temporariamente indisponível
Exemplos de Resposta
{
"message": "NFe não encontrada ou não pertence ao cliente."
}
{
"message": "Erro ao gerar DANFE.",
"error": "Timeout na geração do PDF"
}
Características do DANFE
Formato e Layout
Formato e Layout
- Formato: PDF/A padrão para arquivamento
- Layout: Conforme especificação oficial da Receita Federal
- Orientação: Retrato (Portrait)
- Tamanho: A4 (210 x 297 mm)
- Resolução: 300 DPI para impressão de qualidade
Informações Incluídas
Informações Incluídas
- Dados do Emitente: Razão social, CNPJ, endereço, IE
- Dados do Destinatário: Nome, CPF/CNPJ, endereço
- Produtos/Serviços: Descrição, quantidade, valores, impostos
- Totais: Valores totais da nota, impostos, desconto
- Observações: Informações adicionais da NFe
- Chave de Acesso: Código de barras e número da chave
Performance e Confiabilidade
Performance e Confiabilidade
- Timeout: 30 segundos na primeira tentativa
- Retry Automático: Até 3 tentativas com timeout incremental
- Cache: DANFE é gerado sob demanda
- Fallback: Sistema robusto com múltiplas tentativas
Processo de Geração
1
Validação da NFe
Sistema verifica se a NFe existe e pertence ao cliente autenticado
2
Recuperação do XML
XML da NFe é recuperado do armazenamento seguro (AWS S3)
3
Processamento
XML é enviado para o serviço especializado de geração de DANFE
4
Geração do PDF
DANFE é gerado conforme layout oficial da Receita Federal
5
Entrega
PDF é retornado diretamente no response para download
Rate Limiting
Limite de RequisiçõesPara garantir a estabilidade do serviço:
- 5 gerações por minuto por token
- 50 gerações por hora por token
- Limite pode ser aumentado conforme plano contratado
Troubleshooting
Problemas Comuns
Problemas Comuns
NFe não encontrada:
- Verifique se a chave NFe está correta (44 dígitos)
- Confirme se a NFe foi enviada via API de envio
- Verifique se está usando o token correto
- Sistema faz retry automático
- Tente novamente após alguns minutos
- Entre em contato se persistir
- Verifique o Content-Type na resposta
- Salve o arquivo em modo binário
- Confirme que não houve truncamento
Monitoramento
Monitoramento
Métricas Importantes:
- Tempo médio de geração: ~3-5 segundos
- Taxa de sucesso: >99.5%
- Timeout configurado: 30s/40s/50s (tentativas)
- Todas as gerações são registradas
- Incluído no relatório de uso da API
- Métricas disponíveis no dashboard
Integração com Frontend
Visualização no Navegador
async function visualizarDanfe(chaveNfe) {
const response = await fetch(`/api/GuardaNFe/GerarDanfe/${chaveNfe}`, {
headers: { 'X-API-KEY': 'SEU_TOKEN' }
});
if (response.ok) {
const blob = await response.blob();
const url = URL.createObjectURL(blob);
window.open(url, '_blank');
}
}
async function baixarDanfe(chaveNfe) {
const response = await fetch(`/api/GuardaNFe/GerarDanfe/${chaveNfe}`, {
headers: { 'X-API-KEY': 'SEU_TOKEN' }
});
if (response.ok) {
const blob = await response.blob();
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = `danfe_${chaveNfe}.pdf`;
a.click();
URL.revokeObjectURL(url);
}
}
React Component
React Hook
import { useState } from 'react';
export function useDanfeGenerator() {
const [loading, setLoading] = useState(false);
const [error, setError] = useState(null);
const gerarDanfe = async (chaveNfe) => {
setLoading(true);
setError(null);
try {
const response = await fetch(`/api/GuardaNFe/GerarDanfe/${chaveNfe}`, {
headers: { 'X-API-KEY': process.env.REACT_APP_API_TOKEN }
});
if (!response.ok) {
throw new Error('Erro ao gerar DANFE');
}
const blob = await response.blob();
const url = URL.createObjectURL(blob);
window.open(url, '_blank');
} catch (err) {
setError(err.message);
} finally {
setLoading(false);
}
};
return { gerarDanfe, loading, error };
}
Base URL
A URL base para o GuardaNFe é:https://api.validanfe.com/GuardaNFe
Próximos Passos
Enviar XML
Envie XMLs de NFe para o sistema
Verificar NFe
Verifique se uma NFe está armazenada
Gerar Arquivo
Gere arquivos ZIP com múltiplas NFes
Visualizar XML
Visualize o conteúdo XML da NFe
Dica de PerformancePara aplicações que geram muitos DANFEs:
- Implemente cache no frontend para evitar gerações duplicadas
- Use loading states para melhor experiência do usuário
- Considere geração em lote para múltiplas NFes
Precisa de Ajuda?Entre em contato: suporte@validanfe.com