> ## Documentation Index
> Fetch the complete documentation index at: https://invopop-fi-party-endpoints.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Finvoice supplier registration guide

> Register Finnish parties to send and receive e-invoices, and suppliers outside Finland to send them.

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-dk": "https://assets.invopop.com/flags/dk.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>;
};

export const fiFinvoiceRegisterWorkflow = {
  "name": "Finvoice register party",
  "description": "Register a party so it can send e-invoices in Finland, once its representative has signed the authorization. Finnish parties can also receive",
  "schema": "org/party",
  "steps": [{
    "id": "bc177ef2-9172-11f1-8c54-92000767c8b7",
    "name": "Set state",
    "provider": "silo.state",
    "summary": "Set state to `processing`{.state .processing}",
    "config": {
      "state": "processing"
    }
  }, {
    "id": "874e856a-a0b4-11f1-a9bb-92000767c8b7",
    "name": "Sign authorisation for Finland",
    "provider": "gov-fi.sign"
  }, {
    "id": "875129e9-a0b4-11f1-b569-92000767c8b7",
    "name": "Wait for Finland agreement approval",
    "provider": "gov-fi.wait.approval"
  }, {
    "id": "bc177f3b-9172-11f1-8204-92000767c8b7",
    "name": "Register party in Finland",
    "provider": "gov-fi.register"
  }, {
    "id": "bc177f7d-9172-11f1-bb70-92000767c8b7",
    "name": "Set state",
    "provider": "silo.state",
    "summary": "Set state to `registered`{.state .registered}",
    "config": {
      "state": "registered"
    }
  }],
  "rescue": [{
    "id": "bc177fc4-9172-11f1-a165-92000767c8b7",
    "name": "Set state",
    "provider": "silo.state",
    "summary": "Set state to `error`{.state .error}",
    "config": {
      "state": "error"
    }
  }]
};

## Introduction

In Finland, e-invoices travel through accredited operators without government clearance. Registering a party in the [Finland app](/apps/finland) creates its **own** account with Invopop's operator partner and activates its services. A Finnish party also gets its own e-invoice address. Suppliers outside Finland can register too, to send only. See [suppliers outside Finland](#suppliers-outside-finland).

Registration includes one step no one in the flow can do for the supplier: their representative must **sign an authorization agreement and verify their identity** before the party is registered. The registration workflow publishes a signing link you share with them, and continues automatically once the signed authorization is approved.

A party must be registered before it can send documents. A workspace can hold several parties, each registered on its own.

| - | Sandbox | Live |
| - | - | - |
| **Party** | <Badge color="green">Available</Badge><br /> Registered against the operator's test environment | <Badge color="green">Available</Badge><br /> Registered against the live operator network |
| **Environment** | Operator sandbox | Live operator environment |

## Prerequisites

