> ## 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.

# Finvoice issuing invoices guide

> Issue invoices to Finnish receivers on the domestic operator network or Peppol.

export const fiFinvoiceSendInvoiceWorkflow = {
  "name": "Finvoice send invoice",
  "description": "Issue an invoice to a Finnish receiver",
  "schema": "bill/invoice",
  "steps": [{
    "id": "bc138fa6-9172-11f1-b7bf-92000767c8b7",
    "name": "Set state",
    "provider": "silo.state",
    "summary": "Set state to `processing`{.state .processing}",
    "config": {
      "state": "processing"
    }
  }, {
    "id": "bc177c32-9172-11f1-9d66-92000767c8b7",
    "name": "Add sequential code",
    "provider": "sequence.enumerate",
    "summary": "Dynamic · Finvoice · 000001",
    "config": {
      "name": "Finvoice",
      "padding": 6,
      "start": 1
    }
  }, {
    "id": "bc177d5b-9172-11f1-b7a4-92000767c8b7",
    "name": "Sign envelope",
    "provider": "silo.close"
  }, {
    "id": "bc177de4-9172-11f1-83e5-92000767c8b7",
    "name": "Send invoice",
    "provider": "gov-fi.send"
  }, {
    "id": "bc177e3d-9172-11f1-8812-92000767c8b7",
    "name": "Set state",
    "provider": "silo.state",
    "summary": "Set state to `sent`{.state .sent}",
    "config": {
      "state": "sent"
    }
  }],
  "rescue": [{
    "id": "bc177e9e-9172-11f1-8438-92000767c8b7",
    "name": "Set state",
    "provider": "silo.state",
    "summary": "Set state to `error`{.state .error}",
    "config": {
      "state": "error"
    }
  }]
};

