Documentation Index
Fetch the complete documentation index at: https://invopop-pt-returns-with-tag.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
- Description
- Actions
- Workflows
- Documents
AT Portugal Guide
View implementation guide ›
- Workflow automation: This app provides automated workflows for issuing invoices, onboarding suppliers, and managing fiscal submissions to the Autoridade Tributária e Aduaneira (AT).
- Legally compliant PDF documents: Invoices, payments and delivery notes are generated with a certified ATCUD and QR codes, as required by the Portuguese tax legislation.
- SAF-T (PT): The app makes workflow steps available to manage SAF-T (PT) entries for each supplier.
- Realtime and manual reporting options: Report in real-time via webservice or generate a file to upload through the AT’s portal.
- Supplier portal: Suppliers can generate SAF-T PT reports and create authorized series via the Supplier Portal.
- Supplier registration: Automatic registration (no onboarding process) with a single workflow step.
- White-label support: Invoicing can be performed either under a client’s brand (white-label) or directly by the issuing organization, according to operational needs.
Supported Document Types
The current integration supports the following document types for reporting to the AT:| Category | Code | Portuguese Name | English Translation |
|---|---|---|---|
| Invoices | FT | Fatura | Standard Invoice |
| FS | Fatura Simplificada | Simplified Invoice | |
| FR | Fatura-Recibo | Invoice-Receipt | |
| ND | Nota de Débito | Debit Note | |
| NC | Nota de Crédito | Credit Note | |
| Payment receipts | RG | Outro Recibo | Other Receipt |
| Transport documents | GR | Guia de Remessa | Delivery Note |
| GT | Guia de Transporte | Waybill | |
| GD | Guia de Devolução | Return Guide | |
| GC | Guia de Consignação | Consignment Guide |
The following workflow actions will be available once you install and enable this app:
1
Record a GOBL document for SAF-T PT reporting.


