Sobre a API de Emissão de Nota Fiscal de Serviços (NFs-e)

A API de Emissão de Nota Fiscal de Serviços da Celcoin (NFs-e) permite que as aplicações integradas possam fazer toda a gestão de Notas Fiscais da sua empresa e empresas conectadas ao seu ecossistema. Com ela é possível gerir as empresas e Notas Fiscais emitidas. Neste serviço o cliente consegue emitir notas Fiscais inicialmente para 8 Prefeituras.

Caso de uso:

Como Fintech quero conseguir disponibilizar as empresas do meu ecossistema a possibilidade de realizar emissões de NFs-e para os serviços prestados.

Nesse artigo você irá aprender sobre:

  • Limitações e exceções
  • Cidades Suportadas
  • Configurar um webhook para receber as informações das NFs-e emitidas.
  • Gestão de Empresas
  • Gestão do Certificado Digital
  • Gestão de uma NFs-e
  • Homologação

Pré requisitos para implementação:

  • Possuir uma chave api da Celcoin, para mais informações acessar esse link
  • Ter familiaridade com apis Rest usando o protocolo OAuth 2.0.
  • Ter o produto/solução contratada, caso queira usar a funcionalidade em ambiente produtivo, por favor entre em contato com a nossa equipe comercial através do e-mail corp@celcoin.com.br. Para dúvidas técnicas, basta entrar em contato com o suporte através do link.

Limitações e exceções:

Esse produto emite apenas notas fiscais de serviço

É obrigatório o uso de certificado A1 Para as Emissões de NFs-e

Cidades Suportadas:

É possível emitir NFs-e na seguintes cidades:

  • São Paulo
  • Campinas
  • São José dos Campos
  • Rio de Janeiro
  • Niterói
  • Porto Alegre
  • Florianópolis
  • Balneário Camboriú

⚠️

Atenção!

Mesmo em ambiente de sandbox é necessário utilizar o certificado A1 da empresa que irá emitir as NFs-e.

Configurando webhook

Para conseguir receber da Celcoin as notas fiscais emitidas de seus usuários é necessário realizar a configuração de um webhook.

O webhook é uma forma de receber informações de forma assíncrona, geralmente são disparados gatilhos no formato JSON quando um evento acontece, na prática para as apis de Emissão de NFS-e será usado para receber informações em seu sistema sobre as NFs-e emitidas, onde é possível receber os eventos de sucesso, com os dados da nota fiscal ou cancelamento da mesma. Inclusive quando ocorre alguma falha na emissão.

A Celcoin possui um gerenciador de webhook, para configurar o produto de Emissão de Nota Fiscal, basta seguir os passos do artigo Cadastrar e Gerenciar Webhooks

Abaixo será exibido o modelo de retorno do webhook

Modelos de Retorno Webhooks

Registro da NFs-e (invoice-nfse-registration) e Cancelamento da NFs-e (invoice-nfse-cancellation)


{
  "serviceInvoiceId": "6761cf89b9fcb2eb27f9d6af",
  "requestId": "d2e5b7c1-9a3f-4a6e-8f7b-1c9d3b2f6a4e",
  "rpsSerial": 1,
  "rpsNumber": 1,
  "operationType": "TRIBUTACAO_MUNICIPIO",
  "client": {
    "documentType": "CNPJ",
    "document": "51236721000136",
    "name": "Razão Social",
    "cityRegistration": "12345678912345",
    "stateRegistration": "12345678912345",
    "email": "email@google.com",
    "phone": "11912345678",
    "address": {
      "street": "Logradouro",
      "number": "1",
      "neighborhood": "Bairro",
      "cityCode": "3550308",
      "city": "São Paulo",
      "state": "SP",
      "country": "BR",
      "complement": "Casa",
      "zipCode": "08190120"
    }
  },
  "service": {
    "cnae": "62091",
    "code": "1.07",
    "cityTaxCode": "3158",
    "cityTaxDescription": "SUPORTE TÉCNICO, MANUTENÇÃO E OUTROS SERVIÇOS EM TECNOLOGIA DA INFORMAÇÃO",
    "description": "Prestação de Serviço",
    "value": 1000,
    "deductionValue": 0,
    "unconditionalDiscount": 0,
    "conditionalDiscount": 0,
    "retentionValue": 0,
    "pisValue": 0,
    "cofinsValue": 0,
    "inssValue": 0,
    "irValue": 0,
    "csllValue": 0,
    "issRetained": true,
    "issRate": 1,
    "baseValue": 1010,
    "issRetainedValue": 10,
    "netValue": 1000,
    "address": {
      "street": "Logradouro",
      "number": "1",
      "neighborhood": "Bairro",
      "cityCode": "3550308",
      "city": "São Paulo",
      "state": "SP",
      "complement": "Casa",
      "zipCode": "08190120"
    }
  },
  "status": "APPROVED",
  "competenceDate": "2025-02-05T19:57:03.985Z",
  "created": "2025-02-05T19:57:03.985Z"
}

