Emitir NFS-e (v3)
Emite uma NFS-e no padrão Nacional a partir dos dados enviados na requisição, sem vínculo com transação de pagamento.
O prestador é sempre o titular da chave X-API-KEY que autenticou a chamada: não existe campo para emitir em nome de terceiro, e uma subconta de marketplace emite com a chave dela própria.
A emissão é assíncrona. O 202 Accepted significa pedido aceito e enfileirado, não nota emitida: não há número de NFS-e, protocolo nem URLs nessa resposta. O desfecho chega exclusivamente no callbackUrl informado no pedido, documentado em Callbacks.
Não há sandbox: NFS-e é documento fiscal real e toda nota emitida existe de verdade na prefeitura. O cancelamento é feito hoje pelo painel Safe2Pay.
Idempotência. idempotencyKey é obrigatória e a mesma chave nunca gera uma segunda nota. Em 400, 403, 412, 422, 500 ou 502, repita com a mesma chave. Trocar a chave para tentar de novo significa duas notas fiscais reais na prefeitura.
Convenções. Nomes em camelCase; decimais como número JSON com ponto e duas casas (1000.00); datas em YYYY-MM-DD; booleanos aceitam somente os literais true e false (0, 1, 2, string ou null geram 400).
Pré-requisitos, todos configurados no painel Safe2Pay e verificados nesta ordem, com 412 no primeiro que faltar: serviço de NFS-e habilitado, configuração fiscal, certificado digital A1 e inscrição municipal.
O guia completo, com fluxo ponta a ponta, emissão para optantes do Simples Nacional, catálogo de erros, retentativa do callback, boas práticas e glossário, está em Emitir NFS-e (v3): guia de integração.
Request
- Base URLhttps://api.safe2pay.com.br
- URLhttps://api.safe2pay.com.br/v3/nfse
- AuthAPI key in header X-API-KEY
Request body
Example request
{
"callbackUrl": "https://webhooks.exemplo.com.br/nfse/retorno",
"idempotencyKey": "pedido-2026-08-000123",
"rpsIdentifier": {
"series": "1"
},
"operationType": 1,
"serviceDate": "2026-08-31",
"service": {
"values": {
"amount": 1000,
"amountNet": 913.5,
"amountPis": 6.5,
"amountCofins": 30,
"amountIss": 50,
"amountIssWithheld": 50,
"amountTaxBase": 1000,
"rateIss": 5,
"totalTaxRateSimplesNacional": 15.5,
"ratePis": 0.65,
"rateCofins": 3
},
"isIssWithheld": true,
"withholdingAgent": 1,
"issEnforceability": 1,
"description": "Serviços de odontologia ocupacional prestados em agosto de 2026: avaliações periódicas dos colaboradores. Pedido interno 000123.",
"serviceListItem": "04.12",
"nationalTaxCode": "041201",
"municipalTaxCode": "0412",
"nbsCode": "123456789",
"municipalityCode": "4314902",
"incidenceMunicipalityCode": "4314902",
"serviceAddress": {
"zipCode": "90020000",
"stateCode": "RS",
"cityName": "Porto Alegre",
"district": "Centro Histórico",
"street": "Av. Borges de Medeiros",
"number": "1501",
"complement": "Sala 301"
},
"serviceRecipient": {
"name": "Empresa Exemplo LTDA",
"identity": "11222333000181",
"email": "financeiro@exemplo.com.br",
"address": {
"number": "1501",
"street": "Av. Borges de Medeiros",
"district": "Centro Histórico",
"zipCode": "90020000",
"cityName": "Porto Alegre",
"stateCode": "RS",
"municipalityCode": "4314902",
"countryName": "Brasil",
"countryCode": "1058"
}
}
}
}Response
Pedido de emissão aceito e enfileirado. A nota ainda não existe: não há número de NFS-e, protocolo nem URLs aqui. O desfecho chega no callbackUrl.
Changes
No recorded changes to this operation across all 1 revision of this API.