Pular para o conteúdo

A IntegroBR agora é Almztech: mesma emissão de NFS-e, com novas formas de emitir e planos por franquia. Ver as novidades

Demonstração

O JSON que emite uma NFS-e.

Só os dados que mudam a cada nota. Emitente, certificado e configurações recorrentes ficam no portal e não viajam na requisição.

POST /NFSe/Emitir
{
  "identificacaoEmitente": "60670420000107",
  "enviarParaProducao": false,
  "notas": [{
    "rps": {
      "numeroRPS": "99",
      "serie": "1",
      "dataEmissao": "2026-11-01"
    },
    "destinatario": {
      "cpfCnpj": "11222333000181",
      "razaoSocial": "TESTES ALMZTECH",
      "endereco": { "codigoIBGEMunicipio": 2611606 }
    },
    "servicos": [{
      "codigo": "01.01",
      "descricao": "SERVICO TESTE",
      "quantidade": 1,
      "valorUnitario": 100
    }],
    "condicoesPagamentos": [{
      "condicao": "Parcelado em 2x",
      "pagamentos": [
        { "parcela": 1, "valor": 50 },
        { "parcela": 2, "valor": 50 }
      ]
    }]
  }]
}
200 OK — protocolo em fila. O resultado chega pelo webhook ou na consulta do protocolo.

O que cada bloco carrega

Campos do JSON de emissão
Bloco Conteúdo
identificacaoEmitente CNPJ de quem emite. O resto do cadastro já está no portal.
enviarParaProducao Homologação ou produção, a cada envio. Homologação não consome a franquia do plano.
rps Número, série e data de emissão da nota. Com a numeração automática ligada no emitente, o número é opcional.
destinatario Dados do tomador do serviço, com o código IBGE do município.
servicos Código do serviço, descrição, quantidade e valor unitário.
condicoesPagamentos Opcional: condição e parcelas acordadas com o tomador.

SDKs

O mesmo JSON, na linguagem do seu sistema.

SDKs oficiais em seis linguagens, com o mesmo contrato: emissão com acompanhamento do protocolo, consultas, cancelamento, XML e PDF, emitentes, webhooks e erros tipados. Nenhum tem dependência de runtime — só o HTTP e o JSON da própria plataforma.

Plataformas atendidas pelos SDKs
Linguagem Requisito Pacote Versão Registro Código-fonte
.NET .NET 8+ Almztech.Sdk 0.2.0-beta.2 NuGet GitHub
Node.js Node 18+ · TypeScript @almztech/sdk 0.2.0-beta.1 npm GitHub
Python Python 3.9+ almztech-sdk 0.2.0b1 PyPI GitHub
PHP PHP 8.1+ almztech/sdk 0.2.0-beta.1 Packagist GitHub
Java Java 11+ br.com.almztech:almztech-sdk 0.2.0-beta.1 Maven Central GitHub
Ruby Ruby 3.0+ almztech-sdk 0.2.0.beta.1 RubyGems GitHub

Todos estão em beta: a interface pública dos SDKs ainda pode mudar até a versão 1.0. O código é aberto, com licença MIT.

Linguagem do exemplo
Instalação · NuGet · 0.2.0-beta.2
dotnet add package Almztech.Sdk --prerelease
Emitir e acompanhar · .NET
using Almztech.Sdk;
using Almztech.Sdk.Models;

using var client = new AlmztechClient(apiKey);

var protocolo = await client.NotasFiscais.EmitirAsync(new RecepcaoLote
{
    IdentificacaoEmitente = "60670420000107",
    EnviarParaProducao = false, // homologação
    Notas =
    [
        new NotaFiscalResumida
        {
            Rps = new IdentificacaoDaNota { NumeroRPS = "99", Serie = "1" },
            Destinatario = new Destinatario
            {
                CpfCnpj = "11222333000181",
                RazaoSocial = "TESTES ALMZTECH",
                Endereco = new Endereco { CodigoIBGEMunicipio = 2611606 },
            },
            Servicos = [new Servico { Codigo = "01.01", Descricao = "SERVICO TESTE", ValorUnitario = 100m }],
        },
    ],
});

// Espera a prefeitura (ou receba o resultado pelo webhook).
var resultado = await client.NotasFiscais.AguardarConclusaoAsync(protocolo.Protocolo);
var pdf = await client.NotasFiscais.BaixarPdfAsync(resultado.Notas![0].CodigoNota);
Só as leituras são repetidas sozinhas em falha de rede. A emissão nunca é reenviada pelo SDK, para não duplicar a nota.
Instalação · npm · 0.2.0-beta.1
npm install @almztech/sdk@beta
Emitir e acompanhar · Node.js
import { AlmztechClient } from "@almztech/sdk";

const client = new AlmztechClient(process.env.ALMZTECH_API_KEY);

const protocolo = await client.notasFiscais.emitir({
  identificacaoEmitente: "60670420000107",
  enviarParaProducao: false, // homologação
  notas: [{
    rps: { numeroRPS: "99", serie: "1" },
    destinatario: {
      cpfCnpj: "11222333000181",
      razaoSocial: "TESTES ALMZTECH",
      endereco: { codigoIBGEMunicipio: 2611606 },
    },
    servicos: [{ codigo: "01.01", descricao: "SERVICO TESTE", quantidade: 1, valorUnitario: 100 }],
  }],
});