📘

Note que o que vai mudar nos cenários de retorno dos webhooks da solicitação de Emissão de uma NFs-e e a Solicitação de Cancelamento de uma NFs-e é o status , que pode assumir o valor de Aprovado "APPROVED" ou cancelado "CANCELED" respectivamente.

Nota Fiscal - Cenário de Erro

📘

Caso ao solicitar a emissão de NFs-e e ela for rejeitada na prefeitura, o retorno do webhook virá com o status de "REJECTED"

Gestão de Empresas

A funcionalidade de gestão de empresas tem o objetivo de cadastrar e consultar dados das empresas que irão emitir notas fiscais em seu ecossistema. A seguir iremos demonstrar como realizar os cadastros e consultas nas APIs que compõe esse fluxo.

Cadastrar uma empresa para Emissão de NFs-e

Para cadastrar uma empresa é necessário realizar uma chamada na api Cadastrar Empresa utilizando o método POST, onde precisa ser preenchido algumas informações relacionadas a empresa que realizará a emissão da Nota Fiscal de Serviço. Os dados necessários estão no quadro "Parâmetros do Body"

Modelo de requisição:

curl --location --request POST 'https://sandbox.openfinance.celcoin.dev/company' \
--header 'accept: application/json' \
--header 'Authorization: Bearer acess_token' \
--header 'Content-Type: application/json' \
--data-raw '{
  "document": "51236721000136",
  "name": "Razão Social",
  "fantasyName": "Nome Fantasia",
  "cityRegistration": "12345678912345",
  "stateRegistration": "12345678912345",
  "stateTaxSubstituteRegistration": "1234567891",
  "cnae": "62091",
  "optSimpleNational": true,
  "email": "email@google.com",
  "phone": "11912345678",
  "address": {
    "street": "Logradouro",
    "number": "1",
    "neighborhood": "Bairro",
    "cityCode": "3550308",
    "city": "São Paulo",
    "state": "SP",
    "complement": "Casa",
    "zipCode": "08190120"
  },
  "serviceInvoice": {
 	  "rpsSerial": "1",
    "rpsNumber": 1,
    "code": "1.07",
    "cityTaxCode": "3158",
    "cityTaxDescription": "SUPORTE TÉCNICO, MANUTENÇÃO E OUTROS SERVIÇOS EM TECNOLOGIA DA INFORMAÇÃO",
    "specialTaxType": "MICROEMPRESA_MUNICIPAL",
    "issRate": 1,
    "culturalSupporter": true
  }
}
'

Parâmetros do Body:

CampoDescriçãoTipo
documentCNPJ da EmpresaString (14)
nameRazão Social da EmpresaString (60)
fantasyNameNome Fantasia da EmpresaString (60)
cityRegistrationInscrição MunicipalString (14)
stateRegistrationInscrição EstadualString (14)
stateTaxSubstituteRegistrationInscrição Estadual de Substituto TributárioString (10)
cnaeCNAE - Classificação Nacional de Atividades EconômicasString (10)
optSimpleNationalOptante pelo Simples NacionalBoolean
emaile-mailString (60)
phoneTelefoneString (11)
address.streetLogradouroString (60)
address.numberNúmeroString (10)
address.neighborhoodBairroString (60)
address.cityCodeCódigo de MunicípioString (7)
address.cityMunicípioString (60)
address.stateSigla de EstadoString (2)
address.complementComplementoString
address.zipCodeCEPString (8)
serviceInvoice.codeCódigo de Serviço PrestadoString (15)
serviceInvoice.rpsSerialSérie RPS de Documento Fiscal.String (5)
serviceInvoice.rpsNumberNúmero RPS de Documento Fiscal.Int 64
serviceInvoice.cityTaxCodeCódigo de Tributação de MunicípioString (20)
serviceInvoice.cityTaxDescriptionDescrição de Tributação de MunicípioString (255)
serviceInvoice.specialTaxTypeRegime Especial TributárioString
serviceInvoice.issRateAliquota de ISSNumber(double)
serviceInvoice.culturalSupporterIncentivador Cultural.Boolean