* **The party's details**: legal name, Business ID (*y-tunnus*, e.g. `2617416-4`), and an address. The Business ID is uploaded without its hyphen as the GOBL `tax_id.code`. For a supplier outside Finland, use its own country's tax ID (see [suppliers outside Finland](#suppliers-outside-finland)).
* **A representative on the party**: the first entry in the party's `people` list, with a name and a role in the company. The signing wizard prefills this person as the signer.
* **The representative's availability**: someone authorized to sign on the supplier's behalf has to complete the signing step, with their identity document at hand, before registration can finish.
* **Reception workflows configured**: registration checks that the Finland app has a sync and an import workflow configured, and fails with "reception not configured" otherwise. Suppliers outside Finland don't receive through this app, so the check doesn't apply to them.

<Warning>
  Registering a Finnish party will fail if a sync and import workflow is not configured.<br /> Follow the [receiving guide's setup](/guides/fi-finvoice-receiving#setup) first.
</Warning>

## E-invoice addresses

A Finnish e-invoice address is an **OVT code**: `0037` followed by the Business ID without its hyphen, sometimes with a five-character suffix for routing inside large organisations. For example, the Business ID `2617416-4` gives the OVT code `003726174164`. On Peppol, the same code is wrapped in scheme `0216`.

Registration allocates a Finnish party's address on the operator's side: it is the party's own OVT code. Once registration completes, you'll find it on the party entry as an endpoint, `iso6523-actorid-upis::0216:` followed by the code, so you don't need to add it yourself. A party that has the address as an inbox with scheme `0216` instead still sends as before.

Counterparties will ask for this address, and in Finland an e-invoice address is quoted as a pair, the address plus the operator that serves it. Give them both: your OVT code and Invopop's operator, **Apix Messaging, operator ID `003723327487`**.

You'll also need your customers' addresses to send. Look any Finnish organisation up in the national registry at [verkkolaskuosoite.fi](https://verkkolaskuosoite.fi): since 2024 it mirrors the Peppol address list too, so one lookup covers both networks.

You may also meet other address forms that circulate on the Finnish network: IBAN-style addresses from the older bank channel, and operator-prefixed ones such as `TE0037…`. On a Finnish party, always use the OVT code under scheme `0216`.

## Suppliers outside Finland

Companies from **any other country** can register here to invoice Finnish receivers. Most Finnish businesses receive their e-invoices on the domestic operator network, which the [Peppol app](/apps/peppol) can't reach.

Use the company's own tax ID on the party. The operator registers the company under that tax ID. For most countries this is the full VAT number. For Sweden and Norway it is the Org.nr on its own, because their VAT numbers are built from it.

Sending works as it does for a Finnish supplier, with the same workflow, checks and formats. Give the party an endpoint with the company's own electronic address, such as `iso6523-actorid-upis::0007:` followed by a Swedish Org.nr.

Suppliers outside Finland are registered to **send only**. A Finnish e-invoice address is built from a Finnish Business ID, so they don't get one. They aren't listed in the [national registry](https://verkkolaskuosoite.fi), and Finnish senders can't reach them on the domestic network. The app doesn't poll an inbox for them, and the authorization agreement their representative signs covers sending only.

To receive invoices too, register the company in the [Peppol app](/apps/peppol). Finnish senders who invoice abroad can reach it there.

## Setup

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

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

  <Step title="Set up reception (Finnish parties only)">
    <Info>Registering a Finnish party requires the reception workflows to be configured first, because its inbox starts being polled right away. Create the sync and import workflows and configure them on the app as described in the [receiving guide](/guides/fi-finvoice-receiving#setup), then come back here. If you only register suppliers outside Finland, skip this step.</Info>
  </Step>

  <Step title="Create the registration workflow">
    <Card iconType="duotone" title="Finvoice register party workflow" icon="code-branch" href="https://console.invopop.com/redirect/workflows/new?template=fi-finvoice-register" horizontal>
      Add to my workspace →
    </Card>

    <Tabs>
      <Tab title="Workflow">
        <WorkflowDiagram workflow={fiFinvoiceRegisterWorkflow} />
      </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 Finvoice register party workflow theme={"system"}
        {
            "name": "Finvoice register party",
            "description": "Register a party so it can send e-invoices in Finland, once its representative has signed the authorization. Finnish parties can also receive",
            "schema": "org/party",
            "steps": [
                {
                    "id": "bc177ef2-9172-11f1-8c54-92000767c8b7",
                    "name": "Set state",
                    "provider": "silo.state",
                    "summary": "Set state to `processing`{.state .processing}",
                    "config": {
                        "state": "processing"
                    }
                },
                {
                    "id": "874e856a-a0b4-11f1-a9bb-92000767c8b7",
                    "name": "Sign authorisation for Finland",
                    "provider": "gov-fi.sign"
                },
                {
                    "id": "875129e9-a0b4-11f1-b569-92000767c8b7",
                    "name": "Wait for Finland agreement approval",
                    "provider": "gov-fi.wait.approval"
                },
                {
                    "id": "bc177f3b-9172-11f1-8204-92000767c8b7",
                    "name": "Register party in Finland",
                    "provider": "gov-fi.register"
                },
                {
                    "id": "bc177f7d-9172-11f1-bb70-92000767c8b7",
                    "name": "Set state",
                    "provider": "silo.state",
                    "summary": "Set state to `registered`{.state .registered}",
                    "config": {
                        "state": "registered"
                    }
                }
            ],
            "rescue": [
                {
                    "id": "bc177fc4-9172-11f1-a165-92000767c8b7",
                    "name": "Set state",
                    "provider": "silo.state",
                    "summary": "Set state to `error`{.state .error}",
                    "config": {
                        "state": "error"
                    }
                }
            ]
        }
        ```
      </Tab>
    </Tabs>
  </Step>
</Steps>

## Register a supplier

<Steps>
  <Step title="Upload the party">
    Create a silo entry with the party's details. Registration uses the name, the tax ID and the representative under `people`. The example below shows a Finnish party, with its y-tunnus as the tax ID. You can leave out the endpoint: registration adds it.

    ```json Finland supplier example expandable theme={"system"}
    {
        "$schema": "https://gobl.org/draft-0/org/party",
        "name": "Aurora Ohjelmistot Oy",
        "tax_id": {
            "country": "FI",
            "code": "26174164"
        },
        "endpoints": [
            {
                "uri": "iso6523-actorid-upis::0216:003726174164"
            }
        ],
        "addresses": [
            {
                "num": "12",
                "street": "Mannerheimintie",
                "locality": "Helsinki",
                "code": "00100",
                "country": "FI"
            }
        ],
        "emails": [
            {
                "addr": "laskutus@auroraohjelmistot.fi"
            }
        ],
        "people": [
            {
                "name": {
                    "given": "Aino",
                    "surname": "Virtanen"
                },
                "role": "CEO",
                "identities": [
                    {
                        "code": "PA1234567"
                    }
                ]
            }
        ]
    }
    ```
  </Step>

  <Step title="Run the registration workflow">
    Run the registration workflow on the party's silo entry, from the Console or [via the API](/api-ref/transform/jobs/create-a-job-post). The workflow publishes the signing link and pauses at the **Wait for Finland agreement approval** step until the signed authorization is approved.
  </Step>

  <Step title="Share the signing link">
    The workflow adds a public **signing link** to the party's silo entry. Open the party in the Console to copy it, and send it to the supplier's representative.
  </Step>

  <Step title="Have the representative sign">
    The link opens a short hosted wizard: the representative confirms their name and role (prefilled from the party's `people` entry), uploads a photo of their identity document, reviews the authorization agreement, and signs it — typing their name or drawing a signature that is stamped onto the document.

    When the identity check passes, the authorization is approved on the spot. Otherwise it goes to Invopop's team for review, and the representative sees the outcome on the same page.

    <Note>
      In sandbox workspaces the identity check is skipped: any image is accepted and the authorization is approved as soon as it is signed.
    </Note>
  </Step>

  <Step title="Wait for the registration to complete">
    As soon as the authorization is approved, the workflow resumes on its own. Registration finds or creates the party's company under Invopop's partner account at the operator and activates its services. The job stays queued until the operator reports every service in force.

    For a Finnish party, registration also waits until the operator has allocated its e-invoice address, so the job never reports success on an account that can't receive yet. A supplier outside Finland gets no address, so its registration completes as soon as its sending service is active.
  </Step>
</Steps>

Once registration completes, a Finnish party can send and receive e-invoices, and its inbox at the operator starts being polled automatically. A supplier outside Finland can start sending.

<Note>
  A Finnish party's e-invoice address works from the moment registration completes, but the [national registry](https://verkkolaskuosoite.fi) counterparties look addresses up in is refreshed once a night. Expect the party to become findable there the following day.
</Note>

<Warning>
  There is no self-serve deregistration yet. To offboard a party, contact [support@invopop.com](mailto:support@invopop.com).
</Warning>

At this point, you're ready to start sending invoices on behalf of the supplier. Head over to the [Finvoice issuing invoices guide](/guides/fi-finvoice) to continue.

## Sign the agreement via the API

Integrators building their own onboarding UI can drive the signing step without the hosted wizard. The Finland app exposes three endpoints on its service, authenticated per enrollment. All three read the signer from the party entry, so the first person in the party's `people` list must carry a name and a role before they are called.

| Endpoint | Purpose |
| - | - |
| `GET /v1/entry/:silo_entry_id/agreement` | The agreement PDF to render on screen: the signed one once it exists, the unsigned document before that. |
| `POST /v1/entry/:silo_entry_id/identity` | Upload the identity document as base64 images: `{"front": "...", "back": "..."}`; `back` is optional for single-page documents. |
| `POST /v1/entry/:silo_entry_id/sign` | Sign the agreement and submit the authorization. Send `{"signature": "..."}` with a drawn PNG/JPEG to have it stamped, or an empty body to use the signer's typed name. Returns `{"status": "accepted" \| "awaiting"}`. |

## FAQ

<AccordionGroup>
  <Accordion title="How do I register a Finnish supplier?">
    Upload the supplier as a GOBL party with `tax_id.country = FI` and the Business ID (y-tunnus), then run the [Finland app](/apps/finland)'s registration workflow. Registration provisions the party its own operator account and allocates its e-invoice address — a party must be registered before it can send or receive anything. See the [supplier registration guide](/guides/fi-finvoice-supplier).
  </Accordion>

  <Accordion title="What Peppol scheme does Finland use for participant IDs?">
    Scheme `0216`, wrapping the party's OVT code — `0037` followed by the Business ID without its hyphen. Under Finland's Peppol Authority Specific Requirements, the OVT code is the mandatory participant identifier for Finnish organisations on Peppol. The `0037` at the start of the code itself is a country prefix, not the scheme.
  </Accordion>

  <Accordion title="What is a Finnish e-invoice address?">
    An OVT code: `0037` followed by the party's Business ID (y-tunnus) without its hyphen, sometimes with a five-character suffix for routing inside large organisations (for example `003726174164`). On Peppol, the same code is wrapped in scheme `0216` (`0216:003726174164`). You can look any counterparty up in the national registry at [verkkolaskuosoite.fi](https://verkkolaskuosoite.fi): since 2024 it mirrors the Peppol address list too, so one lookup covers both networks.
  </Accordion>

  <Accordion title="Which address form should I put on a party record?">
    For a Finnish party, the OVT code, as an endpoint: `iso6523-actorid-upis::0216:` followed by the code. Registration adds it to the party for you. A supplier outside Finland uses its own electronic address, such as `iso6523-actorid-upis::0007:` followed by a Swedish Org.nr. Other forms circulate on the Finnish network (IBAN-style addresses from the older bank channel, operator-prefixed ones such as `TE0037…`), but for a Finnish party the OVT code is the canonical form, and the one the routing pre-check and the generated e-invoice use.
  </Accordion>

  <Accordion title="Why hasn't my party's registration completed yet?">
    Registration provisions the party its own account with the operator, and the job stays queued until every service is in force. For a Finnish party, it also waits until the operator has allocated its e-invoice address, so it never reports success on an account that can't receive yet. A supplier outside Finland only sends, so its registration completes as soon as its sending service is active.
  </Accordion>

  <Accordion title="Can I register several Finnish parties in one workspace?">
    Yes. Each party gets its own operator account, its own e-invoice address, and its own reception polling schedule. Register each one separately by running the registration workflow on its party record.
  </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>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.