PIS/COFINS retention and tax status settings

Configure PIS/COFINS when issuing NFS-e

The NT-007 rules change how PIS and COFINS are filled in for Regime Normal customers when issuing NFS-e.

Since Jun 30, 2026, use pisCofinsTaxStatus, operationPis, and operationCofins according to the tax status of the operation. The pisCofinsRetentionType field is calculated by Asaas and must not be sent by the integration.

📘

Before configuring

To determine whether these settings apply to your integration, first check whether the account is a Simples Nacional taxpayer.

You can check this through the simplesNacional attribute in the Retrieve tax information endpoint.

If the returned value is false and the customer issues service invoices through the National Portal, the PIS/COFINS tax status and rate settings detailed in this guide become mandatory.

Simples Nacional customers do not need to change the payload because of NT-007.

🚧

Attention

The correct PIS/COFINS tax status depends on the company tax classification, the service provided, and the applicable accounting guidance.

If you are unsure which CST to use, validate it with the responsible accountant before changing the integration.

How to configure

%%{init: {"flowchart": {"nodeSpacing": 18,"rankSpacing": 24,"diagramPadding": 4,"padding": 7}}}%%
flowchart TD
    A["Retrieve tax information"] --> B{"Is simplesNacional true?"}

    B --> Sim(("Yes"))
    B --> Nao(("No"))

    Sim --> C["Keep Simples Nacional rules"]
    Nao --> D["Validate the applicable CST"]

    D --> E["Set pisCofinsTaxStatus"]
    E --> F["Provide operationPis and operationCofins"]
    F --> G["Provide withholdings, if any"]

    C --> H["Issue the NFS-e"]
    G --> H
    H --> I["Track via Webhook"]

    classDef inicio fill:#DBEAFE,stroke:#2563EB,color:#1E3A8A,stroke-width:3px
    classDef decisao fill:#FEF3C7,stroke:#D97706,color:#78350F,stroke-width:3px
    classDef validacao fill:#E0F2FE,stroke:#0284C7,color:#0C4A6E,stroke-width:2px
    classDef sucesso fill:#DCFCE7,stroke:#16A34A,color:#14532D,stroke-width:3px

    classDef respostaSim fill:#22C55E,stroke:#15803D,color:#FFFFFF,stroke-width:3px
    classDef respostaNao fill:#EF4444,stroke:#B91C1C,color:#FFFFFF,stroke-width:3px

    class A inicio
    class B decisao
    class C,D,E,F,G,H validacao
    class I sucesso

    class Sim respostaSim
    class Nao respostaNao

    linkStyle default stroke:#94A3B8,stroke-width:2px
    linkStyle 1 stroke:#22C55E,stroke-width:4px
    linkStyle 2 stroke:#EF4444,stroke-width:4px

PIS/COFINS fields

FieldFunction
pisCofinsTaxStatusSets the PIS/COFINS tax status
operationPisPIS rate of the operation
operationCofinsCOFINS rate of the operation
pisWithheld PIS percentage
cofinsWithheld COFINS percentage
csllWithheld CSLL percentage
pisCofinsRetentionTypeWithholding type calculated by Asaas
❗️

Important

The pisCofinsRetentionType field must not be used as a field controlled by the integration.

The withholding type is now calculated automatically by Asaas based on the percentages provided in pis, cofins, and csll.

Use the value returned by the API only for lookup, reconciliation, or internal display.

Distinguish operation rate from withholding

The fields have different purposes:

GroupFieldsPurpose
Operation rateoperationPis, operationCofinsIndicates how PIS and COFINS apply to the operation
Withholdingpis, cofins, csllIndicates the withheld percentages, when applicable

pisCofinsTaxStatus determines which values can be sent in operationPis and operationCofins.

Withholding percentages do not replace operation rates.

pisCofinsTaxStatus values

Use the tax status that corresponds to the operation.

