Skip to Content
API Reference (English)Deprecated Endpoints

Deprecated Endpoints

Since 2026-09-04 the TF Fiscal Open API exposes only the echo endpoint plus ten standard endpoints (see Retained endpoints). This page lists the nine endpoints retired on that date, what they return now, their replacements, and the request / response shape differences.

ItemValue
Effective date2026-09-04
Response after retirementHTTP 410 Gone, platform envelope {"success":false,"errorType":1,"code":10009034,"message":"This API has been retired, please use <replacement> instead"}
Grace periodNone (no production customer used these endpoints; no phased rollout)

What happens after retirement

  • Requests still go through the three-header signature check (token / timestamp / sign): a failed signature still returns 401. Only a correctly signed request receives 410 with the replacement hint, so unauthenticated probes learn nothing about the catalogue.
  • The 410 is produced before the scope (subscription) check: a retired path is not in any application’s subscriptions, and a 403 “not subscribed” would leave you guessing whether to subscribe or to change the path.
  • A 410 consumes no rate-limit token and belongs to no rate-limit group.
  • The scopes of the retired endpoints have been removed from every application’s subscription.

message follows Language / Accept-Language (zh / en / pt / es); without a language header it defaults to Portuguese. Example (Portuguese):

{ "success": false, "errorType": 1, "code": 10009034, "message": "Esta API foi descontinuada, utilize POST /openapi/v2/empresas/{empresaid}/nf-e" }

Retired endpoints

#MethodRetired pathNow returnsReplacementReference
1POST/openapi/nfe/invoice/create410 / 10009034POST /openapi/v2/empresas/{empresaId}/nf-eIssuance API — NF-e issuance
2POST/openapi/nfe/invoice/query410 / 10009034GET /openapi/v2/empresas/{empresaId}/nf-e/{nfeId}Issuance API — NF-e query
3POST/openapi/nfe/invoice/cancel410 / 10009034DELETE /openapi/v2/empresas/{empresaId}/nf-e/{nfeId}Issuance API — NF-e cancellation
4POST/openapi/nfe/invoice/status410 / 10009034GET /openapi/v2/empresas/{empresaId}/nf-e/{nfeId}Issuance API — NF-e query
5POST/openapi/nfe/invoice/danfe410 / 10009034GET /openapi/v2/empresas/{empresaId}/nf-e/{nfeId} (response field linkDanfe)Issuance API — NF-e query
6POST/openapi/nfe/verify/xml410 / 10009034POST /openapi/v3/consultas/nf-e/xmlVerification API — XML verification
7POST/openapi/nfe/verify/chave410 / 10009034GET /openapi/v3/consultas/nf-e/{chave}Verification API — Chave lookup
8GET/openapi/cadastro/cnpj/{cnpj}410 / 10009034GET /openapi/v3/consultas/cnpj/{cnpj}Identity API — CNPJ lookup
9GET/openapi/cadastro/cpf/{cpf}/{nascimento}410 / 10009034GET /openapi/v3/consultas/cpf/{cpf}/{nascimento}Identity API — CPF lookup

Request / response shape differences

