> ## Documentation Index
> Fetch the complete documentation index at: https://developers.portao3.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

# Cancel tax documents in batch

> Requests the cancellation of every tax document listed in an uploaded CSV file.

Send a `multipart/form-data` request whose `file` part is a CSV file: comma-separated, with a header row and one row per tax document to cancel.

| Column | Required | Meaning |
| - | - | - |
| `taxDocumentId` | Yes | ID of the tax document to cancel: the `id` of a document returned by the tax documents list. |

Only the `taxDocumentId` column is read; every other column is ignored, so the export of your tax documents can be uploaded as it is. A row without a valid `taxDocumentId` is rejected.

The whole upload is validated first: if any row is invalid nothing is cancelled, and `fields` points at the row by its position, where `taxDocuments[0]` is the first row after the header. When the upload is valid, the response only means the rows were accepted. The cancellation of each tax document is then requested in the background, so a row can still fail later: a tax document that is not one of your organization's is not cancelled, and one that cannot be cancelled in its current state, for example because it is not authorized yet, is skipped. Upload each tax document once, because asking again to cancel one that is already being cancelled fails.


## OpenAPI

````yaml /api-reference/accounting.openapi.json post /realms/{realmId}/organizations/{organizationId}/tax-document/batch-cancel
openapi: 3.0.3
info:
  title: Accounting
  version: 1.0.0
  description: >-
    Portão 3 accounting API. Every endpoint requires a bearer token in the
    Authorization header (Authorization: Bearer <token>) unless its page states
    otherwise; see the Authentication guide. That requirement is not repeated
    per endpoint. Generated by tools/openapi from code (routes + security) and
    the hand-written spec (request/response bodies). NFSe issuance: the
    organization's tax issuer (setup, certificate, logo), its tax documents
    (issue, list, download, cancel, CSV batches) and the city special-tax-regime
    lookup. Every route validates path, query, body and multipart form through a
    zod Input class (`accounting/app/use-case/*/inputs`), which documents it;
    responses are the named interfaces in
    `accounting/app/use-case/*/outputs/*Response.ts`. Confidence tiers:
    generated:typed=24 copied:manual=0 unknown=0.
servers:
  - url: https://api.accounting.v2.portao3.com.br/
    description: production
  - url: https://api.accounting.dev.3pers.com.br/
    description: development
security: []
tags:
  - name: Tax Issuers
  - name: Tax Documents (NFSe)
  - name: Tax Codes
