Pular para o conteúdo principal

Emissão de NFS-e com Cliente Domiciliado no Exterior

Como emitir uma Nota Fiscal de Serviço Eletrônica (NFS-e) quando o tomador do serviço está domiciliado fora do Brasil. Caso não encontre uma resposta para sua dúvida, fique à vontade para entrar em contato.

Comece pelo cenário da sua prefeitura

Informar o endereço do tomador no exterior não é suficiente na maioria das prefeituras. O que mais falta nas integrações são dois grupos:

Se você não sabe em qual caso a sua prefeitura está, veja como saber qual é o meu caso.

Sumário​

Como a plataforma identifica um cliente no exterior​

O campo borrower.address.country é a referência. Os valores seguem o padrão ISO 3166-1 alfa-3 — 3 letras.

  • BRA (ou campo ausente) → cliente nacional.
  • Qualquer outro valor (USA, ARG, DEU…) → cliente no exterior, e a plataforma relaxa automaticamente os campos de endereço que não se aplicam.

Isso resolve a identificação do tomador. O que a identificação não resolve é a declaração fiscal da operação — que é justamente o objeto dos dois cenários abaixo.

Campos do tomador​

Para um tomador no exterior, os obrigatórios são reduzidos em relação a uma emissão nacional:

CampoDescriçãoObrigatório
borrower.typeTipo do tomador (Undefined, NaturalPerson, LegalEntity)Sim
borrower.nameNome ou Razão Social do tomadorSim
borrower.federalTaxNumberCPF ou CNPJ (informe 0 quando não aplicável)Não
borrower.emailEmail do tomadorNão
borrower.address.countrySigla do país, ISO 3166-1 alfa-3 (ex.: USA, ARG)Sim
borrower.address.postalCodeCódigo postal no exteriorNão
borrower.address.streetLogradouroSim
borrower.address.numberNúmero do endereçoSim
borrower.address.districtBairroSim
borrower.address.city.nameNome da cidadeSim
borrower.address.city.codeCódigo IBGE — não se aplica ao exteriorNão
borrower.address.stateEstado, província ou região (até 60 caracteres)Não
cityServiceCodeCódigo do serviço no municípioSim
descriptionDescrição do serviço prestadoSim
servicesAmountValor total do serviçoSim

E os campos que declaram a operação como destinada ao exterior:

CampoDescriçãoQuando é necessário
taxationTypeTipo de tributação. Para exportação de serviço, ExportSão Paulo — e recomendado em qualquer prefeitura, por ser o que classifica a operação como exportação
locationLocal da prestação do serviço. Para exterior, basta location.country (ISO 3166-1 alfa-3): com país estrangeiro, city.code, city.name e state são opcionais (ver o cenário 1)
foreignTradeGrupo de comércio exterior (modo de prestação, vínculo, moeda, valor na moeda, mecanismos de apoio)Ambiente Nacional (ver o cenário 2)
Campos opcionais para o exterior

federalTaxNumber, postalCode, city.code e state são opcionais. O federalTaxNumber pode ser 0 quando o cliente não possui documento brasileiro. O city.code (IBGE) não deve ser informado — não existe código IBGE para cidade estrangeira.


Cenário 1: Prefeitura de São Paulo​

Em São Paulo, além do endereço do tomador, a nota precisa declarar que o serviço foi prestado no exterior. Isso é feito com o grupo location (informando location.country) e o campo taxationType.

JSON completo​

{
"borrower": {
"type": "LegalEntity",
"name": "GLOBAL TECH CONSULTING INC",
"federalTaxNumber": 0,
"email": "contato@globaltech.example",
"address": {
"country": "USA",
"postalCode": "10001",
"street": "5th Avenue",
"number": "100",
"district": "Manhattan",
"city": {
"name": "New York"
},
"state": "NY"
}
},
"cityServiceCode": "0101",
"description": "Serviço de consultoria em tecnologia prestado a tomador no exterior.",
"servicesAmount": 1000.0,
"taxationType": "Export",
"location": {
"country": "USA"
}
}

O que cada campo faz aqui​

CampoEfeito
taxationType: "Export"Classifica a operação como exportação de serviço. É o que produz a tributação "P" (exportação) no RPS do layout anterior de São Paulo
location.country: "USA"Declara o local da prestação no exterior. No layout atual (IBS/CBS) é o que faz a nota sair com o país da prestação em vez do município do prestador
location.city e location.stateOpcionais quando country é estrangeiro. Não precisa informá-los — o município não é repassado à prefeitura nessa situação
Mudança: não é mais preciso repetir o município do prestador

