Trova le risposte a 4 domande frequenti su SIGN PT, organizzate per argomento.
General (4)
How to export a SAF-T (PT) file
Portuguese taxpayers must submit a SAF-T (PT) billing file to the Portal das Finanças monthly, per DL 198/2012 Art. 3 n.º 1. The current deadline is the 5th of the month following the reporting period, as updated by Portaria 351/2021.
SIGN PT generates the file via POST /files with content.type: AUDIT. For a Portuguese taxpayer, the result is a SAF-T (PT) XML packaged as a .zip archive, conforming to Portaria 302/2016. SIGN PT generates the file only — uploading it to Portal das Finanças is the responsibility of the taxpayer or their accountant.
| Step | Endpoint | What happens |
|---|---|---|
| 1. Create the file | POST /files | Request an AUDIT file for a given date range. The response includes content.artifact.path. |
| 2. Wait briefly | — | The file is built asynchronously. |
| 3. Stream the file | GET /files/{path} | Download the .zip archive using the path from step 1. |
Step 1 — Create the file
Sezione intitolata “Step 1 — Create the file”To generate the SAF-T (PT) file for January 2026:
{ "content": { "type": "AUDIT", "range": { "from": "2026-01-01", "to": "2026-01-31" }, "taxpayer_id": "0193abcd-1234-7000-8000-000000000001" }}| Field | Required | Notes |
|---|---|---|
content.type | Yes | Must be AUDIT for SAF-T (PT). |
content.taxpayer_id | Yes | UUID of the taxpayer. The XML header identifies the taxpayer by NIF — all documents under that NIF for the period are reported together. |
content.range.from | Yes | Inclusive start date in YYYY-MM-DD. |
content.range.to | Yes | Inclusive end date in YYYY-MM-DD. |
Date ranges spanning multiple months produce one SAF-T XML per month inside the same .zip archive. AT expects monthly files — submit each XML to Portal das Finanças separately.
Response:
The response is a FileResource containing content.artifact.path:
{ "content": { "artifact": { "path": "/files/0193abcd-1234-7000-8000-000000000001.zip", "type": "application/zip" }, "created_at": "2026-01-31T13:23:31.077619Z", "id": "0193abcd-1234-7000-8000-000000000001", "location": "SERVICE", "mode": "PROCESSING", "state": "ACCEPTED", "taxpayer": "0193abcd-1234-7000-8000-000000000002", "type": "AUDIT" }}Step 2 — Stream the file
Sezione intitolata “Step 2 — Stream the file”The file is built asynchronously — allow a short delay after POST /files before calling GET /files/{path}. Concatenate artifact.path directly to your base URL — do not add an extra /files/ prefix:
GET https://api.fiskaly.com/files/019e5dbd-2c39-73e1-8592-75fa7dc6f2f4.zipAuthorization: Bearer {{operation-bearer}}X-Api-Version: 2026-05-04The response body is the .zip archive (application/zip). Extract the SAF-T XML and upload it to Portal das Finanças before the 5th-day deadline. Cancelled documents (status A) are included in the export — they remain in the audit trail with their original hash chain intact. The SAF-T (PT) file is a reporting artifact, not a fiscal document.
VAT exemption codes
When a line on a Portuguese fiscal document carries 0% VAT, Portuguese law requires an exemption code. In the SIGN PT API, each M-code defined by the Autoridade Tributária e Aduaneira (AT) is mapped to a CAUSE_X enum value.
The exemption code is mandatory on every line that carries 0% VAT — it cannot be omitted. SIGN PT validates that the code is present wherever required.
Exemption codes
Sezione intitolata “Exemption codes”| API code | M-code | Invoice mention |
|---|---|---|
CAUSE_1 | M01 | Artigo 16.º n.º 6 do CIVA |
CAUSE_2 | M02 | Artigo 6.º do DL 198/90 |
CAUSE_3 | M04 | Isento artigo 13.º do CIVA |
CAUSE_4 | M05 | Isento artigo 14.º do CIVA |
CAUSE_5 | M06 | Isento artigo 15.º do CIVA |
CAUSE_6 | M07 | Isento artigo 9.º do CIVA |
CAUSE_7 | M09 | IVA — não confere direito a dedução |
CAUSE_8 | M10 | IVA — regime de isenção |
CAUSE_9 | M11 | Regime particular do tabaco |
CAUSE_10 | M12 | Regime da margem de lucro — Agências de viagens |
CAUSE_11 | M13 | Regime da margem de lucro — Bens em segunda mão |
CAUSE_12 | M14 | Regime da margem de lucro — Objetos de arte |
CAUSE_13 | M15 | Regime da margem de lucro — Objetos de coleção e antiguidades |
CAUSE_14 | M16 | Isento artigo 14.º do RITI |
CAUSE_15 | M19 | Outras isenções |
CAUSE_16 | M20 | IVA — regime forfetário |
CAUSE_17 | M21 | IVA — não confere direito à dedução (Art. 72 n.º 4 CIVA) |
CAUSE_18 | M25 | Mercadorias à consignação |
CAUSE_19 | M26 | Isenção de IVA com direito à dedução no cabaz alimentar |
CAUSE_20 | M30 | IVA — autoliquidação (sucata e resíduos) |
CAUSE_21 | M31 | IVA — autoliquidação (construção civil) |
CAUSE_22 | M32 | IVA — autoliquidação (direitos de emissão) |
CAUSE_23 | M33 | IVA — autoliquidação (cortiça e madeira) |
CAUSE_24 | M34 | IVA — autoliquidação (eletricidade) |
CAUSE_25 | M40 | IVA — autoliquidação (B2B intra-UE) |
CAUSE_26 | M41 | IVA — autoliquidação (operações triangulares) |
CAUSE_27 | M42 | IVA — autoliquidação (ouro de investimento) |
CAUSE_28 | M43 | IVA — autoliquidação (DL 362/99) |
CAUSE_29 | M44 | IVA — Regras específicas — artigo 6.º |
CAUSE_30 | M45 | IVA — regime transfronteiriço de isenção |
CAUSE_31 | M46 | IVA — e-TaxFree |
NOT_SUBJECT | M99 | Não sujeito ou não tributado |
Note: SIGN PT validates that the code is technically correct and present where required. Choosing the appropriate code for the underlying transaction is the taxpayer’s responsibility.
Request example
Sezione intitolata “Request example”To add a VAT exemption to a line item, set content.operation.entries.data.vat type to VAT_EXEMPTION and provide the appropriate code:
"vat": { "type": "VAT_EXEMPTION", "code": "CAUSE_8", "reason": "IVA — regime de isenção"}The reason field is optional — SIGN PT auto-fills it with the standard AT invoice mention for the given code. Provide a value only to override the default phrasing.
VAT rates
Portugal has three tax regions, each with its own set of VAT rates. In the SIGN PT API, each rate is mapped to a generic enum value (STANDARD, REDUCED_1, REDUCED_2, REDUCED_3) that resolves to a different percentage depending on the taxpayer’s fiscal_location. For more details on regions, see VAT regions in Portugal.
Rate table
Sezione intitolata “Rate table”| API code | SAF-T TaxCode | Mainland (PT) | Azores (PT-AC) | Madeira (PT-MA) |
|---|---|---|---|---|
STANDARD | NOR | 23% | 16% | 22% |
REDUCED_1 | INT | 13% | 9% | 12% |
REDUCED_2 | RED | 6% | 4% | 4% |
REDUCED_3 | ISE | 0% | 0% | 0% |
The applicable rate is determined by the fiscal_location field. When omitted, the taxpayer’s registered region is used as default.
What each rate covers
Sezione intitolata “What each rate covers”-
Standard —
STANDARD: everything not covered by the reduced or intermediate rates — electronics, clothing, professional services, construction, telecom, software licences, etc. -
Intermediate —
REDUCED_1: restaurant meals, wine (non-sparkling), processed food, musical instruments, tickets to concerts and cinema, certain agricultural inputs. -
Reduced —
REDUCED_2: essential goods and services — bread, milk, fruit, vegetables, meat, fish, water supply, medicines, books and periodicals, urban passenger transport, hotel accommodation. -
Exempt —
REDUCED_3: operations zero-rated or outside the scope of VAT. ATaxExemptionCodeis mandatory whenever the rate is 0%. See VAT exemption codes.
Request example
Sezione intitolata “Request example”A standard-rate sale in the Azores:
"vat": { "type": "VAT_RATE", "code": "STANDARD", "percentage": 16, "amount": 8.00, "exclusive": 50.00, "inclusive": 58.00, "fiscal_location": { "country": "PT", "region": "AC" }}Validation rules
Sezione intitolata “Validation rules”A rate is only valid in combination with the correct region. A rate that doesn’t match the region (e.g. 4% on PT) will be rejected.
| Region | Valid rates |
|---|---|
| PT | 23%, 13%, 6%, 0% |
| PT-AC | 16%, 9%, 4%, 0% |
| PT-MA | 22%, 12%, 4%, 0% |
When the seller and buyer are in different regions, the seller’s region generally applies (Art. 6 CIVA), with exceptions for immovable property, events, and B2B EU services. See VAT regions in Portugal.
Recent rate changes
Sezione intitolata “Recent rate changes”Corrective documents (NC/ND) must reference the rate that was in force on the original invoice date — these dates matter when issuing corrections against older invoices.
-
Madeira reduced rate: 5% → 4% on 1 October 2024 (DLR n.º 6/2024/M, Art. 21).
-
Azores standard rate: 18% → 16% on 1 July 2022 (DLR n.º 2/2022/A).
⚠️ Warning: The official gov.pt page on IVA still lists the Madeira reduced rate as 5%. The 4% figure is correct as of 1 Oct 2024 — confirmed by AT Ofício-Circulado 25045/2024 (6 Dec 2024).
VAT regions in Portugal
Portugal is split into three tax regions — Mainland (PT), Azores (PT-AC), and Madeira (PT-MA) — each with its own VAT rates. For the rates in each region, see VAT rates in Portugal.
| SAF-T TaxCountryRegion | Region |
|---|---|
| PT | Mainland |
| PT-AC | Azores |
| PT-MA | Madeira |
How regions are configured in SIGN PT
Sezione intitolata “How regions are configured in SIGN PT”By default, the taxpayer’s registered region applies to all documents. To override it per line, set fiscal_location.region:
region value | Maps to |
|---|---|
| (omitted) | Taxpayer’s registered region |
| AC | PT-AC |
| MA | PT-MA |
For Mainland, set fiscal_location.country: PT and omit region.
Use a line-level override when a transaction takes place in a different region — for example, a Mainland-based hotel chain billing a stay at its Madeira property. A single invoice can mix regions; each line carries its own fiscal_location.