Introdução
API para emissão e cancelamento de notas fiscais de serviço.
Esta documentação tem como objetivo fornecer todas as informações que você precisa para trabalhar com a nossa API.
Autenticando requisições
Para autenticar as requisições, inclua o header Authorization com o valor "Bearer {YOUR_AUTH_KEY}".
Para obter o token, acesse o sistema, vá em Desenvolvedor → API Keys e gere um API Token. O token gerado deverá ser enviado em todas as requisições.
Todos os endpoints autenticados são marcados com o selo requer autenticação na documentação abaixo.
Certificado digital
APIs para gerenciamento do certificado digital A1 da empresa. O certificado é necessário para a emissão de documentos fiscais que exigem assinatura digital.
Enviar certificado
requer autenticação
Envia e armazena o certificado digital A1 (formato PFX/P12) para a empresa identificada pelo UUID. O certificado é criptografado antes de ser armazenado.
Exemplo de requisição:
$client = new \GuzzleHttp\Client();
$url = 'https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000/certificado';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'cert_file' => 'MIIKXAIBAzCCCh...',
'cert_pass' => 'minha_senha_secreta',
'valid_ultil' => '2027-12-31',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000/certificado"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"cert_file": "MIIKXAIBAzCCCh...",
"cert_pass": "minha_senha_secreta",
"valid_ultil": "2027-12-31"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000/certificado'
payload = {
"cert_file": "MIIKXAIBAzCCCh...",
"cert_pass": "minha_senha_secreta",
"valid_ultil": "2027-12-31"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()curl --request POST \
"https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000/certificado" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"cert_file\": \"MIIKXAIBAzCCCh...\",
\"cert_pass\": \"minha_senha_secreta\",
\"valid_ultil\": \"2027-12-31\"
}"
Exemplo de resposta (201):
{
"id": 1,
"valid_until": "2027-12-31",
"company_id": 1
}
Exemplo de resposta (404):
{
"message": "Not found."
}
Exemplo de resposta (422):
{
"message": "O certificado é obrigatório.",
"errors": {
"cert_file": [
"O certificado é obrigatório."
]
}
}
Resposta recebida:
A requisição falhou com erro:
Dica: verifique se você está conectado corretamente à rede.
Se você é um mantenedor desta API, verifique se a API está rodando e se o CORS está habilitado.
Você pode verificar o console do DevTools para obter informações de depuração.
Empresas
APIs para gerenciamento das empresas emissoras vinculadas à conta.
Listar empresas
requer autenticação
Retorna todas as empresas vinculadas à equipe do usuário autenticado.
Exemplo de requisição:
$client = new \GuzzleHttp\Client();
$url = 'https://devnota.com.br/api/v2/empresas';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://devnota.com.br/api/v2/empresas"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://devnota.com.br/api/v2/empresas'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()curl --request GET \
--get "https://devnota.com.br/api/v2/empresas" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"Exemplo de resposta (200):
[
{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"name": "Empresa Exemplo LTDA",
"fantasy_name": "Exemplo",
"cnpj": "12345678000199",
"cnpj_formatted": "12.345.678/0001-99",
"nature": "PJ",
"cnae": null,
"im": "123456",
"ie": null,
"status": "active",
"emission_types": [
"nfse"
],
"regime": "SIMPLES",
"special_tax_regime": "1",
"special_tax_regime_label": "Micro empresa municipal",
"tax_assessment_regime": null,
"cep": "50010000",
"address": "Rua das Flores",
"number": "123",
"neighborhood": "Centro",
"complement": null,
"certificate_status": {
"type": "active",
"date": "2027-12-31T00:00:00.000000Z"
},
"city": {
"ibge_code": "2611606",
"name": "Recife"
},
"created_at": "2026-01-01T00:00:00.000000Z",
"updated_at": "2026-01-01T00:00:00.000000Z"
}
]
Resposta recebida:
A requisição falhou com erro:
Dica: verifique se você está conectado corretamente à rede.
Se você é um mantenedor desta API, verifique se a API está rodando e se o CORS está habilitado.
Você pode verificar o console do DevTools para obter informações de depuração.
Cadastrar empresa
requer autenticação
Cadastra uma nova empresa emissora vinculada à equipe do usuário autenticado.
Exemplo de requisição:
$client = new \GuzzleHttp\Client();
$url = 'https://devnota.com.br/api/v2/empresas';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'nature' => 'PJ',
'name' => 'Empresa Exemplo LTDA',
'fantasy_name' => 'Exemplo',
'cnpj' => '12345678000199',
'cnae' => '6201501',
'ibge_code' => '2611606',
'cep' => '50010000',
'address' => 'Rua das Flores',
'number' => '123',
'neighborhood' => 'Centro',
'complement' => 'Sala 1',
'regime' => 'SIMPLES',
'special_tax_regime' => 0,
'tax_assessment_regime' => null,
'emission_types' => [
'nfse',
],
'im' => '123456',
'ie' => '123456789',
'csc_production' => 'ABC123',
'csc_developer' => 'DEF456',
'csc_id' => '0001',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://devnota.com.br/api/v2/empresas"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"nature": "PJ",
"name": "Empresa Exemplo LTDA",
"fantasy_name": "Exemplo",
"cnpj": "12345678000199",
"cnae": "6201501",
"ibge_code": "2611606",
"cep": "50010000",
"address": "Rua das Flores",
"number": "123",
"neighborhood": "Centro",
"complement": "Sala 1",
"regime": "SIMPLES",
"special_tax_regime": 0,
"tax_assessment_regime": null,
"emission_types": [
"nfse"
],
"im": "123456",
"ie": "123456789",
"csc_production": "ABC123",
"csc_developer": "DEF456",
"csc_id": "0001"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://devnota.com.br/api/v2/empresas'
payload = {
"nature": "PJ",
"name": "Empresa Exemplo LTDA",
"fantasy_name": "Exemplo",
"cnpj": "12345678000199",
"cnae": "6201501",
"ibge_code": "2611606",
"cep": "50010000",
"address": "Rua das Flores",
"number": "123",
"neighborhood": "Centro",
"complement": "Sala 1",
"regime": "SIMPLES",
"special_tax_regime": 0,
"tax_assessment_regime": null,
"emission_types": [
"nfse"
],
"im": "123456",
"ie": "123456789",
"csc_production": "ABC123",
"csc_developer": "DEF456",
"csc_id": "0001"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()curl --request POST \
"https://devnota.com.br/api/v2/empresas" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"nature\": \"PJ\",
\"name\": \"Empresa Exemplo LTDA\",
\"fantasy_name\": \"Exemplo\",
\"cnpj\": \"12345678000199\",
\"cnae\": \"6201501\",
\"ibge_code\": \"2611606\",
\"cep\": \"50010000\",
\"address\": \"Rua das Flores\",
\"number\": \"123\",
\"neighborhood\": \"Centro\",
\"complement\": \"Sala 1\",
\"regime\": \"SIMPLES\",
\"special_tax_regime\": 0,
\"tax_assessment_regime\": null,
\"emission_types\": [
\"nfse\"
],
\"im\": \"123456\",
\"ie\": \"123456789\",
\"csc_production\": \"ABC123\",
\"csc_developer\": \"DEF456\",
\"csc_id\": \"0001\"
}"
Exemplo de resposta (201):
{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"name": "Empresa Exemplo LTDA",
"fantasy_name": "Exemplo",
"cnpj": "12345678000199",
"cnpj_formatted": "12.345.678/0001-99",
"nature": "PJ",
"cnae": null,
"im": "123456",
"ie": null,
"status": "active",
"emission_types": [
"nfse"
],
"regime": "SIMPLES",
"special_tax_regime": "1",
"special_tax_regime_label": "Micro empresa municipal",
"tax_assessment_regime": null,
"cep": "50010000",
"address": "Rua das Flores",
"number": "123",
"neighborhood": "Centro",
"complement": null,
"certificate_status": {
"type": "none",
"date": null
},
"city": {
"ibge_code": "2611606",
"name": "Recife"
},
"created_at": "2026-01-01T00:00:00.000000Z",
"updated_at": "2026-01-01T00:00:00.000000Z"
}
Exemplo de resposta (422):
{
"message": "A razão social é obrigatória.",
"errors": {
"name": [
"A razão social é obrigatória."
]
}
}
Resposta recebida:
A requisição falhou com erro:
Dica: verifique se você está conectado corretamente à rede.
Se você é um mantenedor desta API, verifique se a API está rodando e se o CORS está habilitado.
Você pode verificar o console do DevTools para obter informações de depuração.
Atualizar empresa
requer autenticação
Atualiza os dados cadastrais da empresa identificada pelo UUID.
Exemplo de requisição:
$client = new \GuzzleHttp\Client();
$url = 'https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000';
$response = $client->put(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'nature' => 'PJ',
'name' => 'Empresa Exemplo LTDA',
'fantasy_name' => 'Exemplo',
'cnae' => '6201501',
'ibge_code' => '2611606',
'cep' => '50010000',
'address' => 'Rua das Flores',
'number' => '123',
'neighborhood' => 'Centro',
'complement' => 'Sala 1',
'regime' => 'SIMPLES',
'special_tax_regime' => 0,
'tax_assessment_regime' => null,
'emission_types' => [
'nfse',
],
'im' => '123456',
'ie' => '123456789',
'csc_production' => 'ABC123',
'csc_developer' => 'DEF456',
'csc_id' => '0001',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"nature": "PJ",
"name": "Empresa Exemplo LTDA",
"fantasy_name": "Exemplo",
"cnae": "6201501",
"ibge_code": "2611606",
"cep": "50010000",
"address": "Rua das Flores",
"number": "123",
"neighborhood": "Centro",
"complement": "Sala 1",
"regime": "SIMPLES",
"special_tax_regime": 0,
"tax_assessment_regime": null,
"emission_types": [
"nfse"
],
"im": "123456",
"ie": "123456789",
"csc_production": "ABC123",
"csc_developer": "DEF456",
"csc_id": "0001"
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000'
payload = {
"nature": "PJ",
"name": "Empresa Exemplo LTDA",
"fantasy_name": "Exemplo",
"cnae": "6201501",
"ibge_code": "2611606",
"cep": "50010000",
"address": "Rua das Flores",
"number": "123",
"neighborhood": "Centro",
"complement": "Sala 1",
"regime": "SIMPLES",
"special_tax_regime": 0,
"tax_assessment_regime": null,
"emission_types": [
"nfse"
],
"im": "123456",
"ie": "123456789",
"csc_production": "ABC123",
"csc_developer": "DEF456",
"csc_id": "0001"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()curl --request PUT \
"https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"nature\": \"PJ\",
\"name\": \"Empresa Exemplo LTDA\",
\"fantasy_name\": \"Exemplo\",
\"cnae\": \"6201501\",
\"ibge_code\": \"2611606\",
\"cep\": \"50010000\",
\"address\": \"Rua das Flores\",
\"number\": \"123\",
\"neighborhood\": \"Centro\",
\"complement\": \"Sala 1\",
\"regime\": \"SIMPLES\",
\"special_tax_regime\": 0,
\"tax_assessment_regime\": null,
\"emission_types\": [
\"nfse\"
],
\"im\": \"123456\",
\"ie\": \"123456789\",
\"csc_production\": \"ABC123\",
\"csc_developer\": \"DEF456\",
\"csc_id\": \"0001\"
}"
Exemplo de resposta (200):
{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"name": "Empresa Exemplo LTDA",
"fantasy_name": "Exemplo",
"cnpj": "12345678000199",
"cnpj_formatted": "12.345.678/0001-99",
"nature": "PJ",
"cnae": null,
"im": "123456",
"ie": null,
"status": "active",
"emission_types": [
"nfse"
],
"regime": "SIMPLES",
"special_tax_regime": "1",
"special_tax_regime_label": "Micro empresa municipal",
"tax_assessment_regime": null,
"cep": "50010000",
"address": "Rua das Flores",
"number": "123",
"neighborhood": "Centro",
"complement": null,
"certificate_status": {
"type": "active",
"date": "2027-12-31T00:00:00.000000Z"
},
"city": {
"ibge_code": "2611606",
"name": "Recife"
},
"created_at": "2026-01-01T00:00:00.000000Z",
"updated_at": "2026-01-01T00:00:00.000000Z"
}
Exemplo de resposta (404):
{
"message": "Not found."
}
Exemplo de resposta (422):
{
"message": "A razão social é obrigatória.",
"errors": {
"name": [
"A razão social é obrigatória."
]
}
}
Resposta recebida:
A requisição falhou com erro:
Dica: verifique se você está conectado corretamente à rede.
Se você é um mantenedor desta API, verifique se a API está rodando e se o CORS está habilitado.
Você pode verificar o console do DevTools para obter informações de depuração.
Remover empresa
requer autenticação
Remove uma empresa emissora identificada pelo UUID.
Exemplo de requisição:
$client = new \GuzzleHttp\Client();
$url = 'https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000';
$response = $client->delete(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());import requests
import json
url = 'https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()curl --request DELETE \
"https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"Exemplo de resposta (200):
{
"message": "Empresa removida com sucesso."
}
Exemplo de resposta (404):
{
"message": "Not found."
}
Resposta recebida:
A requisição falhou com erro:
Dica: verifique se você está conectado corretamente à rede.
Se você é um mantenedor desta API, verifique se a API está rodando e se o CORS está habilitado.
Você pode verificar o console do DevTools para obter informações de depuração.
NF-e
APIs para emissão de notas fiscais eletrônicas (venda de produto) com payload simplificado.
Emitir NF-e
requer autenticação
Cria uma solicitação de emissão de NF-e (venda de produto) usando o payload da API v2.
Exemplo de requisição:
$client = new \GuzzleHttp\Client();
$url = 'https://devnota.com.br/api/v2/nfe/gerar';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Company-uuid' => '{YOUR_COMPANY_UUID}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'callback' => 'https://example.com/callback',
'ambiente' => 'developer',
'numero' => 1,
'serie' => 1,
'pedido' => [
'naturezaOperacao' => 'Venda de mercadoria',
'consumidorFinal' => 'SIM',
'presencaConsumidor' => 'OperacaoPresencial',
'finalidade' => 'Normal',
'notasReferenciadas' => [
'35260712345678000190550010000001231234567890',
],
'informacoesComplementares' => 'Garantia de 90 dias para o produto.',
'informacoesFisco' => 'Documento emitido por ME ou EPP optante pelo Simples Nacional.',
'pagamento' => [
'formas' => [
[
'tipo' => 'Dinheiro',
'valor' => 7.69,
],
],
],
'faturamento' => [
'numero' => '001/2026',
'valorOriginal' => 1246.5,
'valorDesconto' => 0.0,
'valorLiquido' => 1246.5,
'duplicatas' => [
[
'numero' => '001/2026-1',
'vencimento' => '2026-07-30',
'valor' => 623.25,
],
],
],
'frete' => [
'modalidade' => 'SemFrete',
'transportadora' => [
'cpfCnpj' => '12345678000199',
'nome' => 'Transportes Rápidos LTDA',
'ie' => '1234567',
'endereco' => 'Rua A, 100',
'municipio' => 'Curitiba',
'uf' => 'PR',
],
'veiculo' => [
'placa' => 'ABC1D23',
'uf' => 'PR',
'rntc' => 'RNTC123',
],
'volumes' => [
[
'quantidade' => 2,
'especie' => 'Caixa',
'marca' => 'Marca X',
'numeracao' => '1/2',
'pesoLiquido' => 9.5,
'pesoBruto' => 10.5,
],
],
],
],
'cliente' => [
'nome' => 'Carlos Eduardo Lima',
'cpfCnpj' => '98765432100',
'email' => '[email protected]',
'telefone' => '(21) 99876-5432',
'endereco' => [
'uf' => 'PR',
'cidade' => '4106902',
'logradouro' => 'Avenida Brasil',
'numero' => '1500',
'complemento' => null,
'bairro' => 'Água Verde',
'cep' => '80240040',
],
],
'itens' => [
[
'cfop' => '5405',
'codigo' => '000068',
'descricao' => 'Mouse Gamer RGB',
'ncm' => '22030000',
'ean' => '7891234567891',
'cest' => '0302100',
'quantidade' => 1.0,
'unidadeMedida' => 'UN',
'valorUnitario' => 1246.5,
'desconto' => 50.0,
'impostos' => [
'icms' => [
'situacaoTributaria' => '60',
'origem' => '0',
'baseCalculo' => 0.0,
'aliquota' => 0.0,
'valor' => 0.0,
'modalidadeBaseCalculo' => '3',
'aliquotaCredito' => 1.25,
'valorCredito' => 12.5,
'baseCalculoST' => 0.0,
'aliquotaST' => 0.0,
'valorST' => 0.0,
'modalidadeBaseCalculoST' => '4',
'vBCFCP' => 100.0,
'pFCP' => 2.0,
'vFCP' => 2.0,
'vBCFCPST' => 100.0,
'pFCPST' => 2.0,
'vFCPST' => 2.0,
],
'difal' => [
'baseCalculo' => 500.0,
'aliquotaInterna' => 18.0,
'aliquotaInterestadual' => 12.0,
'valor' => 30.0,
'valorRemetente' => 0.0,
'baseCalculoFCP' => 500.0,
'aliquotaFCP' => 2.0,
'valorFCP' => 10.0,
],
'ipi' => [
'situacaoTributaria' => '50',
'enquadramentoLegal' => '999',
'baseCalculo' => 500.0,
'aliquota' => 10.0,
'valor' => 50.0,
'quantidadeUnidadeTributavel' => 10.0,
'valorUnidadeTributavel' => 1.5,
'cnpjProdutor' => '12345678000190',
'codigoSelo' => 'SELO123',
'quantidadeSelo' => '10',
],
'pis' => [
'situacaoTributaria' => '04',
'baseCalculo' => 0.0,
'aliquota' => 0.0,
'valor' => 0.0,
'quantidadeVendida' => 100.0,
'aliquotaReais' => 0.1,
],
'cofins' => [
'situacaoTributaria' => '04',
'baseCalculo' => 0.0,
'aliquota' => 0.0,
'valor' => 0.0,
'quantidadeVendida' => 100.0,
'aliquotaReais' => 0.46,
],
'pisST' => [
'baseCalculo' => 500.0,
'aliquota' => 1.65,
'valor' => 8.25,
'quantidadeVendida' => 100.0,
'aliquotaReais' => 0.1,
'somaValorTotalNota' => false,
],
'cofinsST' => [
'baseCalculo' => 500.0,
'aliquota' => 7.6,
'valor' => 38.0,
'quantidadeVendida' => 100.0,
'aliquotaReais' => 0.46,
'somaValorTotalNota' => false,
],
'ii' => [
'baseCalculo' => 5000.0,
'despesasAduaneiras' => 300.0,
'valor' => 900.0,
'valorIOF' => 20.0,
],
'ibsCbs' => [
'situacaoTributaria' => '000',
'classificacaoTributaria' => '000001',
'baseCalculo' => 500.0,
'aliquotaIBSEstadual' => 0.1,
'valorIBSEstadual' => 1.0,
'aliquotaIBSMunicipal' => 0.0,
'valorIBSMunicipal' => 0.0,
'aliquotaCBS' => 0.9,
'valorCBS' => 9.0,
'percentualDiferimentoIBSEstadual' => 100.0,
'valorDiferimentoIBSEstadual' => 1.0,
'percentualDiferimentoIBSMunicipal' => 100.0,
'valorDiferimentoIBSMunicipal' => 0.0,
'percentualDiferimentoCBS' => 100.0,
'valorDiferimentoCBS' => 9.0,
],
'percentualAproximadoTributos' => [
'fonte' => 'IBPT',
'detalhado' => [
'percentualFederal' => 8.5,
'percentualEstadual' => 18.0,
'percentualMunicipal' => 0.0,
],
],
],
],
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://devnota.com.br/api/v2/nfe/gerar"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Company-uuid": "{YOUR_COMPANY_UUID}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"callback": "https:\/\/example.com\/callback",
"ambiente": "developer",
"numero": 1,
"serie": 1,
"pedido": {
"naturezaOperacao": "Venda de mercadoria",
"consumidorFinal": "SIM",
"presencaConsumidor": "OperacaoPresencial",
"finalidade": "Normal",
"notasReferenciadas": [
"35260712345678000190550010000001231234567890"
],
"informacoesComplementares": "Garantia de 90 dias para o produto.",
"informacoesFisco": "Documento emitido por ME ou EPP optante pelo Simples Nacional.",
"pagamento": {
"formas": [
{
"tipo": "Dinheiro",
"valor": 7.69
}
]
},
"faturamento": {
"numero": "001\/2026",
"valorOriginal": 1246.5,
"valorDesconto": 0,
"valorLiquido": 1246.5,
"duplicatas": [
{
"numero": "001\/2026-1",
"vencimento": "2026-07-30",
"valor": 623.25
}
]
},
"frete": {
"modalidade": "SemFrete",
"transportadora": {
"cpfCnpj": "12345678000199",
"nome": "Transportes Rápidos LTDA",
"ie": "1234567",
"endereco": "Rua A, 100",
"municipio": "Curitiba",
"uf": "PR"
},
"veiculo": {
"placa": "ABC1D23",
"uf": "PR",
"rntc": "RNTC123"
},
"volumes": [
{
"quantidade": 2,
"especie": "Caixa",
"marca": "Marca X",
"numeracao": "1\/2",
"pesoLiquido": 9.5,
"pesoBruto": 10.5
}
]
}
},
"cliente": {
"nome": "Carlos Eduardo Lima",
"cpfCnpj": "98765432100",
"email": "[email protected]",
"telefone": "(21) 99876-5432",
"endereco": {
"uf": "PR",
"cidade": "4106902",
"logradouro": "Avenida Brasil",
"numero": "1500",
"complemento": null,
"bairro": "Água Verde",
"cep": "80240040"
}
},
"itens": [
{
"cfop": "5405",
"codigo": "000068",
"descricao": "Mouse Gamer RGB",
"ncm": "22030000",
"ean": "7891234567891",
"cest": "0302100",
"quantidade": 1,
"unidadeMedida": "UN",
"valorUnitario": 1246.5,
"desconto": 50,
"impostos": {
"icms": {
"situacaoTributaria": "60",
"origem": "0",
"baseCalculo": 0,
"aliquota": 0,
"valor": 0,
"modalidadeBaseCalculo": "3",
"aliquotaCredito": 1.25,
"valorCredito": 12.5,
"baseCalculoST": 0,
"aliquotaST": 0,
"valorST": 0,
"modalidadeBaseCalculoST": "4",
"vBCFCP": 100,
"pFCP": 2,
"vFCP": 2,
"vBCFCPST": 100,
"pFCPST": 2,
"vFCPST": 2
},
"difal": {
"baseCalculo": 500,
"aliquotaInterna": 18,
"aliquotaInterestadual": 12,
"valor": 30,
"valorRemetente": 0,
"baseCalculoFCP": 500,
"aliquotaFCP": 2,
"valorFCP": 10
},
"ipi": {
"situacaoTributaria": "50",
"enquadramentoLegal": "999",
"baseCalculo": 500,
"aliquota": 10,
"valor": 50,
"quantidadeUnidadeTributavel": 10,
"valorUnidadeTributavel": 1.5,
"cnpjProdutor": "12345678000190",
"codigoSelo": "SELO123",
"quantidadeSelo": "10"
},
"pis": {
"situacaoTributaria": "04",
"baseCalculo": 0,
"aliquota": 0,
"valor": 0,
"quantidadeVendida": 100,
"aliquotaReais": 0.1
},
"cofins": {
"situacaoTributaria": "04",
"baseCalculo": 0,
"aliquota": 0,
"valor": 0,
"quantidadeVendida": 100,
"aliquotaReais": 0.46
},
"pisST": {
"baseCalculo": 500,
"aliquota": 1.65,
"valor": 8.25,
"quantidadeVendida": 100,
"aliquotaReais": 0.1,
"somaValorTotalNota": false
},
"cofinsST": {
"baseCalculo": 500,
"aliquota": 7.6,
"valor": 38,
"quantidadeVendida": 100,
"aliquotaReais": 0.46,
"somaValorTotalNota": false
},
"ii": {
"baseCalculo": 5000,
"despesasAduaneiras": 300,
"valor": 900,
"valorIOF": 20
},
"ibsCbs": {
"situacaoTributaria": "000",
"classificacaoTributaria": "000001",
"baseCalculo": 500,
"aliquotaIBSEstadual": 0.1,
"valorIBSEstadual": 1,
"aliquotaIBSMunicipal": 0,
"valorIBSMunicipal": 0,
"aliquotaCBS": 0.9,
"valorCBS": 9,
"percentualDiferimentoIBSEstadual": 100,
"valorDiferimentoIBSEstadual": 1,
"percentualDiferimentoIBSMunicipal": 100,
"valorDiferimentoIBSMunicipal": 0,
"percentualDiferimentoCBS": 100,
"valorDiferimentoCBS": 9
},
"percentualAproximadoTributos": {
"fonte": "IBPT",
"detalhado": {
"percentualFederal": 8.5,
"percentualEstadual": 18,
"percentualMunicipal": 0
}
}
}
}
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://devnota.com.br/api/v2/nfe/gerar'
payload = {
"callback": "https:\/\/example.com\/callback",
"ambiente": "developer",
"numero": 1,
"serie": 1,
"pedido": {
"naturezaOperacao": "Venda de mercadoria",
"consumidorFinal": "SIM",
"presencaConsumidor": "OperacaoPresencial",
"finalidade": "Normal",
"notasReferenciadas": [
"35260712345678000190550010000001231234567890"
],
"informacoesComplementares": "Garantia de 90 dias para o produto.",
"informacoesFisco": "Documento emitido por ME ou EPP optante pelo Simples Nacional.",
"pagamento": {
"formas": [
{
"tipo": "Dinheiro",
"valor": 7.69
}
]
},
"faturamento": {
"numero": "001\/2026",
"valorOriginal": 1246.5,
"valorDesconto": 0,
"valorLiquido": 1246.5,
"duplicatas": [
{
"numero": "001\/2026-1",
"vencimento": "2026-07-30",
"valor": 623.25
}
]
},
"frete": {
"modalidade": "SemFrete",
"transportadora": {
"cpfCnpj": "12345678000199",
"nome": "Transportes Rápidos LTDA",
"ie": "1234567",
"endereco": "Rua A, 100",
"municipio": "Curitiba",
"uf": "PR"
},
"veiculo": {
"placa": "ABC1D23",
"uf": "PR",
"rntc": "RNTC123"
},
"volumes": [
{
"quantidade": 2,
"especie": "Caixa",
"marca": "Marca X",
"numeracao": "1\/2",
"pesoLiquido": 9.5,
"pesoBruto": 10.5
}
]
}
},
"cliente": {
"nome": "Carlos Eduardo Lima",
"cpfCnpj": "98765432100",
"email": "[email protected]",
"telefone": "(21) 99876-5432",
"endereco": {
"uf": "PR",
"cidade": "4106902",
"logradouro": "Avenida Brasil",
"numero": "1500",
"complemento": null,
"bairro": "Água Verde",
"cep": "80240040"
}
},
"itens": [
{
"cfop": "5405",
"codigo": "000068",
"descricao": "Mouse Gamer RGB",
"ncm": "22030000",
"ean": "7891234567891",
"cest": "0302100",
"quantidade": 1,
"unidadeMedida": "UN",
"valorUnitario": 1246.5,
"desconto": 50,
"impostos": {
"icms": {
"situacaoTributaria": "60",
"origem": "0",
"baseCalculo": 0,
"aliquota": 0,
"valor": 0,
"modalidadeBaseCalculo": "3",
"aliquotaCredito": 1.25,
"valorCredito": 12.5,
"baseCalculoST": 0,
"aliquotaST": 0,
"valorST": 0,
"modalidadeBaseCalculoST": "4",
"vBCFCP": 100,
"pFCP": 2,
"vFCP": 2,
"vBCFCPST": 100,
"pFCPST": 2,
"vFCPST": 2
},
"difal": {
"baseCalculo": 500,
"aliquotaInterna": 18,
"aliquotaInterestadual": 12,
"valor": 30,
"valorRemetente": 0,
"baseCalculoFCP": 500,
"aliquotaFCP": 2,
"valorFCP": 10
},
"ipi": {
"situacaoTributaria": "50",
"enquadramentoLegal": "999",
"baseCalculo": 500,
"aliquota": 10,
"valor": 50,
"quantidadeUnidadeTributavel": 10,
"valorUnidadeTributavel": 1.5,
"cnpjProdutor": "12345678000190",
"codigoSelo": "SELO123",
"quantidadeSelo": "10"
},
"pis": {
"situacaoTributaria": "04",
"baseCalculo": 0,
"aliquota": 0,
"valor": 0,
"quantidadeVendida": 100,
"aliquotaReais": 0.1
},
"cofins": {
"situacaoTributaria": "04",
"baseCalculo": 0,
"aliquota": 0,
"valor": 0,
"quantidadeVendida": 100,
"aliquotaReais": 0.46
},
"pisST": {
"baseCalculo": 500,
"aliquota": 1.65,
"valor": 8.25,
"quantidadeVendida": 100,
"aliquotaReais": 0.1,
"somaValorTotalNota": false
},
"cofinsST": {
"baseCalculo": 500,
"aliquota": 7.6,
"valor": 38,
"quantidadeVendida": 100,
"aliquotaReais": 0.46,
"somaValorTotalNota": false
},
"ii": {
"baseCalculo": 5000,
"despesasAduaneiras": 300,
"valor": 900,
"valorIOF": 20
},
"ibsCbs": {
"situacaoTributaria": "000",
"classificacaoTributaria": "000001",
"baseCalculo": 500,
"aliquotaIBSEstadual": 0.1,
"valorIBSEstadual": 1,
"aliquotaIBSMunicipal": 0,
"valorIBSMunicipal": 0,
"aliquotaCBS": 0.9,
"valorCBS": 9,
"percentualDiferimentoIBSEstadual": 100,
"valorDiferimentoIBSEstadual": 1,
"percentualDiferimentoIBSMunicipal": 100,
"valorDiferimentoIBSMunicipal": 0,
"percentualDiferimentoCBS": 100,
"valorDiferimentoCBS": 9
},
"percentualAproximadoTributos": {
"fonte": "IBPT",
"detalhado": {
"percentualFederal": 8.5,
"percentualEstadual": 18,
"percentualMunicipal": 0
}
}
}
}
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Company-uuid': '{YOUR_COMPANY_UUID}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()curl --request POST \
"https://devnota.com.br/api/v2/nfe/gerar" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Company-uuid: {YOUR_COMPANY_UUID}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"callback\": \"https:\\/\\/example.com\\/callback\",
\"ambiente\": \"developer\",
\"numero\": 1,
\"serie\": 1,
\"pedido\": {
\"naturezaOperacao\": \"Venda de mercadoria\",
\"consumidorFinal\": \"SIM\",
\"presencaConsumidor\": \"OperacaoPresencial\",
\"finalidade\": \"Normal\",
\"notasReferenciadas\": [
\"35260712345678000190550010000001231234567890\"
],
\"informacoesComplementares\": \"Garantia de 90 dias para o produto.\",
\"informacoesFisco\": \"Documento emitido por ME ou EPP optante pelo Simples Nacional.\",
\"pagamento\": {
\"formas\": [
{
\"tipo\": \"Dinheiro\",
\"valor\": 7.69
}
]
},
\"faturamento\": {
\"numero\": \"001\\/2026\",
\"valorOriginal\": 1246.5,
\"valorDesconto\": 0,
\"valorLiquido\": 1246.5,
\"duplicatas\": [
{
\"numero\": \"001\\/2026-1\",
\"vencimento\": \"2026-07-30\",
\"valor\": 623.25
}
]
},
\"frete\": {
\"modalidade\": \"SemFrete\",
\"transportadora\": {
\"cpfCnpj\": \"12345678000199\",
\"nome\": \"Transportes Rápidos LTDA\",
\"ie\": \"1234567\",
\"endereco\": \"Rua A, 100\",
\"municipio\": \"Curitiba\",
\"uf\": \"PR\"
},
\"veiculo\": {
\"placa\": \"ABC1D23\",
\"uf\": \"PR\",
\"rntc\": \"RNTC123\"
},
\"volumes\": [
{
\"quantidade\": 2,
\"especie\": \"Caixa\",
\"marca\": \"Marca X\",
\"numeracao\": \"1\\/2\",
\"pesoLiquido\": 9.5,
\"pesoBruto\": 10.5
}
]
}
},
\"cliente\": {
\"nome\": \"Carlos Eduardo Lima\",
\"cpfCnpj\": \"98765432100\",
\"email\": \"[email protected]\",
\"telefone\": \"(21) 99876-5432\",
\"endereco\": {
\"uf\": \"PR\",
\"cidade\": \"4106902\",
\"logradouro\": \"Avenida Brasil\",
\"numero\": \"1500\",
\"complemento\": null,
\"bairro\": \"Água Verde\",
\"cep\": \"80240040\"
}
},
\"itens\": [
{
\"cfop\": \"5405\",
\"codigo\": \"000068\",
\"descricao\": \"Mouse Gamer RGB\",
\"ncm\": \"22030000\",
\"ean\": \"7891234567891\",
\"cest\": \"0302100\",
\"quantidade\": 1,
\"unidadeMedida\": \"UN\",
\"valorUnitario\": 1246.5,
\"desconto\": 50,
\"impostos\": {
\"icms\": {
\"situacaoTributaria\": \"60\",
\"origem\": \"0\",
\"baseCalculo\": 0,
\"aliquota\": 0,
\"valor\": 0,
\"modalidadeBaseCalculo\": \"3\",
\"aliquotaCredito\": 1.25,
\"valorCredito\": 12.5,
\"baseCalculoST\": 0,
\"aliquotaST\": 0,
\"valorST\": 0,
\"modalidadeBaseCalculoST\": \"4\",
\"vBCFCP\": 100,
\"pFCP\": 2,
\"vFCP\": 2,
\"vBCFCPST\": 100,
\"pFCPST\": 2,
\"vFCPST\": 2
},
\"difal\": {
\"baseCalculo\": 500,
\"aliquotaInterna\": 18,
\"aliquotaInterestadual\": 12,
\"valor\": 30,
\"valorRemetente\": 0,
\"baseCalculoFCP\": 500,
\"aliquotaFCP\": 2,
\"valorFCP\": 10
},
\"ipi\": {
\"situacaoTributaria\": \"50\",
\"enquadramentoLegal\": \"999\",
\"baseCalculo\": 500,
\"aliquota\": 10,
\"valor\": 50,
\"quantidadeUnidadeTributavel\": 10,
\"valorUnidadeTributavel\": 1.5,
\"cnpjProdutor\": \"12345678000190\",
\"codigoSelo\": \"SELO123\",
\"quantidadeSelo\": \"10\"
},
\"pis\": {
\"situacaoTributaria\": \"04\",
\"baseCalculo\": 0,
\"aliquota\": 0,
\"valor\": 0,
\"quantidadeVendida\": 100,
\"aliquotaReais\": 0.1
},
\"cofins\": {
\"situacaoTributaria\": \"04\",
\"baseCalculo\": 0,
\"aliquota\": 0,
\"valor\": 0,
\"quantidadeVendida\": 100,
\"aliquotaReais\": 0.46
},
\"pisST\": {
\"baseCalculo\": 500,
\"aliquota\": 1.65,
\"valor\": 8.25,
\"quantidadeVendida\": 100,
\"aliquotaReais\": 0.1,
\"somaValorTotalNota\": false
},
\"cofinsST\": {
\"baseCalculo\": 500,
\"aliquota\": 7.6,
\"valor\": 38,
\"quantidadeVendida\": 100,
\"aliquotaReais\": 0.46,
\"somaValorTotalNota\": false
},
\"ii\": {
\"baseCalculo\": 5000,
\"despesasAduaneiras\": 300,
\"valor\": 900,
\"valorIOF\": 20
},
\"ibsCbs\": {
\"situacaoTributaria\": \"000\",
\"classificacaoTributaria\": \"000001\",
\"baseCalculo\": 500,
\"aliquotaIBSEstadual\": 0.1,
\"valorIBSEstadual\": 1,
\"aliquotaIBSMunicipal\": 0,
\"valorIBSMunicipal\": 0,
\"aliquotaCBS\": 0.9,
\"valorCBS\": 9,
\"percentualDiferimentoIBSEstadual\": 100,
\"valorDiferimentoIBSEstadual\": 1,
\"percentualDiferimentoIBSMunicipal\": 100,
\"valorDiferimentoIBSMunicipal\": 0,
\"percentualDiferimentoCBS\": 100,
\"valorDiferimentoCBS\": 9
},
\"percentualAproximadoTributos\": {
\"fonte\": \"IBPT\",
\"detalhado\": {
\"percentualFederal\": 8.5,
\"percentualEstadual\": 18,
\"percentualMunicipal\": 0
}
}
}
}
]
}"
Exemplo de resposta (201, Solicitação criada. O processamento ocorre de forma assíncrona.):
{
"protocolo": 3050,
"status": "processando"
}
Exemplo de resposta (422):
{
"message": "The itens field is required.",
"errors": {
"itens": [
"The itens field is required."
]
}
}
Resposta recebida:
A requisição falhou com erro:
Dica: verifique se você está conectado corretamente à rede.
Se você é um mantenedor desta API, verifique se a API está rodando e se o CORS está habilitado.
Você pode verificar o console do DevTools para obter informações de depuração.
Cancelar NF-e
requer autenticação
Cria uma solicitação de cancelamento de uma NF-e emitida. O processamento é assíncrono. Após o cancelamento, o XML protocolado com a tag de evento é sobrescrito na nota, garantindo que a impressão do DANFE exiba o carimbo "NFe CANCELADA".
Exemplo de requisição:
$client = new \GuzzleHttp\Client();
$url = 'https://devnota.com.br/api/v2/nfe/550e8400-e29b-41d4-a716-446655440000/cancelar';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Company-uuid' => '{YOUR_COMPANY_UUID}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'callback' => 'https://example.com/callback',
'ambiente' => 'developer',
'justificativa' => 'Cancelamento solicitado pelo cliente por erro na emissão.',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://devnota.com.br/api/v2/nfe/550e8400-e29b-41d4-a716-446655440000/cancelar"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Company-uuid": "{YOUR_COMPANY_UUID}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"callback": "https:\/\/example.com\/callback",
"ambiente": "developer",
"justificativa": "Cancelamento solicitado pelo cliente por erro na emissão."
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://devnota.com.br/api/v2/nfe/550e8400-e29b-41d4-a716-446655440000/cancelar'
payload = {
"callback": "https:\/\/example.com\/callback",
"ambiente": "developer",
"justificativa": "Cancelamento solicitado pelo cliente por erro na emissão."
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Company-uuid': '{YOUR_COMPANY_UUID}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()curl --request POST \
"https://devnota.com.br/api/v2/nfe/550e8400-e29b-41d4-a716-446655440000/cancelar" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Company-uuid: {YOUR_COMPANY_UUID}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"callback\": \"https:\\/\\/example.com\\/callback\",
\"ambiente\": \"developer\",
\"justificativa\": \"Cancelamento solicitado pelo cliente por erro na emissão.\"
}"
Exemplo de resposta (201, Solicitação criada. O processamento ocorre de forma assíncrona.):
{
"protocolo": 3051,
"status": "processando"
}
Exemplo de resposta (422):
{
"message": "The justificativa field is required.",
"errors": {
"justificativa": [
"The justificativa field is required."
]
}
}
Resposta recebida:
A requisição falhou com erro:
Dica: verifique se você está conectado corretamente à rede.
Se você é um mantenedor desta API, verifique se a API está rodando e se o CORS está habilitado.
Você pode verificar o console do DevTools para obter informações de depuração.
NFC-e
APIs para emissão de cupons fiscais eletrônicos (venda ao consumidor) com payload simplificado.
Emitir NFC-e
requer autenticação
Cria uma solicitação de emissão de NFC-e (cupom fiscal eletrônico, venda ao consumidor) usando o payload da API v2. O modelo é fixo em 65, tpImp em 4 (DANFCE) e indFinal em 1 (sempre consumidor final) — nenhum desses precisa ser informado. O QR Code é gerado automaticamente usando o CSC configurado na empresa. Não existem campos de frete (transportadora/veículo/volumes) nem faturamento/duplicatas: a SEFAZ rejeita esses grupos para o modelo 65 — pagamento é sempre via pedido.pagamento.formas.
Exemplo de requisição:
$client = new \GuzzleHttp\Client();
$url = 'https://devnota.com.br/api/v2/nfc/gerar';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Company-uuid' => '{YOUR_COMPANY_UUID}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'callback' => 'https://example.com/callback',
'ambiente' => 'developer',
'numero' => 1,
'serie' => 1,
'pedido' => [
'naturezaOperacao' => 'Venda de mercadoria',
'presencaConsumidor' => 'OperacaoPresencial',
'informacoesComplementares' => 'Obrigado pela preferência!',
'informacoesFisco' => 'Documento emitido por ME ou EPP optante pelo Simples Nacional.',
'pagamento' => [
'formas' => [
[
'tipo' => 'Pix',
'valor' => 29.9,
],
],
],
],
'cliente' => [
'nome' => 'Maria Silva',
'cpfCnpj' => '12345678901',
'email' => '[email protected]',
'telefone' => '(81) 98765-4321',
'endereco' => [
'uf' => 'PE',
'cidade' => '2611606',
'logradouro' => 'Rua das Flores',
'numero' => '100',
'complemento' => null,
'bairro' => 'Centro',
'cep' => '50010000',
],
],
'itens' => [
[
'cfop' => '5102',
'codigo' => '000123',
'descricao' => 'Refrigerante 350ml',
'ncm' => '22021000',
'ean' => '7891234567891',
'cest' => '0302100',
'quantidade' => 2.0,
'unidadeMedida' => 'UN',
'valorUnitario' => 5.99,
'desconto' => 0.0,
'impostos' => [
'icms' => [
'situacaoTributaria' => '500',
'origem' => '0',
'baseCalculo' => 0.0,
'aliquota' => 0.0,
'valor' => 0.0,
'modalidadeBaseCalculo' => 'corrupti',
'aliquotaCredito' => 1.25,
'valorCredito' => 0.07,
'baseCalculoST' => 0.0,
'aliquotaST' => 0.0,
'valorST' => 97.33803429,
'modalidadeBaseCalculoST' => 'quisquam',
'vBCFCP' => 100.0,
'pFCP' => 2.0,
'vFCP' => 2.0,
'vBCFCPST' => 100.0,
'pFCPST' => 2.0,
'vFCPST' => 2.0,
],
'difal' => [
'baseCalculo' => 500.0,
'aliquotaInterna' => 18.0,
'aliquotaInterestadual' => 12.0,
'valor' => 30.0,
'valorRemetente' => 0.0,
'baseCalculoFCP' => 500.0,
'aliquotaFCP' => 2.0,
'valorFCP' => 10.0,
],
'ipi' => [
'situacaoTributaria' => '50',
'enquadramentoLegal' => '999',
'baseCalculo' => 500.0,
'aliquota' => 10.0,
'valor' => 50.0,
'quantidadeUnidadeTributavel' => 10.0,
'valorUnidadeTributavel' => 1.5,
'cnpjProdutor' => '12345678000190',
'codigoSelo' => 'SELO123',
'quantidadeSelo' => '10',
],
'pis' => [
'situacaoTributaria' => '07',
'baseCalculo' => 0.0,
'aliquota' => 0.0,
'valor' => 0.0,
'quantidadeVendida' => 100.0,
'aliquotaReais' => 0.1,
],
'cofins' => [
'situacaoTributaria' => '07',
'baseCalculo' => 0.0,
'aliquota' => 0.0,
'valor' => 0.0,
'quantidadeVendida' => 100.0,
'aliquotaReais' => 0.46,
],
'pisST' => [
'baseCalculo' => 500.0,
'aliquota' => 1.65,
'valor' => 8.25,
'quantidadeVendida' => 100.0,
'aliquotaReais' => 0.1,
'somaValorTotalNota' => false,
],
'cofinsST' => [
'baseCalculo' => 500.0,
'aliquota' => 7.6,
'valor' => 38.0,
'quantidadeVendida' => 100.0,
'aliquotaReais' => 0.46,
'somaValorTotalNota' => false,
],
'ii' => [
'baseCalculo' => 5000.0,
'despesasAduaneiras' => 300.0,
'valor' => 900.0,
'valorIOF' => 20.0,
],
'ibsCbs' => [
'situacaoTributaria' => '000',
'classificacaoTributaria' => '000001',
'baseCalculo' => 500.0,
'aliquotaIBSEstadual' => 0.1,
'valorIBSEstadual' => 1.0,
'aliquotaIBSMunicipal' => 0.0,
'valorIBSMunicipal' => 0.0,
'aliquotaCBS' => 0.9,
'valorCBS' => 9.0,
'percentualDiferimentoIBSEstadual' => 100.0,
'valorDiferimentoIBSEstadual' => 1.0,
'percentualDiferimentoIBSMunicipal' => 100.0,
'valorDiferimentoIBSMunicipal' => 0.0,
'percentualDiferimentoCBS' => 100.0,
'valorDiferimentoCBS' => 9.0,
],
'percentualAproximadoTributos' => [
'fonte' => 'IBPT',
'detalhado' => [
'percentualFederal' => 8.5,
'percentualEstadual' => 12.0,
'percentualMunicipal' => 0.0,
],
],
],
],
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://devnota.com.br/api/v2/nfc/gerar"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Company-uuid": "{YOUR_COMPANY_UUID}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"callback": "https:\/\/example.com\/callback",
"ambiente": "developer",
"numero": 1,
"serie": 1,
"pedido": {
"naturezaOperacao": "Venda de mercadoria",
"presencaConsumidor": "OperacaoPresencial",
"informacoesComplementares": "Obrigado pela preferência!",
"informacoesFisco": "Documento emitido por ME ou EPP optante pelo Simples Nacional.",
"pagamento": {
"formas": [
{
"tipo": "Pix",
"valor": 29.9
}
]
}
},
"cliente": {
"nome": "Maria Silva",
"cpfCnpj": "12345678901",
"email": "[email protected]",
"telefone": "(81) 98765-4321",
"endereco": {
"uf": "PE",
"cidade": "2611606",
"logradouro": "Rua das Flores",
"numero": "100",
"complemento": null,
"bairro": "Centro",
"cep": "50010000"
}
},
"itens": [
{
"cfop": "5102",
"codigo": "000123",
"descricao": "Refrigerante 350ml",
"ncm": "22021000",
"ean": "7891234567891",
"cest": "0302100",
"quantidade": 2,
"unidadeMedida": "UN",
"valorUnitario": 5.99,
"desconto": 0,
"impostos": {
"icms": {
"situacaoTributaria": "500",
"origem": "0",
"baseCalculo": 0,
"aliquota": 0,
"valor": 0,
"modalidadeBaseCalculo": "corrupti",
"aliquotaCredito": 1.25,
"valorCredito": 0.07,
"baseCalculoST": 0,
"aliquotaST": 0,
"valorST": 97.33803429,
"modalidadeBaseCalculoST": "quisquam",
"vBCFCP": 100,
"pFCP": 2,
"vFCP": 2,
"vBCFCPST": 100,
"pFCPST": 2,
"vFCPST": 2
},
"difal": {
"baseCalculo": 500,
"aliquotaInterna": 18,
"aliquotaInterestadual": 12,
"valor": 30,
"valorRemetente": 0,
"baseCalculoFCP": 500,
"aliquotaFCP": 2,
"valorFCP": 10
},
"ipi": {
"situacaoTributaria": "50",
"enquadramentoLegal": "999",
"baseCalculo": 500,
"aliquota": 10,
"valor": 50,
"quantidadeUnidadeTributavel": 10,
"valorUnidadeTributavel": 1.5,
"cnpjProdutor": "12345678000190",
"codigoSelo": "SELO123",
"quantidadeSelo": "10"
},
"pis": {
"situacaoTributaria": "07",
"baseCalculo": 0,
"aliquota": 0,
"valor": 0,
"quantidadeVendida": 100,
"aliquotaReais": 0.1
},
"cofins": {
"situacaoTributaria": "07",
"baseCalculo": 0,
"aliquota": 0,
"valor": 0,
"quantidadeVendida": 100,
"aliquotaReais": 0.46
},
"pisST": {
"baseCalculo": 500,
"aliquota": 1.65,
"valor": 8.25,
"quantidadeVendida": 100,
"aliquotaReais": 0.1,
"somaValorTotalNota": false
},
"cofinsST": {
"baseCalculo": 500,
"aliquota": 7.6,
"valor": 38,
"quantidadeVendida": 100,
"aliquotaReais": 0.46,
"somaValorTotalNota": false
},
"ii": {
"baseCalculo": 5000,
"despesasAduaneiras": 300,
"valor": 900,
"valorIOF": 20
},
"ibsCbs": {
"situacaoTributaria": "000",
"classificacaoTributaria": "000001",
"baseCalculo": 500,
"aliquotaIBSEstadual": 0.1,
"valorIBSEstadual": 1,
"aliquotaIBSMunicipal": 0,
"valorIBSMunicipal": 0,
"aliquotaCBS": 0.9,
"valorCBS": 9,
"percentualDiferimentoIBSEstadual": 100,
"valorDiferimentoIBSEstadual": 1,
"percentualDiferimentoIBSMunicipal": 100,
"valorDiferimentoIBSMunicipal": 0,
"percentualDiferimentoCBS": 100,
"valorDiferimentoCBS": 9
},
"percentualAproximadoTributos": {
"fonte": "IBPT",
"detalhado": {
"percentualFederal": 8.5,
"percentualEstadual": 12,
"percentualMunicipal": 0
}
}
}
}
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://devnota.com.br/api/v2/nfc/gerar'
payload = {
"callback": "https:\/\/example.com\/callback",
"ambiente": "developer",
"numero": 1,
"serie": 1,
"pedido": {
"naturezaOperacao": "Venda de mercadoria",
"presencaConsumidor": "OperacaoPresencial",
"informacoesComplementares": "Obrigado pela preferência!",
"informacoesFisco": "Documento emitido por ME ou EPP optante pelo Simples Nacional.",
"pagamento": {
"formas": [
{
"tipo": "Pix",
"valor": 29.9
}
]
}
},
"cliente": {
"nome": "Maria Silva",
"cpfCnpj": "12345678901",
"email": "[email protected]",
"telefone": "(81) 98765-4321",
"endereco": {
"uf": "PE",
"cidade": "2611606",
"logradouro": "Rua das Flores",
"numero": "100",
"complemento": null,
"bairro": "Centro",
"cep": "50010000"
}
},
"itens": [
{
"cfop": "5102",
"codigo": "000123",
"descricao": "Refrigerante 350ml",
"ncm": "22021000",
"ean": "7891234567891",
"cest": "0302100",
"quantidade": 2,
"unidadeMedida": "UN",
"valorUnitario": 5.99,
"desconto": 0,
"impostos": {
"icms": {
"situacaoTributaria": "500",
"origem": "0",
"baseCalculo": 0,
"aliquota": 0,
"valor": 0,
"modalidadeBaseCalculo": "corrupti",
"aliquotaCredito": 1.25,
"valorCredito": 0.07,
"baseCalculoST": 0,
"aliquotaST": 0,
"valorST": 97.33803429,
"modalidadeBaseCalculoST": "quisquam",
"vBCFCP": 100,
"pFCP": 2,
"vFCP": 2,
"vBCFCPST": 100,
"pFCPST": 2,
"vFCPST": 2
},
"difal": {
"baseCalculo": 500,
"aliquotaInterna": 18,
"aliquotaInterestadual": 12,
"valor": 30,
"valorRemetente": 0,
"baseCalculoFCP": 500,
"aliquotaFCP": 2,
"valorFCP": 10
},
"ipi": {
"situacaoTributaria": "50",
"enquadramentoLegal": "999",
"baseCalculo": 500,
"aliquota": 10,
"valor": 50,
"quantidadeUnidadeTributavel": 10,
"valorUnidadeTributavel": 1.5,
"cnpjProdutor": "12345678000190",
"codigoSelo": "SELO123",
"quantidadeSelo": "10"
},
"pis": {
"situacaoTributaria": "07",
"baseCalculo": 0,
"aliquota": 0,
"valor": 0,
"quantidadeVendida": 100,
"aliquotaReais": 0.1
},
"cofins": {
"situacaoTributaria": "07",
"baseCalculo": 0,
"aliquota": 0,
"valor": 0,
"quantidadeVendida": 100,
"aliquotaReais": 0.46
},
"pisST": {
"baseCalculo": 500,
"aliquota": 1.65,
"valor": 8.25,
"quantidadeVendida": 100,
"aliquotaReais": 0.1,
"somaValorTotalNota": false
},
"cofinsST": {
"baseCalculo": 500,
"aliquota": 7.6,
"valor": 38,
"quantidadeVendida": 100,
"aliquotaReais": 0.46,
"somaValorTotalNota": false
},
"ii": {
"baseCalculo": 5000,
"despesasAduaneiras": 300,
"valor": 900,
"valorIOF": 20
},
"ibsCbs": {
"situacaoTributaria": "000",
"classificacaoTributaria": "000001",
"baseCalculo": 500,
"aliquotaIBSEstadual": 0.1,
"valorIBSEstadual": 1,
"aliquotaIBSMunicipal": 0,
"valorIBSMunicipal": 0,
"aliquotaCBS": 0.9,
"valorCBS": 9,
"percentualDiferimentoIBSEstadual": 100,
"valorDiferimentoIBSEstadual": 1,
"percentualDiferimentoIBSMunicipal": 100,
"valorDiferimentoIBSMunicipal": 0,
"percentualDiferimentoCBS": 100,
"valorDiferimentoCBS": 9
},
"percentualAproximadoTributos": {
"fonte": "IBPT",
"detalhado": {
"percentualFederal": 8.5,
"percentualEstadual": 12,
"percentualMunicipal": 0
}
}
}
}
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Company-uuid': '{YOUR_COMPANY_UUID}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()curl --request POST \
"https://devnota.com.br/api/v2/nfc/gerar" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Company-uuid: {YOUR_COMPANY_UUID}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"callback\": \"https:\\/\\/example.com\\/callback\",
\"ambiente\": \"developer\",
\"numero\": 1,
\"serie\": 1,
\"pedido\": {
\"naturezaOperacao\": \"Venda de mercadoria\",
\"presencaConsumidor\": \"OperacaoPresencial\",
\"informacoesComplementares\": \"Obrigado pela preferência!\",
\"informacoesFisco\": \"Documento emitido por ME ou EPP optante pelo Simples Nacional.\",
\"pagamento\": {
\"formas\": [
{
\"tipo\": \"Pix\",
\"valor\": 29.9
}
]
}
},
\"cliente\": {
\"nome\": \"Maria Silva\",
\"cpfCnpj\": \"12345678901\",
\"email\": \"[email protected]\",
\"telefone\": \"(81) 98765-4321\",
\"endereco\": {
\"uf\": \"PE\",
\"cidade\": \"2611606\",
\"logradouro\": \"Rua das Flores\",
\"numero\": \"100\",
\"complemento\": null,
\"bairro\": \"Centro\",
\"cep\": \"50010000\"
}
},
\"itens\": [
{
\"cfop\": \"5102\",
\"codigo\": \"000123\",
\"descricao\": \"Refrigerante 350ml\",
\"ncm\": \"22021000\",
\"ean\": \"7891234567891\",
\"cest\": \"0302100\",
\"quantidade\": 2,
\"unidadeMedida\": \"UN\",
\"valorUnitario\": 5.99,
\"desconto\": 0,
\"impostos\": {
\"icms\": {
\"situacaoTributaria\": \"500\",
\"origem\": \"0\",
\"baseCalculo\": 0,
\"aliquota\": 0,
\"valor\": 0,
\"modalidadeBaseCalculo\": \"corrupti\",
\"aliquotaCredito\": 1.25,
\"valorCredito\": 0.07,
\"baseCalculoST\": 0,
\"aliquotaST\": 0,
\"valorST\": 97.33803429,
\"modalidadeBaseCalculoST\": \"quisquam\",
\"vBCFCP\": 100,
\"pFCP\": 2,
\"vFCP\": 2,
\"vBCFCPST\": 100,
\"pFCPST\": 2,
\"vFCPST\": 2
},
\"difal\": {
\"baseCalculo\": 500,
\"aliquotaInterna\": 18,
\"aliquotaInterestadual\": 12,
\"valor\": 30,
\"valorRemetente\": 0,
\"baseCalculoFCP\": 500,
\"aliquotaFCP\": 2,
\"valorFCP\": 10
},
\"ipi\": {
\"situacaoTributaria\": \"50\",
\"enquadramentoLegal\": \"999\",
\"baseCalculo\": 500,
\"aliquota\": 10,
\"valor\": 50,
\"quantidadeUnidadeTributavel\": 10,
\"valorUnidadeTributavel\": 1.5,
\"cnpjProdutor\": \"12345678000190\",
\"codigoSelo\": \"SELO123\",
\"quantidadeSelo\": \"10\"
},
\"pis\": {
\"situacaoTributaria\": \"07\",
\"baseCalculo\": 0,
\"aliquota\": 0,
\"valor\": 0,
\"quantidadeVendida\": 100,
\"aliquotaReais\": 0.1
},
\"cofins\": {
\"situacaoTributaria\": \"07\",
\"baseCalculo\": 0,
\"aliquota\": 0,
\"valor\": 0,
\"quantidadeVendida\": 100,
\"aliquotaReais\": 0.46
},
\"pisST\": {
\"baseCalculo\": 500,
\"aliquota\": 1.65,
\"valor\": 8.25,
\"quantidadeVendida\": 100,
\"aliquotaReais\": 0.1,
\"somaValorTotalNota\": false
},
\"cofinsST\": {
\"baseCalculo\": 500,
\"aliquota\": 7.6,
\"valor\": 38,
\"quantidadeVendida\": 100,
\"aliquotaReais\": 0.46,
\"somaValorTotalNota\": false
},
\"ii\": {
\"baseCalculo\": 5000,
\"despesasAduaneiras\": 300,
\"valor\": 900,
\"valorIOF\": 20
},
\"ibsCbs\": {
\"situacaoTributaria\": \"000\",
\"classificacaoTributaria\": \"000001\",
\"baseCalculo\": 500,
\"aliquotaIBSEstadual\": 0.1,
\"valorIBSEstadual\": 1,
\"aliquotaIBSMunicipal\": 0,
\"valorIBSMunicipal\": 0,
\"aliquotaCBS\": 0.9,
\"valorCBS\": 9,
\"percentualDiferimentoIBSEstadual\": 100,
\"valorDiferimentoIBSEstadual\": 1,
\"percentualDiferimentoIBSMunicipal\": 100,
\"valorDiferimentoIBSMunicipal\": 0,
\"percentualDiferimentoCBS\": 100,
\"valorDiferimentoCBS\": 9
},
\"percentualAproximadoTributos\": {
\"fonte\": \"IBPT\",
\"detalhado\": {
\"percentualFederal\": 8.5,
\"percentualEstadual\": 12,
\"percentualMunicipal\": 0
}
}
}
}
]
}"
Exemplo de resposta (201, Solicitação criada. O processamento ocorre de forma assíncrona.):
{
"protocolo": 3050,
"status": "processando"
}
Exemplo de resposta (422):
{
"message": "The itens field is required.",
"errors": {
"itens": [
"The itens field is required."
]
}
}
Resposta recebida:
A requisição falhou com erro:
Dica: verifique se você está conectado corretamente à rede.
Se você é um mantenedor desta API, verifique se a API está rodando e se o CORS está habilitado.
Você pode verificar o console do DevTools para obter informações de depuração.
Cancelar NFC-e
requer autenticação
Cria uma solicitação de cancelamento de uma NFC-e emitida. O processamento é assíncrono. Após o cancelamento, o XML protocolado com a tag de evento é sobrescrito na nota, garantindo que a impressão do DANFCE exiba o carimbo "NFe CANCELADA".
Exemplo de requisição:
$client = new \GuzzleHttp\Client();
$url = 'https://devnota.com.br/api/v2/nfc/550e8400-e29b-41d4-a716-446655440000/cancelar';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Company-uuid' => '{YOUR_COMPANY_UUID}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'callback' => 'https://example.com/callback',
'ambiente' => 'developer',
'justificativa' => 'Cancelamento solicitado pelo cliente por erro na emissão.',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://devnota.com.br/api/v2/nfc/550e8400-e29b-41d4-a716-446655440000/cancelar"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Company-uuid": "{YOUR_COMPANY_UUID}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"callback": "https:\/\/example.com\/callback",
"ambiente": "developer",
"justificativa": "Cancelamento solicitado pelo cliente por erro na emissão."
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://devnota.com.br/api/v2/nfc/550e8400-e29b-41d4-a716-446655440000/cancelar'
payload = {
"callback": "https:\/\/example.com\/callback",
"ambiente": "developer",
"justificativa": "Cancelamento solicitado pelo cliente por erro na emissão."
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Company-uuid': '{YOUR_COMPANY_UUID}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()curl --request POST \
"https://devnota.com.br/api/v2/nfc/550e8400-e29b-41d4-a716-446655440000/cancelar" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Company-uuid: {YOUR_COMPANY_UUID}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"callback\": \"https:\\/\\/example.com\\/callback\",
\"ambiente\": \"developer\",
\"justificativa\": \"Cancelamento solicitado pelo cliente por erro na emissão.\"
}"
Exemplo de resposta (201, Solicitação criada. O processamento ocorre de forma assíncrona.):
{
"protocolo": 3051,
"status": "processando"
}
Exemplo de resposta (422):
{
"message": "The justificativa field is required.",
"errors": {
"justificativa": [
"The justificativa field is required."
]
}
}
Resposta recebida:
A requisição falhou com erro:
Dica: verifique se você está conectado corretamente à rede.
Se você é um mantenedor desta API, verifique se a API está rodando e se o CORS está habilitado.
Você pode verificar o console do DevTools para obter informações de depuração.
NFS-e
APIs para emissão e cancelamento de notas fiscais de serviço.
Emitir NFS-e
requer autenticação
Cria uma solicitação de emissão de NFS-e usando o payload da API v2.
Exemplo de requisição:
$client = new \GuzzleHttp\Client();
$url = 'https://devnota.com.br/api/v2/nfse/gerar';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Company-uuid' => '{YOUR_COMPANY_UUID}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'callback' => 'https://example.com/callback',
'ambiente' => 'developer',
'prestador' => [
'incentivadorCultural' => 'NAO',
'incentivoFiscal' => 'NAO',
'regimeTributario' => 'SIMPLES',
'regimeTributarioEspecial' => 3526.27,
'regimeApuracaoTributarioSimplesNacional' => 'FEDERAL_E_MUNICIPAL_FORA_SN',
'naturezaTributacao' => 322644846.29,
],
'rps' => [
'numero' => 123456,
'serie' => 1,
],
'dataEmissao' => '2026-05-27T10:30:00-03:00',
'dataCompetencia' => '2026-05-27',
'tomador' => [
'nome' => 'Cliente Example LTDA',
'cpfCnpj' => '12345678000199',
'email' => '[email protected]',
'telefone' => '81999999999',
'endereco' => [
'codigoMunicipioIBGE' => '2611606',
'logradouro' => 'Rua das Flores',
'numero' => '123',
'complemento' => 'Sala 101',
'bairro' => 'Centro',
'cep' => '50010000',
],
],
'intermediario' => [
'nome' => 'Intermediário Example LTDA',
'cpfCnpj' => '12345678000199',
'im' => '123456',
'email' => '[email protected]',
'telefone' => '81999999999',
'endereco' => [
'codigoMunicipioIBGE' => '2611606',
'logradouro' => 'Rua das Flores',
'numero' => '123',
'complemento' => 'Sala 101',
'bairro' => 'Centro',
'cep' => '50010000',
],
],
'obra' => [
'codigo' => 'OBR-001',
'art' => '123456789',
'endereco' => [
'cep' => '50010000',
'logradouro' => 'Rua da Obra',
'numero' => '100',
'bairro' => 'Centro',
],
],
'servico' => [
'codigoServico' => '7.09',
'codigoTributacaoMunicipio' => '0709',
'nbs' => '123456789',
'discriminacao' => 'Serviço de desenvolvimento de software.',
'codigoMunicipioPrestacaoServicoIBGE' => '2611606',
'codigoMunicipioIncidenciaIBGE' => '6660536',
'informacoesComplementares' => 'iure',
'valores' => [
'valor' => 1500.0,
'baseCalculo' => 1500.0,
'valorIntermediario' => 4.1,
'descontoCondicionado' => 0.0,
'descontoIncondicionado' => 0.0,
'issRetido' => 'NAO',
'aliquotaIss' => 5.0,
'cstPisCofins' => '01',
'baseCalculoPisCofins' => 1500.0,
'valorPis' => 4.5,
'valorCofins' => 18.0,
'aliquotaPis' => 0.65,
'aliquotaCofins' => 3.0,
'tpRetPisCofins' => 'animi',
'valorInss' => 0.0,
'valorIr' => 0.0,
'valorCsll' => 0.0,
],
],
'ibscbs' => [
'cst' => '00',
'cClassTrib' => '1234567',
'cIndOp' => '1',
'finNFSe' => '1',
'indDest' => '1',
'indFinal' => '1',
],
'tributacaoAproximada' => [
'aliquotaSimplesNacional' => 4.6691,
'federal' => [
'valor' => 10138852.6535,
'percentual' => 2.2033443,
],
'estadual' => [
'valor' => 5089.870609,
'percentual' => 11043434.570587615,
],
'municipal' => [
'valor' => 11264878.0162741,
'percentual' => 3515109.693682163,
],
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://devnota.com.br/api/v2/nfse/gerar"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Company-uuid": "{YOUR_COMPANY_UUID}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"callback": "https:\/\/example.com\/callback",
"ambiente": "developer",
"prestador": {
"incentivadorCultural": "NAO",
"incentivoFiscal": "NAO",
"regimeTributario": "SIMPLES",
"regimeTributarioEspecial": 3526.27,
"regimeApuracaoTributarioSimplesNacional": "FEDERAL_E_MUNICIPAL_FORA_SN",
"naturezaTributacao": 322644846.29
},
"rps": {
"numero": 123456,
"serie": 1
},
"dataEmissao": "2026-05-27T10:30:00-03:00",
"dataCompetencia": "2026-05-27",
"tomador": {
"nome": "Cliente Example LTDA",
"cpfCnpj": "12345678000199",
"email": "[email protected]",
"telefone": "81999999999",
"endereco": {
"codigoMunicipioIBGE": "2611606",
"logradouro": "Rua das Flores",
"numero": "123",
"complemento": "Sala 101",
"bairro": "Centro",
"cep": "50010000"
}
},
"intermediario": {
"nome": "Intermediário Example LTDA",
"cpfCnpj": "12345678000199",
"im": "123456",
"email": "[email protected]",
"telefone": "81999999999",
"endereco": {
"codigoMunicipioIBGE": "2611606",
"logradouro": "Rua das Flores",
"numero": "123",
"complemento": "Sala 101",
"bairro": "Centro",
"cep": "50010000"
}
},
"obra": {
"codigo": "OBR-001",
"art": "123456789",
"endereco": {
"cep": "50010000",
"logradouro": "Rua da Obra",
"numero": "100",
"bairro": "Centro"
}
},
"servico": {
"codigoServico": "7.09",
"codigoTributacaoMunicipio": "0709",
"nbs": "123456789",
"discriminacao": "Serviço de desenvolvimento de software.",
"codigoMunicipioPrestacaoServicoIBGE": "2611606",
"codigoMunicipioIncidenciaIBGE": "6660536",
"informacoesComplementares": "iure",
"valores": {
"valor": 1500,
"baseCalculo": 1500,
"valorIntermediario": 4.1,
"descontoCondicionado": 0,
"descontoIncondicionado": 0,
"issRetido": "NAO",
"aliquotaIss": 5,
"cstPisCofins": "01",
"baseCalculoPisCofins": 1500,
"valorPis": 4.5,
"valorCofins": 18,
"aliquotaPis": 0.65,
"aliquotaCofins": 3,
"tpRetPisCofins": "animi",
"valorInss": 0,
"valorIr": 0,
"valorCsll": 0
}
},
"ibscbs": {
"cst": "00",
"cClassTrib": "1234567",
"cIndOp": "1",
"finNFSe": "1",
"indDest": "1",
"indFinal": "1"
},
"tributacaoAproximada": {
"aliquotaSimplesNacional": 4.6691,
"federal": {
"valor": 10138852.6535,
"percentual": 2.2033443
},
"estadual": {
"valor": 5089.870609,
"percentual": 11043434.570587615
},
"municipal": {
"valor": 11264878.0162741,
"percentual": 3515109.693682163
}
}
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://devnota.com.br/api/v2/nfse/gerar'
payload = {
"callback": "https:\/\/example.com\/callback",
"ambiente": "developer",
"prestador": {
"incentivadorCultural": "NAO",
"incentivoFiscal": "NAO",
"regimeTributario": "SIMPLES",
"regimeTributarioEspecial": 3526.27,
"regimeApuracaoTributarioSimplesNacional": "FEDERAL_E_MUNICIPAL_FORA_SN",
"naturezaTributacao": 322644846.29
},
"rps": {
"numero": 123456,
"serie": 1
},
"dataEmissao": "2026-05-27T10:30:00-03:00",
"dataCompetencia": "2026-05-27",
"tomador": {
"nome": "Cliente Example LTDA",
"cpfCnpj": "12345678000199",
"email": "[email protected]",
"telefone": "81999999999",
"endereco": {
"codigoMunicipioIBGE": "2611606",
"logradouro": "Rua das Flores",
"numero": "123",
"complemento": "Sala 101",
"bairro": "Centro",
"cep": "50010000"
}
},
"intermediario": {
"nome": "Intermediário Example LTDA",
"cpfCnpj": "12345678000199",
"im": "123456",
"email": "[email protected]",
"telefone": "81999999999",
"endereco": {
"codigoMunicipioIBGE": "2611606",
"logradouro": "Rua das Flores",
"numero": "123",
"complemento": "Sala 101",
"bairro": "Centro",
"cep": "50010000"
}
},
"obra": {
"codigo": "OBR-001",
"art": "123456789",
"endereco": {
"cep": "50010000",
"logradouro": "Rua da Obra",
"numero": "100",
"bairro": "Centro"
}
},
"servico": {
"codigoServico": "7.09",
"codigoTributacaoMunicipio": "0709",
"nbs": "123456789",
"discriminacao": "Serviço de desenvolvimento de software.",
"codigoMunicipioPrestacaoServicoIBGE": "2611606",
"codigoMunicipioIncidenciaIBGE": "6660536",
"informacoesComplementares": "iure",
"valores": {
"valor": 1500,
"baseCalculo": 1500,
"valorIntermediario": 4.1,
"descontoCondicionado": 0,
"descontoIncondicionado": 0,
"issRetido": "NAO",
"aliquotaIss": 5,
"cstPisCofins": "01",
"baseCalculoPisCofins": 1500,
"valorPis": 4.5,
"valorCofins": 18,
"aliquotaPis": 0.65,
"aliquotaCofins": 3,
"tpRetPisCofins": "animi",
"valorInss": 0,
"valorIr": 0,
"valorCsll": 0
}
},
"ibscbs": {
"cst": "00",
"cClassTrib": "1234567",
"cIndOp": "1",
"finNFSe": "1",
"indDest": "1",
"indFinal": "1"
},
"tributacaoAproximada": {
"aliquotaSimplesNacional": 4.6691,
"federal": {
"valor": 10138852.6535,
"percentual": 2.2033443
},
"estadual": {
"valor": 5089.870609,
"percentual": 11043434.570587615
},
"municipal": {
"valor": 11264878.0162741,
"percentual": 3515109.693682163
}
}
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Company-uuid': '{YOUR_COMPANY_UUID}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()curl --request POST \
"https://devnota.com.br/api/v2/nfse/gerar" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Company-uuid: {YOUR_COMPANY_UUID}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"callback\": \"https:\\/\\/example.com\\/callback\",
\"ambiente\": \"developer\",
\"prestador\": {
\"incentivadorCultural\": \"NAO\",
\"incentivoFiscal\": \"NAO\",
\"regimeTributario\": \"SIMPLES\",
\"regimeTributarioEspecial\": 3526.27,
\"regimeApuracaoTributarioSimplesNacional\": \"FEDERAL_E_MUNICIPAL_FORA_SN\",
\"naturezaTributacao\": 322644846.29
},
\"rps\": {
\"numero\": 123456,
\"serie\": 1
},
\"dataEmissao\": \"2026-05-27T10:30:00-03:00\",
\"dataCompetencia\": \"2026-05-27\",
\"tomador\": {
\"nome\": \"Cliente Example LTDA\",
\"cpfCnpj\": \"12345678000199\",
\"email\": \"[email protected]\",
\"telefone\": \"81999999999\",
\"endereco\": {
\"codigoMunicipioIBGE\": \"2611606\",
\"logradouro\": \"Rua das Flores\",
\"numero\": \"123\",
\"complemento\": \"Sala 101\",
\"bairro\": \"Centro\",
\"cep\": \"50010000\"
}
},
\"intermediario\": {
\"nome\": \"Intermediário Example LTDA\",
\"cpfCnpj\": \"12345678000199\",
\"im\": \"123456\",
\"email\": \"[email protected]\",
\"telefone\": \"81999999999\",
\"endereco\": {
\"codigoMunicipioIBGE\": \"2611606\",
\"logradouro\": \"Rua das Flores\",
\"numero\": \"123\",
\"complemento\": \"Sala 101\",
\"bairro\": \"Centro\",
\"cep\": \"50010000\"
}
},
\"obra\": {
\"codigo\": \"OBR-001\",
\"art\": \"123456789\",
\"endereco\": {
\"cep\": \"50010000\",
\"logradouro\": \"Rua da Obra\",
\"numero\": \"100\",
\"bairro\": \"Centro\"
}
},
\"servico\": {
\"codigoServico\": \"7.09\",
\"codigoTributacaoMunicipio\": \"0709\",
\"nbs\": \"123456789\",
\"discriminacao\": \"Serviço de desenvolvimento de software.\",
\"codigoMunicipioPrestacaoServicoIBGE\": \"2611606\",
\"codigoMunicipioIncidenciaIBGE\": \"6660536\",
\"informacoesComplementares\": \"iure\",
\"valores\": {
\"valor\": 1500,
\"baseCalculo\": 1500,
\"valorIntermediario\": 4.1,
\"descontoCondicionado\": 0,
\"descontoIncondicionado\": 0,
\"issRetido\": \"NAO\",
\"aliquotaIss\": 5,
\"cstPisCofins\": \"01\",
\"baseCalculoPisCofins\": 1500,
\"valorPis\": 4.5,
\"valorCofins\": 18,
\"aliquotaPis\": 0.65,
\"aliquotaCofins\": 3,
\"tpRetPisCofins\": \"animi\",
\"valorInss\": 0,
\"valorIr\": 0,
\"valorCsll\": 0
}
},
\"ibscbs\": {
\"cst\": \"00\",
\"cClassTrib\": \"1234567\",
\"cIndOp\": \"1\",
\"finNFSe\": \"1\",
\"indDest\": \"1\",
\"indFinal\": \"1\"
},
\"tributacaoAproximada\": {
\"aliquotaSimplesNacional\": 4.6691,
\"federal\": {
\"valor\": 10138852.6535,
\"percentual\": 2.2033443
},
\"estadual\": {
\"valor\": 5089.870609,
\"percentual\": 11043434.570587615
},
\"municipal\": {
\"valor\": 11264878.0162741,
\"percentual\": 3515109.693682163
}
}
}"
Exemplo de resposta (200, NFS-e emitida com sucesso (retornado via callback ou consulta de protocolo).):
{
"chave": "26116062255792707000170000000000017126057761392151",
"competencia": null,
"dataCancelamento": null,
"dataEmissao": "2026-05-29T20:44:41.000000Z",
"id": "8f7ba381-cb92-43f9-b9e5-6867d565e912",
"numero": "171",
"referencia": null,
"serie": "1",
"status": "emitida",
"tipoReferencia": "",
"total": "525.00"
}
Exemplo de resposta (201, Solicitação criada. O processamento ocorre de forma assíncrona.):
{
"protocolo": 2950,
"status": "processando"
}
Exemplo de resposta (422, Erro retornado pelo provedor (via callback ou consulta de protocolo).):
[
{
"codigo": "E0014",
"mensagem": "Conjunto de Série, Número, Código do Município Emissor e CNPJ/CPF informado nesta DPS já existe em uma NFS-e gerada a partir de uma DPS enviada anteriormente.",
"correcao": "Correção não fornecida pelo provedor"
}
]
Resposta recebida:
A requisição falhou com erro:
Dica: verifique se você está conectado corretamente à rede.
Se você é um mantenedor desta API, verifique se a API está rodando e se o CORS está habilitado.
Você pode verificar o console do DevTools para obter informações de depuração.
Cancelar NFS-e
requer autenticação
Cria uma solicitação de cancelamento de uma NFS-e emitida.
O cancelamento é processado de forma assíncrona. O resultado pode ser consultado posteriormente pelo protocolo retornado ou enviado para a URL de callback informada.
Exemplo de requisição:
$client = new \GuzzleHttp\Client();
$url = 'https://devnota.com.br/api/v2/nfse/8f7ba381-cb92-43f9-b9e5-6867d565e912/cancelar';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Company-uuid' => '{YOUR_COMPANY_UUID}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'callback' => 'https://example.com/callback',
'ambiente' => 'developer',
'codigoCancelamento' => 'ERRO_EMISSAO',
'motivoCancelamento' => 'Cancelamento devido a erro na emissão.',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://devnota.com.br/api/v2/nfse/8f7ba381-cb92-43f9-b9e5-6867d565e912/cancelar"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Company-uuid": "{YOUR_COMPANY_UUID}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"callback": "https:\/\/example.com\/callback",
"ambiente": "developer",
"codigoCancelamento": "ERRO_EMISSAO",
"motivoCancelamento": "Cancelamento devido a erro na emissão."
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://devnota.com.br/api/v2/nfse/8f7ba381-cb92-43f9-b9e5-6867d565e912/cancelar'
payload = {
"callback": "https:\/\/example.com\/callback",
"ambiente": "developer",
"codigoCancelamento": "ERRO_EMISSAO",
"motivoCancelamento": "Cancelamento devido a erro na emissão."
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Company-uuid': '{YOUR_COMPANY_UUID}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()curl --request POST \
"https://devnota.com.br/api/v2/nfse/8f7ba381-cb92-43f9-b9e5-6867d565e912/cancelar" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Company-uuid: {YOUR_COMPANY_UUID}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"callback\": \"https:\\/\\/example.com\\/callback\",
\"ambiente\": \"developer\",
\"codigoCancelamento\": \"ERRO_EMISSAO\",
\"motivoCancelamento\": \"Cancelamento devido a erro na emissão.\"
}"
Exemplo de resposta (200, NFS-e cancelada com sucesso (retornado via callback ou consulta de protocolo).):
{
"chave": "26116062255792707000170000000000017126057761392151",
"competencia": null,
"dataCancelamento": "2026-05-29 17:54:35",
"dataEmissao": "2026-05-29T20:44:41.000000Z",
"id": "8f7ba381-cb92-43f9-b9e5-6867d565e912",
"numero": "171",
"referencia": null,
"serie": "1",
"status": "cancelada",
"tipoReferencia": "",
"total": "525.00"
}
Exemplo de resposta (201, Solicitação criada. O processamento ocorre de forma assíncrona.):
{
"protocolo": 2950,
"status": "processando"
}
Exemplo de resposta (422, Erro retornado pelo provedor (via callback ou consulta de protocolo).):
[
{
"codigo": "E0014",
"mensagem": "Cancelamento não permitido pelo provedor.",
"correcao": "Correção não fornecida pelo provedor"
}
]
Resposta recebida:
A requisição falhou com erro:
Dica: verifique se você está conectado corretamente à rede.
Se você é um mantenedor desta API, verifique se a API está rodando e se o CORS está habilitado.
Você pode verificar o console do DevTools para obter informações de depuração.
Protocolos
APIs para consulta de protocolos.
Consulta
requer autenticação
Consulta o status de processamento de uma solicitação a partir do número do protocolo.
Exemplo de requisição:
$client = new \GuzzleHttp\Client();
$url = 'https://devnota.com.br/api/v2/consulta/protocolo/25';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://devnota.com.br/api/v2/consulta/protocolo/25"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://devnota.com.br/api/v2/consulta/protocolo/25'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()curl --request GET \
--get "https://devnota.com.br/api/v2/consulta/protocolo/25" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"Exemplo de resposta (200, Processando):
{
"protocolo": 25,
"status": "processando"
}
Exemplo de resposta (200, NFS-e emitida):
{
"protocolo": 25,
"status": "processado",
"response": {
"id": "1140d27f-7854-4715-aaf1-9590f95398c3",
"dataEmissao": "2026-05-29T21:51:06.000000Z",
"competencia": "2026-05-29T03:00:00.000000Z",
"numero": "172",
"serie": "1",
"chave": "26116062255792707000170000000000017226054405240337",
"total": "525.00",
"referencia": 10,
"tipoReferencia": "rps",
"chaveDps": null,
"status": "emitida",
"dataCancelamento": null
}
}
Exemplo de resposta (200, NFS-e cancelada):
{
"protocolo": 25,
"status": "processado",
"response": {
"id": "1140d27f-7854-4715-aaf1-9590f95398c3",
"dataEmissao": "2026-05-29T21:51:06.000000Z",
"competencia": "2026-05-29T03:00:00.000000Z",
"numero": "172",
"serie": "1",
"chave": "26116062255792707000170000000000017226054405240337",
"total": "525.00",
"referencia": "311",
"tipoReferencia": "DPS",
"chaveDps": "261160625579270700017000001000000000000311",
"status": "cancelada",
"dataCancelamento": "2026-05-29 18:58:11"
}
}
Exemplo de resposta (200, Processado com erro):
{
"protocolo": 22,
"status": "processado_com_erro",
"response": [
{
"codigo": "E0014",
"mensagem": "Conjunto de Série, Número, Código do Município Emissor e CNPJ/CPF informado nesta DPS já existe em uma NFS-e gerada a partir de uma DPS enviada anteriormente.",
"correcao": "Correção não fornecida pelo provedor"
}
]
}
Exemplo de resposta (200, Erro interno):
{
"protocolo": 13,
"status": "erro",
"response": [
{
"codigo": 0,
"mensagem": "Chave da NFS-e não encontrada.",
"correcao": "Chave da NFS-e não encontrada.",
"stack": "..."
}
]
}
Exemplo de resposta (404):
{
"protocolo": 25,
"status": "erro",
"response": {
"codigo": "0",
"mensagem": "Número de protocolo inexistente nesta empresa.",
"correcao": "Verifique o número do protocolo e tente novamente."
}
}
Resposta recebida:
A requisição falhou com erro:
Dica: verifique se você está conectado corretamente à rede.
Se você é um mantenedor desta API, verifique se a API está rodando e se o CORS está habilitado.
Você pode verificar o console do DevTools para obter informações de depuração.
Reprocessar
requer autenticação
Reprocessar uma solicitação a partir do número do protocolo. Somente protocolos com status "processado_com_erro" ou "erro" podem ser reprocessados. Essa função ainda não foi liberada para uso, mas em breve será possível reprocessar protocolos com falha de processamento do tipo retryable = true.
Exemplo de requisição:
$client = new \GuzzleHttp\Client();
$url = 'https://devnota.com.br/api/v2/consulta/reprocessar/25';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://devnota.com.br/api/v2/consulta/reprocessar/25"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());import requests
import json
url = 'https://devnota.com.br/api/v2/consulta/reprocessar/25'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()curl --request POST \
"https://devnota.com.br/api/v2/consulta/reprocessar/25" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"Exemplo de resposta (200, Processando):
{
"protocolo": 25,
"status": "processando"
}
Exemplo de resposta (200, Erro interno):
{
"protocolo": 13,
"status": "erro",
"response": [
{
"codigo": 0,
"mensagem": "Chave da NFS-e não encontrada.",
"correcao": "Chave da NFS-e não encontrada.",
"stack": "..."
}
]
}
Resposta recebida:
A requisição falhou com erro:
Dica: verifique se você está conectado corretamente à rede.
Se você é um mantenedor desta API, verifique se a API está rodando e se o CORS está habilitado.
Você pode verificar o console do DevTools para obter informações de depuração.
Serviços da empresa
APIs para gerenciamento dos serviços vinculados à empresa. O serviço padrão é usado automaticamente na emissão de notas quando nenhum código de serviço é informado.
Listar serviços
requer autenticação
Retorna todos os serviços cadastrados para a empresa identificada pelo UUID.
Exemplo de requisição:
$client = new \GuzzleHttp\Client();
$url = 'https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000/servicos';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000/servicos"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000/servicos'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()curl --request GET \
--get "https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000/servicos" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"Exemplo de resposta (200):
[
{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"title": "Desenvolvimento de software",
"service_code": "7.09",
"mun_trib_code": "0709",
"nbs": null,
"is_default": true
}
]
Exemplo de resposta (404):
{
"message": "Not found."
}
Resposta recebida:
A requisição falhou com erro:
Dica: verifique se você está conectado corretamente à rede.
Se você é um mantenedor desta API, verifique se a API está rodando e se o CORS está habilitado.
Você pode verificar o console do DevTools para obter informações de depuração.
Cadastrar serviço
requer autenticação
Cadastra um novo serviço para a empresa. O primeiro serviço cadastrado é automaticamente definido como padrão.
Exemplo de requisição:
$client = new \GuzzleHttp\Client();
$url = 'https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000/servicos';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'title' => 'Desenvolvimento de software',
'service_code' => '7.09',
'mun_trib_code' => '0709',
'nbs' => '123456789',
'is_default' => false,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000/servicos"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"title": "Desenvolvimento de software",
"service_code": "7.09",
"mun_trib_code": "0709",
"nbs": "123456789",
"is_default": false
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000/servicos'
payload = {
"title": "Desenvolvimento de software",
"service_code": "7.09",
"mun_trib_code": "0709",
"nbs": "123456789",
"is_default": false
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()curl --request POST \
"https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000/servicos" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"title\": \"Desenvolvimento de software\",
\"service_code\": \"7.09\",
\"mun_trib_code\": \"0709\",
\"nbs\": \"123456789\",
\"is_default\": false
}"
Exemplo de resposta (201):
{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"title": "Desenvolvimento de software",
"service_code": "7.09",
"mun_trib_code": "0709",
"nbs": null,
"is_default": true
}
Exemplo de resposta (404):
{
"message": "Not found."
}
Exemplo de resposta (422):
{
"message": "O título do serviço é obrigatório.",
"errors": {
"title": [
"O título do serviço é obrigatório."
]
}
}
Resposta recebida:
A requisição falhou com erro:
Dica: verifique se você está conectado corretamente à rede.
Se você é um mantenedor desta API, verifique se a API está rodando e se o CORS está habilitado.
Você pode verificar o console do DevTools para obter informações de depuração.
Atualizar serviço
requer autenticação
Atualiza os dados de um serviço cadastrado para a empresa.
Exemplo de requisição:
$client = new \GuzzleHttp\Client();
$url = 'https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000/servicos/661e8400-e29b-41d4-a716-446655440011';
$response = $client->put(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'title' => 'Desenvolvimento de software',
'service_code' => '7.09',
'mun_trib_code' => '0709',
'nbs' => '123456789',
'is_default' => false,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000/servicos/661e8400-e29b-41d4-a716-446655440011"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"title": "Desenvolvimento de software",
"service_code": "7.09",
"mun_trib_code": "0709",
"nbs": "123456789",
"is_default": false
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000/servicos/661e8400-e29b-41d4-a716-446655440011'
payload = {
"title": "Desenvolvimento de software",
"service_code": "7.09",
"mun_trib_code": "0709",
"nbs": "123456789",
"is_default": false
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()curl --request PUT \
"https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000/servicos/661e8400-e29b-41d4-a716-446655440011" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"title\": \"Desenvolvimento de software\",
\"service_code\": \"7.09\",
\"mun_trib_code\": \"0709\",
\"nbs\": \"123456789\",
\"is_default\": false
}"
Exemplo de resposta (200):
{
"uuid": "661e8400-e29b-41d4-a716-446655440011",
"title": "Desenvolvimento de software",
"service_code": "7.09",
"mun_trib_code": "0709",
"nbs": null,
"is_default": false
}
Exemplo de resposta (404):
{
"message": "Not found."
}
Exemplo de resposta (422):
{
"message": "O título do serviço é obrigatório.",
"errors": {
"title": [
"O título do serviço é obrigatório."
]
}
}
Resposta recebida:
A requisição falhou com erro:
Dica: verifique se você está conectado corretamente à rede.
Se você é um mantenedor desta API, verifique se a API está rodando e se o CORS está habilitado.
Você pode verificar o console do DevTools para obter informações de depuração.
Remover serviço
requer autenticação
Remove um serviço vinculado à empresa. Se o serviço removido era o padrão, o próximo serviço disponível é promovido automaticamente.
Exemplo de requisição:
$client = new \GuzzleHttp\Client();
$url = 'https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000/servicos/661e8400-e29b-41d4-a716-446655440011';
$response = $client->delete(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000/servicos/661e8400-e29b-41d4-a716-446655440011"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());import requests
import json
url = 'https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000/servicos/661e8400-e29b-41d4-a716-446655440011'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()curl --request DELETE \
"https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000/servicos/661e8400-e29b-41d4-a716-446655440011" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"Exemplo de resposta (200):
{
"message": "Serviço removido com sucesso."
}
Exemplo de resposta (404):
{
"message": "Not found."
}
Resposta recebida:
A requisição falhou com erro:
Dica: verifique se você está conectado corretamente à rede.
Se você é um mantenedor desta API, verifique se a API está rodando e se o CORS está habilitado.
Você pode verificar o console do DevTools para obter informações de depuração.
Definir serviço padrão
requer autenticação
Define o serviço como padrão da empresa. O serviço padrão é usado automaticamente na emissão de notas quando nenhum código de serviço é informado na requisição. O serviço anteriormente padrão é desmarcado.
Exemplo de requisição:
$client = new \GuzzleHttp\Client();
$url = 'https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000/servicos/661e8400-e29b-41d4-a716-446655440011/padrao';
$response = $client->put(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000/servicos/661e8400-e29b-41d4-a716-446655440011/padrao"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "PUT",
headers,
}).then(response => response.json());import requests
import json
url = 'https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000/servicos/661e8400-e29b-41d4-a716-446655440011/padrao'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers)
response.json()curl --request PUT \
"https://devnota.com.br/api/v2/empresas/550e8400-e29b-41d4-a716-446655440000/servicos/661e8400-e29b-41d4-a716-446655440011/padrao" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"Exemplo de resposta (200):
{
"message": "Serviço definido como padrão com sucesso."
}
Exemplo de resposta (404):
{
"message": "Not found."
}
Resposta recebida:
A requisição falhou com erro:
Dica: verifique se você está conectado corretamente à rede.
Se você é um mantenedor desta API, verifique se a API está rodando e se o CORS está habilitado.
Você pode verificar o console do DevTools para obter informações de depuração.
Tomadores
APIs para gerenciamento dos tomadores de serviço (clientes) vinculados à conta. Os dados do tomador podem ser usados automaticamente na emissão de NFS-e quando o CPF/CNPJ informado na nota corresponder a um tomador cadastrado.
Listar tomadores
requer autenticação
Retorna todos os tomadores cadastrados pelo usuário autenticado, ordenados por nome.
Exemplo de requisição:
$client = new \GuzzleHttp\Client();
$url = 'https://devnota.com.br/api/v2/tomadores';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://devnota.com.br/api/v2/tomadores"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://devnota.com.br/api/v2/tomadores'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()curl --request GET \
--get "https://devnota.com.br/api/v2/tomadores" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"Exemplo de resposta (200):
[
{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"name": "Cliente Exemplo LTDA",
"document": "12345678000199",
"email": "[email protected]"
}
]
Resposta recebida:
A requisição falhou com erro:
Dica: verifique se você está conectado corretamente à rede.
Se você é um mantenedor desta API, verifique se a API está rodando e se o CORS está habilitado.
Você pode verificar o console do DevTools para obter informações de depuração.
Cadastrar tomador
requer autenticação
Cadastra um novo tomador de serviço vinculado ao usuário autenticado.
Exemplo de requisição:
$client = new \GuzzleHttp\Client();
$url = 'https://devnota.com.br/api/v2/tomadores';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Cliente Exemplo LTDA',
'document' => '12345678000199',
'cep' => '50010000',
'address' => 'Rua das Flores',
'number' => '123',
'neighborhood' => 'Centro',
'ibge_code' => '2611606',
'complement' => 'Sala 101',
'contact' => '81999999999',
'email' => '[email protected]',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://devnota.com.br/api/v2/tomadores"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Cliente Exemplo LTDA",
"document": "12345678000199",
"cep": "50010000",
"address": "Rua das Flores",
"number": "123",
"neighborhood": "Centro",
"ibge_code": "2611606",
"complement": "Sala 101",
"contact": "81999999999",
"email": "[email protected]"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://devnota.com.br/api/v2/tomadores'
payload = {
"name": "Cliente Exemplo LTDA",
"document": "12345678000199",
"cep": "50010000",
"address": "Rua das Flores",
"number": "123",
"neighborhood": "Centro",
"ibge_code": "2611606",
"complement": "Sala 101",
"contact": "81999999999",
"email": "[email protected]"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()curl --request POST \
"https://devnota.com.br/api/v2/tomadores" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Cliente Exemplo LTDA\",
\"document\": \"12345678000199\",
\"cep\": \"50010000\",
\"address\": \"Rua das Flores\",
\"number\": \"123\",
\"neighborhood\": \"Centro\",
\"ibge_code\": \"2611606\",
\"complement\": \"Sala 101\",
\"contact\": \"81999999999\",
\"email\": \"[email protected]\"
}"
Exemplo de resposta (201):
{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"name": "Cliente Exemplo LTDA",
"document": "12345678000199",
"email": "[email protected]"
}
Exemplo de resposta (422):
{
"message": "O campo name é obrigatório.",
"errors": {
"name": [
"O campo name é obrigatório."
]
}
}
Resposta recebida:
A requisição falhou com erro:
Dica: verifique se você está conectado corretamente à rede.
Se você é um mantenedor desta API, verifique se a API está rodando e se o CORS está habilitado.
Você pode verificar o console do DevTools para obter informações de depuração.
Atualizar tomador
requer autenticação
Atualiza os dados de um tomador cadastrado.
Exemplo de requisição:
$client = new \GuzzleHttp\Client();
$url = 'https://devnota.com.br/api/v2/tomadores/6f58f0bd-54c7-3f3d-a5ef-de6c2cb20e1b';
$response = $client->put(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Cliente Exemplo LTDA',
'document' => '12345678000199',
'cep' => '50010000',
'address' => 'Rua das Flores',
'number' => '123',
'neighborhood' => 'Centro',
'ibge_code' => '2611606',
'complement' => 'Sala 101',
'contact' => '81999999999',
'email' => '[email protected]',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://devnota.com.br/api/v2/tomadores/6f58f0bd-54c7-3f3d-a5ef-de6c2cb20e1b"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Cliente Exemplo LTDA",
"document": "12345678000199",
"cep": "50010000",
"address": "Rua das Flores",
"number": "123",
"neighborhood": "Centro",
"ibge_code": "2611606",
"complement": "Sala 101",
"contact": "81999999999",
"email": "[email protected]"
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());import requests
import json
url = 'https://devnota.com.br/api/v2/tomadores/6f58f0bd-54c7-3f3d-a5ef-de6c2cb20e1b'
payload = {
"name": "Cliente Exemplo LTDA",
"document": "12345678000199",
"cep": "50010000",
"address": "Rua das Flores",
"number": "123",
"neighborhood": "Centro",
"ibge_code": "2611606",
"complement": "Sala 101",
"contact": "81999999999",
"email": "[email protected]"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()curl --request PUT \
"https://devnota.com.br/api/v2/tomadores/6f58f0bd-54c7-3f3d-a5ef-de6c2cb20e1b" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Cliente Exemplo LTDA\",
\"document\": \"12345678000199\",
\"cep\": \"50010000\",
\"address\": \"Rua das Flores\",
\"number\": \"123\",
\"neighborhood\": \"Centro\",
\"ibge_code\": \"2611606\",
\"complement\": \"Sala 101\",
\"contact\": \"81999999999\",
\"email\": \"[email protected]\"
}"
Exemplo de resposta (200):
{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"name": "Cliente Exemplo LTDA",
"document": "12345678000199",
"email": "[email protected]"
}
Exemplo de resposta (404):
{
"message": "Not found."
}
Resposta recebida:
A requisição falhou com erro:
Dica: verifique se você está conectado corretamente à rede.
Se você é um mantenedor desta API, verifique se a API está rodando e se o CORS está habilitado.
Você pode verificar o console do DevTools para obter informações de depuração.
Remover tomador
requer autenticação
Remove permanentemente um tomador cadastrado.
Exemplo de requisição:
$client = new \GuzzleHttp\Client();
$url = 'https://devnota.com.br/api/v2/tomadores/5d71152e-d131-3d9e-bfb3-ce68cac86bb8';
$response = $client->delete(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://devnota.com.br/api/v2/tomadores/5d71152e-d131-3d9e-bfb3-ce68cac86bb8"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());import requests
import json
url = 'https://devnota.com.br/api/v2/tomadores/5d71152e-d131-3d9e-bfb3-ce68cac86bb8'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()curl --request DELETE \
"https://devnota.com.br/api/v2/tomadores/5d71152e-d131-3d9e-bfb3-ce68cac86bb8" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"Exemplo de resposta (204):
Resposta vazia
Exemplo de resposta (404):
{
"message": "Not found."
}
Resposta recebida:
A requisição falhou com erro:
Dica: verifique se você está conectado corretamente à rede.
Se você é um mantenedor desta API, verifique se a API está rodando e se o CORS está habilitado.
Você pode verificar o console do DevTools para obter informações de depuração.