export const WorkflowDiagram = ({workflow}) => {
  const stateColors = {
    processing: "yellow",
    sent: "blue",
    received: "blue",
    registered: "green",
    completed: "green",
    error: "red"
  };
  const StateChip = ({state, label}) => <Badge size="sm" color={stateColors[state] || "gray"} icon="square-small" iconType="solid">
      {label.charAt(0).toUpperCase() + label.slice(1)}
    </Badge>;
  const providerIcons = {
    "silo.state": "https://silo.invopop.com/images/status.svg",
    "silo.close": "https://silo.invopop.com/images/check-badge.svg",
    "silo.if": "https://assets.invopop.com/apps/silo/if.svg",
    "silo.folder": "https://silo.invopop.com/images/folder.svg",
    "silo.modify": "https://silo.invopop.com/images/modify.svg",
    "silo.correct": "https://silo.invopop.com/images/replace.svg",
    "silo.sleep": "https://assets.invopop.com/icons/sleep.svg",
    silo: "https://assets.invopop.com/apps/silo/icon.svg",
    "sequence.enumerate": "https://sequence.invopop.com/images/enumerate.svg",
    "transform.job.create": "https://transform.invopop.com/images/jobs.svg",
    webhook: "https://webhook.invopop.com/icon.svg",
    lookup: "https://lookup.invopop.com/icon.png",
    dropbox: "https://dropbox.invopop.com/icon.png",
    pdf: "https://pdf.invopop.com/file-pdf.svg",
    peppol: "https://assets.invopop.com/apps/peppol/icon.svg",
    ubl: "https://assets.invopop.com/apps/ubl/logo.svg",
    cii: "https://assets.invopop.com/apps/cii/logo.svg",
    "gov-fi": "https://assets.invopop.com/flags/fi.svg",
    "gov-fr": "https://assets.invopop.com/flags/fr.svg",
    "chorus-pro": "https://assets.invopop.com/apps/chroruspro/icon.svg",
    "gov-es": "https://assets.invopop.com/apps/gov-es/icon.svg",
    "gov-es.sii": "https://assets.invopop.com/apps/sii/icon.svg",
    "gov-es.ticketbai": "https://assets.invopop.com/apps/ticketbai/icon.svg",
    "gov-es.facturae": "https://assets.invopop.com/apps/facturae/icon.svg",
    verifactu: "https://assets.invopop.com/apps/verifactu/icon.svg",
    "gov-pl": "https://assets.invopop.com/apps/ksef/icon.svg",
    "gov-sa": "https://assets.invopop.com/apps/zatca/icon.svg",
    "gov-ar": "https://assets.invopop.com/apps/arca/icon.svg",
    "at-pt": "https://assets.invopop.com/apps/at-pt/icon.svg",
    "sat-mx": "https://assets.invopop.com/apps/sat-mexico/icon.svg",
    "sw-sapien": "https://assets.invopop.com/apps/sw-sapien/icon.svg",
    "sdi-it": "https://assets.invopop.com/apps/sdi-italy/icon.svg",
    "ticket-it": "https://assets.invopop.com/apps/agenzia-entrate/icon.svg",
    "nfe-br": "https://assets.invopop.com/apps/notas-fiscais-eletronicas-brazil/icon.svg",
    chargebee: "https://assets.invopop.com/apps/chargebee/icon.svg",
    stripe: "https://assets.invopop.com/apps/stripe/icon.svg",
    email: "https://assets.invopop.com/apps/email/icon.svg",
    cron: "https://assets.invopop.com/apps/cron/icon.svg",
    ilyda: "https://assets.invopop.com/apps/ilyda/icon.svg",
    invoicexpress: "https://assets.invopop.com/apps/invoicexpress/icon.svg",
    plemsi: "https://assets.invopop.com/flags/co.svg"
  };
  const iconFor = provider => {
    const parts = (provider || "").split(".");
    for (let i = parts.length; i > 0; i--) {
      const url = providerIcons[parts.slice(0, i).join(".")];
      if (url) return url;
    }
    return null;
  };
  const StepIcon = ({provider}) => {
    const url = iconFor(provider);
    return <span title={provider} className="flex h-7 w-7 shrink-0 items-center justify-center rounded-md border border-gray-950/10 bg-white dark:border-white/10 dark:bg-white/5">
        {url ? <img src={url} alt="" className="h-4 w-4" /> : null}
      </span>;
  };
  const renderSummary = summary => {
    const nodes = [];
    const re = /`([^`]+)`(\{[^}]*\})?/g;
    let last = 0;
    let m;
    let k = 0;
    while ((m = re.exec(summary)) !== null) {
      if (m.index > last) nodes.push(summary.slice(last, m.index));
      const attrs = m[2] || "";
      if (attrs.indexOf(".state") >= 0) {
        const state = (attrs.match(/\.state\s+\.([\w-]+)/) || [])[1] || m[1];
        nodes.push(<StateChip key={k++} state={state} label={m[1]} />);
      } else if (attrs) {
        nodes.push(<span key={k++} className="text-sm font-medium text-gray-700 dark:text-gray-300">
            {m[1]}
          </span>);
      } else {
        nodes.push(<code key={k++} className="text-sm rounded bg-gray-100 px-1 font-mono text-sm dark:bg-white/10">
            {m[1]}
          </code>);
      }
      last = m.index + m[0].length;
    }
    if (last < summary.length) nodes.push(summary.slice(last));
    return nodes;
  };
  const NoteRow = ({text}) => <div className="mt-4 mb-1 font-mono text-sm leading-5 text-gray-400 dark:text-gray-500">{"// " + text}</div>;
  const renderSteps = (steps, counter) => (steps || []).map(step => {
    counter.n += 1;
    const n = counter.n;
    const branches = (step.next || []).filter(b => b.steps && b.steps.length > 0);
    return <div key={step.id || "step-" + n}>
          {step.notes ? <NoteRow text={step.notes} /> : null}
          <div className="mt-2.5 flex items-center">
            <span className="absolute left-0 w-10 text-center font-mono text-sm text-gray-400 select-none dark:text-gray-500">
              {n}
            </span>
            <div className="flex min-w-0 flex-1 items-center gap-2 rounded-xl border border-gray-950/5 bg-white px-2 py-2 dark:border-white/10 dark:bg-gray-900">
              <StepIcon provider={step.provider} />
              <span className="text-sm shrink-0 font-medium text-gray-900 dark:text-gray-100">{step.name}</span>
              {step.summary ? <span className="text-sm min-w-0 truncate text-gray-500 dark:text-gray-400">{renderSummary(step.summary)}</span> : null}
            </div>
          </div>
          {branches.length > 0 ? <div className="ml-5 border-l border-gray-200 -my-1 py-1 pl-6 dark:border-white/10">
              {branches.map((branch, bi) => <div key={branch.code || branch.status || bi}>
                  <div className="mt-4">
                    <span className="rounded-md bg-gray-200/70 px-2 py-1 font-mono text-sm text-gray-600 dark:bg-white/10 dark:text-gray-300">
                      {branch.code || branch.status}
                    </span>
                  </div>
                  {renderSteps(branch.steps, counter)}
                </div>)}
            </div> : null}
        </div>;
  });
  const counter = {
    n: 0
  };
  const wf = workflow || ({});
  return <div className="not-prose relative my-5 rounded-2xl border border-gray-950/5 bg-gray-50 py-3 pr-4 pb-5 pl-12 dark:border-white/10 dark:bg-white/[0.03]">
      {renderSteps(wf.steps, counter)}
      {wf.rescue && wf.rescue.length > 0 ? <div className="mt-6 border-t border-dashed border-gray-300 dark:border-white/10">
          <NoteRow text="If any step fails" />
          {renderSteps(wf.rescue, counter)}
        </div> : null}
    </div>;
};

## Introduction

Finnish businesses receive their e-invoices over two networks: the domestic operator network, where around 370,000 companies get theirs as *Finvoice* (or *TEAPPSXML*, depending on their operator), and Peppol, with roughly 13,000 end users. The [Finland app](/apps/finland) covers both, delivering through the accredited Finnish operator Invopop has partnered with, in the format the receiver's network expects.

You never pick a network. Send one GOBL invoice carrying the receiver's e-invoice address and the routing is resolved for you. Use this app for every Finnish receiver, including the ones reachable on Peppol.

For onboarding suppliers, see the companion guide: [Finvoice supplier registration](/guides/fi-finvoice-supplier).

| -               | Sandbox                                                  | Live                                                                       |
| --------------- | -------------------------------------------------------- | -------------------------------------------------------------------------- |
| **Supplier**    | Party registered against the operator's test environment | Not yet available (production access is being finalised with the operator) |
| **Environment** | Operator sandbox                                         | Not yet available                                                          |

## Payment data is mandatory

In Finland, an e-invoice doubles as a payment order: the Finvoice format was created by the banks, and receivers approve invoices for payment directly in their bank. The payment order is therefore mandatory on **every** Finvoice invoice, credit notes included. Since most Finnish receivers get their invoices as Finvoice, every Finnish invoice must carry:

* **An IBAN**, in `payment.instructions.credit_transfer`, with the key `credit-transfer`.
* **A payment reference**, in `payment.instructions.ref`: a Finnish *viitenumero* or an ISO 11649 `RF` reference.
* **A dated due date**, in `payment.terms.due_dates`.

The [`fi-finvoice-v3` addon](https://docs.gobl.org/addons/fi-finvoice-v3) enforces these rules when the invoice is validated, so an incomplete invoice is rejected up front. This is deliberate: without the payment data, the invoice would fail on its way to the receiver *after* leaving the platform, where neither you nor Invopop can see it.

## Prerequisites

* **A registered supplier**: follow the [Finvoice supplier registration guide](/guides/fi-finvoice-supplier) to connect the Finland app and register the party before issuing.
* **The receiver's e-invoice address** on the customer record, as an inbox with scheme `0216` and the OVT code (`0037` plus the Business ID without its hyphen). Look receivers up at [verkkolaskuosoite.fi](https://verkkolaskuosoite.fi). Other forms circulate (IBAN-style addresses, operator-prefixed ones such as `TE0037…`), but the OVT code is the one to use.
* **The `fi-finvoice-v3` addon** declared in `$addons` on every invoice, so the payment data above is validated before signing.
* **Complete payment data** on every invoice, as described above.

## Setup

All of the following steps must be carried out from the [Invopop Console](https://console.invopop.com).

<Steps>
  <Step title="Create the send workflow">
    <Tabs>
      <Tab title="Workflow">
        <WorkflowDiagram workflow={fiFinvoiceSendInvoiceWorkflow} />
      </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 Finvoice send invoice workflow theme={"system"}
        {
            "name": "Finvoice send invoice",
            "description": "Issue an invoice to a Finnish receiver",
            "schema": "bill/invoice",
            "steps": [
                {
                    "id": "bc138fa6-9172-11f1-b7bf-92000767c8b7",
                    "name": "Set state",
                    "provider": "silo.state",
                    "summary": "Set state to `processing`{.state .processing}",
                    "config": {
                        "state": "processing"
                    }
                },
                {
                    "id": "bc177c32-9172-11f1-9d66-92000767c8b7",
                    "name": "Add sequential code",
                    "provider": "sequence.enumerate",
                    "summary": "Dynamic · Finvoice · 000001",
                    "config": {
                        "name": "Finvoice",
                        "padding": 6,
                        "start": 1
                    }
                },
                {
                    "id": "bc177d5b-9172-11f1-b7a4-92000767c8b7",
                    "name": "Sign envelope",
                    "provider": "silo.close"
                },
                {
                    "id": "bc177de4-9172-11f1-83e5-92000767c8b7",
                    "name": "Send invoice",
                    "provider": "gov-fi.send"
                },
                {
                    "id": "bc177e3d-9172-11f1-8812-92000767c8b7",
                    "name": "Set state",
                    "provider": "silo.state",
                    "summary": "Set state to `sent`{.state .sent}",
                    "config": {
                        "state": "sent"
                    }
                }
            ],
            "rescue": [
                {
                    "id": "bc177e9e-9172-11f1-8438-92000767c8b7",
                    "name": "Set state",
                    "provider": "silo.state",
                    "summary": "Set state to `error`{.state .error}",
                    "config": {
                        "state": "error"
                    }
                }
            ]
        }
        ```
      </Tab>
    </Tabs>
  </Step>