ValueCodeDescription
NONE00None
STANDARD_TAXABLE_OPERATION01Taxable Operation with Basic Rate
DIFFERENTIATED_RATE_TAXABLE_OPERATION02Taxable Operation with Differentiated Rate
TAXABLE_PER_MEASURE_UNIT_OPERATION03Taxable Operation with Rate per Product Unit of Measure
MONOPHASIC_RESALE_ZERO_RATE_OPERATION04Single-phase Taxable Operation - Resale at Zero Rate
TAX_SUBSTITUTION_OPERATION05Taxable Operation by Tax Substitution
ZERO_RATE_TAXABLE_OPERATION06Taxable Operation at Zero Rate
EXEMPT_CONTRIBUTION_OPERATION07Operation Exempt from Contribution
NON_TAXABLE_OPERATION08Operation without Contribution Incidence
TAX_SUSPENSION_OPERATION09Operation with Contribution Suspension
OTHER_OUTPUT_OPERATION49Other Output Operations
CREDITABLE_EXCLUSIVE_TAXED_DOMESTIC_REVENUE_OPERATION50Operation with Credit Right - Linked Exclusively to Taxed Domestic Market Revenue
CREDITABLE_EXCLUSIVE_NON_TAXED_DOMESTIC_REVENUE_OPERATION51Operation with Credit Right - Linked Exclusively to Non-Taxed Domestic Market Revenue
CREDITABLE_EXPORT_REVENUE_OPERATION52Operation with Credit Right - Linked Exclusively to Export Revenue
CREDITABLE_TAXED_AND_NON_TAXED_DOMESTIC_REVENUE_OPERATION53Operation with Credit Right - Linked to Taxed and Non-Taxed Domestic Market Revenues
CREDITABLE_TAXED_DOMESTIC_AND_EXPORT_REVENUE_OPERATION54Operation with Credit Right - Linked to Taxed Domestic Market and Export Revenues
CREDITABLE_NON_TAXED_DOMESTIC_AND_EXPORT_REVENUE_OPERATION55Operation with Credit Right - Linked to Non-Taxed Domestic Market and Export Revenues
CREDITABLE_TAXED_AND_NON_TAXED_DOMESTIC_AND_EXPORT_REVENUE_OPERATION56Operation with Credit Right - Linked to Taxed and Non-Taxed Domestic Market and Export Revenues
PRESUMED_CREDIT_EXCLUSIVE_TAXED_DOMESTIC_REVENUE_OPERATION60Presumed Credit - Acquisition Operation Linked Exclusively to Taxed Domestic Market Revenue
PRESUMED_CREDIT_EXCLUSIVE_NON_TAXED_DOMESTIC_REVENUE_OPERATION61Presumed Credit - Acquisition Operation Linked Exclusively to Non-Taxed Domestic Market Revenue
PRESUMED_CREDIT_EXCLUSIVE_EXPORT_REVENUE_OPERATION62Presumed Credit - Acquisition Operation Linked Exclusively to Export Revenue
PRESUMED_CREDIT_TAXED_AND_NON_TAXED_DOMESTIC_REVENUE_OPERATION63Presumed Credit - Acquisition Operation Linked to Taxed and Non-Taxed Domestic Market Revenues
PRESUMED_CREDIT_TAXED_DOMESTIC_AND_EXPORT_REVENUE_OPERATION64Presumed Credit - Acquisition Operation Linked to Taxed Domestic Market and Export Revenues
PRESUMED_CREDIT_NON_TAXED_DOMESTIC_AND_EXPORT_REVENUE_OPERATION65Presumed Credit - Acquisition Operation Linked to Non-Taxed Domestic Market and Export Revenues
PRESUMED_CREDIT_TAXED_AND_NON_TAXED_DOMESTIC_AND_EXPORT_REVENUE_OPERATION66Presumed Credit - Acquisition Operation Linked to Taxed and Non-Taxed Domestic Market and Export Revenues
PRESUMED_CREDIT_OTHER_OPERATION67Presumed Credit - Other Operations
ACQUISITION_WITHOUT_CREDIT_RIGHT_OPERATION70Acquisition Operation without Credit Right
ACQUISITION_WITH_EXEMPTION_OPERATION71Acquisition Operation with Exemption
ACQUISITION_WITH_SUSPENSION_OPERATION72Acquisition Operation with Suspension
ACQUISITION_ZERO_RATE_OPERATION73Acquisition Operation at Zero Rate
ACQUISITION_WITHOUT_CONTRIBUTION_OPERATION74Acquisition Operation without Contribution Incidence
ACQUISITION_BY_TAX_SUBSTITUTION_OPERATION75Acquisition Operation by Tax Substitution
OTHER_INPUT_OPERATION98Other Input Operations
OTHER_OPERATION99Other Operations
🚧

Discontinued value

The TAXABLE_CONTRIBUTION_OPERATION enum is discontinued and must not be used in new integrations.

When the applicable situation is CST 07, use EXEMPT_CONTRIBUTION_OPERATION, corresponding to 07 - Operation Exempt from Contribution.

Fill in operationPis and operationCofins

NT-007 sets specific rules for some tax statuses:

pisCofinsTaxStatusoperationPis and operationCofins
NONEnull
STANDARD_TAXABLE_OPERATIONGreater than 0
DIFFERENTIATED_RATE_TAXABLE_OPERATIONGreater than 0
ZERO_RATE_TAXABLE_OPERATION0
EXEMPT_CONTRIBUTION_OPERATIONnull
NON_TAXABLE_OPERATIONnull
TAX_SUSPENSION_OPERATIONnull

For the other values, NT-007 does not set a specific restriction for operationPis and operationCofins. Fill them in according to the tax situation of the operation.

Provide withholdings, when applicable

Use:

  • pis;
  • cofins;
  • csll.

Asaas calculates pisCofinsRetentionType from these percentages.

Percentages providedWithholding
pis, cofins, and csll greater than zeroPIS, COFINS, and CSLL
pis and cofins greater than zero and csll null or zeroPIS and COFINS
Only pis greater than zeroPIS
All null or zeroNo withholding
📘

Important

Withholding must not be set manually through pisCofinsRetentionType.

Provide the applicable withholding percentages and use the value returned by the API for reconciliation.

Examples

Taxable operation with basic rate

{
  "taxes": {
    "pisCofinsTaxStatus": "STANDARD_TAXABLE_OPERATION",
    "operationPis": 0.65,
    "operationCofins": 3.00,
    "pis": 0.65,
    "cofins": 3.00,
    "csll": 1.00
  }
}

operationPis and operationCofins represent the operation rates. pis, cofins, and csll represent the withholdings.

Taxable operation at zero rate

{
  "taxes": {
    "pisCofinsTaxStatus": "ZERO_RATE_TAXABLE_OPERATION",
    "operationPis": 0,
    "operationCofins": 0,
    "pis": null,
    "cofins": null,
    "csll": null
  }
}

For ZERO_RATE_TAXABLE_OPERATION, send operationPis and operationCofins as 0.

Exempt operation

{
  "taxes": {
    "pisCofinsTaxStatus": "EXEMPT_CONTRIBUTION_OPERATION",
    "operationPis": null,
    "operationCofins": null,
    "pis": null,
    "cofins": null,
    "csll": null
  }
}

For EXEMPT_CONTRIBUTION_OPERATION, send operationPis and operationCofins as null.

Tax status not defined

{
  "taxes": {
    "pisCofinsTaxStatus": "NONE",
    "operationPis": null,
    "operationCofins": null,
    "pis": null,
    "cofins": null,
    "csll": null
  }
}
❗️

Attention

If your operation has PIS/COFINS withholding, avoid using pisCofinsTaxStatus as NONE without accounting validation.

With NONE, the operationPis and operationCofins fields must be null, which may cause the PIS/COFINS operation information not to appear on the invoice as expected.

Consider CST normalization

In these situations:

  • TAXABLE_PER_MEASURE_UNIT_OPERATION;
  • MONOPHASIC_RESALE_ZERO_RATE_OPERATION;
  • TAX_SUBSTITUTION_OPERATION;

Asaas may return pisCofinsTaxStatus as NONE when all PIS and COFINS percentages are zero or null.

Prepare your parser for the returned value to differ from the one sent in these scenarios.

Common errors

SituationHow to handle
pisCofinsTaxStatus missing for a customer affected by NT-007Provide the tax status
operationPis or operationCofins should be nullRemove the rate for the CST used
operationPis or operationCofins should be 0Send zero for the CST used
Required rate missingProvide a value greater than zero
TAXABLE_CONTRIBUTION_OPERATION usedMigrate to EXEMPT_CONTRIBUTION_OPERATION when the applicable CST is 07
pisCofinsRetentionType sentRemove the field from the payload

Example when the required tax status is not provided:

{
  "errors": [
    {
      "description": "The PIS/COFINS tax status is required"
    }
  ]
}

Where to apply

The rules must be considered when sending or updating NFS-e tax data, including:

POST /v3/invoices
PUT /v3/invoices/{id}

They also apply to the automatic invoice issuing configuration for subscriptions:

POST /v3/subscriptions/{id}/invoiceSettings
PUT /v3/subscriptions/{id}/invoiceSettings

See the complete contracts in the API Reference:

Validate the issuance

After sending the NFS-e, track the result via Webhooks instead of repeatedly querying the status.

Mainly handle:

  • INVOICE_AUTHORIZED, when the invoice is issued;
  • INVOICE_ERROR, when there is an issuing error.

See the events for invoices.

Runnable example

For a specific example of this configuration, see:

Configure PIS/COFINS retention and tax status

Next steps


Did this page help you?