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

# Smart Receipts Guide

> Issue e-receipts in Italy

## Introduction

Invopop's Smart Receipts provider allows you to generate and issue electronic tickets (*documento commerciale/scontrino elettronico*) in Italy.

The *documento commerciale* is a digital fiscal document that records sales transactions and transmits them to the *Agenzia delle Entrate* (AdE). This digital receipt replaces traditional paper receipts while maintaining full fiscal compliance and serves as official proof of purchase for your customers.

Italian law requires businesses to transmit sales data digitally through either a certified *Registratore Telematico* (RT) or the [AdE's online portal](https://www.agenziaentrate.gov.it/portale/aree-tematiche/fatturazione-elettronica). Smart Receipts streamlines this process by providing a secure interface to relay your sales data to the AdE through a local provider.

Important distinctions for the *Documento Commerciale*:

* It is not an invoice (*fattura*) - invoices require detailed buyer information and follow different tax rules.
* It does not replace transport documents (*documento di trasporto*).
* It is not a simple internal receipt - it serves an official fiscal function requiring AdE transmission.
* It must include VAT at the time of sale - deferred VAT payment is not permitted.

The AdE portal provides functionality to create tickets, void them entirely, and process refunds at the item level. Invopop's Smart Receipts implementation supports all these operations, allowing you to manage your electronic tickets programmatically through our API or manually via the Console.

| -            | Sandbox            | Live                                          |
| ------------ | ------------------ | --------------------------------------------- |
| **Supplier** | Test data accepted | Real Partita IVA and AdE credentials required |

## Prerequisites

Before you begin, ensure you have:

* An Italian tax ID (Partita IVA) for the supplier.
* Invoice line items that include:
  * quantity,
  * name ,
  * price (including VAT),
  * VAT rate,
  * item type (specified in extension).

## Setup

There are five key processes to prepare:

1. Create a supplier post-registration workflow.
2. Connect the Italian Smart Receipts app.
3. Configure a supplier registration workflow.
4. Prepare an invoicing workflow.
5. Prepare a voiding workflow.

<Info>
  These instructions work in both sandbox and live environments. The only differences are in supplier data and registration details when using test environments.
</Info>

Follow these steps in the [Invopop Console](https://console.invopop.com).

<Steps>
  <Step title="Create Supplier post-registration workflow">
    <Tabs>
      <Tab title="Template">
        <Card iconType="duotone" title="Smart Receipts supplier post-registration workflow" icon="code-branch" href="https://console.invopop.com/redirect/workflows/new?template=ticket-post-registration" cta="Add to my workspace">
          This workflow marks suppliers as `Registered`. You will select this workflow in the Italian Smart Receipts app configuration later.
        </Card>
      </Tab>

      <Tab title="Code">
        Copy and paste into a new [Empty Party workflow](https://console.invopop.com/redirect/workflows/new?template=empty-party) code view.

        ```json Example SDI post-registration workflow theme={"system"}
        {
          "name": "SDI supplier post-registration",
          "description": "Mark an SDI customer 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": []
        }
        ```
      </Tab>

      <Tab title="Build from scratch">
        Before starting, review the [workflows guide](/guides/features/workflows) to understand the general setup process.

        In [Console](https://console.invopop.com), create a new workflow and choose [Empty Party workflow](https://console.invopop.com/redirect/workflows/new?template=empty-party) as the base. Then name the workflow with a descriptive label such as "Smart Receipt Post-registration".

        This workflow is composed of a single step:

        1. **Set state** - To `Registered`.

        Though you can customize it to suit your needs (adding a webhook, or an email notification after a supplier has been registered.)
      </Tab>
    </Tabs>
  </Step>

  <Step title="Connect the Italian Smart Receipts app">
    1. Navigate to **Configuration** → **Apps**.
    2. Find **Italian Smart Receipts** in the app discovery list.
    3. Click **Connect** to activate.

    <Frame>
      <img src="https://mintcdn.com/invopop/-KQ2_uysex-mWyqz/assets/guides/it-ticket-app.png?fit=max&auto=format&n=-KQ2_uysex-mWyqz&q=85&s=ba776cd869793840a07c305a93439915" width="360px" alt="Smart Receipts App" data-path="assets/guides/it-ticket-app.png" />
    </Frame>

    Click the **Configure** button on the app, and choose the "Post-registration workflow" we created in the previous step.

    Click the **Save** button.
  </Step>

  <Step title="Configure the supplier registration workflow">
    <Tabs>
      <Tab title="Template">
        <Card iconType="duotone" title="Smart receipts supplier registration workflow" icon="code-branch" href="https://console.invopop.com/redirect/workflows/new?template=ticket-register-supplier" cta="Add to my workspace">
          This workflow will issue a registration request for a supplier to complete in order to issue receipts through SDI.
        </Card>
      </Tab>

      <Tab title="Code">
        Copy and paste into a new [Empty Party workflow](https://console.invopop.com/redirect/workflows/new?template=empty-party) code view.

        ```json Example Smart Receipts register supplier workflow theme={"system"}
        {
          "name": "Smart Receipts register supplier",
          "description": "Register a supplier with AdE",
          "schema": "org/party",
          "steps": [
            {
              "id": "1a1be400-2b32-11f0-984e-0542d5f28f0b",
              "name": "Sign envelope",
              "provider": "silo.close"
            },
            {
              "id": "de116bb0-25b4-11f0-864a-193f213df097",
              "name": "Register supplier with AdE",
              "provider": "ticket-it.register"
            },
            {
              "id": "e0a1b380-25b4-11f0-864a-193f213df097",
              "name": "Set state",
              "provider": "silo.state",
              "summary": "Set state to `processing`{.state .processing}",
              "config": {
                "state": "processing"
              }
            }
          ],
          "rescue": [
            {
              "id": "1deb1470-2b32-11f0-984e-0542d5f28f0b",
              "name": "Set state",
              "provider": "silo.state",
              "summary": "Set state to `error`{.state .error}",
              "config": {
                "state": "error"
              }
            }
          ]
        }

        ```
      </Tab>

      <Tab title="Build from scratch">
        Before starting, review the [workflows guide](/guides/features/workflows) to understand the general setup process.

        In [Console](https://console.invopop.com), create a new workflow and choose [Empty Party workflow](https://console.invopop.com/redirect/workflows/new?template=empty-party) as the base. Then name the workflow with a descriptive label such as "SDI Register Supplier".

        The new workflow will need to perform three steps:

        * **Sign envelope**
        * **Register supplier with AdE**
        * **Set state** - select `Processing`.

        Add any additional steps you may need, and save the new workflow.
      </Tab>
    </Tabs>
  </Step>

  <Step title="Prepare Invoice Workflow">
    <Tabs>
      <Tab title="Template">
        <Card iconType="duotone" title="Smart Receipts issue receipt workflow" icon="code-branch" href="https://console.invopop.com/redirect/workflows/new?template=it-ticket-send" cta="Add to my workspace">
          This workflow will issue a Smart Receipt through Italy's AdE.
        </Card>
      </Tab>

      <Tab title="Code">
        Copy and paste into a new [Empty Invoice workflow](https://console.invopop.com/redirect/workflows/new?template=empty-invoice) code view.

        ```json Example Smart Receipts issue receipt workflow theme={"system"}
        {
          "name": "Smart Receipts issue receipt",
          "description": "Issue an Italian *documento commerciale* via AdE",
          "schema": "bill/invoice",
          "steps": [
            {
              "id": "0b0bdb00-25b5-11f0-864a-193f213df097",
              "name": "Sign envelope",
              "provider": "silo.close"
            },
            {
              "id": "04427d60-25b5-11f0-864a-193f213df097",
              "name": "Send receipt to AdE",
              "provider": "ticket-it.send"
            },
            {
              "id": "9e973e00-2b2d-11f0-984e-0542d5f28f0b",
              "name": "Generate PDF",
              "provider": "pdf",
              "summary": "Italian · A4",
              "config": {
                "logo_height": 40,
                "locale": "it",
                "date_format": "%Y-%m-%d",
                "layout": "A4"
              }
            },
            {
              "id": "112326b0-25b5-11f0-864a-193f213df097",
              "name": "Set state",
              "provider": "silo.state",
              "summary": "Set state to `sent`{.state .sent}",
              "config": {
                "state": "sent"
              }
            }
          ],
          "rescue": [
            {
              "id": "194a66a0-25b5-11f0-864a-193f213df097",
              "name": "Set state",
              "provider": "silo.state",
              "summary": "Set state to `error`{.state .error}",
              "config": {
                "state": "error"
              }
            }
          ]
        }

        ```
      </Tab>

      <Tab title="Build from scratch">
        Before starting, review the [workflows guide](/guides/features/workflows) to understand the general setup process.

        In [Console](https://console.invopop.com), create a new workflow and choose [Empty Invoice workflow](https://console.invopop.com/redirect/workflows/new?template=empty-invoice) as the base. Then name the workflow with a descriptive label such as "Issue Italian Smart Receipts".

        The new workflow will need to perform three steps:

        * **Add sequential code** - with dynamic sequences, and name like "Italian Smart Receipts".
        * **Send receipt to AdE**.
        * **Generate PDF** - configured for your environment.
        * **Set state** - to `Sent`.

        Finally, in the Error Handling area, add the **Set state** action and select `Error`.

        Add any additional steps you may need, and save the new workflow.

        <Frame>
          <img src="https://mintcdn.com/invopop/-KQ2_uysex-mWyqz/assets/guides/it-ticket-invoice.png?fit=max&auto=format&n=-KQ2_uysex-mWyqz&q=85&s=708cc338dd53fdf41973bb59e666688c" alt="Issue Italian Smart Receipts" width="1978" height="2238" data-path="assets/guides/it-ticket-invoice.png" />
        </Frame>
      </Tab>
    </Tabs>
  </Step>

  <Step title="Prepare Void Workflow">
    <Tabs>
      <Tab title="Template">
        <Card iconType="duotone" title="Smart Receipts void receipt workflow" icon="code-branch" href="https://console.invopop.com/redirect/workflows/new?template=ticket-void-receipt" cta="Add to my workspace">
          This workflow will void Smart Receipts from the AdE.
        </Card>
      </Tab>

      <Tab title="Code">
        Copy and paste into a new [Empty Invoice workflow](https://console.invopop.com/redirect/workflows/new?template=empty-invoice) code view.

        ```json Example Smart Receipts void receipt workflow theme={"system"}
        {
          "name": "Smart Receipts void receipt",
          "description": "Void an Italian *documento commerciale* on AdE",
          "schema": "bill/invoice",
          "steps": [
            {
              "id": "02a62be0-2b2e-11f0-984e-0542d5f28f0b",
              "name": "Void receipt with AdE",
              "provider": "ticket-it.void"
            },
            {
              "id": "1583e220-2b2e-11f0-984e-0542d5f28f0b",
              "name": "Set state",
              "provider": "silo.state",
              "summary": "Set state to `void`{.state .void}",
              "config": {
                "state": "void"
              }
            }
          ],
          "rescue": [
            {
              "id": "25c98860-2b2e-11f0-984e-0542d5f28f0b",
              "name": "Set state",
              "provider": "silo.state",
              "summary": "Set state to `error`{.state .error}",
              "config": {
                "state": "error"
              }
            }
          ]
        }

        ```
      </Tab>

      <Tab title="Build from scratch">
        Before starting, review the [workflows guide](/guides/features/workflows) to understand the general setup process.

        In [Console](https://console.invopop.com), create a new workflow and choose [Empty Invoice workflow](https://console.invopop.com/redirect/workflows/new?template=empty-invoice) as the base. Then name the workflow with a descriptive label such as "Void Italian Smart Receipts".

        The new workflow will need to perform three steps:

        * **Void receipt with AdE**.
        * **Set state** - to `Sent`.

        Finally, in the Error Handling area, add the **Set state** action and select `Error`.

        Add any additional steps you may need, and save the new workflow.

        <Frame>
          <img src="https://mintcdn.com/invopop/-KQ2_uysex-mWyqz/assets/guides/it-ticket-void.png?fit=max&auto=format&n=-KQ2_uysex-mWyqz&q=85&s=56c0bba2c9762f692227622e807de47d" alt="Void Italian Smart Receipts" width="1428" height="1000" data-path="assets/guides/it-ticket-void.png" />
        </Frame>
      </Tab>
    </Tabs>
  </Step>
</Steps>

## Running

Each company who will issue e-receipts must first register as a supplier in Invopop. In this section we'll first explain how to register a supplier using the registration workflow we setup, and then how to issue and void invoices on behalf of that supplier, with the corresponding workflows.

As usual, the recommended approach for running jobs is to perform two steps; first upload the document to the [silo](/api-ref/silo/entries/create-an-entry-put), second [create a job](/api-ref/transform/jobs/create-a-job-put).

### Register a Supplier

You can register suppliers either manually via the Invopop Console or programmatically via the API. The process is essentially the same. We'll demonstrate the manual process first, followed by the [API flow](#register-a-supplier-via-the-api).

<Warning>
  Suppliers in Italy using this system must generate and provide their [AdE](https://ivaservizi.agenziaentrate.gov.it/portale/)
  credentials so that invoices can be processed on their behalf. This is not an automated service and can only be
  performed manually by a representative of the supplier.
</Warning>

1. Navigate to **Parties** → **Suppliers** in the sidebar
2. Click **+ New Supplier**
3. In the editor, enter the supplier details

Here's an example using test data (only valid for sandbox environments):

<AccordionGroup>
  <Accordion title="View supplier Data for sandbox">
    ```json theme={"system"}
    {
        "$schema": "https://gobl.org/draft-0/org/party",
        "uuid": "018fbeda-bc61-7000-b66d-398ce3e21c43",
        "name": "Milano Pizza",
        "tax_id": {
            "country": "IT",
            "code": "48220010093"
        },
        "identities": [
            {
                "key": "it-fiscal-code",
                "code": "MRTMTT91D08F205J"
            }
        ]
    }
    ```

    <Info>
      You may notice that we included the Italian fiscal code in the supplier, this is not necessary at the moment but will be asked for, if not provided, during the registration process.
    </Info>
  </Accordion>
</AccordionGroup>

Tap **Build**, ensure there are no errors, and click **Save**.

We should now see the document. Find and click the **Select Workflow** button. Select the **Register Supplier** workflow created during setup, and click **Run Workflow**.

The execution should be successful, and the silo entry will now be in the `Processing` state. Tap the **Meta** tab to see the registration link:

<Frame>
  <img src="https://mintcdn.com/invopop/-KQ2_uysex-mWyqz/assets/guides/it-ticket-reg-link.png?fit=max&auto=format&n=-KQ2_uysex-mWyqz&q=85&s=83439ccd6817ca3fb3478ddf42ebeaa6" width="450px" alt="Supplier Registration Link" data-path="assets/guides/it-ticket-reg-link.png" />
</Frame>

<Info>
  You can access the registration link via the API by [fetching the silo
  entry](/api-ref/silo/entries/fetch-an-entry) and reading the `meta` row where
  the `key` is set to `registration-link`.
</Info>

Tap the registration link and a new browser window will be presented with a form to upload the credentials for the supplier. Note that this form can be shared directly with the supplier if required.

<Frame>
  <img src="https://mintcdn.com/invopop/-KQ2_uysex-mWyqz/assets/guides/it-ticket-reg-sp.png?fit=max&auto=format&n=-KQ2_uysex-mWyqz&q=85&s=f28cf6ae052e1508140cebf8f5c10c7a" alt="Issuer Registration Form" width="1130" height="834" data-path="assets/guides/it-ticket-reg-sp.png" />
</Frame>

The details from this form are sent securely to local partner who will be responsible for sending them to the AdE.
We will update the supplier with the provided *codice fiscale* for future use but will not store any type of credentials.

<Warning>
  These credentials will expire every 90 days. You must first update your credentials on the official AdE web portal, then enter these new credentials in our registration form. You can use the same registration link to update your credentials.
</Warning>

### Register a supplier via the API

The whole registration process can also be completed programmatically. This is useful in [white-label](/guides/white-label) setups where you want to collect the supplier's credentials inside your own product instead of sharing Invopop's hosted form.

<Steps>
  <Step title="Upload the supplier">
    Use the [Create an entry](/api-ref/silo/entries/create-an-entry-put) endpoint to upload the supplier [party](https://docs.gobl.org/draft-0/org/party), like the example in the previous section. The party must include the company `name` and an Italian `tax_id` (Partita IVA). Optionally include the `it-fiscal-code` identity and an email address to pre-fill the registration form.
  </Step>

  <Step title="Run the registration workflow">
    Send the supplier to the registration workflow using the [Create a job](/api-ref/transform/jobs/create-a-job-put) endpoint with the IDs of the **silo entry** and the **supplier registration workflow** created during setup.
  </Step>

  <Step title="Fetch the registration link">
    [Fetch the silo entry](/api-ref/silo/entries/fetch-an-entry) and read the `meta` row where the `key` is `registration-link`. The `link_url` will look like this:

    ```
    https://ticket-it.invopop.com/register/{owner_id}/{entry_id}?exp={expiry}&sig={signature}
    ```

    The URL is signed: the `exp` and `sig` query parameters are validated on every request, so always use the `link_url` exactly as returned. Requests with missing or modified parameters are rejected.
  </Step>

  <Step title="Submit the credentials">
    Opening the link in a browser presents the hosted registration form. To submit the credentials from your own product instead, send a `PUT` request to the `link_url` (keeping the query parameters intact) with the following JSON body:

    ```json theme={"system"}
    {
      "fiscal_id": "48220010093",
      "codice_fiscale": "MRTMTT91D08F205J",
      "email": "supplier@example.com",
      "password": "supplier-ade-password",
      "pin": "12345678"
    }
    ```

    | Field            | Required | Description                                                                              |
    | ---------------- | -------- | ---------------------------------------------------------------------------------------- |
    | `fiscal_id`      | Yes      | The supplier's Partita IVA, without the `IT` country prefix.                             |
    | `codice_fiscale` | Yes      | The supplier's *codice fiscale*. It will be stored in the supplier party for future use. |
    | `password`       | Yes      | The supplier's AdE portal password.                                                      |
    | `pin`            | Yes      | The supplier's AdE portal PIN.                                                           |
    | `email`          | No       | Email address to receive AdE notifications. Updates the supplier party if changed.       |

    A `200` response means the registration is complete and the post-registration workflow configured in the app will be launched. Errors are returned as `{"error": "<message>"}` with a `400` status for client errors (invalid or expired link, missing fields) or `500` for server errors.

    The same endpoint can be called again with the same link to update the supplier's credentials when they expire.
  </Step>
</Steps>

### Send an Invoice

Use these [GOBL](https://docs.gobl.org) document examples as templates in the [Invopop Console](https://console.invopop.com) or when creating silo entries via the API.

For proper validation and normalization, set these properties in your [GOBL Invoices](https://docs.gobl.org/draft-0/bill/invoice):

* Set `$region` to [`IT`](https://docs.gobl.org/regimes/it)
* Include [`it-ticket-v1`](https://docs.gobl.org/addons/it-ticket-v1) in `$addons`

While Invopop attempts to set these automatically based on other invoice fields, we recommend defining them explicitly.

<AccordionGroup>
  <Accordion title="B2C Invoice">
    This example shows a simple B2C invoice from an Italian supplier (Documento Commerciale). Key points to note:

    * The minimal version (`ticket-b2c.min.mdx`) contains only the essential fields required to create the invoice
    * The [`it-ticket-v1`](https://docs.gobl.org/addons/it-ticket-v1) addon ensures validation using AdE CF v1 rules built into [GOBL](https://docs.gobl.org)
    * Extensions (`ext`) fields specify values that cannot be determined otherwise:
      * Items have an extension identifying them as goods or services
      * VAT exemptions require an Italian exemption code
    * The `prices_include` field indicates that item prices include VAT
    * When running `gobl build`, the system automatically calculates totals, line item sums, IVA breakdowns, and normalizes the document according to Smart Receipts requirements
    * The built version (`ticket-b2c.mdx`) shows the normalized document with all calculated fields including line indices, sums, and total amounts

    <CodeGroup>
      ```json Documento Commerciale theme={"system"}
      {
        "$schema": "https://gobl.org/draft-0/bill/invoice",
        "$addons": ["it-ticket-v1"],
        "series": "XXIT",
        "code": "001",
        "currency": "EUR",
        "tax": {
          "prices_include": "VAT"
        },
        "type": "standard",
        "supplier": {
          "name": "Cleaning SRL",
          "tax_id": {
            "country": "IT",
            "code": "74230430451"
          }
        },
        "lines": [
          {
            "quantity": "1",
            "item": {
              "name": "Cleaning services",
              "price": "125.00",
              "ext": {
                "it-ticket-product": "services"
              }
            },
            "taxes": [
              {
                "cat": "VAT",
                "ext": {
                  "it-ticket-exempt": "N3"
                }
              }
            ]
          },
          {
            "quantity": "3",
            "item": {
              "name": "Cleaning products",
              "price": "137.50",
              "ext": {
                "it-ticket-product": "goods"
              }
            },
            "taxes": [
              {
                "cat": "VAT",
                "rate": "standard"
              }
            ]
          }
        ]
      }
      ```

      ```json Built version theme={"system"}
      {
      	"$schema": "https://gobl.org/draft-0/bill/invoice",
      	"$regime": "IT",
      	"$addons": [
      		"it-ticket-v1"
      	],
      	"type": "standard",
      	"series": "XXIT",
      	"code": "001",
      	"issue_date": "2026-07-08",
      	"currency": "EUR",
      	"tax": {
      		"prices_include": "VAT"
      	},
      	"supplier": {
      		"name": "Cleaning SRL",
      		"tax_id": {
      			"country": "IT",
      			"code": "74230430451"
      		}
      	},
      	"lines": [
      		{
      			"i": 1,
      			"quantity": "1",
      			"item": {
      				"name": "Cleaning services",
      				"price": "125.00",
      				"ext": {
      					"it-ticket-product": "services"
      				}
      			},
      			"sum": "125.00",
      			"taxes": [
      				{
      					"cat": "VAT",
      					"key": "export",
      					"ext": {
      						"it-ticket-exempt": "N3"
      					}
      				}
      			],
      			"total": "125.00"
      		},
      		{
      			"i": 2,
      			"quantity": "3",
      			"item": {
      				"name": "Cleaning products",
      				"price": "137.50",
      				"ext": {
      					"it-ticket-product": "goods"
      				}
      			},
      			"sum": "412.50",
      			"taxes": [
      				{
      					"cat": "VAT",
      					"key": "standard",
      					"rate": "general",
      					"percent": "22.0%"
      				}
      			],
      			"total": "412.50"
      		}
      	],
      	"totals": {
      		"sum": "537.50",
      		"tax_included": "74.39",
      		"total": "463.11",
      		"taxes": {
      			"categories": [
      				{
      					"code": "VAT",
      					"rates": [
      						{
      							"key": "export",
      							"ext": {
      								"it-ticket-exempt": "N3"
      							},
      							"base": "125.00",
      							"amount": "0.00"
      						},
      						{
      							"key": "standard",
      							"base": "338.11",
      							"percent": "22.0%",
      							"amount": "74.39"
      						}
      					],
      					"amount": "74.39"
      				}
      			],
      			"sum": "74.39"
      		},
      		"tax": "74.39",
      		"total_with_tax": "537.50",
      		"payable": "537.50"
      	}
      }
      ```
    </CodeGroup>
  </Accordion>

  <Accordion title="B2C Invoice Complete">
    After the AdE (Agenzia delle Entrate) accepts the invoice, they add a reference to each line item. This reference, stored in the [`it-ticket-line-ref`](https://docs.gobl.org/addons/it-ticket-v1#ade-line-reference) extension, is essential for processing refunds.

    Notice:

    * This example shows a complete invoice with line references added by the AdE after acceptance
    * The minimal version contains the basic invoice structure before AdE processing
    * When running `gobl build`, the system calculates all totals and normalizes the document
    * The built version shows the complete document with AdE-assigned line references, calculated totals, and all automatically generated fields
    * These line references are required for creating corrective invoices and processing refunds
    * The complete invoice represents the final state after successful submission to and acceptance by the AdE

    <CodeGroup>
      ```json Documento Commerciale complete theme={"system"}
      {
        "$schema": "https://gobl.org/draft-0/bill/invoice",
        "$regime": "IT",
        "$addons": [
          "it-ticket-v1"
        ],
        "uuid": "0196ed2c-3ca6-7000-b87f-8fb532b45250",
        "type": "standard",
        "series": "XXIT",
        "code": "001",
        "issue_date": "2025-05-20",
        "currency": "EUR",
        "tax": {
          "prices_include": "VAT"
        },
        "supplier": {
          "name": "Cleaning SRL",
          "tax_id": {
            "country": "IT",
            "code": "74230430451"
          }
        },
        "lines": [
          {
            "quantity": "1",
            "item": {
              "name": "Cleaning services",
              "price": "125.00",
              "ext": {
                "it-ticket-product": "services"
              }
            },
            "taxes": [
              {
                "cat": "VAT",
                "ext": {
                  "it-ticket-exempt": "N3"
                }
              }
            ],
            "ext": {
              "it-ticket-line-ref": "557647"
            }
          },
          {
            "quantity": "3",
            "item": {
              "name": "Cleaning products",
              "price": "137.50",
              "ext": {
                "it-ticket-product": "goods"
              }
            },
            "taxes": [
              {
                "cat": "VAT",
                "rate": "standard"
              }
            ],
            "ext": {
              "it-ticket-line-ref": "557647"
            }
          }
        ]
      }
      ```

      ```json Built version theme={"system"}
      {
      	"$schema": "https://gobl.org/draft-0/bill/invoice",
      	"$regime": "IT",
      	"$addons": [
      		"it-ticket-v1"
      	],
      	"uuid": "0196ed2c-3ca6-7000-b87f-8fb532b45250",
      	"type": "standard",
      	"series": "XXIT",
      	"code": "001",
      	"issue_date": "2025-05-20",
      	"currency": "EUR",
      	"tax": {
      		"prices_include": "VAT"
      	},
      	"supplier": {
      		"name": "Cleaning SRL",
      		"tax_id": {
      			"country": "IT",
      			"code": "74230430451"
      		}
      	},
      	"lines": [
      		{
      			"i": 1,
      			"quantity": "1",
      			"item": {
      				"name": "Cleaning services",
      				"price": "125.00",
      				"ext": {
      					"it-ticket-product": "services"
      				}
      			},
      			"sum": "125.00",
      			"taxes": [
      				{
      					"cat": "VAT",
      					"key": "export",
      					"ext": {
      						"it-ticket-exempt": "N3"
      					}
      				}
      			],
      			"total": "125.00",
      			"ext": {
      				"it-ticket-line-ref": "557647"
      			}
      		},
      		{
      			"i": 2,
      			"quantity": "3",
      			"item": {
      				"name": "Cleaning products",
      				"price": "137.50",
      				"ext": {
      					"it-ticket-product": "goods"
      				}
      			},
      			"sum": "412.50",
      			"taxes": [
      				{
      					"cat": "VAT",
      					"key": "standard",
      					"rate": "general",
      					"percent": "22.0%"
      				}
      			],
      			"total": "412.50",
      			"ext": {
      				"it-ticket-line-ref": "557647"
      			}
      		}
      	],
      	"totals": {
      		"sum": "537.50",
      		"tax_included": "74.39",
      		"total": "463.11",
      		"taxes": {
      			"categories": [
      				{
      					"code": "VAT",
      					"rates": [
      						{
      							"key": "export",
      							"ext": {
      								"it-ticket-exempt": "N3"
      							},
      							"base": "125.00",
      							"amount": "0.00"
      						},
      						{
      							"key": "standard",
      							"base": "338.11",
      							"percent": "22.0%",
      							"amount": "74.39"
      						}
      					],
      					"amount": "74.39"
      				}
      			],
      			"sum": "74.39"
      		},
      		"tax": "74.39",
      		"total_with_tax": "537.50",
      		"payable": "537.50"
      	}
      }
      ```
    </CodeGroup>
  </Accordion>

  <Accordion title="Corrective Invoice">
    When a customer requests a refund for specific items, you can process it by issuing a corrective invoice. Since this is still considered sending an invoice, you can use the same workflow as before.

    To create a corrective invoice, take the original [GOBL Invoice](https://docs.gobl.org/draft-0/bill/invoice) and:

    1. Set the `type` field to `corrective`
    2. Add a reference to the original invoice using the `preceding` object
    3. Include the original document number stamp from the first invoice
    4. Keep the lines and quantities you want to refund

    Notice:

    * The minimal version (`ticket-b2c-corrective.min.mdx`) contains only essential correction details including references to the original invoice
    * The corrective invoice preserves the [`it-ticket-line-ref`](https://docs.gobl.org/addons/it-ticket-v1#ade-line-reference) extension from the original invoice for proper tracking
    * When running `gobl build`, the system automatically calculates negative amounts for refunds, validates the corrective structure, and applies AdE rules
    * The built version (`ticket-b2c-corrective.mdx`) shows the normalized document with calculated negative totals, tax refunds, and all automatically generated fields
    * The corrective invoice references the original invoice using the `preceding` object and maintains line item references for accurate tracking
    * This example shows a corrective invoice that refunds two units of "Cleaning Products" from the original invoice

    <CodeGroup>
      ```json Corrective Documento Commerciale theme={"system"}
      {
        "$schema": "https://gobl.org/draft-0/bill/invoice",
        "$regime": "IT",
        "$addons": [
          "it-ticket-v1"
        ],
        "type": "corrective",
        "series": "REFUND",
        "code": "001",
        "issue_date": "2025-05-20",
        "currency": "EUR",
        "preceding": [
          {
            "uuid": "0196ed2c-3ca6-7000-b87f-8fb532b45250",
            "type": "standard",
            "issue_date": "2025-05-20",
            "series": "XXIT",
            "code": "001",
            "stamps": [
              {
                "prv": "ade-ref",
                "val": "ACUBE2025/0000-7816"
              }
            ]
          }
        ],
        "tax": {
          "prices_include": "VAT"
        },
        "supplier": {
          "name": "Cleaning SRL",
          "tax_id": {
            "country": "IT",
            "code": "74230430451"
          }
        },
        "lines": [
          {
            "quantity": "2",
            "item": {
              "name": "Cleaning products",
              "price": "137.50",
              "ext": {
                "it-ticket-product": "goods"
              }
            },
            "taxes": [
              {
                "cat": "VAT",
                "rate": "standard"
              }
            ],
            "ext": {
              "it-ticket-line-ref": "557647"
            }
          }
        ]
      }
      ```

      ```json Built version theme={"system"}
      {
      	"$schema": "https://gobl.org/draft-0/bill/invoice",
      	"$regime": "IT",
      	"$addons": [
      		"it-ticket-v1"
      	],
      	"type": "corrective",
      	"series": "REFUND",
      	"code": "001",
      	"issue_date": "2025-05-20",
      	"currency": "EUR",
      	"preceding": [
      		{
      			"uuid": "0196ed2c-3ca6-7000-b87f-8fb532b45250",
      			"type": "standard",
      			"issue_date": "2025-05-20",
      			"series": "XXIT",
      			"code": "001",
      			"stamps": [
      				{
      					"prv": "ade-ref",
      					"val": "ACUBE2025/0000-7816"
      				}
      			]
      		}
      	],
      	"tax": {
      		"prices_include": "VAT"
      	},
      	"supplier": {
      		"name": "Cleaning SRL",
      		"tax_id": {
      			"country": "IT",
      			"code": "74230430451"
      		}
      	},
      	"lines": [
      		{
      			"i": 1,
      			"quantity": "2",
      			"item": {
      				"name": "Cleaning products",
      				"price": "137.50",
      				"ext": {
      					"it-ticket-product": "goods"
      				}
      			},
      			"sum": "275.00",
      			"taxes": [
      				{
      					"cat": "VAT",
      					"key": "standard",
      					"rate": "general",
      					"percent": "22.0%"
      				}
      			],
      			"total": "275.00",
      			"ext": {
      				"it-ticket-line-ref": "557647"
      			}
      		}
      	],
      	"totals": {
      		"sum": "275.00",
      		"tax_included": "49.59",
      		"total": "225.41",
      		"taxes": {
      			"categories": [
      				{
      					"code": "VAT",
      					"rates": [
      						{
      							"key": "standard",
      							"base": "225.41",
      							"percent": "22.0%",
      							"amount": "49.59"
      						}
      					],
      					"amount": "49.59"
      				}
      			],
      			"sum": "49.59"
      		},
      		"tax": "49.59",
      		"total_with_tax": "275.00",
      		"payable": "275.00"
      	}
      }
      ```
    </CodeGroup>
  </Accordion>
</AccordionGroup>

The AdE will automatically generate a document number for the invoice. Once the invoice is sent, you will find the document number in a stamp inside the document header.

<Frame>
  <img src="https://mintcdn.com/invopop/-KQ2_uysex-mWyqz/assets/guides/it-ticket-invoice-stamp.png?fit=max&auto=format&n=-KQ2_uysex-mWyqz&q=85&s=43a856de8f9723b3a021ea540ea26384" alt="Invoice Stamp" width="1422" height="1430" data-path="assets/guides/it-ticket-invoice-stamp.png" />
</Frame>

### Refund an Invoice

Refund processing is handled through corrective invoices, which you can issue using the same workflow as regular invoices. See the "Corrective Invoice" accordion above for details and examples.

### Void an Invoice

You can void an invoice if it was issued in error, such as when a receipt is accidentally sent twice. To void an invoice:

1. Locate the [silo entry uuid](/api-ref/silo/entries/fetch-an-entry) of the invoice
2. Run the "Void AdE CF Invoices" workflow with this uuid

<Warning>
  You can only void invoices that were originally sent through this app during the same business day.
</Warning>

## FAQ

<AccordionGroup>
  <Accordion title="How do I configure my workspace for Italian invoicing?">
    Install the SDI Italy app for B2B/B2G/B2C structured invoicing, or the Smart Receipts app for B2C-only AdE CF receipts. Run invoices through the Generate FatturaPA + Send to SDI workflow.
  </Accordion>

  <Accordion title="Where do I find Italy-specific GOBL documentation?">
    See the [Italy tax regime in GOBL](https://docs.gobl.org/regimes/it) for tax categories, codice fiscale rules, and SDI-specific extensions. The [`it-sdi-v1`](https://docs.gobl.org/addons/it-sdi-v1) addon documents required FatturaPA fields.
  </Accordion>

  <Accordion title="How do I correct mistakes in an issued AdE CF invoice?">
    You cannot modify an AdE CF invoice after issuing it. Instead you must:

    1. Void the incorrect invoice using the "Void AdE CF Invoices" workflow
    2. Issue a new invoice with the correct information
  </Accordion>

  <Accordion title="Do I still need to add a series and code to the invoice?">
    We recommend adding a series and code to the invoice so that you can keep track internally even though the AdE will generate a document number.
  </Accordion>

  <Accordion title="Is AdE CF a substitute for SDI?">
    AdE CF is **not** a substitute for [SDI](/guides/it-sdi-sending). Invopop works with SDI to issue electronic invoices using the FatturaPA and is the main tool available to issue electronic invoices in Italy. AdE CF should only be used when customer information is not available, like in online B2C scenarios.
  </Accordion>

  <Accordion title="What GOBL fields are required for Smart Receipts?">
    Use the standard GOBL invoice with the simplified tag. No customer tax ID is required. The `it-ticket-v1` addon handles the AdE CF-specific fields. Each receipt gets a unique Lottery Code if the lottery functionality is enabled.
  </Accordion>
</AccordionGroup>

More available in our [Italy FAQ](/faq/italy) section

***

<AccordionGroup>
  <Accordion title="🇮🇹 Invopop resources for Italy">
    |            |                                                                                                                                                                                                                                                                                                                                                                                         |
    | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    | Compliance | <Icon icon="https://assets.invopop.com/flags/it.svg" /> [Invoicing compliance in Italy](/compliance/italy)<br /> <Icon icon="timeline" /> [Compliance timeline](/timelines/italy)                                                                                                                                                                                                       |
    | Apps       | <Icon icon="https://assets.invopop.com/apps/sdi-italy/icon.svg" /> [SDI Italy](/apps/sdi-italy)<br /><Icon icon="https://assets.invopop.com/apps/agenzia-entrate/icon.svg" /> [Smart Receipts Italy](/apps/smart-receipts-italy)                                                                                                                                                        |
    | Guides     | <Icon icon="book" /> [SDI Sending Guide](/guides/it-sdi-sending)<br /><Icon icon="book" /> [SDI Receiving Guide](/guides/it-sdi-receiving)<br /><Icon icon="book" /> [Ticket Guide](/guides/it-ticket)                                                                                                                                                                                  |
    | FAQ        | <Icon icon="square-question" /> [Italy FAQ](/faq/italy)                                                                                                                                                                                                                                                                                                                                 |
    | GOBL       | <Icon icon="https://assets.invopop.com/icons/gobl.svg" />  [Italy Tax Regime](https://docs.gobl.org/regimes/it)<br /> <Icon icon="https://assets.invopop.com/icons/gobl.svg" /> [Italy SDI FatturaPA Addon](https://docs.gobl.org/addons/it-sdi-v1)<br /> <Icon icon="https://assets.invopop.com/icons/gobl.svg" /> [Italy AdE Ticket Addon](https://docs.gobl.org/addons/it-ticket-v1) |
    | GitHub     | <Icon icon="github" /> [gobl.fatturapa](https://github.com/invopop/gobl.fatturapa)                                                                                                                                                                                                                                                                                                      |
  </Accordion>
</AccordionGroup>

<Card title="Participate in our community" icon="forumbee" href="https://community.invopop.com" arrow="true" horizontal>
  Ask and answer questions about invoicing in Italy →
</Card>