Até então o grupo location exigia city.code, city.name e state mesmo com país estrangeiro, e esta página orientava preencher com o município do prestador só para passar na validação. Isso produzia um payload que se contradiz — country: "USA" junto de São Paulo/SP — para campos que a serialização descartava: o XML enviado à prefeitura levava apenas o país da prestação.

Agora, com country diferente de BRA, os três campos são opcionais, no mesmo critério que o borrower.address já seguia.

Payloads antigos continuam válidos. Se a sua integração já envia o município do prestador, ela segue funcionando e gera exatamente o mesmo XML — não há nada a corrigir com pressa. O que for enviado continua sendo validado: um city.code que não seja um IBGE de 7 dígitos, ou um state fora do padrão de 2 letras, continua retornando 400.

Os dois campos importam — cada um em um layout

Não são alternativas. location.country é lido pelo layout atual (IBS/CBS) para montar o país da prestação; o layout anterior não lê esse campo e declara a exportação pelo taxationType. Enviar os dois é o que funciona nos dois layouts, e é por isso que a recomendação é enviar o par.

O location aceita os mesmos campos de um endereço (street, number, district, city, postalCode, state, country).

O grupo location exige cidade e UF mesmo para o exterior

A validação do grupo não olha o país. Enviar apenas location.country retorna 400 Bad Request com quatro erros:

location.city         can not be null
location.city.code must be a valid IBGE city code
location.city.name can not be null or empty
location.state must be a valid ISO 3166-2 code, samples (SP, RJ, AC)

Então informe city.code (7 dígitos, IBGE), city.name e state junto com o country. Quando country é estrangeiro, a prefeitura usa apenas o país e esses três campos não afetam o resultado — a convenção é repetir o município do prestador, como no exemplo acima.

Vale notar o contraste: o endereço do tomador no exterior é liberado (não exige cidade nem CEP). A exigência acima é específica do grupo location.

Sem o local da prestação, São Paulo recusa a nota — erro [657]

Se a nota é de exportação de serviço e não declara local de prestação no exterior, ela sai com o município do prestador e a Prefeitura de São Paulo recusa com:

[657] A indicação de local de prestação no exterior deverá ser informada quando a classificação tributária for de exportação de serviços.

É uma regra de negócio da prefeitura, não de schema — o XML é aceito na validação e recusado depois, então o erro chega no retorno da emissão. Informar location.country resolve.

Use a sigla de 3 letras — sigla desconhecida faz a nota declarar Brasil

location.country segue o mesmo padrão do endereço do tomador: ISO 3166-1 alfa-3 (USA, ARG, DEU). A plataforma converte para o código de 2 letras que a prefeitura espera.

Uma sigla que não esteja na tabela de países não gera erro: a nota sai declarando BR como país da prestação. Confira a sigla na tabela ISO 3166-1 alfa-3 antes de integrar.


Cenário 2: Prefeituras no Ambiente Nacional​

Prefeituras que aderiram ao Ambiente Nacional (padrão nacional da NFS-e) esperam o grupo foreignTrade nas emissões destinadas ao exterior. Ele corresponde ao grupo comExt do DPS e carrega os dados da operação de comércio exterior: modo de prestação, vínculo entre as partes, moeda, valor na moeda e mecanismos de apoio.

JSON completo​

{
"borrower": {
"type": "LegalEntity",
"name": "GLOBAL TECH CONSULTING INC",
"federalTaxNumber": 0,
"email": "contato@globaltech.example",
"address": {
"country": "USA",
"postalCode": "10001",
"street": "5th Avenue",
"number": "100",
"district": "Manhattan",
"city": {
"name": "New York"
},
"state": "NY"
}
},
"cityServiceCode": "4444",
"description": "Serviço de consultoria em tecnologia prestado a tomador no exterior.",
"servicesAmount": 1000.0,
"taxationType": "Export",
"location": {
"country": "USA",
"city": {
"code": "3550308",
"name": "São Paulo"
},
"state": "SP"
},
"foreignTrade": {
"serviceMode": "CrossBorder",
"relationShip": "NoLink",
"currency": "USD",
"serviceAmountInCurrency": 200.0,
"supportMechanismProvider": "None",
"supportMechanismReceiver": "None",
"temporaryGoods": "No",
"mdicDelivery": false
}
}

Campos obrigatórios quando foreignTrade é enviado​

O grupo é opcional. Mas ao enviá-lo, estes campos passam a ser obrigatórios — omitir qualquer um deles retorna 400 Bad Request apontando o campo:

CampoDescrição
serviceModeModo de prestação. CrossBorder, ConsumptionInBrazil, TemporaryPersonnel ou ConsumptionAbroad
relationShipVínculo entre as partes. NoLink, Controlled, Controller, Affiliate, HeadOffice, Branch ou OtherLink
currencyMoeda da transação (ISO 4217 — ver a observação abaixo)
serviceAmountInCurrencyValor do serviço na moeda informada. Não pode ser negativo
supportMechanismProviderMecanismo de apoio/fomento do prestador. None quando não houver
supportMechanismReceiverMecanismo de apoio/fomento do tomador. None quando não houver
temporaryGoodsVínculo à movimentação temporária de bens. Unknown, No, LinkedImportDeclaration ou LinkedExportDeclaration
mdicDeliveryEntrega MDIC. true ou false — não aceita nulo

Opcionais: importDeclaration (número da DI — no layout nacional é truncado em 12 caracteres na emissão) e exportRegistration (registro de exportação).

serviceMode: confirme antes de usar "movimento temporário de pessoas físicas" ou "presença comercial no exterior"

Os valores CrossBorder (transfronteiriço) e ConsumptionInBrazil (consumo no Brasil) correspondem ao layout nacional sem ambiguidade.

Para os dois modos restantes, o nome do valor na API e o código que o layout nacional espera estão em conferência — se a sua operação é um desses dois casos, fale com o suporte antes de integrar, para não declarar um modo de prestação diferente do real.

A lista completa de códigos e descrições de cada enumeração está na Tabela de Referência — Comércio Exterior (foreignTrade).

currency: use a sigla de 3 letras — ou o código numérico

A conversão de sigla para o código numérico que o padrão nacional exige cobre BRL, USD, EUR, GBP, JPY, CNY e ARS.

Uma sigla fora dessa lista (CHF, CAD, AUD, MXN…) não é reconhecida e a nota sai declarando Real (986) — sem erro, sem aviso. Para essas moedas, informe diretamente o código numérico ISO 4217 de 3 dígitos, que é repassado como está:

"currency": "756"

(756 = franco suíço.) Códigos numéricos válidos: ISO 4217.

temporaryGoods não aceita "None"

O valor para "não há movimentação temporária de bens" é "No". Não existe "None" nesta enumeração — diferente de supportMechanismProvider e supportMechanismReceiver, onde "None" é o valor correto para "nenhum mecanismo".


Como o local da prestação é resolvido​

Quando você não informa location, a plataforma deduz o local da prestação. A ordem é:

  1. location — quando informado, vence tudo.
  2. activityEvent.address — quando a nota é de evento e o evento traz endereço.
  3. taxationType: "OutsideCity" — usa o endereço do tomador: município dele se for nacional, país dele se for estrangeiro.
  4. Fallback — município do prestador.

Ou seja, uma nota para o exterior sem location e sem taxationType: "OutsideCity" cai no passo 4 e declara o município do prestador como local da prestação — o que gera a recusa [657] em São Paulo.

Uma exceção em São Paulo

São Paulo tem uma rede de segurança: se a nota traz classificação tributária de exportação de serviço no grupo IBS/CBS (ibsCbs.classCode = 410004) e o tomador é estrangeiro, a prefeitura recebe o país da prestação mesmo sem location — e não há [657]. É uma proteção contra a recusa, não um substituto: ela depende de a nota trazer aquela classificação específica, e não cobre o layout anterior.

Informar location.country é o caminho explícito e recomendado, em qualquer prefeitura: não depende de dedução, de classificação tributária nem de layout.


Emissão via planilha​

Também é possível emitir com cliente no exterior pela planilha de importação. O campo que determina o cenário é o endereco_pais.

Coluna da PlanilhaAPIDescriçãoObrigatório
cpf_cnpjborrower.federalTaxNumberCPF ou CNPJ (informe 0 para exterior)Não
nomeborrower.nameNome ou Razão Social do tomadorSim
emailborrower.emailEmail do tomadorNão
endereco_paisborrower.address.countrySigla do país ISO 3166-1 alfa-3 (ex.: USA, ARG, DEU)Sim
endereco_cepborrower.address.postalCodeCódigo postal no exteriorNão
endereco_logradouroborrower.address.streetLogradouroSim
endereco_numeroborrower.address.numberNúmero do endereçoSim
endereco_bairroborrower.address.districtBairroSim
endereco_cidade_nomeborrower.address.city.nameNome da cidadeSim
endereco_cidade_codigoborrower.address.city.codeCódigo IBGE — não preencher para exteriorNão
endereco_estadoborrower.address.stateEstado, província ou regiãoNão
codigo_servicocityServiceCodeCódigo do serviço no municípioSim
descricaodescriptionDescrição do serviço prestadoSim
valorservicesAmountValor total do serviçoSim

Exemplo de preenchimento​