Issuance family (#1 – #5)

These five endpoints were never implemented (every call returned the 10009011 “not implemented” placeholder), so there is no live traffic to migrate. The differences are purely contractual:

AspectRetired (contract stub)Standard endpoint
Issuer identificationbody cnpjpath variable {empresaId} (returned by company registration)
Environmentbody environment (1 production / 2 homologation)body ambienteEmissao (Producao / Homologacao)
Idempotency keybody externalOrderIdbody id (generated by the integrator, unique per company)
Query keybody chave or externalOrderIdpath variable {nfeId} = the id sent at issuance
Task statusseparate status endpoint (taskId)status field of the query response (AguardandoAutorizacao / Autorizada / Negada / Cancelada)
DANFEseparate danfe endpoint (chave)linkDanfe in the query response (10-minute token, Autorizada only)
Cancellationbody chave + reasonDELETE with path variable {nfeId}, 200 with empty body on success
Success responseplatform envelope {success, errorType, code, message, data}bare response (issuance: 200 no content; query: the invoice object itself)
Business errorsenvelope with success=falseHTTP 400 / 404 + error array [{codigo, mensagem}]
Auth errorsplatform envelopeplatform envelope (unchanged, produced by the gateway)

Invoice verification (#6, #7)

AspectRetiredStandard endpoint
XML submissionPOST /openapi/nfe/verify/xml, raw XMLPOST /openapi/v3/consultas/nf-e/xml, raw XML (same Content-Type, 1 MB limit and DTD ban)
chave lookupPOST with body {"chave":"...","forceRevalidate":false}GET /openapi/v3/consultas/nf-e/{chave}, chave in the path; no re-validation channel (to force re-validation resubmit through the XML endpoint with header forceRevalidate: true)
GET signaturethe body signed is the empty string; path includes the chave
Success responseplatform envelope, payload in databare response: the former data object itself, field names unchanged
Validation rejectedenvelope success=true, verdict in data.validation.validationStatus=REJECTEDbare response, verdict in validation.validationStatus=REJECTED (still HTTP 200)
Request-level errors (empty body / too large / DTD / encoding)HTTP 400 + platform envelopeHTTP 400 + {code, message}
Business errors (e.g. 10015004 not found)HTTP 200 + envelope success=falseHTTP 4xx + {code, message}
System errorsHTTP 500 + envelope errorType=3HTTP 500 + {code, message}

Identity verification (#8, #9)

AspectRetiredStandard endpoint
Path/openapi/cadastro/cnpj/{cnpj}, /openapi/cadastro/cpf/{cpf}/{nascimento}/openapi/v3/consultas/cnpj/{cnpj}, /openapi/v3/consultas/cpf/{cpf}/{nascimento}
Path variablessamesame (CNPJ 14 digits, CPF 11 digits, birth date DDMMYYYY)
Responsebare objectbare object, field names unchanged
Errors4xx + {code, message}same

Only the path prefix changes; the path used in the signature changes with it, nothing else in the integration code needs to change.

Migration checklist

  1. Replace both the request URL and the path used in the signature with the replacement path (path keeps the /openapi prefix, no host, no query string).
  2. Verification and issuance family: rewrite response parsing for bare responses — stop reading from data; detect errors by HTTP status plus {code, message} / [{codigo, mensagem}]. Gateway (auth) errors remain in the platform envelope.
  3. chave lookup becomes GET: sign the empty string as body; forceRevalidate is no longer available there.
  4. Application subscriptions (scopes) were migrated by the platform; nothing to do on your side. If the console shows an application with no subscription at all, it only subscribed to retired endpoints — ask the platform to subscribe it to the standard ones.
  5. On 410, fix the path according to the replacement named in message; do not retry.

Retained endpoints

#MethodPathScope (subscription key)Description
1POST/openapi/demo/echo/openapi/demo/echoEcho (signature check)
2POST/openapi/v2/empresas/openapi/v2/empresasCompany registration
3POST/openapi/v1/empresas/{empresaId}/certificadoDigital/openapi/v1/empresas/{empresaid}/certificadodigitalDigital certificate association
4POST/openapi/v1/webhooks/openapi/v1/webhooksWebhook registration
5POST/openapi/v2/empresas/{empresaId}/nf-e/openapi/v2/empresas/{empresaid}/nf-eNF-e issuance
6GET/openapi/v2/empresas/{empresaId}/nf-e/{nfeId}/openapi/v2/empresas/{empresaid}/nf-e/{nfeid}NF-e query (includes DANFE / XML download links)
7DELETE/openapi/v2/empresas/{empresaId}/nf-e/{nfeId}/openapi/v2/empresas/{empresaid}/nf-e/{nfeid}NF-e cancellation (shares the scope with query)
8POST/openapi/v3/consultas/nf-e/xml/openapi/v3/consultas/nf-e/xmlNF-e XML verification
9GET/openapi/v3/consultas/nf-e/{chave}/openapi/v3/consultas/nf-e/{chave}NF-e chave lookup
10GET/openapi/v3/consultas/cnpj/{cnpj}/openapi/v3/consultas/cnpj/{cnpj}CNPJ registry lookup
11GET/openapi/v3/consultas/cpf/{cpf}/{nascimento}/openapi/v3/consultas/cpf/{cpf}/{nascimento}CPF registry lookup

The scope key is the lower-cased path (a {xx} segment matches any single non-empty segment).

Last updated on