</Steps>

## Send an invoice

Upload the invoice as a silo entry and run the send workflow on it.

<Info>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), then [create a job](/api-ref/transform/jobs/create-a-job-post).</Info>

The send step checks the receiver is reachable, generates the e-invoice, and submits it. The operator's synchronous accept or reject is reflected in the job result, along with the channel the invoice was actually delivered on.

### Refused before sending

Three checks run before anything leaves the platform, each failing the job with its own code:

* **`supplier-address-missing`**: the supplier has no electronic address. Add the OVT inbox to the supplier party.
* **`payment-account-missing`**: the invoice carries no payment bank account. Add the `payment` block described above.
* **`receiver-not-einvoice`**: the receiver is not set up to receive e-invoices. The error names the channel that would have been used instead: paper, email, or one of the consumer bank channels (e-lasku, suoramaksu, Netposti). Receivers like these are refused up front rather than quietly delivered another way; check the address, or agree on another delivery method with the receiver.

### After submission

One more state you may meet is **`send-unconfirmed`**: the connection failed after the submission may have already been written, so the outcome couldn't be confirmed. The job reports the attempt and its timestamp rather than retrying, because resubmitting into the unknown could deliver the invoice twice. Check with [support](mailto:support@invopop.com) before sending again.

Once the operator accepts the invoice, that is the final programmatic signal: there is no delivery status to poll afterwards. If a receiving operator later rejects the invoice, the rejection arrives by email in production.

