Tudo o que o seu time de desenvolvimento precisa para integrar a emissão de Declaração de Conteúdo Eletrônica: autenticação, endpoints REST, estrutura dos objetos e exemplos de JSON prontos para copiar.
Todas as requisições partem do mesmo host. Os caminhos descritos nesta documentação são relativos a esta base.
https://portaldce.com.br/apiA API utiliza autenticação via Bearer Token. Todos os endpoints protegidos exigem o cabeçalho de autorização:
Authorization: Bearer ACCESS_TOKEN/oauth/token.phpContent-Type: application/json{
"client_id": "SEU_CLIENT_ID",
"client_secret": "SEU_CLIENT_SECRET"
}{
"success": true,
"token_type": "Bearer",
"expires_in": 3600,
"access_token": "TOKEN",
"refresh_token": "REFRESH_TOKEN"
}/oauth/refresh.php{
"refresh_token": "SEU_REFRESH_TOKEN"
}{
"success": true,
"token_type": "Bearer",
"expires_in": 3600,
"access_token": "NOVO_ACCESS_TOKEN",
"refresh_token": "NOVO_REFRESH_TOKEN"
}| Campo | Tempo | Observação |
|---|---|---|
access_token | 1 hora | Deve ser renovado manualmente utilizando o refresh_token |
refresh_token | Renovado automaticamente | Um novo refresh_token é retornado a cada renovação |
O access_token não é renovado automaticamente pelo PortalDCE. A aplicação cliente deve renová-lo manualmente. Sempre que o token expirar, a aplicação deve:
POST /oauth/refresh.phprefresh_tokenaccess_tokenrefresh_token retornadoRenove o token automaticamente alguns minutos antes da expiração para evitar falhas de autenticação em produção.
Authorization: Bearer ACCESS_TOKENContent-Type: application/json| Método | Utilização |
|---|---|
| POST | Criar / transmitir / cancelar |
| GET | Consultar / download |
| PUT | Atualizar |
| DELETE | Excluir |
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /v1/criar.php |
Criar DC-e |
| GET | /v1/consultar.php?id=ID |
Consultar DC-e |
| PUT | /v1/atualizar.php?id=ID |
Atualizar DC-e |
| DELETE | /v1/excluir.php?id=ID |
Excluir DC-e |
| POST | /v1/transmitir.php?id=ID |
Transmitir DC-e |
| POST | /v1/cancelar.php?id=ID |
Cancelar DC-e |
| GET | /v1/download_xml.php?id=ID |
Download XML autorizado |
| GET | /v1/download_xml_cancelado.php?id=ID |
Download XML cancelado |
| GET | /v1/dace.php?id=ID |
Visualizar PDF DACE |
tpEmit e tpEmisSão dois campos diferentes e é fácil confundir pelo nome parecido. Um diz quem está emitindo, o outro diz em qual ambiente a emissão acontece. Os dois são enviados na raiz do JSON.
tpEmit = tipo de emitente (quem emite: marketplace, a própria empresa ou transportadora).
tpEmis = tipo de emissão (ambiente: produção ou homologação).
tpEmit — Tipo de emitenteDefine o cenário da emissão e quais objetos são esperados no corpo da requisição.
| Valor | Emitente | Quando utilizar |
|---|---|---|
1 | Marketplace | Venda realizada através de marketplace (Mercado Livre, Shopee, Amazon, Magalu, Americanas). Exige o objeto remetente com o vendedor parceiro. |
2 | Emissor Próprio | A própria empresa emissora está emitindo diretamente a DC-e. Não exige remetente. |
3 | Transportadora | Operações de transporte. Exige remetente e destinatario. |
tpEmis — Tipo de emissão (ambiente)Define se o documento vai para o ambiente de produção, com validade fiscal, ou para o ambiente de testes.
| Valor | Ambiente | Efeito |
|---|---|---|
1 | Produção | Documento com validade fiscal. Use apenas quando a integração já estiver homologada. |
2 | Homologação | Ambiente de testes, sem validade fiscal. Use durante o desenvolvimento da integração. |
Todos os exemplos desta documentação usam "tpEmis": 1 (produção).
Durante o desenvolvimento, troque para 2 para não gerar documentos
fiscais válidos por engano nos seus testes.
Utilizado quando a venda foi realizada através de marketplace. Neste cenário o objeto remetente identifica o vendedor parceiro e o destinatario é o cliente final.
{
"tpEmit": 1,
"tpEmis": 1,
"siteMarketplace": "mercadolivre.com.br",
"destinatario": {
"nome": "CLIENTE MARKETPLACE",
"cpf_cnpj": "12345678901",
"cep": "84010000",
"logradouro": "Rua Marketplace",
"numero": "500",
"complemento": "Casa",
"bairro": "Centro",
"telefone": "42999999999",
"email": "cliente.marketplace@teste.com"
},
"remetente": {
"cpf_cnpj": "11222333000144",
"nome": "LOJA PARCEIRA MARKETPLACE",
"ie": "1234567890",
"cep": "84010-120",
"logradouro": "Rua XV de Novembro",
"numero": "100",
"complemento": "Sala 1",
"bairro": "Centro",
"telefone": "41999999999",
"email": "parceiro@teste.com"
},
"transporte": {
"modTrans": 2,
"CNPJTransp": "55444777000188",
"xNomeTransp": "TRANSPORTADORA MARKETPLACE"
},
"produtos": [
{
"descricao": "Notebook Gamer",
"ncm": "84713012",
"qtd": 1,
"valor": 5500.00,
"informacoes_adicionais": "Produto Marketplace"
}
],
"informacoes_adicionais": {
"infAdFisco": "Venda Marketplace",
"infCpl": "Pedido Marketplace #1000",
"infAdMarketplace": "Mercado Livre Pedido 1000"
}
}| Campo | Tipo | Descrição |
|---|---|---|
tpEmit | integer | Tipo de emitente — use 1 para marketplace |
tpEmis | integer | Tipo de emissão — 1 produção, 2 homologação |
siteMarketplace | string | Nome ou domínio do marketplace |
destinatario | object | Dados do cliente final |
remetente | object | Dados do vendedor parceiro |
transporte | object | Dados do transporte |
produtos | array | Lista de produtos |
informacoes_adicionais | object | Informações extras |
Utilizado quando a própria empresa emissora está emitindo diretamente a DC-e. Não exige o objeto remetente.
{
"tpEmit": 2,
"tpEmis": 1,
"destinatario": {
"nome": "CLIENTE TESTE API",
"cpf_cnpj": "12345678901",
"cep": "84010000",
"logradouro": "Rua Teste API",
"numero": "100",
"complemento": "Sala 1",
"bairro": "Centro",
"telefone": "42999999999",
"email": "cliente@teste.com"
},
"transporte": {
"modTrans": 2,
"CNPJTransp": "12345678000199",
"xNomeTransp": "TRANSPORTADORA TESTE"
},
"produtos": [
{
"descricao": "Produto Teste API",
"ncm": "61091000",
"qtd": 2,
"valor": 150.50,
"informacoes_adicionais": "Produto enviado via API"
},
{
"descricao": "Segundo Produto",
"ncm": "84713012",
"qtd": 1,
"valor": 999.90
}
],
"informacoes_adicionais": {
"infAdFisco": "Teste API",
"infCpl": "Documento emitido via API"
}
}| Campo | Tipo | Descrição |
|---|---|---|
tpEmit | integer | Tipo de emitente — use 2 para emissor próprio |
tpEmis | integer | Tipo de emissão — 1 produção, 2 homologação |
destinatario | object | Dados do cliente |
transporte | object | Dados do transporte |
produtos | array | Produtos do documento |
informacoes_adicionais | object | Informações extras |
Utilizado para operações de transporte. Exige os objetos remetente e destinatario.
{
"tpEmit": 3,
"tpEmis": 1,
"destinatario": {
"nome": "DESTINATARIO TRANSPORTE",
"cpf_cnpj": "98765432100",
"cep": "84010-120",
"logradouro": "Rua XV de Novembro",
"numero": "100",
"complemento": "Sala 1",
"bairro": "Centro",
"telefone": "43999999999",
"email": "destinatario@teste.com"
},
"remetente": {
"cpf_cnpj": "22333444000155",
"nome": "EMPRESA REMETENTE",
"ie": "99887766",
"cep": "84010000",
"logradouro": "Rua Remetente",
"numero": "200",
"complemento": "Barracao",
"bairro": "Industrial",
"telefone": "42988888888",
"email": "remetente@teste.com"
},
"transporte": {
"modTrans": 1
},
"produtos": [
{
"descricao": "Pecas Automotivas",
"ncm": "87089990",
"qtd": 10,
"valor": 85.90,
"informacoes_adicionais": "Carga fracionada"
},
{
"descricao": "Filtro de Oleo",
"ncm": "84212300",
"qtd": 5,
"valor": 35.00
}
],
"informacoes_adicionais": {
"infAdFisco": "Transporte rodoviario",
"infCpl": "Entrega prevista em 24h"
}
}| Campo | Tipo | Descrição |
|---|---|---|
tpEmit | integer | Tipo de emitente — use 3 para transportadora |
tpEmis | integer | Tipo de emissão — 1 produção, 2 homologação |
remetente | object | Empresa remetente |
destinatario | object | Destinatário da carga |
transporte | object | Dados do transporte |
produtos | array | Itens transportados |
destinatario| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
nome | string | Sim | Nome do cliente |
cpf_cnpj | string | Sim | CPF ou CNPJ |
cep | string | Sim | CEP |
logradouro | string | Sim | Rua |
numero | string | Sim | Número |
complemento | string | Não | Complemento |
bairro | string | Sim | Bairro |
telefone | string | Não | Telefone |
email | string | Não |
remetente| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
cpf_cnpj | string | Sim | CPF/CNPJ do remetente |
nome | string | Sim | Nome do remetente |
ie | string | Não | Inscrição estadual |
cep | string | Sim | CEP |
logradouro | string | Sim | Rua |
numero | string | Sim | Número |
complemento | string | Não | Complemento |
bairro | string | Sim | Bairro |
telefone | string | Não | Telefone |
email | string | Não |
transporte| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
modTrans | integer | Sim | Modalidade de transporte |
CNPJTransp | string | Não | CNPJ da transportadora |
xNomeTransp | string | Não | Nome da transportadora |
produtosArray de objetos. Cada item representa um produto do documento.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
descricao | string | Sim | Descrição do produto |
ncm | string | Sim | Código NCM |
qtd | decimal | Sim | Quantidade |
valor | decimal | Sim | Valor unitário |
informacoes_adicionais | string | Não | Informação extra do item |
informacoes_adicionais| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
infAdFisco | string | Não | Informação fiscal |
infCpl | string | Não | Informação complementar |
infAdMarketplace | string | Não | Informação de marketplace |
/v1/criar.phpAuthorization: Bearer ACCESS_TOKEN Content-Type: application/json
{
"success": true,
"id": 33098,
"status": "PENDENTE",
"mensagem": "DC-e criada com sucesso"
}/v1/consultar.php?id=33098{
"success": true,
"data": {
"dce": {
"id": "33098",
"status": "PENDENTE",
"numero": "37",
"serie": "1",
"tpEmit": "1",
"tpEmis": "1",
"dhEmi": "2026-05-26 21:58:54"
}
}
}/v1/atualizar.php?id=33098Não envie apenas os campos alterados. O fluxo correto é:
{
"tpEmit": 2,
"tpEmis": 1,
"destinatario": {
"nome": "CLIENTE ALTERADO",
"cpf_cnpj": "12345678901"
},
"produtos": [
{
"descricao": "Produto Atualizado",
"ncm": "61091000",
"qtd": 5,
"valor": 250.00
}
]
}/v1/transmitir.php?id=33098O endpoint suporta dois modos de certificado digital: o certificado salvo no PortalDCE ou um certificado temporário enviado via API em Base64.
Quando o emitente já possui certificado configurado, não é necessário enviar certificado no body:
{}{
"certificado": {
"arquivo_base64": "MIIK....",
"senha": "123456"
}
}.pfx){
"success": true,
"status": "autorizado",
"id": "33098",
"chave": "41260511496275000184990010000000371205269649",
"protocolo": "1412600003762188"
}/v1/cancelar.php?id=33098Assim como a transmissão, aceita certificado salvo ou temporário.
{
"motivo": "Erro na emissao da dce"
}{
"motivo": "Erro na emissao da dce",
"certificado": {
"arquivo_base64": "MIIK....",
"senha": "123456"
}
}{
"status": "cancelado",
"id": "33098",
"protocolo": "1412600003762646"
}/v1/download_xml.php?id=33098/v1/download_xml_cancelado.php?id=33098/v1/dace.php?id=33098| Código | Descrição |
|---|---|
200 | Sucesso |
400 | Requisição inválida |
401 | Não autorizado |
404 | Não encontrado |
405 | Método inválido |
500 | Erro interno |
POST /oauth/token.php
POST /v1/criar.php
GET /v1/consultar.php?id=33098
PUT /v1/atualizar.php?id=33098
POST /v1/transmitir.php?id=33098
GET /v1/dace.php?id=33098
GET /v1/download_xml.php?id=33098
| Campo | Tipo | Descrição |
|---|---|---|
Authorization | Auth Type | Bearer Token |
Token | string | Cole o ACCESS_TOKEN |
Body | raw | Selecione raw e o formato JSON |
refresh_token retornadotpEmit identifica o emitente: 1 marketplace, 2 emissor próprio, 3 transportadoratpEmis identifica o ambiente: 1 produção, 2 homologação
Solicite o seu client_id e client_secret
e comece a emitir DC-e direto do seu sistema.
Central DC-e