cpf_cnpjnomeemailendereco_paisendereco_cependereco_logradouroendereco_numeroendereco_bairroendereco_cidade_nomeendereco_estadocodigo_servicodescricaovalor
0Global Tech Consulting Inccontato@globaltech.exampleUSA100015th Avenue100ManhattanNew YorkNY0101Serviço de consultoria em tecnologia1000.00
A planilha não cobre location, taxationType nem foreignTrade

As colunas da planilha cobrem o endereço do tomador, não a declaração fiscal da operação. Se a sua prefeitura exige location/taxationType (São Paulo) ou foreignTrade (Ambiente Nacional), a emissão para o exterior precisa ser feita pela API — ou fale com o suporte para avaliar o seu caso.


Perguntas frequentes (FAQ)​

Como sei em qual cenário a minha prefeitura está?​

Consulte a página de prefeituras integradas e procure a coluna Amb. Nacional do município: Sim indica que a prefeitura está no Ambiente Nacional. Na dúvida, o caminho seguro é enviar taxationType e location (que São Paulo exige e as demais aceitam) e acrescentar foreignTrade se o município já estiver no Ambiente Nacional. Se preferir confirmar antes, fale com o suporte.

Preciso informar o CPF/CNPJ do cliente no exterior?​

Não. O campo federalTaxNumber (ou cpf_cnpj na planilha) é opcional para clientes no exterior. Informe 0 quando o cliente não possuir documento brasileiro.

Posso enviar foreignTrade para uma prefeitura que não está no Ambiente Nacional?​

Sim — o grupo é aceito no cadastro da nota e ignorado por layouts que não o utilizam. Mas atenção: uma vez enviado, os campos obrigatórios do grupo passam a valer, e um deles ausente retorna 400 mesmo que a prefeitura não fosse usar o grupo.

Qual código ISO 3166-1 usar para o país do cliente?​

Os códigos seguem o padrão ISO 3166-1 alfa-3. Exemplos comuns:

PaísCódigo
Estados UnidosUSA
ArgentinaARG
AlemanhaDEU
Reino UnidoGBR
JapãoJPN
PortugalPRT
CanadáCAN

Posso usar cálculo automático de impostos para clientes no exterior?​

Sim. O cálculo automático funciona normalmente — a plataforma identifica os detalhes tributários a partir do código de serviço. O taxationType continua sendo seu, porque é a classificação da operação, não o cálculo.

O que acontece com o ISS em serviços prestados ao exterior?​

A tributação varia conforme o enquadramento. Consulte seu contador para confirmar se o serviço se enquadra como exportação de serviço — e, nesse caso, envie taxationType: "Export", que é o que declara a operação como tal.

Como cadastrar, atualizar ou customizar um imposto?​

Para cadastro, atualização ou customização de imposto da sua empresa, entre em contato com o suporte. A configuração é feita pela equipe na plataforma.


Dúvidas adicionais​

Caso tenha dúvidas específicas sobre a emissão para cliente no exterior, entre em contato com o suporte ou consulte seu contador para orientação sobre o enquadramento da sua empresa.


Relacionados:

NFE.io

A NFE.io é uma empresa de tecnologia que fornece soluções para automatizar e simplificar a emissão e gestão de notas fiscais eletrônicas. Com suas ferramentas, as empresas podem economizar tempo e reduzir erros, aumentando a eficiência e precisão do processo de emissão de notas fiscais.

Um dos principais cases de sucesso da NFE.io é a implementação da solução na empresa de transporte Rodonaves. Com a automatização da emissão e gestão de notas fiscais eletrônicas, a Rodonaves conseguiu reduzir em até 80% o tempo gasto nesse processo, o que se traduziu em uma significativa melhoria na eficiência operacional. Além disso, a empresa também conseguiu eliminar erros e atrasos na emissão de notas fiscais, o que melhorou a relação com seus clientes e aumentou a confiança dos órgãos fiscais.

Outro exemplo é a implementação da NFE.io na empresa de comércio eletrônico, a Loja Integrada. Com a automatização da emissão de notas fiscais, a Loja Integrada conseguiu aumentar a velocidade de emissão de notas em até 10 vezes, o que permitiu que a empresa atendesse a uma maior quantidade de clientes e, consequentemente, aumentar as suas vendas.

Além desses exemplos, a NFE.io também tem outros cases de sucesso com empresas de setores como indústria, construção, varejo e serviços, mostrando a versatilidade e eficácia da sua solução.

Em resumo, a NFE.io é uma empresa de tecnologia que oferece soluções para automatizar e simplificar a emissão e gestão de notas fiscais eletrônicas, ajudando as empresas a economizar tempo e reduzir erros, melhorando a eficiência e precisão do processo. Com cases de sucesso em diferentes setores, a NFE.io tem se destacado como uma empresa líder em automação fiscal.