### Invoicing the Finnish state

Invoicing public bodies is the segment where e-invoicing is mandatory in Finland, and the state applies its own reference conventions: invoices that don't follow them are rejected by the receiving authority.

* **Order numbers** must start with `V1`. Set them in `ordering.purchases` on the GOBL invoice.
* **Agreement numbers** must start with `VSK1`. Set them in `ordering.contracts`.
* At most **one of each** per invoice.

Invopop doesn't validate or normalise these prefixes, so format the references exactly as the contracting authority provided them. Posting references (`TK1…`) cannot be carried on the invoice yet; if a contracting authority requires one, contact [support](mailto:support@invopop.com).

## Example invoices

<AccordionGroup>
  <Accordion title="Example B2B invoice">
    In this example, we're issuing a B2B invoice from a Finnish supplier to another Finnish business.

    Notice:

    * the `$addons` field is set to `fi-finvoice-v3`, which enforces the payment data Finvoice requires on every Finnish invoice,
    * both parties carry their e-invoice address as an inbox with scheme `0216` and an OVT code (`0037` followed by the Business ID without its hyphen),
    * the `payment` block carries an IBAN, a payment reference (an ISO 11649 `RF` reference here), and a dated due date; all three are required,
    * the invoice includes VAT at the standard Finnish rate of 25.5%, and,
    * there are no calculations in some fields; these will be made automatically when uploading.

    <CodeGroup>
      ```json Finland B2B invoice theme={"system"}
      {
        "$schema": "https://gobl.org/draft-0/bill/invoice",
        "$addons": ["fi-finvoice-v3"],
        "type": "standard",
        "series": "SAMPLE",
        "code": "0042",
        "issue_date": "2026-08-01",
        "currency": "EUR",
        "supplier": {
          "name": "Aurora Ohjelmistot Oy",
          "tax_id": {
            "country": "FI",
            "code": "26174164"
          },
          "inboxes": [
            {
              "key": "peppol",
              "scheme": "0216",
              "code": "003726174164"
            }
          ],
          "addresses": [
            {
              "num": "12",
              "street": "Mannerheimintie",
              "locality": "Helsinki",
              "code": "00100",
              "country": "FI"
            }
          ]
        },
        "customer": {
          "name": "Pohjola Rakennus Oy",
          "tax_id": {
            "country": "FI",
            "code": "11223349"
          },
          "inboxes": [
            {
              "key": "peppol",
              "scheme": "0216",
              "code": "003711223349"
            }
          ],
          "addresses": [
            {
              "num": "8",
              "street": "Hämeenkatu",
              "locality": "Tampere",
              "code": "33100",
              "country": "FI"
            }
          ]
        },
        "lines": [
          {
            "quantity": "10",
            "item": {
              "name": "Software development services",
              "price": "85.00"
            },
            "taxes": [
              {
                "cat": "VAT",
                "percent": "25.5%"
              }
            ]
          }
        ],
        "payment": {
          "instructions": {
            "key": "credit-transfer",
            "ref": "RF1310023",
            "credit_transfer": [
              {
                "iban": "FI2112345600000785",
                "bic": "NDEAFIHH"
              }
            ]
          },
          "terms": {
            "due_dates": [
              {
                "date": "2026-08-15",
                "percent": "100%"
              }
            ]
          }
        }
      }
      ```

      ```json Built version theme={"system"}
      {
      	"$schema": "https://gobl.org/draft-0/bill/invoice",
      	"$regime": "FI",
      	"$addons": [
      		"eu-en16931-v2017",
      		"fi-finvoice-v3"
      	],
      	"type": "standard",
      	"series": "SAMPLE",
      	"code": "0042",
      	"issue_date": "2026-08-01",
      	"currency": "EUR",
      	"tax": {
      		"ext": {
      			"untdid-document-type": "380"
      		}
      	},
      	"supplier": {
      		"name": "Aurora Ohjelmistot Oy",
      		"tax_id": {
      			"country": "FI",
      			"code": "26174164"
      		},
      		"endpoints": [
      			{
      				"uri": "iso6523-actorid-upis::0216:003726174164"
      			}
      		],
      		"inboxes": [
      			{
      				"key": "peppol",
      				"scheme": "0216",
      				"code": "003726174164"
      			}
      		],
      		"addresses": [
      			{
      				"num": "12",
      				"street": "Mannerheimintie",
      				"locality": "Helsinki",
      				"code": "00100",
      				"country": "FI"
      			}
      		]
      	},
      	"customer": {
      		"name": "Pohjola Rakennus Oy",
      		"tax_id": {
      			"country": "FI",
      			"code": "11223349"
      		},
      		"endpoints": [
      			{
      				"uri": "iso6523-actorid-upis::0216:003711223349"
      			}
      		],
      		"inboxes": [
      			{
      				"key": "peppol",
      				"scheme": "0216",
      				"code": "003711223349"
      			}
      		],
      		"addresses": [
      			{
      				"num": "8",
      				"street": "Hämeenkatu",
      				"locality": "Tampere",
      				"code": "33100",
      				"country": "FI"
      			}
      		]
      	},
      	"lines": [
      		{
      			"i": 1,
      			"quantity": "10",
      			"item": {
      				"name": "Software development services",
      				"price": "85.00",
      				"unit": "one"
      			},
      			"sum": "850.00",
      			"taxes": [
      				{
      					"cat": "VAT",
      					"key": "standard",
      					"percent": "25.5%",
      					"ext": {
      						"untdid-tax-category": "S"
      					}
      				}
      			],
      			"total": "850.00"
      		}
      	],
      	"payment": {
      		"terms": {
      			"due_dates": [
      				{
      					"date": "2026-08-15",
      					"amount": "1066.75",
      					"percent": "100%"
      				}
      			]
      		},
      		"instructions": {
      			"key": "credit-transfer",
      			"ref": "RF1310023",
      			"credit_transfer": [
      				{
      					"iban": "FI2112345600000785",
      					"bic": "NDEAFIHH"
      				}
      			],
      			"ext": {
      				"untdid-payment-means": "30"
      			}
      		}
      	},
      	"totals": {
      		"sum": "850.00",
      		"total": "850.00",
      		"taxes": {
      			"categories": [
      				{
      					"code": "VAT",
      					"rates": [
      						{
      							"key": "standard",
      							"ext": {
      								"untdid-tax-category": "S"
      							},
      							"base": "850.00",
      							"percent": "25.5%",
      							"amount": "216.75"
      						}
      					],
      					"amount": "216.75"
      				}
      			],
      			"sum": "216.75"
      		},
      		"tax": "216.75",
      		"total_with_tax": "1066.75",
      		"payable": "1066.75"
      	}
      }
      ```
    </CodeGroup>
  </Accordion>

  <Accordion title="Example B2G invoice">
    In this example, we're invoicing a Finnish public body, the segment where e-invoicing is mandatory.

    Notice:

    * the `ordering.purchases` code starts with `V1` and the `ordering.contracts` code starts with `VSK1`, following the Finnish state's reference conventions; the state rejects invoices that don't follow them,
    * there is at most one order number and one agreement number, as the state requires,
    * the payment reference here is a Finnish *viitenumero* (banking reference number), the domestic alternative to the `RF` form, and,
    * everything else works exactly like the B2B invoice, payment block included.

    <CodeGroup>
      ```json Finland B2G invoice theme={"system"}
      {
        "$schema": "https://gobl.org/draft-0/bill/invoice",
        "$addons": ["fi-finvoice-v3"],
        "type": "standard",
        "series": "SAMPLE",
        "code": "0043",
        "issue_date": "2026-08-01",
        "currency": "EUR",
        "supplier": {
          "name": "Aurora Ohjelmistot Oy",
          "tax_id": {
            "country": "FI",
            "code": "26174164"
          },
          "inboxes": [
            {
              "key": "peppol",
              "scheme": "0216",
              "code": "003726174164"
            }
          ],
          "addresses": [
            {
              "num": "12",
              "street": "Mannerheimintie",
              "locality": "Helsinki",
              "code": "00100",
              "country": "FI"
            }
          ]
        },
        "customer": {
          "name": "Suomen Valtion Virasto",
          "tax_id": {
            "country": "FI",
            "code": "54321096"
          },
          "inboxes": [
            {
              "key": "peppol",
              "scheme": "0216",
              "code": "003754321096"
            }
          ],
          "addresses": [
            {
              "num": "1",
              "street": "Snellmaninkatu",
              "locality": "Helsinki",
              "code": "00170",
              "country": "FI"
            }
          ]
        },
        "ordering": {
          "purchases": [
            {
              "code": "V12026001"
            }
          ],
          "contracts": [
            {
              "code": "VSK12026001"
            }
          ]
        },
        "lines": [
          {
            "quantity": "1",
            "item": {
              "name": "Consulting services, July 2026",
              "price": "4500.00"
            },
            "taxes": [
              {
                "cat": "VAT",
                "percent": "25.5%"
              }
            ]
          }
        ],
        "payment": {
          "instructions": {
            "key": "credit-transfer",
            "ref": "100230",
            "credit_transfer": [
              {
                "iban": "FI2112345600000785",
                "bic": "NDEAFIHH"
              }
            ]
          },
          "terms": {
            "due_dates": [
              {
                "date": "2026-08-31",
                "percent": "100%"
              }
            ]
          }
        }
      }
      ```

      ```json Built version theme={"system"}
      {
      	"$schema": "https://gobl.org/draft-0/bill/invoice",
      	"$regime": "FI",
      	"$addons": [
      		"eu-en16931-v2017",
      		"fi-finvoice-v3"
      	],
      	"type": "standard",
      	"series": "SAMPLE",
      	"code": "0043",
      	"issue_date": "2026-08-01",
      	"currency": "EUR",
      	"tax": {
      		"ext": {
      			"untdid-document-type": "380"
      		}
      	},
      	"supplier": {
      		"name": "Aurora Ohjelmistot Oy",
      		"tax_id": {
      			"country": "FI",
      			"code": "26174164"
      		},
      		"endpoints": [
      			{
      				"uri": "iso6523-actorid-upis::0216:003726174164"
      			}
      		],
      		"inboxes": [
      			{
      				"key": "peppol",
      				"scheme": "0216",
      				"code": "003726174164"
      			}
      		],
      		"addresses": [
      			{
      				"num": "12",
      				"street": "Mannerheimintie",
      				"locality": "Helsinki",
      				"code": "00100",
      				"country": "FI"
      			}
      		]
      	},
      	"customer": {
      		"name": "Suomen Valtion Virasto",
      		"tax_id": {
      			"country": "FI",
      			"code": "54321096"
      		},
      		"endpoints": [
      			{
      				"uri": "iso6523-actorid-upis::0216:003754321096"
      			}
      		],
      		"inboxes": [
      			{
      				"key": "peppol",
      				"scheme": "0216",
      				"code": "003754321096"
      			}
      		],
      		"addresses": [
      			{
      				"num": "1",
      				"street": "Snellmaninkatu",
      				"locality": "Helsinki",
      				"code": "00170",
      				"country": "FI"
      			}
      		]
      	},
      	"lines": [
      		{
      			"i": 1,
      			"quantity": "1",
      			"item": {
      				"name": "Consulting services, July 2026",
      				"price": "4500.00",
      				"unit": "one"
      			},
      			"sum": "4500.00",
      			"taxes": [
      				{
      					"cat": "VAT",
      					"key": "standard",
      					"percent": "25.5%",
      					"ext": {
      						"untdid-tax-category": "S"
      					}
      				}
      			],
      			"total": "4500.00"
      		}
      	],
      	"ordering": {
      		"contracts": [
      			{
      				"code": "VSK12026001"
      			}
      		],
      		"purchases": [
      			{
      				"code": "V12026001"
      			}
      		]
      	},
      	"payment": {
      		"terms": {
      			"due_dates": [
      				{
      					"date": "2026-08-31",
      					"amount": "5647.50",
      					"percent": "100%"
      				}
      			]
      		},
      		"instructions": {
      			"key": "credit-transfer",
      			"ref": "100230",
      			"credit_transfer": [
      				{
      					"iban": "FI2112345600000785",
      					"bic": "NDEAFIHH"
      				}
      			],
      			"ext": {
      				"untdid-payment-means": "30"
      			}
      		}
      	},
      	"totals": {
      		"sum": "4500.00",
      		"total": "4500.00",
      		"taxes": {
      			"categories": [
      				{
      					"code": "VAT",
      					"rates": [
      						{
      							"key": "standard",
      							"ext": {
      								"untdid-tax-category": "S"
      							},
      							"base": "4500.00",
      							"percent": "25.5%",
      							"amount": "1147.50"
      						}
      					],
      					"amount": "1147.50"
      				}
      			],
      			"sum": "1147.50"
      		},
      		"tax": "1147.50",
      		"total_with_tax": "5647.50",
      		"payable": "5647.50"
      	}
      }
      ```
    </CodeGroup>
  </Accordion>

  <Accordion title="Example credit note">
    In this example, we're issuing a credit note that corrects a previously issued invoice.

    Notice:

    * the `type` is set to `credit-note`,
    * the `preceding` array references the original invoice by its `series`, `code`, and `issue_date`, along with a `reason`,
    * the `payment` block is still present and complete; Finvoice requires the payment data on credit notes too, unlike most other European formats, and,
    * there are no calculations in some fields; these will be made automatically when uploading.

    <CodeGroup>
      ```json Finland credit note theme={"system"}
      {
        "$schema": "https://gobl.org/draft-0/bill/invoice",
        "$addons": ["fi-finvoice-v3"],
        "type": "credit-note",
        "series": "SAMPLE-CN",
        "code": "0007",
        "issue_date": "2026-08-05",
        "currency": "EUR",
        "preceding": [
          {
            "series": "SAMPLE",
            "code": "0042",
            "issue_date": "2026-08-01",
            "reason": "Partial refund for undelivered services"
          }
        ],
        "supplier": {
          "name": "Aurora Ohjelmistot Oy",
          "tax_id": {
            "country": "FI",
            "code": "26174164"
          },
          "inboxes": [
            {
              "key": "peppol",
              "scheme": "0216",
              "code": "003726174164"
            }
          ],
          "addresses": [
            {
              "num": "12",
              "street": "Mannerheimintie",
              "locality": "Helsinki",
              "code": "00100",
              "country": "FI"
            }
          ]
        },
        "customer": {
          "name": "Pohjola Rakennus Oy",
          "tax_id": {
            "country": "FI",
            "code": "11223349"
          },
          "inboxes": [
            {
              "key": "peppol",
              "scheme": "0216",
              "code": "003711223349"
            }
          ],
          "addresses": [
            {
              "num": "8",
              "street": "Hämeenkatu",
              "locality": "Tampere",
              "code": "33100",
              "country": "FI"
            }
          ]
        },
        "lines": [
          {
            "quantity": "2",
            "item": {
              "name": "Software development services",
              "price": "85.00"
            },
            "taxes": [
              {
                "cat": "VAT",
                "percent": "25.5%"
              }
            ]
          }
        ],
        "payment": {
          "instructions": {
            "key": "credit-transfer",
            "ref": "RF1310023",
            "credit_transfer": [
              {
                "iban": "FI2112345600000785",
                "bic": "NDEAFIHH"
              }
            ]
          },
          "terms": {
            "due_dates": [
              {
                "date": "2026-08-19",
                "percent": "100%"
              }
            ]
          }
        }
      }
      ```

      ```json Built version theme={"system"}
      {
      	"$schema": "https://gobl.org/draft-0/bill/invoice",
      	"$regime": "FI",
      	"$addons": [
      		"eu-en16931-v2017",
      		"fi-finvoice-v3"
      	],
      	"type": "credit-note",
      	"series": "SAMPLE-CN",
      	"code": "0007",
      	"issue_date": "2026-08-05",
      	"currency": "EUR",
      	"preceding": [
      		{
      			"issue_date": "2026-08-01",
      			"series": "SAMPLE",
      			"code": "0042",
      			"reason": "Partial refund for undelivered services"
      		}
      	],
      	"tax": {
      		"ext": {
      			"untdid-document-type": "381"
      		}
      	},
      	"supplier": {
      		"name": "Aurora Ohjelmistot Oy",
      		"tax_id": {
      			"country": "FI",
      			"code": "26174164"
      		},
      		"endpoints": [
      			{
      				"uri": "iso6523-actorid-upis::0216:003726174164"
      			}
      		],
      		"inboxes": [
      			{
      				"key": "peppol",
      				"scheme": "0216",
      				"code": "003726174164"
      			}
      		],
      		"addresses": [
      			{
      				"num": "12",
      				"street": "Mannerheimintie",
      				"locality": "Helsinki",
      				"code": "00100",
      				"country": "FI"
      			}
      		]
      	},
      	"customer": {
      		"name": "Pohjola Rakennus Oy",
      		"tax_id": {
      			"country": "FI",
      			"code": "11223349"
      		},
      		"endpoints": [
      			{
      				"uri": "iso6523-actorid-upis::0216:003711223349"
      			}
      		],
      		"inboxes": [
      			{
      				"key": "peppol",
      				"scheme": "0216",
      				"code": "003711223349"
      			}
      		],
      		"addresses": [
      			{
      				"num": "8",
      				"street": "Hämeenkatu",
      				"locality": "Tampere",
      				"code": "33100",
      				"country": "FI"
      			}
      		]
      	},
      	"lines": [
      		{
      			"i": 1,
      			"quantity": "2",
      			"item": {
      				"name": "Software development services",
      				"price": "85.00",
      				"unit": "one"
      			},
      			"sum": "170.00",
      			"taxes": [
      				{
      					"cat": "VAT",
      					"key": "standard",
      					"percent": "25.5%",
      					"ext": {
      						"untdid-tax-category": "S"
      					}
      				}
      			],
      			"total": "170.00"
      		}
      	],
      	"payment": {
      		"terms": {
      			"due_dates": [
      				{
      					"date": "2026-08-19",
      					"amount": "213.35",
      					"percent": "100%"
      				}
      			]
      		},
      		"instructions": {
      			"key": "credit-transfer",
      			"ref": "RF1310023",
      			"credit_transfer": [
      				{
      					"iban": "FI2112345600000785",
      					"bic": "NDEAFIHH"
      				}
      			],
      			"ext": {
      				"untdid-payment-means": "30"
      			}
      		}
      	},
      	"totals": {
      		"sum": "170.00",
      		"total": "170.00",
      		"taxes": {
      			"categories": [
      				{
      					"code": "VAT",
      					"rates": [
      						{
      							"key": "standard",
      							"ext": {
      								"untdid-tax-category": "S"
      							},
      							"base": "170.00",
      							"percent": "25.5%",
      							"amount": "43.35"
      						}
      					],
      					"amount": "43.35"
      				}
      			],
      			"sum": "43.35"
      		},
      		"tax": "43.35",
      		"total_with_tax": "213.35",
      		"payable": "213.35"
      	}
      }
      ```
    </CodeGroup>
  </Accordion>