Modelo de retorno:


{
  "document": "51236721000136",
  "name": "Razão Social",
  "fantasyName": "Nome Fantasia",
  "cityRegistration": "12345678912345",
  "stateRegistration": "12345678912345",
  "stateTaxSubstituteRegistration": "1234567891",
  "cnae": "62091",
  "optSimpleNational": true,
  "email": "email@google.com",
  "phone": "11912345678",
  "address": {
    "street": "Logradouro",
    "number": "1",
    "neighborhood": "Bairro",
    "cityCode": "3550308",
    "city": "São Paulo",
    "state": "SP",
    "complement": "Casa",
    "zipCode": "08190120"
  },
  "serviceInvoice": {
    "rpsSerial": "1",
    "rpsNumber": 1,
    "code": "1.07",
    "cityTaxCode": "3158",
    "cityTaxDescription": "SUPORTE TÉCNICO, MANUTENÇÃO E OUTROS SERVIÇOS EM TECNOLOGIA DA INFORMAÇÃO",
    "specialTaxType": "MICROEMPRESA_MUNICIPAL",
    "issRate": 1,
    "culturalSupporter": true
  },
  "created": "2025-02-05T19:49:58.175Z",
  "updated": "2025-02-05T19:49:58.175Z",
  "companyId": "663167f4fa5fb59547f01ca3"
}

Note que essa api é síncrona, sendo assim, a Celcoin irá retornar para você o resultado final da solicitação de cadastro da empresa.


Tabela descritiva dos campos retornados


📘

Além dos campos informados na criação, o retorno da requisição enviamos alguns dados adicionais. Segue descrição abaixo

CampoDescriçãoTipo
createdData de Criação.String ($date-time)
updatedData de Atualização.String ($date-time)
companyIdIdentificador da EmpresaString

Consultar Empresa Cadastrada

Para consultar uma empresa cadastrada é necessário realizar uma chamada na api Consultar Empresa Cadastrada utilizando o método GET, onde precisa ser enviado na requisição o Id da empresa cadastrada.

Modelo de request:

curl --location --request GET 'https://sandbox.openfinance.celcoin.dev/company/663167f4fa5fb59547f01ca3' \
--header 'accept: application/json' \
--header 'Authorization: Bearer {{acess_token}}' \
--header 'Content-Type: application/json' \



Modelo de retorno:

{
  "document": "51236721000136",
  "name": "Razão Social",
  "fantasyName": "Nome Fantasia",
  "cityRegistration": "12345678912345",
  "stateRegistration": "12345678912345",
  "stateTaxSubstituteRegistration": "1234567891",
  "cnae": "62091",
  "optSimpleNational": true,
  "email": "email@google.com",
  "phone": "11912345678",
  "address": {
    "street": "Logradouro",
    "number": "1",
    "neighborhood": "Bairro",
    "cityCode": "3550308",
    "city": "São Paulo",
    "state": "SP",
    "complement": "Casa",
    "zipCode": "08190120"
  },
  "certificate": {
    "key": "company-51236721000136",
    "password": "123456789"
  },
  "serviceInvoice": {
    "code": "1.07",
    "cityTaxCode": "3158",
    "cityTaxDescription": "SUPORTE TÉCNICO, MANUTENÇÃO E OUTROS SERVIÇOS EM TECNOLOGIA DA INFORMAÇÃO",
    "specialTaxType": "MICROEMPRESA_MUNICIPAL",
    "issRate": 1,
    "culturalSupporter": true
  },
  "created": "2025-02-05T19:53:49.013Z",
  "updated": "2025-02-05T19:53:49.013Z",
  "companyId": "663167f4fa5fb59547f01ca3"
}

