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.
| Item | Value |
|---|---|
| Effective date | 2026-09-04 |
| Response after retirement | HTTP 410 Gone, platform envelope {"success":false,"errorType":1,"code":10009034,"message":"This API has been retired, please use <replacement> instead"} |
| Grace period | None (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
| # | Method | Retired path | Now returns | Replacement | Reference |
|---|---|---|---|---|---|
| 1 | POST | /openapi/nfe/invoice/create | 410 / 10009034 | POST /openapi/v2/empresas/{empresaId}/nf-e | Issuance API — NF-e issuance |
| 2 | POST | /openapi/nfe/invoice/query | 410 / 10009034 | GET /openapi/v2/empresas/{empresaId}/nf-e/{nfeId} | Issuance API — NF-e query |
| 3 | POST | /openapi/nfe/invoice/cancel | 410 / 10009034 | DELETE /openapi/v2/empresas/{empresaId}/nf-e/{nfeId} | Issuance API — NF-e cancellation |
| 4 | POST | /openapi/nfe/invoice/status | 410 / 10009034 | GET /openapi/v2/empresas/{empresaId}/nf-e/{nfeId} | Issuance API — NF-e query |
| 5 | POST | /openapi/nfe/invoice/danfe | 410 / 10009034 | GET /openapi/v2/empresas/{empresaId}/nf-e/{nfeId} (response field linkDanfe) | Issuance API — NF-e query |
| 6 | POST | /openapi/nfe/verify/xml | 410 / 10009034 | POST /openapi/v3/consultas/nf-e/xml | Verification API — XML verification |
| 7 | POST | /openapi/nfe/verify/chave | 410 / 10009034 | GET /openapi/v3/consultas/nf-e/{chave} | Verification API — Chave lookup |
| 8 | GET | /openapi/cadastro/cnpj/{cnpj} | 410 / 10009034 | GET /openapi/v3/consultas/cnpj/{cnpj} | Identity API — CNPJ lookup |
| 9 | GET | /openapi/cadastro/cpf/{cpf}/{nascimento} | 410 / 10009034 | GET /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:
| Aspect | Retired (contract stub) | Standard endpoint |
|---|---|---|
| Issuer identification | body cnpj | path variable {empresaId} (returned by company registration) |
| Environment | body environment (1 production / 2 homologation) | body ambienteEmissao (Producao / Homologacao) |
| Idempotency key | body externalOrderId | body id (generated by the integrator, unique per company) |
| Query key | body chave or externalOrderId | path variable {nfeId} = the id sent at issuance |
| Task status | separate status endpoint (taskId) | status field of the query response (AguardandoAutorizacao / Autorizada / Negada / Cancelada) |
| DANFE | separate danfe endpoint (chave) | linkDanfe in the query response (10-minute token, Autorizada only) |
| Cancellation | body chave + reason | DELETE with path variable {nfeId}, 200 with empty body on success |
| Success response | platform envelope {success, errorType, code, message, data} | bare response (issuance: 200 no content; query: the invoice object itself) |
| Business errors | envelope with success=false | HTTP 400 / 404 + error array [{codigo, mensagem}] |
| Auth errors | platform envelope | platform envelope (unchanged, produced by the gateway) |
Invoice verification (#6, #7)
| Aspect | Retired | Standard endpoint |
|---|---|---|
| XML submission | POST /openapi/nfe/verify/xml, raw XML | POST /openapi/v3/consultas/nf-e/xml, raw XML (same Content-Type, 1 MB limit and DTD ban) |
| chave lookup | POST 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 signature | — | the body signed is the empty string; path includes the chave |
| Success response | platform envelope, payload in data | bare response: the former data object itself, field names unchanged |
| Validation rejected | envelope success=true, verdict in data.validation.validationStatus=REJECTED | bare response, verdict in validation.validationStatus=REJECTED (still HTTP 200) |
| Request-level errors (empty body / too large / DTD / encoding) | HTTP 400 + platform envelope | HTTP 400 + {code, message} |
| Business errors (e.g. 10015004 not found) | HTTP 200 + envelope success=false | HTTP 4xx + {code, message} |
| System errors | HTTP 500 + envelope errorType=3 | HTTP 500 + {code, message} |
Identity verification (#8, #9)
| Aspect | Retired | Standard endpoint |
|---|---|---|
| Path | /openapi/cadastro/cnpj/{cnpj}, /openapi/cadastro/cpf/{cpf}/{nascimento} | /openapi/v3/consultas/cnpj/{cnpj}, /openapi/v3/consultas/cpf/{cpf}/{nascimento} |
| Path variables | same | same (CNPJ 14 digits, CPF 11 digits, birth date DDMMYYYY) |
| Response | bare object | bare object, field names unchanged |
| Errors | 4xx + {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
- Replace both the request URL and the
pathused in the signature with the replacement path (pathkeeps the/openapiprefix, no host, no query string). - 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. - chave lookup becomes GET: sign the empty string as body;
forceRevalidateis no longer available there. - 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.
- On 410, fix the path according to the replacement named in
message; do not retry.
Retained endpoints
| # | Method | Path | Scope (subscription key) | Description |
|---|---|---|---|---|
| 1 | POST | /openapi/demo/echo | /openapi/demo/echo | Echo (signature check) |
| 2 | POST | /openapi/v2/empresas | /openapi/v2/empresas | Company registration |
| 3 | POST | /openapi/v1/empresas/{empresaId}/certificadoDigital | /openapi/v1/empresas/{empresaid}/certificadodigital | Digital certificate association |
| 4 | POST | /openapi/v1/webhooks | /openapi/v1/webhooks | Webhook registration |
| 5 | POST | /openapi/v2/empresas/{empresaId}/nf-e | /openapi/v2/empresas/{empresaid}/nf-e | NF-e issuance |
| 6 | GET | /openapi/v2/empresas/{empresaId}/nf-e/{nfeId} | /openapi/v2/empresas/{empresaid}/nf-e/{nfeid} | NF-e query (includes DANFE / XML download links) |
| 7 | DELETE | /openapi/v2/empresas/{empresaId}/nf-e/{nfeId} | /openapi/v2/empresas/{empresaid}/nf-e/{nfeid} | NF-e cancellation (shares the scope with query) |
| 8 | POST | /openapi/v3/consultas/nf-e/xml | /openapi/v3/consultas/nf-e/xml | NF-e XML verification |
| 9 | GET | /openapi/v3/consultas/nf-e/{chave} | /openapi/v3/consultas/nf-e/{chave} | NF-e chave lookup |
| 10 | GET | /openapi/v3/consultas/cnpj/{cnpj} | /openapi/v3/consultas/cnpj/{cnpj} | CNPJ registry lookup |
| 11 | GET | /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).