</AccordionGroup>

## FAQ

<AccordionGroup>
  <Accordion title="Can I invoice a Finnish business that isn't reachable on Peppol?">
    Yes. Most Finnish businesses receive e-invoices through the domestic operator network rather than Peppol, and the [Finland app](/apps/finland) reaches both: you send one GOBL invoice with the receiver's e-invoice address, and it is delivered in the format the receiver's network expects. There is no need to check which network the receiver is on.
  </Accordion>

  <Accordion title="Why does every Finnish invoice need bank account details?">
    Because in Finland an e-invoice doubles as a payment order. Finvoice was created by the banks (it's published by Finance Finland, the banking association) and grew out of the bank network, where the receiver approves the invoice for payment directly in their bank. That's why every Finvoice invoice, credit notes included, must carry the payment order: an IBAN, a payment reference, and a dated due date. Most Finnish receivers get their invoices as Finvoice, and one missing this data would fail on its way to the receiver, where we can't see it, so the [`fi-finvoice-v3` addon](https://docs.gobl.org/addons/fi-finvoice-v3) rejects it up front instead.
  </Accordion>

  <Accordion title="Why was my invoice refused before it was sent anywhere?">
    Three checks run before anything leaves the platform: the supplier must have an electronic address (`supplier-address-missing`), the invoice must carry a payment bank account (`payment-account-missing`), and the receiver must be reachable as a true e-invoice (`receiver-not-einvoice`). The last one matters most: receivers only reachable on paper, by email, or through the consumer bank channels (e-lasku, suoramaksu, Netposti) are rejected up front, with the channel the operator would have used named in the error, rather than quietly delivered another way.
  </Accordion>

  <Accordion title="What does a submission with an unknown outcome mean?">
    If the connection to the operator fails after the request may have already been written, we can't tell whether the invoice was accepted, and resubmitting could deliver it twice. The job reports the attempt with its timestamp under the `send-unconfirmed` code instead of retrying. Check with support before sending the invoice again.
  </Accordion>

  <Accordion title="How do I invoice the Finnish state?">
    Business-to-government is the segment where e-invoicing is mandatory in Finland, and the state applies its own reference conventions: order numbers must start with `V1`, agreement numbers with `VSK1`, and posting references with `TK1`, with at most one of each per invoice. Set the order number in `ordering.purchases` and the agreement number in `ordering.contracts` on the GOBL invoice. Invopop doesn't validate or normalise these prefixes, so format them exactly as the contracting authority provided them, or the state will reject the invoice.
  </Accordion>

  <Accordion title="What happens after the invoice is accepted?">
    The operator's synchronous accept is the final programmatic signal: there is no delivery status API to poll afterwards. If a receiving operator later rejects the invoice, that rejection arrives by email in production. No news after acceptance is good news.
  </Accordion>
</AccordionGroup>

More available in our [Finland FAQ](/faq/finland) section

***

<AccordionGroup>
  <Accordion title="🇫🇮 Invopop resources for Finland">
    |            |                                                                                                                                                                                                                                                                                        |
    | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    | Compliance | <Icon icon="https://assets.invopop.com/flags/fi.svg" /> [Invoicing compliance in Finland](/compliance/finland)<br /> <Icon icon="timeline" /> [Compliance timeline](/timelines/finland)                                                                                                |
    | Apps       | <Icon icon="https://assets.invopop.com/flags/fi.svg" /> [Finland](/apps/finland)<br /> <Icon icon="https://assets.invopop.com/apps/peppol/icon.svg" /> [Peppol](/apps/peppol)                                                                                                          |
    | Guides     | <Icon icon="book" /> [Supplier registration](/guides/fi-finvoice-supplier)<br /> <Icon icon="book" /> [Issuing invoices](/guides/fi-finvoice)<br /> <Icon icon="book" /> [Receiving invoices](/guides/fi-finvoice-receiving)<br /> <Icon icon="book" /> [Peppol guide](/guides/peppol) |
    | FAQ        | <Icon icon="square-question" /> [Finland FAQ](/faq/finland)                                                                                                                                                                                                                            |
    | GOBL       | <Icon icon="https://assets.invopop.com/icons/gobl.svg" /> [Finland Tax Regime](https://docs.gobl.org/regimes/fi)<br /> <Icon icon="https://assets.invopop.com/icons/gobl.svg" /> [EU EN 16931 Addon](https://docs.gobl.org/addons/eu-en16931-v2017)                                    |
    | GitHub     | <Icon icon="github" /> [gobl.fi.finvoice](https://github.com/invopop/gobl.fi.finvoice)<br /> <Icon icon="github" /> [gobl.ubl](https://github.com/invopop/gobl.ubl)                                                                                                                    |
  </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 Finland →
</Card>