📘

Note que é enviado as informações da empresa cadastrada, inclusive caso já tenha efetuado o cadastro do certificado Digital, ele é informado na consulta de Empresas.

📘

Essa chamada também é síncrona, e na sequência já enviamos as informações sobre a empresa consultada.

Gestão de Certificado

Essa funcionalidade permite realizar o cadastro do certificado digital, item obrigatório para realizar as emissões de Notas Fiscais de Serviço. A seguir iremos explicar o que é e como realizar o cadastro do certificado digital.

Cadastrar um certificado Digital

Após o cadastro da empresa, é necessário realizar o cadastro do certificado digital. Para isso será necessário realizar uma chamada na api Cadastrar Certificado Digital utilizando o método POST, onde na requisição você deve informar o Id da empresa que utilizará o certificado e no corpo da requisição é necessário realizar o upload do arquivo PFX e a senha do mesmo. Com isso a empresa estará apta a realizar a emissão da Nota Fiscal de Serviço. Mais detalhes dos dados necessários estão no quadro "Parâmetros do Body"

Modelo de requisição:

curl --location --request POST 'https://sandbox.openfinance.celcoin.dev/company/{id}/certificate' \
  -H 'accept: */*' \
  -H 'Content-Type: multipart/form-data' \
  -F 'File=' \
  -F 'Password=123456789'

Parâmetros do Body:

CampoDescriçãoTipo
FileArquivo PFX do Certificadostring($binary)
PasswordSenha do Arquivo PFXString

Modelo de retorno:

Após as validações internas a API retornará a requisição como sucesso, informando o código 200.

📘

Note que essa api é síncrona, sendo assim, a Celcoin irá retornar para você o resultado final da solicitação de cadastro do certificado digital.

📘

Os dados do seu certificado estão ficarão em um ambiente seguro e só será utilizado no momento das emissões das suas NFs-e.


Gestão de Notas

Uma vez que a empresa já está cadastrada e os certificados vinculados, já é possível emitir uma nota fiscal de Serviço. Para emissão da NFs-e, será disponibilizado APIs para tal. Essas APIs terão as seguintes funcionalidades: Emissão NFs-e e Cancelamento NFs-e. Abaixo será demonstrado o que é cada funcionalidade e como utilizar.

Emissão da NFs-e

Para realizar a emissão de NFS-e será necessário realizar uma chamada na api Emitir Nota Fiscal de Serviço utilizando o método POST, onde precisa ser preenchido algumas informações relacionadas a NFs-e que será emitida. Todas as informações necessárias para emissão de NFs-e estão no quadro "Parâmetros do Body"

Modelo de requisição:

curl --location --request POST 'https://sandbox.openfinance.celcoin.dev/nfse' \
--header 'accept: application/json' \
--header 'Authorization: Bearer acess_token' \
--header 'Content-Type: application/json' \
--data-raw '{
  "companyId": "6514d4db5f9a3c2e8b1d7f5a",
  "operationType": "TRIBUTACAO_MUNICIPIO",
  "client": {
    "documentType": "CNPJ",
    "document": "51236721000136",
    "name": "Lucas",
    "cityRegistration": "111111111111",
    "stateRegistration": "2222222222",
    "email": "lucas@example.com",
    "phone": "119999999999",
    "address": {
      "street": "Rua Sem",
      "number": "123",
      "neighborhood": "Jardim Sem",
      "cityCode": "1200013",
      "city": "Acrelandia",
      "state": "AC",
      "country": "BR",
      "complement": "Perto do parque",
      "zipCode": "000000000"
    }
  },
  "service": {
    "cnae": "1111111111",
    "code": "8.01",
    "cityTaxCode": "IPTU",
    "cityTaxDescription": "Tarifado",
    "description": "Manutenção de computadores",
    "values": {
      "value": 1000,
      "deductionValue": 0,
      "unconditionalDiscount": 0,
      "conditionalDiscount": 0,
      "retentionValue": 0,
      "pisValue": 0,
      "cofinsValue": 0,
      "inssValue": 0,
      "irValue": 0,
      "csllValue": 0,
      "issRetained": 0,
      "issRate": 0
    },
    "address": {
      "street": "Rua Sem",
      "number": "123",
      "neighborhood": "Jardim Sem",
      "cityCode": "1200013",
      "city": "Acrelandia",
      "state": "AC",
      "complement": "Perto do parque",
      "zipCode": "000000000"
    }
  },
  "competenceDate": "2024-12-25",
  "requestId": "9b37e3f9-c59e-4b47-a93e-41f66e89df88"
}
'

