curl --request GET \
--url https://api.accounting.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/tax-documentimport requests
url = "https://api.accounting.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/tax-document"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.accounting.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/tax-document', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.accounting.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/tax-document",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.accounting.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/tax-document"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.accounting.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/tax-document")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.accounting.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/tax-document")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"items": [
{
"id": "3d6f9a2b-1c4e-4f8a-9b7d-5e2c1a0f8b63",
"realm": "f495ff0c-ab54-4f99-8e92-ca8682e4de9b",
"organization": "c4bd3f21-dfbd-44e8-8055-68ba15bed410",
"taxIssuer": "9b2f4c1e-7a3d-4e8b-b6f0-2d5c8a1e3f47",
"environment": "LIVE",
"rpsNumber": 1042,
"rpsSeries": "1",
"nfseNumber": 2874,
"type": "NFSE",
"competenceDate": "2026-10-01T00:00:00.000Z",
"customer": {
"type": "COMPANY",
"name": "Acme Tecnologia Ltda",
"email": "financeiro@acme.com.br",
"federalDocument": "12345678000195",
"municipalDocument": "123456",
"stateDocument": "123456789",
"phone": "+5534991234567",
"addressStateCode": 31,
"addressCityCode": 3170206,
"addressState": "MG",
"addressCity": "Uberlândia",
"addressStreet": "Avenida João Naves de Ávila",
"addressNumber": "2121",
"addressComplement": "Sala 101",
"addressNeighbourhood": "Santa Mônica",
"addressPostalCode": "38408100"
},
"service": {
"serviceProvisionState": "MG",
"serviceProvisionCity": "Uberlândia",
"description": "Licenciamento de software (SaaS)",
"issRate": 2,
"issWithheldAtSource": false,
"serviceMunicipalCode": "0107",
"serviceMunicipalDescription": "Licenciamento ou cessão de direito de uso de programas de computação.",
"serviceListItemLC116": "1.05",
"cnae": "6201501",
"cofinsAmount": 0,
"csllAmount": 0,
"inssAmount": 0,
"irAmount": 0,
"pisAmount": 0,
"taxConfiguration": {
"nbsCode": "115090000",
"nationalTaxCode": "010701",
"taxClassification": "000001",
"operationIndicatorCode": "100301"
}
},
"deductions": 0,
"discounts": 0,
"totalValue": 1500.5,
"status": "AUTHORIZED",
"errorMessage": "",
"operationNature": "Prestação de Serviços",
"observation": "Referente ao contrato 1234",
"issuedAt": "2026-10-01T13:45:12.000Z",
"issuedBy": "e3553bc1-5e20-4e17-b22a-a796fda0aa99",
"externalId": "6f1b7c52-8a4e-4d3f-9c21-b0e5a7d84c19"
}
],
"next": "68a7c1f2a3b4c5d6e7f80912"
}{
"traceId": "1-68ee2a1b-3c4d5e6f7a8b9c0d1e2f3a4b",
"code": "TAX_ISSUER_NOT_FOUND",
"origin": "ACCOUNTING",
"message": "Tax issuer not found"
}{
"traceId": "1-68ee2a1b-3c4d5e6f7a8b9c0d1e2f3a4b",
"code": "BAD_REQUEST",
"origin": "ACCOUNTING",
"message": "Bad Request: Your request is invalid or incomplete. Please make sure you are requesting with the right fields.",
"fields": [
{
"field": "environment",
"message": "Invalid option: expected one of \"LIVE\"|\"TEST\"",
"code": "ENVIRONMENT_ONE_OF"
}
]
}List tax documents
Lists the tax documents (NFSe) of your organization, newest first.
curl --request GET \
--url https://api.accounting.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/tax-documentimport requests
url = "https://api.accounting.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/tax-document"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.accounting.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/tax-document', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.accounting.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/tax-document",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.accounting.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/tax-document"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.accounting.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/tax-document")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.accounting.v2.portao3.com.br/realms/{realmId}/organizations/{organizationId}/tax-document")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"items": [
{
"id": "3d6f9a2b-1c4e-4f8a-9b7d-5e2c1a0f8b63",
"realm": "f495ff0c-ab54-4f99-8e92-ca8682e4de9b",
"organization": "c4bd3f21-dfbd-44e8-8055-68ba15bed410",
"taxIssuer": "9b2f4c1e-7a3d-4e8b-b6f0-2d5c8a1e3f47",
"environment": "LIVE",
"rpsNumber": 1042,
"rpsSeries": "1",
"nfseNumber": 2874,
"type": "NFSE",
"competenceDate": "2026-10-01T00:00:00.000Z",
"customer": {
"type": "COMPANY",
"name": "Acme Tecnologia Ltda",
"email": "financeiro@acme.com.br",
"federalDocument": "12345678000195",
"municipalDocument": "123456",
"stateDocument": "123456789",
"phone": "+5534991234567",
"addressStateCode": 31,
"addressCityCode": 3170206,
"addressState": "MG",
"addressCity": "Uberlândia",
"addressStreet": "Avenida João Naves de Ávila",
"addressNumber": "2121",
"addressComplement": "Sala 101",
"addressNeighbourhood": "Santa Mônica",
"addressPostalCode": "38408100"
},
"service": {
"serviceProvisionState": "MG",
"serviceProvisionCity": "Uberlândia",
"description": "Licenciamento de software (SaaS)",
"issRate": 2,
"issWithheldAtSource": false,
"serviceMunicipalCode": "0107",
"serviceMunicipalDescription": "Licenciamento ou cessão de direito de uso de programas de computação.",
"serviceListItemLC116": "1.05",
"cnae": "6201501",
"cofinsAmount": 0,
"csllAmount": 0,
"inssAmount": 0,
"irAmount": 0,
"pisAmount": 0,
"taxConfiguration": {
"nbsCode": "115090000",
"nationalTaxCode": "010701",
"taxClassification": "000001",
"operationIndicatorCode": "100301"
}
},
"deductions": 0,
"discounts": 0,
"totalValue": 1500.5,
"status": "AUTHORIZED",
"errorMessage": "",
"operationNature": "Prestação de Serviços",
"observation": "Referente ao contrato 1234",
"issuedAt": "2026-10-01T13:45:12.000Z",
"issuedBy": "e3553bc1-5e20-4e17-b22a-a796fda0aa99",
"externalId": "6f1b7c52-8a4e-4d3f-9c21-b0e5a7d84c19"
}
],
"next": "68a7c1f2a3b4c5d6e7f80912"
}{
"traceId": "1-68ee2a1b-3c4d5e6f7a8b9c0d1e2f3a4b",
"code": "TAX_ISSUER_NOT_FOUND",
"origin": "ACCOUNTING",
"message": "Tax issuer not found"
}{
"traceId": "1-68ee2a1b-3c4d5e6f7a8b9c0d1e2f3a4b",
"code": "BAD_REQUEST",
"origin": "ACCOUNTING",
"message": "Bad Request: Your request is invalid or incomplete. Please make sure you are requesting with the right fields.",
"fields": [
{
"field": "environment",
"message": "Invalid option: expected one of \"LIVE\"|\"TEST\"",
"code": "ENVIRONMENT_ONE_OF"
}
]
}WAITINGFORAUTHORIZATION and moves on its own to AUTHORIZED or DENIED. Each item carries the externalId you sent when you issued it, so you can match it to your own record. Amounts are in reais.
Every filter is optional, and the filters you send combine: a document must match all of them. Send status and type as a comma-separated list (status=AUTHORIZED,DENIED) or by repeating the parameter. customerName matches any part of the customer’s name, ignoring case, while customerDocument must match the whole CPF or CNPJ as it was written at issuance (your value is also tried without punctuation). Without environment, real (LIVE) and homologation (TEST) documents are listed together.
Dates compare full timestamps in UTC, so a date without a time (2026-10-31) means 00:00 UTC. To include the whole last day of a range, send the end bound as 2026-10-31T23:59:59.999Z.
Results are paginated, newest first, 50 per page unless you send limit (1 to 100). See Pagination.Path Parameters
ID of your realm.
Format: UUID
ID of the organization whose tax documents you want to list.
Format: UUID
Query Parameters
Only documents in one of these statuses. Send several as a comma-separated list or by repeating the parameter. Matched case-insensitively.
Example (comma-separated list): ?status=AUTHORIZED,DENIED
WAITINGFORAUTHORIZATION, REQUESTINGAUTHORIZATION, AUTHORIZATIONREQUESTED, AUTHORIZATIONPROCESS, AWAITINGFILEGENERATION, AUTHORIZED, DENIED, REQUESTINGCANCELLATION, CANCELLATIONREQUESTED, CANCELLATIONPROCESS, AWAITINGFILECANCELATION, CANCELED, CANCELLATIONDENIED Only documents of one of these types. Send several as a comma-separated list or by repeating the parameter. Matched case-insensitively.
Example: ?type=NFSE
NFSE LIVE for real documents, TEST for homologation documents (no fiscal value). Omit to list both.
LIVE, TEST Only documents issued on or after this moment. A date without a time (2026-10-01) means 00:00 UTC.
Only documents issued on or before this moment. Must not be before issuedAtStart. To include a whole day, send T23:59:59.999Z of that day.
Only documents whose competence date is on or after this moment. A date without a time means 00:00 UTC.
Only documents whose competence date is on or before this moment. Must not be before competenceDateStart. To include a whole day, send T23:59:59.999Z of that day.
Only documents whose RPS number is greater than or equal to this one.
Only documents whose RPS number is less than or equal to this one. Must not be less than rpsNumberStart.
Only documents whose customer name contains this text (case-insensitive).
200Only documents of the customer with this CPF or CNPJ. An exact match, not a partial one, against the document as it was written when the tax document was issued: your value is tried as you send it and also with its punctuation removed.
20Cursor returned as next by the previous page. Omit for the first page; a value you did not get from the API is rejected.
Page size.
1 <= x <= 100Response
Successful response