Record for SAF-T (Portugal)
Send to the AT (Portugal)
Send document to the AT in realtime via web service.
Register AT Issuer (Portugal)
Register a GOBL party to report taxes to the AT in their name.
Cancel SAF-T record (Portugal)
Cancel a previously recorded GOBL document for SAF-T PT reporting.
These workflows are essential sequences for processing and issuing AT Portugal documents. You can augment them with webhooks, email, storage actions and more.Issuing document workflows:
Supplier workflows:
Cancelling document workflows:
New to workflows? Read more in our workflows guide.
AT Portugal issue invoice
AT Portugal issue invoice
Example AT issue invoice workflow
{
"name": "Issue AT invoice",
"description": "Issue an invoice in Portugal and generate PDF",
"schema": "bill/invoice",
"steps": [
{
"id": "6f884d90-f2b9-11ef-acb2-cd64e858247e",
"name": "Set State",
"provider": "silo.state",
"config": {
"state": "processing"
}
},
{
"id": "76f194b0-f2b9-11ef-acb2-cd64e858247e",
"name": "Record for SAF-T reporting (Portugal)",
"provider": "at-pt.record"
},
{
"id": "59174840-c09a-11f0-b8a2-b531dbe0da3c",
"name": "Send to the AT (Portugal)",
"provider": "at-pt.send"
},
{
"id": "93795a50-f2b9-11ef-acb2-cd64e858247e",
"name": "Generate PDF (Original)",
"provider": "pdf",
"summary": "Portuguese - A4",
"config": {
"date_format": "%Y-%m-%d",
"hide_promo": true,
"label": "Original",
"layout": "A4",
"locale": "pt",
"logo_height": 40,
"watermark": ""
}
},
{
"id": "ce7c50c0-9d55-11f0-b3a4-87562f21f508",
"name": "Generate PDF (Duplicate)",
"provider": "pdf",
"summary": "Portuguese - A4",
"config": {
"date_format": "%Y-%m-%d",
"label": "Duplicado",
"layout": "A4",
"locale": "pt",
"logo_height": 40,
"watermark": "",
"duplicate": true
}
},
{
"id": "7a708240-f2b9-11ef-acb2-cd64e858247e",
"name": "Set State",
"provider": "silo.state",
"config": {
"state": "sent"
}
}
],
"rescue": [
{
"id": "805bdbf0-f2b9-11ef-acb2-cd64e858247e",
"name": "Set State",
"provider": "silo.state",
"config": {
"state": "error"
}
}
]
}
AT Portugal issue delivery note
AT Portugal issue delivery note
Example AT issue delivery workflow
{
"name": "Issue AT delivery",
"description": "Issue a delivery document in Portugal and generate PDF",
"schema": "bill/delivery",
"steps": [
{
"id": "6f884d90-f2b9-11ef-acb2-cd64e858247e",
"name": "Set State",
"provider": "silo.state",
"config": {
"state": "processing"
}
},
{
"id": "76f194b0-f2b9-11ef-acb2-cd64e858247e",
"name": "Record for SAF-T reporting (Portugal)",
"provider": "at-pt.record"
},
{
"id": "59174840-c09a-11f0-b8a2-b531dbe0da3c",
"name": "Send to the AT (Portugal)",
"provider": "at-pt.send"
},
{
"id": "93795a50-f2b9-11ef-acb2-cd64e858247e",
"name": "Generate PDF (Original)",
"provider": "pdf",
"summary": "Portuguese - A4",
"config": {
"date_format": "%Y-%m-%d",
"hide_promo": true,
"label": "Original",
"layout": "A4",
"locale": "pt",
"logo_height": 40,
"watermark": ""
}
},
{
"id": "ce7c50c0-9d55-11f0-b3a4-87562f21f508",
"name": "Generate PDF (Duplicate)",
"provider": "pdf",
"summary": "Portuguese - A4",
"config": {
"date_format": "%Y-%m-%d",
"label": "Duplicado",
"layout": "A4",
"locale": "pt",
"logo_height": 40,
"watermark": "",
"duplicate": true
}
},
{
"id": "7a708240-f2b9-11ef-acb2-cd64e858247e",
"name": "Set State",
"provider": "silo.state",
"config": {
"state": "sent"
}
}
],
"rescue": [
{
"id": "805bdbf0-f2b9-11ef-acb2-cd64e858247e",
"name": "Set State",
"provider": "silo.state",
"config": {
"state": "error"
}
}
]
}
AT Portugal issue payment
AT Portugal issue payment
Example AT issue payment workflow
{
"name": "Issue AT payment",
"description": "Issue a payment in Portugal and generate PDF",
"schema": "bill/payment",
"steps": [
{
"id": "6f884d90-f2b9-11ef-acb2-cd64e858247e",
"name": "Set State",
"provider": "silo.state",
"config": {
"state": "processing"
}
},
{
"id": "76f194b0-f2b9-11ef-acb2-cd64e858247e",
"name": "Record for SAF-T reporting (Portugal)",
"provider": "at-pt.record"
},
{
"id": "93795a50-f2b9-11ef-acb2-cd64e858247e",
"name": "Generate PDF (Original)",
"provider": "pdf",
"summary": "Portuguese - A4",
"config": {
"date_format": "%Y-%m-%d",
"hide_promo": true,
"label": "Original",
"layout": "A4",
"locale": "pt",
"logo_height": 40,
"watermark": ""
}
},
{
"id": "ce7c50c0-9d55-11f0-b3a4-87562f21f508",
"name": "Generate PDF (Duplicate)",
"provider": "pdf",
"summary": "Portuguese - A4",
"config": {
"date_format": "%Y-%m-%d",
"label": "Duplicado",
"layout": "A4",
"locale": "pt",
"logo_height": 40,
"watermark": "",
"duplicate": true
}
},
{
"id": "7a708240-f2b9-11ef-acb2-cd64e858247e",
"name": "Set State",
"provider": "silo.state",
"config": {
"state": "sent"
}
}
],
"rescue": [
{
"id": "805bdbf0-f2b9-11ef-acb2-cd64e858247e",
"name": "Set State",
"provider": "silo.state",
"config": {
"state": "error"
}
}
]
}
AT Portugal register supplier
AT Portugal register supplier
Example AT register supplier workflow
{
"name": "AT register supplier",
"description": "Register a supplier in Portugal",
"schema": "org/party",
"steps": [
{
"id": "6f9282a0-3870-11ef-af29-4533d56cea03",
"name": "Set State",
"config": {
"state": "processing"
},
"summary": "Set state to `processing`{.state .processing}",
"provider": "silo.state"
},
{
"id": "1a9bcde0-a816-11ef-87b2-fd751e6d3b88",
"name": "Sign Envelope",
"provider": "silo.close"
},
{
"id": "5b6ca7e0-ad93-11ef-a7da-83137f995008",
"name": "Register AT issuer (Portugal)",
"provider": "at-pt.register"
}
],
"rescue": []
}
AT Portugal post-registration workflow
AT Portugal post-registration workflow
Example AT supplier post-registration workflow
{
"name": "AT supplier post-registration",
"description": "Workflow to set suppliers as registered",
"schema": "org/party",
"steps": [
{
"id": "7e8d8070-3870-11ef-af29-4533d56cea03",
"name": "Set State",
"config": {
"state": "registered"
},
"summary": "Set state to `registered`{.state .registered}",
"provider": "silo.state"
}
],
"rescue": []
}
AT Portugal cancel invoice
AT Portugal cancel invoice
Example AT cancel invoice workflow
{
"name": "Cancel AT invoice",
"description": "Cancel an invoice in Portugal and generate PDF",
"schema": "bill/invoice",
"steps": [
{
"id": "6f884d90-f2b9-11ef-acb2-cd64e858247e",
"name": "Set State",
"provider": "silo.state",
"config": {
"state": "processing"
}
},
{
"id": "cc0002a0-927f-11f0-8cd1-bd9f2c371090",
"name": "Cancel SAF-T record (Portugal)",
"provider": "at-pt.cancel"
},
{
"id": "59174840-c09a-11f0-b8a2-b531dbe0da3c",
"name": "Send to the AT (Portugal)",
"provider": "at-pt.send"
},
{
"id": "7a708240-f2b9-11ef-acb2-cd64e858247e",
"name": "Set State",
"provider": "silo.state",
"config": {
"state": "void"
}
},
{
"id": "93795a50-f2b9-11ef-acb2-cd64e858247e",
"name": "Generate PDF (Original)",
"provider": "pdf",
"summary": "Portuguese - A4",
"config": {
"date_format": "%Y-%m-%d",
"hide_promo": true,
"label": "Original",
"layout": "A4",
"locale": "pt",
"logo_height": 40,
"watermark": ""
}
},
{
"id": "ce7c50c0-9d55-11f0-b3a4-87562f21f508",
"name": "Generate PDF (Duplicate)",
"provider": "pdf",
"summary": "Portuguese - A4",
"config": {
"date_format": "%Y-%m-%d",
"label": "Duplicado",
"layout": "A4",
"locale": "pt",
"logo_height": 40,
"watermark": "",
"duplicate": true
}
}
],
"rescue": [
{
"id": "805bdbf0-f2b9-11ef-acb2-cd64e858247e",
"name": "Set State",
"provider": "silo.state",
"config": {
"state": "error"
}
}
]
}
AT Portugal cancel delivery note
AT Portugal cancel delivery note
Example AT cancel delivery workflow
{
"name": "Cancel AT delivery",
"description": "Cancel a delivery document in Portugal and generate PDF",
"schema": "bill/delivery",
"steps": [
{
"id": "6f884d90-f2b9-11ef-acb2-cd64e858247e",
"name": "Set State",
"provider": "silo.state",
"config": {
"state": "processing"
}
},
{
"id": "cc0002a0-927f-11f0-8cd1-bd9f2c371090",
"name": "Cancel SAF-T record (Portugal)",
"provider": "at-pt.cancel"
},
{
"id": "59174840-c09a-11f0-b8a2-b531dbe0da3c",
"name": "Send to the AT (Portugal)",
"provider": "at-pt.send"
},
{
"id": "7a708240-f2b9-11ef-acb2-cd64e858247e",
"name": "Set State",
"provider": "silo.state",
"config": {
"state": "void"
}
},
{
"id": "93795a50-f2b9-11ef-acb2-cd64e858247e",
"name": "Generate PDF (Original)",
"provider": "pdf",
"summary": "Portuguese - A4",
"config": {
"date_format": "%Y-%m-%d",
"hide_promo": true,
"label": "Original",
"layout": "A4",
"locale": "pt",
"logo_height": 40,
"watermark": ""
}
},
{
"id": "ce7c50c0-9d55-11f0-b3a4-87562f21f508",
"name": "Generate PDF (Duplicate)",
"provider": "pdf",
"summary": "Portuguese - A4",
"config": {
"date_format": "%Y-%m-%d",
"label": "Duplicado",
"layout": "A4",
"locale": "pt",
"logo_height": 40,
"watermark": "",
"duplicate": true
}
}
],
"rescue": [
{
"id": "805bdbf0-f2b9-11ef-acb2-cd64e858247e",
"name": "Set State",
"provider": "silo.state",
"config": {
"state": "error"
}
}
]
}
AT Portugal cancel payment
AT Portugal cancel payment
Example AT cancel payment workflow
{
"name": "Cancel AT payment",
"description": "Cancel a payment in Portugal and generate PDF",
"schema": "bill/payment",
"steps": [
{
"id": "6f884d90-f2b9-11ef-acb2-cd64e858247e",
"name": "Set State",
"provider": "silo.state",
"config": {
"state": "processing"
}
},
{
"id": "cc0002a0-927f-11f0-8cd1-bd9f2c371090",
"name": "Cancel SAF-T record (Portugal)",
"provider": "at-pt.cancel"
},
{
"id": "59174840-c09a-11f0-b8a2-b531dbe0da3c",
"name": "Send to the AT (Portugal)",
"provider": "at-pt.send"
},
{
"id": "7a708240-f2b9-11ef-acb2-cd64e858247e",
"name": "Set State",
"provider": "silo.state",
"config": {
"state": "void"
}
},
{
"id": "93795a50-f2b9-11ef-acb2-cd64e858247e",
"name": "Generate PDF (Original)",
"provider": "pdf",
"summary": "Portuguese - A4",
"config": {
"date_format": "%Y-%m-%d",
"hide_promo": true,
"label": "Original",
"layout": "A4",
"locale": "pt",
"logo_height": 40,
"watermark": ""
}
},
{
"id": "ce7c50c0-9d55-11f0-b3a4-87562f21f508",
"name": "Generate PDF (Duplicate)",
"provider": "pdf",
"summary": "Portuguese - A4",
"config": {
"date_format": "%Y-%m-%d",
"label": "Duplicado",
"layout": "A4",
"locale": "pt",
"logo_height": 40,
"watermark": "",
"duplicate": true
}
}
],
"rescue": [
{
"id": "805bdbf0-f2b9-11ef-acb2-cd64e858247e",
"name": "Set State",
"provider": "silo.state",
"config": {
"state": "error"
}
}
]
}
AT B2B invoice
AT B2B invoice
In this example, we’re issuing a simple invoice from a Portuguese supplier to another Portuguese business.Notice:
- the minimal version in the first tab contains only the essential fields required to create the invoice, without totals or calculations,
- the
pt-saft-v1addon ensures the document will be validated and normalized using the SAF-T PT v1 rules built into the GOBL library, - the
supplierandseriesfields are set to example values; you’ll need to replace them with the details of supplier and series registered as per the previous sections. The series must be registered in the Supplier Portal and follow Portuguese naming conventions (see Series Management for details), - when running
gobl build, or uploading the file, the system automatically calculates totals, assigns thept-saft-invoice-typeextension toFT(Fatura), sets thept-saft-payment-meansextension toCCfor card payment, and applies thept-saft-tax-rateextension toNORfor standard VAT, - the built version in the second tab shows the normalized document with calculated totals, line item sums (including advance payment deductions), tax breakdowns, and automatically generated fields, and,
- the
hitem unit causes thept-saft-product-typeextension to be set toS(Serviço), and thept-regionextension is automatically set toPT.
{
"$schema": "https://gobl.org/draft-0/bill/invoice",
"$regime": "PT",
"$addons": [
"pt-saft-v1"
],
"type": "standard",
"series": "FT SERIES-A",
"issue_date": "2024-12-23",
"currency": "EUR",
"supplier": {
"name": "Innovatech Lda",
"tax_id": {
"country": "PT",
"code": "504614240"
},
"addresses": [
{
"num": "156",
"street": "Avenida da República",
"locality": "Lisboa",
"code": "1050-045",
"country": "PT"
}
],
"emails": [
{
"addr": "maria@example.com"
}
],
"registration": {
"capital": "150000.00",
"office": "CRC Lisboa",
"other": "sob NIF 770013813"
}
},
"customer": {
"name": "Gusto Unipessoal Lda",
"tax_id": {
"country": "PT",
"code": "514329874"
},
"addresses": [
{
"street": "Avenida da Liberdade 152 2º Direito",
"locality": "Lisboa",
"code": "1250-146",
"country": "PT"
}
],
"emails": [
{
"addr": "gusto@example.com"
}
],
"websites": [
{
"url": "https://gusto.example.com"
}
],
"telephones": [
{
"num": "+351912345678"
}
]
},
"lines": [
{
"quantity": "20.0",
"item": {
"name": "Development services",
"price": "50.00",
"unit": "h"
},
"taxes": [
{
"cat": "VAT",
"rate": "standard"
}
]
}
],
"payment": {
"advances": [
{
"date": "2024-12-23",
"key": "card",
"description": "Advance payment",
"amount": "12.34"
}
]
}
}
AT delivery note
AT delivery note
In this example, we’re issuing a delivery note from a Portuguese supplier to another Portuguese receiver.Notice:
- the first tab shows the minimal version containing only the essential fields required to create the delivery document; there are no totals or calculations,
- the
pt-saft-v1addon ensures the document will be validated and normalized using the SAF-T PT v1 rules built into the GOBL library, - the
supplierandseriesfields are set to example values; you’ll need to replace them with the details of supplier and series registered as per the previous sections. The series must be registered in the Supplier Portal and follow Portuguese naming conventions (see Series Management for details), - this is an
notedocument type with thept-saft-movement-typeextension set toGR(Guia de Remessa), - when running
gobl build, or uploading the document, the system automatically calculates totals, applies the standard VAT rate with thept-saft-tax-rateextension set toNOR, and normalizes all fields, - the second tab shows the built version of the document with the calculated totals, line item sums, tax breakdowns, and automatically generated fields, and,delivery
- the
pt-regionextension is automatically set toPT.
{
"$schema": "https://gobl.org/draft-0/bill/delivery",
"$regime": "PT",
"$addons": [
"pt-saft-v1"
],
"type": "note",
"series": "GR SERIES-A",
"issue_date": "2026-04-01",
"currency": "EUR",
"despatch_date": "2026-04-02",
"receive_date": "2026-04-03",
"supplier": {
"name": "Innovatech Lda",
"tax_id": {
"country": "PT",
"code": "770013813"
},
"addresses": [
{
"street": "Rua das Flores 200 3º Esquerdo",
"locality": "Porto",
"code": "4050-265",
"country": "PT"
}
],
"registration": {
"capital": "100000.00",
"office": "Porto"
}
},
"customer": {
"name": "Gusto Unipessoal Lda",
"tax_id": {
"country": "PT",
"code": "514329874"
},
"addresses": [
{
"street": "Avenida da Liberdade 152 2º Direito",
"locality": "Lisboa",
"code": "1250-146",
"country": "PT"
}
]
},
"despatcher": {
"name": "Innovatech Logistics",
"addresses": [
{
"street": "Rua da Indústria 45",
"locality": "Porto",
"code": "4050-300",
"country": "PT"
}
]
},
"receiver": {
"name": "Gusto Armazém",
"addresses": [
{
"street": "Zona Industrial, Lote 23",
"locality": "Lisboa",
"code": "1300-300",
"country": "PT"
}
]
},
"lines": [
{
"quantity": "10",
"item": {
"name": "Product A",
"price": "5.00",
"unit": "unit",
"ext": {
"pt-saft-product-type": "P"
}
},
"taxes": [
{
"cat": "VAT",
"rate": "standard"
}
]
}
],
"notes": [
{
"text": "Delivery note for products"
}
]
}
AT return guide
AT return guide
A return guide (Guia de Devolução) records goods being returned to the supplier — for example, defective items, unsold stock, or any other scenario where previously delivered goods are sent back.Notice:
- the
pt-saft-movement-typeextension is set explicitly toGD(Guia de Devolução), - the
seriesfollows theGDprefix convention and must be registered through the Supplier Portal, and, - the flow of goods is reversed compared to a delivery note: the
customeris the party returning the goods, and thesupplieris the one receiving them back.
{
"$schema": "https://gobl.org/draft-0/bill/delivery",
"$regime": "PT",
"$addons": [
"pt-saft-v1"
],
"$tags": ["return"],
"type": "note",
"series": "GD SERIES-A",
"issue_date": "2026-04-03",
"currency": "EUR",
"despatch_date": "2026-04-03",
"receive_date": "2026-04-03",
"supplier": {
"name": "Innovatech Lda",
"tax_id": {
"country": "PT",
"code": "770013813"
},
"addresses": [
{
"street": "Rua das Flores 200 3º Esquerdo",
"locality": "Porto",
"code": "4050-265",
"country": "PT"
}
],
"registration": {
"capital": "100000.00",
"office": "Porto"
}
},
"customer": {
"name": "Gusto Unipessoal Lda",
"tax_id": {
"country": "PT",
"code": "514329874"
},
"addresses": [
{
"street": "Avenida da Liberdade 152 2º Direito",
"locality": "Lisboa",
"code": "1250-146",
"country": "PT"
}
]
},
"despatcher": {
"name": "Gusto Armazém",
"addresses": [
{
"street": "Zona Industrial, Lote 23",
"locality": "Lisboa",
"code": "1300-300",
"country": "PT"
}
]
},
"receiver": {
"name": "Innovatech Logistics",
"addresses": [
{
"street": "Rua da Indústria 45",
"locality": "Porto",
"code": "4050-300",
"country": "PT"
}
]
},
"lines": [
{
"quantity": "3",
"item": {
"name": "Product A",
"price": "5.00",
"unit": "unit",
"ext": {
"pt-saft-product-type": "P"
}
},
"taxes": [
{
"cat": "VAT",
"rate": "standard"
}
]
}
],
"notes": [
{
"text": "Goods returned by the customer."
}
]
}
AT global waybill
AT global waybill
For shipments where the specific recipient is not known upfront — for example, multi-stop delivery runs — issuers can emit a global waybill (Guia de Transporte Global) to cover the goods in transport.Notice:
- the document
typeis set towaybill, which thept-saft-v1addon normalizes to thept-saft-movement-typeextensionGT(Guia de Transporte), - the
seriesfollows theGTprefix convention required by the AT and must be registered through the Supplier Portal, and, - the
customerfield is omitted: when no customer is provided on aGT, the SAF-T submission auto-fills the AT-prescribed generic entry Consumidor final with NIF999999990and address Desconhecido.
{
"$schema": "https://gobl.org/draft-0/bill/delivery",
"$regime": "PT",
"$addons": [
"pt-saft-v1"
],
"type": "waybill",
"series": "GT SERIES-A",
"issue_date": "2026-04-01",
"currency": "EUR",
"despatch_date": "2026-04-02",
"supplier": {
"name": "Innovatech Lda",
"tax_id": {
"country": "PT",
"code": "770013813"
},
"addresses": [
{
"street": "Rua das Flores 200 3º Esquerdo",
"locality": "Porto",
"code": "4050-265",
"country": "PT"
}
],
"registration": {
"capital": "100000.00",
"office": "Porto"
}
},
"despatcher": {
"name": "Innovatech Logistics",
"addresses": [
{
"street": "Rua da Indústria 45",
"locality": "Porto",
"code": "4050-300",
"country": "PT"
}
]
},
"lines": [
{
"quantity": "100",
"item": {
"name": "Product A",
"price": "5.00",
"unit": "unit",
"ext": {
"pt-saft-product-type": "P"
}
},
"taxes": [
{
"cat": "VAT",
"rate": "standard"
}
]
}
],
"notes": [
{
"text": "Global waybill for multi-stop delivery"
}
]
}
AT delivery from global waybill
AT delivery from global waybill
Once the recipient of part of the goods covered by a global waybill is known, a concrete document — typically a
GR (Guia de Remessa) — must be issued with the full transaction details, including the customer and a cross-reference back to the originating GT so the AT can correlate both records.Notice:- the
customeris now populated with the actual recipient of the goods, and, - the
precedingarray carries one entry with theseries,code, andissue_dateof the originatingGT.
{
"$schema": "https://gobl.org/draft-0/bill/delivery",
"$regime": "PT",
"$addons": [
"pt-saft-v1"
],
"type": "note",
"series": "GR SERIES-A",
"issue_date": "2026-04-02",
"currency": "EUR",
"despatch_date": "2026-04-02",
"receive_date": "2026-04-02",
"preceding": [
{
"series": "GT SERIES-A",
"code": "1",
"issue_date": "2026-04-01"
}
],
"supplier": {
"name": "Innovatech Lda",
"tax_id": {
"country": "PT",
"code": "770013813"
},
"addresses": [
{
"street": "Rua das Flores 200 3º Esquerdo",
"locality": "Porto",
"code": "4050-265",
"country": "PT"
}
],
"registration": {
"capital": "100000.00",
"office": "Porto"
}
},
"customer": {
"name": "Gusto Unipessoal Lda",
"tax_id": {
"country": "PT",
"code": "514329874"
},
"addresses": [
{
"street": "Avenida da Liberdade 152 2º Direito",
"locality": "Lisboa",
"code": "1250-146",
"country": "PT"
}
]
},
"despatcher": {
"name": "Innovatech Logistics",
"addresses": [
{
"street": "Rua da Indústria 45",
"locality": "Porto",
"code": "4050-300",
"country": "PT"
}
]
},
"receiver": {
"name": "Gusto Armazém",
"addresses": [
{
"street": "Zona Industrial, Lote 23",
"locality": "Lisboa",
"code": "1300-300",
"country": "PT"
}
]
},
"lines": [
{
"quantity": "10",
"item": {
"name": "Product A",
"price": "5.00",
"unit": "unit",
"ext": {
"pt-saft-product-type": "P"
}
},
"taxes": [
{
"cat": "VAT",
"rate": "standard"
}
]
}
],
"notes": [
{
"text": "Stop delivery from global waybill GT SERIES-A/1"
}
]
}
AT return from global waybill
AT return from global waybill
A return can also be linked back to a global waybill — for example, when surplus goods that were not delivered to any customer come back to the depot at the end of a delivery run.Notice:
- as in the standalone return guide, the
pt-saft-movement-typeextension is set explicitly toGD, - the
precedingarray references the originatingGT, and, - the
customeris omitted, since the goods are returning to the issuer’s own depot rather than to a specific party.
{
"$schema": "https://gobl.org/draft-0/bill/delivery",
"$regime": "PT",
"$addons": [
"pt-saft-v1"
],
"$tags": ["return"],
"type": "note",
"series": "GD SERIES-A",
"issue_date": "2026-04-03",
"currency": "EUR",
"preceding": [
{
"issue_date": "2026-04-01",
"series": "GT SERIES-A",
"code": "1"
}
],
"despatch_date": "2026-04-03",
"supplier": {
"name": "Innovatech Lda",
"tax_id": {
"country": "PT",
"code": "770013813"
},
"addresses": [
{
"street": "Rua das Flores 200 3º Esquerdo",
"locality": "Porto",
"code": "4050-265",
"country": "PT"
}
],
"registration": {
"capital": "100000.00",
"office": "Porto"
}
},
"despatcher": {
"name": "Innovatech Logistics",
"addresses": [
{
"street": "Rua da Indústria 45",
"locality": "Porto",
"code": "4050-300",
"country": "PT"
}
]
},
"receiver": {
"name": "Innovatech Depot",
"addresses": [
{
"street": "Rua da Indústria 45",
"locality": "Porto",
"code": "4050-300",
"country": "PT"
}
]
},
"lines": [
{
"quantity": "2",
"item": {
"name": "Product A",
"price": "5.00",
"unit": "unit",
"ext": {
"pt-saft-product-type": "P"
}
},
"taxes": [
{
"cat": "VAT",
"rate": "standard"
}
]
}
],
"notes": [
{
"text": "Surplus from global waybill GT SERIES-A/1 returned to depot."
}
]
}
AT payment receipt
AT payment receipt
In this example, we’re issuing a payment receipt from a Portuguese supplier to another Portuguese business.Notice:
- the minimal version in the first tab contains only the essential fields required to create the payment document, without totals or calculations,
- the
pt-saft-v1addon ensures the document will be validated and normalized using the SAF-T PT v1 rules built into the GOBL library, - the
supplierandseriesfields are set to example values; you’ll need to replace them with the details of supplier and series registered as per the previous sections. The series must be registered in the Supplier Portal and follow Portuguese naming conventions (see Series Management for details), - this is a
receiptpayment with the method set tocash, which causes GOBL to automatically assign thept-saft-payment-meansextension toNU(Numerário), - when running
gobl build, or uploading the document, the system automatically assigns thept-saft-payment-typeextension toRGand thept-saft-sourceextension toP, - the built version in the second tab shows the normalized document with all automatically generated fields and extensions properly set,
- the payment lines reference the original invoice document being paid, and,
{
"$schema": "https://gobl.org/draft-0/bill/payment",
"$regime": "PT",
"$addons": [
"pt-saft-v1"
],
"type": "receipt",
"method": {
"key": "cash",
"detail": "Full settlement made in cash"
},
"series": "RG SERIES-A",
"issue_date": "2024-12-23",
"currency": "EUR",
"supplier": {
"name": "Innovatech Lda",
"tax_id": {
"country": "PT",
"code": "770013813"
},
"addresses": [
{
"street": "Rua das Flores 200 3º Esquerdo",
"locality": "Porto",
"code": "4050-265",
"country": "PT"
}
],
"registration": {
"capital": "100000.00",
"office": "Porto"
}
},
"customer": {
"name": "Gusto Unipessoal Lda",
"tax_id": {
"country": "PT",
"code": "514329874"
},
"addresses": [
{
"street": "Avenida da Liberdade 152 2º Direito",
"locality": "Lisboa",
"code": "1250-146",
"country": "PT"
}
],
"emails": [
{
"addr": "gusto@example.com"
}
],
"websites": [
{
"url": "https://gusto.example.com"
}
],
"telephones": [
{
"num": "+351912345678"
}
]
},
"lines": [
{
"document": {
"issue_date": "2024-12-23",
"series": "FT SERIES-A",
"code": "1",
"description": "Invoice 1"
},
"amount": "61.50",
"tax": {
"categories": [
{
"code": "VAT",
"rates": [
{
"key": "standard",
"ext": {
"pt-region": "PT",
"pt-saft-tax-rate": "NOR"
},
"base": "50.00",
"percent": "23.0%",
"amount": "11.50"
}
],
"amount": "11.50"
}
],
"sum": "11.50"
}
}
]
}
AT Portugal invoice
AT Portugal invoice
AT Invoice
{
"$schema": "https://gobl.org/draft-0/bill/invoice",
"$regime": "PT",
"$addons": [
"pt-saft-v1"
],
"type": "standard",
"series": "FT SERIES-A",
"issue_date": "2024-12-23",
"currency": "EUR",
"supplier": {
"name": "Innovatech Lda",
"tax_id": {
"country": "PT",
"code": "770013813"
},
"registration": {
"capital": "100000.00",
"office": "Porto"
}
},
"customer": {
"name": "Gusto Unipessoal Lda",
"tax_id": {
"country": "PT",
"code": "514329874"
},
"addresses": [
{
"street": "Avenida da Liberdade 152 2º Direito",
"locality": "Lisboa",
"code": "1250-146",
"country": "PT"
}
],
"telephones": [
{
"num": "+351912345678"
}
]
},
"lines": [
{
"i": 1,
"quantity": "1",
"item": {
"name": "Development services",
"price": "50.00",
"unit": "item",
"ext": {
"pt-saft-product-type": "S"
}
},
"sum": "50.00",
"taxes": [
{
"cat": "VAT",
"key": "standard",
"rate": "general",
"percent": "23.0%"
}
],
"total": "50.00"
}
],
"payment": {
"terms": {
"key": "advanced"
},
"advances": [
{
"date": "2024-12-18",
"description": "Transferência bancária",
"amount": "50.00"
}
]
}
}
AT Portugal credit note
AT Portugal credit note
AT Credit Note
{
"$schema": "https://gobl.org/draft-0/envelope",
"head": {
"uuid": "0194750c-c66c-7000-8da0-61dfef43434d",
"dig": {
"alg": "sha256",
"val": "44dfb55c750757111727cc592f3a452b352723ab8542c089fc84d79954852347"
}
},
"doc": {
"$schema": "https://gobl.org/draft-0/bill/invoice",
"$regime": "PT",
"$addons": [
"pt-saft-v1"
],
"uuid": "0194750c-a28c-7001-9e19-c7067a088481",
"type": "credit-note",
"series": "NC SERIES-A",
"issue_date": "2024-12-23",
"value_date": "2024-12-23",
"currency": "EUR",
"preceding": [
{
"uuid": "0193f36f-9fda-7000-9aff-4f4e28043a66",
"type": "standard",
"issue_date": "2024-08-03",
"series": "FT SERIES-A",
"code": "1",
"reason": "Reimbursement"
}
],
"tax": {
"ext": {
"pt-saft-invoice-type": "NC",
"pt-saft-source": "P"
}
},
"supplier": {
"name": "Innovatech Lda",
"tax_id": {
"country": "PT",
"code": "770013813"
},
"addresses": [
{
"street": "Rua das Flores 200 3º Esquerdo",
"locality": "Porto",
"code": "4050-265",
"country": "PT"
}
],
"registration": {
"capital": "100000.00",
"office": "Porto"
}
},
"customer": {
"name": "Gusto Unipessoal Lda",
"tax_id": {
"country": "PT",
"code": "514329874"
},
"addresses": [
{
"street": "Avenida da Liberdade 152 2º Direito",
"locality": "Lisboa",
"code": "1250-146",
"country": "PT"
}
],
"emails": [
{
"addr": "gusto@example.com"
}
],
"websites": [
{
"url": "https://gusto.example.com"
}
],
"telephones": [
{
"num": "+351912345678"
}
]
},
"lines": [
{
"i": 1,
"quantity": "1",
"item": {
"name": "Development services",
"price": "50.00",
"unit": "item",
"ext": {
"pt-saft-product-type": "S"
}
},
"sum": "50.00",
"taxes": [
{
"cat": "VAT",
"key": "standard",
"rate": "general",
"percent": "23.0%",
"ext": {
"pt-region": "PT",
"pt-saft-tax-rate": "NOR"
}
}
],
"total": "50.00"
}
],
"totals": {
"sum": "50.00",
"total": "50.00",
"taxes": {
"categories": [
{
"code": "VAT",
"rates": [
{
"key": "standard",
"ext": {
"pt-region": "PT",
"pt-saft-tax-rate": "NOR"
},
"base": "50.00",
"percent": "23.0%",
"amount": "11.50"
}
],
"amount": "11.50"
}
],
"sum": "11.50"
},
"tax": "11.50",
"total_with_tax": "61.50",
"payable": "61.50"
}
}
}
AT Portugal order
AT Portugal order
AT Order
{
"$schema": "https://gobl.org/draft-0/bill/order",
"$regime": "PT",
"$addons": [
"pt-saft-v1"
],
"uuid": "0193f36f-9fda-7000-9aff-4f4e28043a66",
"type": "purchase",
"series": "NE SERIES-A",
"issue_date": "2024-12-23",
"value_date": "2024-12-23",
"currency": "EUR",
"tax": {
"ext": {
"pt-saft-work-type": "NE"
}
},
"supplier": {
"name": "Innovatech Lda",
"tax_id": {
"country": "PT",
"code": "770013813"
},
"addresses": [
{
"street": "Rua das Flores 200 3º Esquerdo",
"locality": "Porto",
"code": "4050-265",
"country": "PT"
}
],
"registration": {
"capital": "100000.00",
"office": "Porto"
}
},
"customer": {
"name": "Gusto Unipessoal Lda",
"tax_id": {
"country": "PT",
"code": "514329874"
},
"addresses": [
{
"street": "Avenida da Liberdade 152 2º Direito",
"locality": "Lisboa",
"code": "1250-146",
"country": "PT"
}
],
"emails": [
{
"addr": "gusto@example.com"
}
],
"websites": [
{
"url": "https://gusto.example.com"
}
],
"telephones": [
{
"num": "+351912345678"
}
]
},
"lines": [
{
"i": 1,
"quantity": "1",
"order": "PO-2024-001",
"item": {
"name": "Development services",
"price": "50.00",
"unit": "one",
"ext": {
"pt-saft-product-type": "S"
}
},
"sum": "50.00",
"discounts": [
{
"percent": "15.0%",
"amount": "7.50"
}
],
"taxes": [
{
"cat": "VAT",
"key": "standard",
"rate": "general",
"percent": "23.0%",
"ext": {
"pt-region": "PT",
"pt-saft-tax-rate": "NOR"
}
}
],
"total": "42.50"
}
],
"totals": {
"sum": "42.50",
"total": "42.50",
"taxes": {
"categories": [
{
"code": "VAT",
"rates": [
{
"key": "standard",
"ext": {
"pt-region": "PT",
"pt-saft-tax-rate": "NOR"
},
"base": "42.50",
"percent": "23.0%",
"amount": "9.78"
}
],
"amount": "9.78"
}
],
"sum": "9.78"
},
"tax": "9.78",
"total_with_tax": "52.28",
"payable": "52.28"
}
}
AT Portugal supplier
AT Portugal supplier
Portugal AT supplier example
{
"$schema": "https://gobl.org/draft-0/org/party",
"name": "Innovatech Lda",
"tax_id": {
"country": "PT",
"code": "504614240"
},
"addresses": [
{
"num": "156",
"street": "Avenida da República",
"locality": "Lisboa",
"code": "1050-045",
"country": "PT"
}
],
"emails": [
{
"addr": "maria@example.com"
}
],
"registration": {
"capital": "150000.00",
"office": "CRC Lisboa",
"other": "sob NIF 770013813"
}
}
🇵🇹 Invopop resources for Portugal
🇵🇹 Invopop resources for Portugal
| Compliance | Compliance timeline |
| Apps | |
| Guides | AT Portugal Guide |
| FAQ | Portugal FAQ |
| GOBL |
Portugal FAQ
Frequently asked questions about invoicing compliance in Portugal →
Participate in our community
Ask and answer questions about AT Portugal App →