Parâmetros do Body:

CampoDescriçãoTipo
companyIdIdentificador único da empresa.String
operationTypeTipo de Operação. Valores possíveis para informar no campo:
1. TRIBUTACAO_MUNICIPIO - Tributação no Município.
2. TRIBUTACAO_FORA_MUNICIPIO - Tributação fora do Município.
3. ISENTO - Isenção.
4. IMUNE - Imune.
5. EXIGIBILIDADE_SUSPENSA_DECISAO_JUDICIAL - Exigibilidade Suspensa por Decisão Judicial.
6. EXIGIBILIDADE_SUSPENSA_PROC_ADM - Exigibilidade Suspensa por Procedimento Administrativo.
String (10)
client.documentTypeTipo do Documento do cliente que a NFs-e será emitidaString (20)
client.documentCNPJ ou CPF do cliente que a NFs-e será emitidaString (20)
client.nameRazão Social ou Nome do cliente que a NFs-será emitidaString (115)
client.cityRegistrationInscrição Municipal.String
client.stateRegistrationInscrição Estadual.String
client.emailE-mailString (60)
client.phoneTelefoneString
client.address.streetLogradouroString (60)
client.address.numberNúmeroString (10)
client.address.neighborhoodBairroString (60)
client.address.cityCodeCódigo de Município.String
client.address.cityMunicípioString
client.address.stateSigla de EstadoString (2)
client.address.countrySigla de PaísString (2)
client.address.complementComplemento do endereçoString
client.address.zipCodeCEPString
service.cnaeCNAE - Classificação Nacional de Atividades EconômicasString (10)
service.codeCódigo do serviço prestadoString (15)
service.cityTaxCodeCódigo de Tributação de Município.String
service.cityTaxDescriptionDescrição de Tributação de Município.String (255)
service.descriptionDiscriminação do ServiçoString (7000)
service.values.valueValorNumber (double)
service.values.deductionValueValor de deduçãoNumber (double)
service.values.unconditionalDiscountValor de desconto incondicionado.Number (double)
service.values.conditionalDiscountValor de desconto condicionado.Number (double)
service.values.retentionValueValor de outras Retenções.Number (double)
service.values.pisValueValor de PIS.Number (double)
service.values.cofinsValueValor de COFINS.Number (double)
service.values.inssValueValor de INSS.Number (double)
service.values.irValueValor de IR.Number (double)
service.values.csllValueValor de CSLL.Number (double)
service.values.issRetainedIndicador de retenção de ISS.Boolean
service.values.issRateValor da alíquota de ISS.Number (double)
service.address.streetLogradouroString (60)
service.address.numberNúmeroString (10)
service.address.neighborhoodBairroString (60)
service.address.cityCodeCódigo de Município.String (7)
service.address.cityMunicípioString (60)
service.address.stateSigla de EstadoString (2)
service.address.complementComplementoString
service.address.zipCodeCEPString (8)
competenceDateData da competênciaString
requestIdIdentificador único da requisiçãoString

📘

Caso o rpsSerial e rpsNumber não terem sido informados na criação da empresa, ele deve ser enviado no momento da emissão da Nota Fiscal.

📘

Ao solicitar a emissão da NFs-e, o status de aprovação e os dados dela não são retornados na hora. Isso acontece pois cada prefeitura tem um tempo para processar a solicitação. Não se preocupe, com o webhook cadastrado, assim que a Nota Fiscal ter seu status alterado, iremos enviar os dados da NFs-e na URL configurada.

📘

Os dados do retorno síncrono são apenas para validação da NFs-e emitida.

Modelo de retorno:


{
  "serviceInvoiceId": "6761cf89b9fcb2eb27f9d6af",
  "requestId": "d2e5b7c1-9a3f-4a6e-8f7b-1c9d3b2f6a4e",
  "rpsSerial": 1,
  "rpsNumber": 1,
  "operationType": "TRIBUTACAO_MUNICIPIO",
  "client": {
    "documentType": "CNPJ",
    "document": "51236721000136",
    "name": "Razão Social",
    "cityRegistration": "12345678912345",
    "stateRegistration": "12345678912345",
    "email": "email@google.com",
    "phone": "11912345678",
    "address": {
      "street": "Logradouro",
      "number": "1",
      "neighborhood": "Bairro",
      "cityCode": "3550308",
      "city": "São Paulo",
      "state": "SP",
      "country": "BR",
      "complement": "Casa",
      "zipCode": "08190120"
    }
  },
  "service": {
    "cnae": "62091",
    "code": "1.07",
    "cityTaxCode": "3158",
    "cityTaxDescription": "SUPORTE TÉCNICO, MANUTENÇÃO E OUTROS SERVIÇOS EM TECNOLOGIA DA INFORMAÇÃO",
    "description": "Prestação de Serviço",
    "value": 1000,
    "deductionValue": 0,
    "unconditionalDiscount": 0,
    "conditionalDiscount": 0,
    "retentionValue": 0,
    "pisValue": 0,
    "cofinsValue": 0,
    "inssValue": 0,
    "irValue": 0,
    "csllValue": 0,
    "issRetained": true,
    "issRate": 1,
    "baseValue": 1010,
    "issRetainedValue": 10,
    "netValue": 1000,
    "address": {
      "street": "Logradouro",
      "number": "1",
      "neighborhood": "Bairro",
      "cityCode": "3550308",
      "city": "São Paulo",
      "state": "SP",
      "complement": "Casa",
      "zipCode": "08190120"
    }
  },
  "status": "PROCESSING",
  "competenceDate": "2025-02-05T19:57:03.985Z",
  "created": "2025-02-05T19:57:03.985Z"
}


📘

Além dos campos informados na emissão da NFs-e, o retorno da requisição e webhook enviamos dados adicionais. Segue descrição abaixo.

Tabela descritiva dos campos retornados

CampoDescriçãoTipo
serviceInvoiceIdIdentificador da Nota de Serviço.String
rpsSerialSérie RPS de Documento Fiscal.String
rpsNumberNúmero RPS de Documento Fiscal.String
statusStatus da Nota de ServiçoString
competenceDateData de Competência.String (date-time)
createdData de Criação.String (date-time)

Consultar uma NFs-e

Para consultar as suas NFs-e, será necessário realizar uma chamada na api Consultar NFs-e utilizando o método GET, onde na requisição é necessário informar o Identificador da Nota de Serviço.

Modelo de requisição:

curl --location --request GET 'https://sandbox.openfinance.celcoin.dev/nfse/{id}' \
  -H 'accept: text/plain'

Modelo de retorno:


{
  "requestId": "d2e5b7c1-9a3f-4a6e-8f7b-1c9d3b2f6a4e",
  "rpsSerial": 1,
  "rpsNumber": 1,
  "operationType": "TRIBUTACAO_MUNICIPIO",
  "client": {
    "documentType": "CNPJ",
    "document": "51236721000136",
    "name": "Razão Social",
    "cityRegistration": "12345678912345",
    "stateRegistration": "12345678912345",
    "email": "email@google.com",
    "phone": "11912345678",
    "address": {
      "street": "Logradouro",
      "number": "1",
      "neighborhood": "Bairro",
      "cityCode": "3550308",
      "city": "São Paulo",
      "state": "SP",
      "country": "BR",
      "complement": "Casa",
      "zipCode": "08190120"
    }
  },
  "service": {
    "cnae": "62091",
    "code": "1.07",
    "cityTaxCode": "3158",
    "cityTaxDescription": "SUPORTE TÉCNICO, MANUTENÇÃO E OUTROS SERVIÇOS EM TECNOLOGIA DA INFORMAÇÃO",
    "description": "Prestação de Serviço",
    "value": 1000,
    "deductionValue": 0,
    "unconditionalDiscount": 0,
    "conditionalDiscount": 0,
    "retentionValue": 0,
    "pisValue": 0,
    "cofinsValue": 0,
    "inssValue": 0,
    "irValue": 0,
    "csllValue": 0,
    "issRetained": true,
    "issRate": 1,
    "baseValue": 1010,
    "issRetainedValue": 10,
    "netValue": 1000,
    "address": {
      "street": "Logradouro",
      "number": "1",
      "neighborhood": "Bairro",
      "cityCode": "3550308",
      "city": "São Paulo",
      "state": "SP",
      "complement": "Casa",
      "zipCode": "08190120"
    }
  },
  "status": "PROCESSING",
  "number": 0,
  "verificationCode": "0",
  "controlNumber": "20231207000000000099",
  "protocol": "AAAAA6984986",
  "accessKey": "eyjhasgdi5646asdas",
  "linkPdf": "https://blobstorage/pdf",
  "linkXml": ">https://blobstorage/xml",
  "responseCode": "100",
  "responseDescription": "Efetivado",
  "competenceDate": "2025-02-05T20:01:04.439Z",
  "created": "2025-02-05T20:01:04.439Z",
  "updated": "2025-02-05T20:01:04.439Z",
  "serviceInvoiceId": "663167f4fa5fb59547f01ca3"
}