// Espera a prefeitura (ou receba o resultado pelo webhook).
const resultado = await client.notasFiscais.aguardarConclusao(protocolo.protocolo);
const pdf = await client.notasFiscais.baixarPdf(resultado.notas[0].codigoNota);
Só as leituras são repetidas sozinhas em falha de rede. A emissão nunca é reenviada pelo SDK, para não duplicar a nota.
Instalação · PyPI · 0.2.0b1
pip install --pre almztech-sdk
Emitir e acompanhar · Python
import os
from almztech import AlmztechClient

client = AlmztechClient(os.environ["ALMZTECH_API_KEY"])

protocolo = client.notas_fiscais.emitir({
    "identificacaoEmitente": "60670420000107",
    "enviarParaProducao": False,  # homologação
    "notas": [{
        "rps": {"numeroRPS": "99", "serie": "1"},
        "destinatario": {
            "cpfCnpj": "11222333000181",
            "razaoSocial": "TESTES ALMZTECH",
            "endereco": {"codigoIBGEMunicipio": 2611606},
        },
        "servicos": [{"codigo": "01.01", "descricao": "SERVICO TESTE", "quantidade": 1, "valorUnitario": 100}],
    }],
})

# Espera a prefeitura (ou receba o resultado pelo webhook).
resultado = client.notas_fiscais.aguardar_conclusao(protocolo["protocolo"])
pdf = client.notas_fiscais.baixar_pdf(resultado["notas"][0]["codigoNota"])
Só as leituras são repetidas sozinhas em falha de rede. A emissão nunca é reenviada pelo SDK, para não duplicar a nota.
Instalação · Packagist · 0.2.0-beta.1
composer require almztech/sdk:^0.2@beta
Emitir e acompanhar · PHP
use Almztech\Sdk\AlmztechClient;

$client = new AlmztechClient(getenv('ALMZTECH_API_KEY'));

$protocolo = $client->notasFiscais->emitir([
    'identificacaoEmitente' => '60670420000107',
    'enviarParaProducao' => false, // homologação
    'notas' => [[
        'rps' => ['numeroRPS' => '99', 'serie' => '1'],
        'destinatario' => [
            'cpfCnpj' => '11222333000181',
            'razaoSocial' => 'TESTES ALMZTECH',
            'endereco' => ['codigoIBGEMunicipio' => 2611606],
        ],
        'servicos' => [['codigo' => '01.01', 'descricao' => 'SERVICO TESTE', 'quantidade' => 1, 'valorUnitario' => 100.0]],
    ]],
]);

// Espera a prefeitura (ou receba o resultado pelo webhook).
$resultado = $client->notasFiscais->aguardarConclusao($protocolo['protocolo']);
$pdf = $client->notasFiscais->baixarPdf($resultado['notas'][0]['codigoNota']);
Só as leituras são repetidas sozinhas em falha de rede. A emissão nunca é reenviada pelo SDK, para não duplicar a nota.
Instalação · Maven Central · 0.2.0-beta.1
<dependency>
  <groupId>br.com.almztech</groupId>
  <artifactId>almztech-sdk</artifactId>
  <version>0.2.0-beta.1</version>
</dependency>
Emitir e acompanhar · Java
AlmztechClient client = new AlmztechClient(System.getenv("ALMZTECH_API_KEY"));

Servico servico = new Servico();
servico.codigo = "01.01";
servico.descricao = "SERVICO TESTE";
servico.valorUnitario = new BigDecimal("100.00");

NotaFiscalResumida nota = new NotaFiscalResumida();
nota.rps = new IdentificacaoDaNota();
nota.rps.numeroRPS = "99";
nota.rps.serie = "1";
nota.destinatario = new Destinatario();
nota.destinatario.cpfCnpj = "11222333000181";
nota.destinatario.razaoSocial = "TESTES ALMZTECH";
nota.destinatario.endereco = new Endereco();
nota.destinatario.endereco.codigoIBGEMunicipio = 2611606;
nota.servicos = List.of(servico);

RecepcaoLote lote = new RecepcaoLote();
lote.identificacaoEmitente = "60670420000107";
lote.enviarParaProducao = false; // homologação
lote.notas = List.of(nota);

ProtocoloResponse protocolo = client.notasFiscais().emitir(lote);

// Espera a prefeitura (ou receba o resultado pelo webhook).
ProtocoloResponse resultado = client.notasFiscais().aguardarConclusao(protocolo.protocolo);
byte[] pdf = client.notasFiscais().baixarPdf(resultado.notas.get(0).codigoNota);
Só as leituras são repetidas sozinhas em falha de rede. A emissão nunca é reenviada pelo SDK, para não duplicar a nota.
Instalação · RubyGems · 0.2.0.beta.1
gem install almztech-sdk --pre
Emitir e acompanhar · Ruby
require "almztech"

client = Almztech::Client.new(ENV.fetch("ALMZTECH_API_KEY"))

protocolo = client.notas_fiscais.emitir(
  identificacaoEmitente: "60670420000107",
  enviarParaProducao: false, # homologação
  notas: [{
    rps: { numeroRPS: "99", serie: "1" },
    destinatario: {
      cpfCnpj: "11222333000181",
      razaoSocial: "TESTES ALMZTECH",
      endereco: { codigoIBGEMunicipio: 2_611_606 }
    },
    servicos: [{ codigo: "01.01", descricao: "SERVICO TESTE", quantidade: 1, valorUnitario: 100.0 }]
  }]
)

# Espera a prefeitura (ou receba o resultado pelo webhook).
resultado = client.notas_fiscais.aguardar_conclusao(protocolo["protocolo"])
pdf = client.notas_fiscais.baixar_pdf(resultado["notas"][0]["codigoNota"])
Só as leituras são repetidas sozinhas em falha de rede. A emissão nunca é reenviada pelo SDK, para não duplicar a nota.