paths:
  /realms/{realmId}/organizations/{organizationId}/tax-document/batch-cancel:
    post:
      tags:
        - Tax Documents (NFSe)
      summary: Cancel tax documents in batch
      description: >-
        Requests the cancellation of every tax document listed in an uploaded
        CSV file.
      operationId: postRealmsByRealmIdOrganizationsByOrganizationIdTaxDocumentBatchCancel
      parameters:
        - name: realmId
          in: path
          required: true
          description: |-
            ID of your realm.

            Format: `UUID`
          schema:
            type: string
            format: uuid
          example: f495ff0c-ab54-4f99-8e92-ca8682e4de9b
        - name: organizationId
          in: path
          required: true
          description: |-
            ID of the organization.

            Format: `UUID`
          schema:
            type: string
            format: uuid
          example: c4bd3f21-dfbd-44e8-8055-68ba15bed410
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
                  description: >-
                    The CSV file, with a header row and one row per tax document
                    to cancel. Only the `taxDocumentId` column is read; see the
                    operation description. Required, not empty, at most 4 MB;
                    its file name must end in `.csv`, or its content type be
                    `text/csv`, `application/vnd.ms-excel` or `text/plain`.
              required:
                - file
              additionalProperties: false
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: >-
                      Confirms what was requested. It only means the rows were
                      accepted, not that every document was already issued or
                      cancelled.
                    example: Batch cancellation requested.
                  count:
                    type: number
                    description: Number of CSV rows accepted for processing.
                    example: 25
                required:
                  - message
                  - count
                description: >-
                  Acknowledgement that a CSV batch was accepted. Each row is
                  processed in the background.
        '400':
          description: >-
            `TAX_ISSUER_PROVIDER_ID_NOT_FOUND` — The tax issuer is not
            registered with the tax provider yet.
          content:
            application/json:
              schema:
                type: object
                properties:
                  traceId:
                    type: string
                    description: >-
                      Identifier of the request that failed. Quote it when
                      contacting support.
                    example: 1-68ee2a1b-3c4d5e6f7a8b9c0d1e2f3a4b
                  code:
                    type: string
                    enum:
                      - TAX_ISSUER_PROVIDER_ID_NOT_FOUND
                    description: >-
                      Stable, machine-readable error code. Branch on this, never
                      on `message`.
                  origin:
                    type: string
                    enum:
                      - ACCOUNTING
                    description: Service that produced the error.
                  message:
                    type: string
                    description: >-
                      Human-readable explanation. Its wording may change without
                      notice.
                required:
                  - traceId
                  - code
                  - origin
                  - message
              example:
                traceId: 1-68ee2a1b-3c4d5e6f7a8b9c0d1e2f3a4b
                code: TAX_ISSUER_PROVIDER_ID_NOT_FOUND
                origin: ACCOUNTING
                message: Tax issuer provider id not exists
        '404':
          description: '`TAX_ISSUER_NOT_FOUND` — The organization has no active tax issuer.'
          content:
            application/json:
              schema:
                type: object
                properties:
                  traceId:
                    type: string
                    description: >-
                      Identifier of the request that failed. Quote it when
                      contacting support.
                    example: 1-68ee2a1b-3c4d5e6f7a8b9c0d1e2f3a4b
                  code:
                    type: string
                    enum:
                      - TAX_ISSUER_NOT_FOUND
                    description: >-
                      Stable, machine-readable error code. Branch on this, never
                      on `message`.
                  origin:
                    type: string
                    enum:
                      - ACCOUNTING
                    description: Service that produced the error.
                  message:
                    type: string
                    description: >-
                      Human-readable explanation. Its wording may change without
                      notice.
                required:
                  - traceId
                  - code
                  - origin
                  - message
              example:
                traceId: 1-68ee2a1b-3c4d5e6f7a8b9c0d1e2f3a4b
                code: TAX_ISSUER_NOT_FOUND
                origin: ACCOUNTING
                message: Tax issuer not found
        '422':
          description: >-
            `BAD_REQUEST` — A path parameter is not a valid ID, the request is
            not `multipart/form-data`, the `file` part is missing, empty, larger
            than 4 MB or not a readable CSV, or a row has no valid
            `taxDocumentId`; `fields` lists each problem.
          content:
            application/json:
              schema:
                type: object
                properties:
                  traceId:
                    type: string
                    description: >-
                      Identifier of the request that failed. Quote it when
                      contacting support.
                    example: 1-68ee2a1b-3c4d5e6f7a8b9c0d1e2f3a4b
                  code:
                    type: string
                    enum:
                      - BAD_REQUEST
                    description: >-
                      Stable, machine-readable error code. Branch on this, never
                      on `message`.
                  origin:
                    type: string
                    enum:
                      - ACCOUNTING
                    description: Service that produced the error.
                  message:
                    type: string
                    description: >-
                      Human-readable explanation. Its wording may change without
                      notice.
                  fields:
                    type: array
                    description: >-
                      One entry per invalid request field (validation errors
                      only).
                    items:
                      type: object
                      properties:
                        field:
                          type: string
                          description: >-
                            Path of the invalid field, e.g. `label` or
                            `values[0].value`.
                          example: label
                        message:
                          type: string
                          description: Why the field was rejected.
                          example: label is required
                        code:
                          type: string
                          description: >-
                            `<FIELD>_<REASON>` — e.g. `LABEL_REQUIRED`,
                            `TYPE_ONE_OF`, `VALUES_VALUE_TYPE_ERROR`.
                          example: LABEL_REQUIRED
                        values:
                          type: array
                          items:
                            type: string
                          description: >-
                            The accepted values, when the field is an
                            enumeration.
                      required:
                        - field
                        - message
                        - code
                required:
                  - traceId
                  - code
                  - origin
                  - message
              example:
                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: file
                    message: file is required
                    code: FILE_REQUIRED

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.