📘

Note que é enviado os dados da NFs-e emitida, além dos campos já preenchidos anteriormente, disponibilizamos o pfd e o xml da nota.

Tabela descritiva dos campos retornados

CampoDescriçãoTipo
statusStatus da Nota de ServiçoString
numberNúmero de Documento Fiscalinteger (int64)
verificationCodeCódigo de VerificaçãoString
controlNumberNúmero de ControleString
protocolProtocolo de AutorizaçãoString
accessKeyChave de AcessoString
linkPdfLink do documento PDFString
linkXmlLink do documento XMLString
responseCodeCódigo de RespostaString
responseDescriptionDescrição de RespostaString
competenceDateData de CompetênciaString (date-time)
createdData de CriaçãoString (date-time)
updatedData de AtualizaçãoString (date-time)
serviceInvoiceIdIdentificador da Nota de ServiçoString

Cancelar uma NFs-e

Para cancelar uma nota fiscal emitida, será necessário realizar uma chamada na api Cancelar NFs-e utilizando o método POST, onde precisa ser preenchido algumas informações relacionadas a NFs-e emitida. Todas as informações necessárias para cancelar uma NFs-e estão no quadro "Parâmetros do Body"

Modelo de requisição:

curl --location --request POST 'https://sandbox.openfinance.celcoin.dev/nfse/cancel' \
--header 'accept: application/json' \
--header 'Authorization: Bearer acess_token' \
--header 'Content-Type: application/json' \
--data-raw '{
  "requestId": "9b37e3f9-c59e-4b47-a93e-41f66e89df88",
  "companyId": "6514d4db5f9a3c2e8b1d7f5a",
  "serviceInvoiceId": "6514d4db5f9a3c2e8b1d7f5a"
}
'

Parâmetros do Body:

CampoDescriçãoTipo
requestIdIdentificador único da requisição.String
companyIdIdentificador único da empresa.String
serviceInvoiceIdIdentificador único da nota fiscal.String

Modelo de retorno:


{
  "id": "663167f4fa5fb59547f01ca3",
  "serviceInvoiceId": "663167f4fa5fb59547f01ca3",
  "requestId": "d2e5b7c1-9a3f-4a6e-8f7b-1c9d3b2f6a4e",
  "status": "PROCESSING",
  "created": "2025-02-05T20:01:35.823Z"
}

📘

Ao cancelar a emissão da NFs-e, ela não é cancelada na hora. Isso acontece pois cada prefeitura tem um tempo para processar a solicitação. Não se preocupe, com o webhook cadastrado, assim que a Nota Fiscal ter seu status alterado, iremos enviar os dados da NFs-e na URL configurada..

Tabela descritiva dos campos retornados

CampoDescriçãoTipo
idIdentificador do Cancelamento.String
serviceInvoiceIdIdentificador de Nota Fiscal de Serviço.String
requestIdIdentificador de Requisição.String
statusTipo de Status.String
createdData de Criação.String (date-time)

Tabela de Erros

Os principais erros de negócio mapeados nas APIs acima estão disponíveis nesse link

Homologação

As instruções para realizar a homologação deste produto estão centralizadas neste link