# bexio

Create and find contacts, write invoices (Rechnungen), quotes (Offerten) and orders (Aufträge) and issue, send or invoice them, download their PDF, book payments, and manage articles, projects, timesheets and manual entries in bexio.

## Connect bexio

1. In the sidebar, open **Connections** and press **Add connection**.
2. Type `bexio` and choose **bexio**.
3. Choose **Sign in with bexio**.
4. Press **Sign in with bexio** at the bottom of the sheet, then choose your account in bexio’s window and allow access.

Or choose **Paste your personal access token**, paste it, and press **Test and save**. It stays until someone deletes it.

Sign in with bexio, or paste a personal access token from developer.bexio.com/pat (it has full access to the company and lasts 60 days; then paste a new one).

**What if it says “Sign-in isn’t set up here yet”?**

Signing in with bexio needs a bexio app on this installation, and it has none yet. Until it is set up, **Paste your personal access token** works without it.

**On Cloud:** The sheet says “It’s set up once for everyone who uses this service, not by an organization.”

**Self-hosted:** An admin of the installation sees **Set up bexio sign-in** instead, and sets it up once for everyone. Everyone else sees who to ask.

1. Create an app in bexio’s developer settings ([bexio’s guide](https://developer.bexio.com)).
2. In GoRunner, copy the **Redirect address to add in bexio’s developer settings**, and add it to the app.
3. Paste the **Client ID** and **Client secret**, then press **Save and sign in**.

[Set up a sign-in app](https://docs.gorunner.io/self-host/oauth-apps#other-providers)

**Can I use my own bexio app?**

Yes. In the sheet, open **Use your own bexio app** and paste its **Client ID** and **Client secret**. Add the redirect address it shows to your app first. The connection then signs in through your app instead of the installation’s.

[Connections](https://docs.gorunner.io/build/connections) says how to sign in again, rename or delete it. In a product that embeds GoRunner, **Add connection** can be missing: then [your provider makes connections](https://docs.gorunner.io/embed/customer-connections) for you.

## Start a workflow

Add a trigger and choose **bexio**. The trigger uses the same connection as the steps.

### On Record Created or Changed

Checks bexio about once a minute and starts a run for each record created (or changed) since the check before. The first check after publishing only takes note of what is there (it starts nothing); changing the trigger starts over the same way. A check starts at most 100 runs; more wait for the next check.

- **Watch · Required**: Which records. Options: Invoices, Quotes, Orders, Contacts, Articles, Projects, Timesheet entries. Default: Invoices.
- **Trigger on · Required**: Created only, or also each change (bexio sorts only contacts and documents by their last change). Options: Created, Created or changed (contacts, invoices, quotes, orders). Default: Created.

A later step can use its data, such as `{{trigger.change_type}}`, `{{trigger.id}}`, `{{trigger.updated_at}}`. See [Use data from earlier steps](https://docs.gorunner.io/build/use-data-from-earlier-steps).

## Do things in bexio

Add a **bexio** step, choose a **Resource**, then an **Operation**. Choose a row to see its fields.

- [Contact](https://docs.gorunner.io/apps/bexio#fields-f-contact): Create · Get · Get Many · Search · Update · Delete
- [Invoice](https://docs.gorunner.io/apps/bexio#fields-f-invoice): Create · Get · Get Many · Search · Issue · Mark as Sent · Send by Email · Download PDF · Add Payment · Cancel · Delete
- [Quote](https://docs.gorunner.io/apps/bexio#fields-f-quote): Create · Get · Get Many · Search · Issue · Accept · Decline · Mark as Sent · Send by Email · Download PDF · Create Order · Create Invoice · Delete
- [Order](https://docs.gorunner.io/apps/bexio#fields-f-order): Create · Get · Get Many · Search · Download PDF · Create Invoice · Create Delivery · Delete
- [Article](https://docs.gorunner.io/apps/bexio#fields-f-article): Create · Get · Get Many · Search · Update · Delete
- [Project](https://docs.gorunner.io/apps/bexio#fields-f-project): Create · Get · Get Many · Search · Update · Archive · Reactivate · Delete
- [Timesheet](https://docs.gorunner.io/apps/bexio#fields-f-timesheet): Create · Get · Get Many · Search · Delete
- [Manual Entry](https://docs.gorunner.io/apps/bexio#fields-f-manualentry): Create
- [File](https://docs.gorunner.io/apps/bexio#fields-f-file): Upload
- [User](https://docs.gorunner.io/apps/bexio#fields-f-user): Get Me · Get Many

Later steps read a step’s output by its name: see [Use data from earlier steps](https://docs.gorunner.io/build/use-data-from-earlier-steps).

## Limits

- A reply from bexio can be up to 16 MB (a file download can have its own limit). A larger one fails the step; it is never cut short.
- When bexio says to slow down (429), the step waits as long as it asks, if the step’s time allows. Otherwise it fails and says when to try again.

Not in your list? See [When an app isn’t here](https://docs.gorunner.io/apps/when-an-app-isnt-here#q-not-in-list).

## For developers

In the API, which calls apps pieces, bexio is `pieceId: "bexio"` with `actionId: "bexio"`, set by `resource` and an `operation_…` field, such as `operation_article`. Its trigger is `bexiotrigger` / `bexio_poll`. [Get an app](https://docs.gorunner.io/api/apps/get-app) returns every field.

It can change something outside the run (`writes_external`). See [How versions and side effects work](https://docs.gorunner.io/apps#q-versions).

### bexio › Contact

### Create

- **Type · Optional**: A company, or a person. Options: Company, Person. Default: Company.
- **Name · Optional**: A company's name, or a person's last name. Required to create.
- **Name Addition · Optional**: A company's name addition, or a person's first name.
- **Email · Optional**
- **Second Email · Optional**
- **Phone · Optional**
- **Mobile · Optional**
- **Street · Optional**: The street's name (without the number).
- **House Number · Optional**
- **Address Addition · Optional**
- **ZIP Code · Optional**
- **City · Optional**
- **Country · Optional**: The country (a bexio country).
- **Website · Optional**
- **Contact Number · Optional**: Empty when creating: bexio numbers it.
- **Remarks · Optional**
- **Owner · Optional**: The bexio user responsible. Empty when creating: the signed-in user.

### Get and Delete

- **Contact · Required**: The contact.

### Get Many

- **Order · Optional**: How the list is sorted. Options: id, ascending, id, descending, nr, ascending, nr, descending, name 1, ascending, name 1, descending, updated at, ascending, updated at, descending. Default: id, ascending.
- **Archived Only · Optional**: List archived contacts instead. Off by default.
- **Return All · Optional**: Read every contact, page by page (at most 5000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many contacts to return (1–5000). Default: 50. Shows when **Return All** is off.

### Search

- **Field · Required**: The field to search by. Options: name_1 to id (17 options). Default: name_1.
- **Condition · Optional**: How the field is compared. Options: contains, is, is not, greater than, at least, less than, at most, does not contain, is empty, is not empty. Default: contains.
- **Value · Optional**: What to compare with (a date as 2026-11-01, an id as a number). Not needed for is empty / is not empty.
- **Return All · Optional**: Read every contact, page by page (at most 5000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many contacts to return (1–5000). Default: 50. Shows when **Return All** is off.

### Update

- **Contact · Required**: The contact.
- **Name · Optional**: A company's name, or a person's last name. Required to create.
- **Name Addition · Optional**: A company's name addition, or a person's first name.
- **Email · Optional**
- **Second Email · Optional**
- **Phone · Optional**
- **Mobile · Optional**
- **Street · Optional**: The street's name (without the number).
- **House Number · Optional**
- **Address Addition · Optional**
- **ZIP Code · Optional**
- **City · Optional**
- **Country · Optional**: The country (a bexio country).
- **Website · Optional**
- **Contact Number · Optional**: Empty when creating: bexio numbers it.
- **Remarks · Optional**
- **Owner · Optional**: The bexio user responsible. Empty when creating: the signed-in user.

### bexio › Invoice

### Create

- **Contact · Required**: The customer the invoice is for.
- **Title · Optional**
- **Positions · Required**: The lines: a free line (text, quantity, price), an article, or a text only.
- **Tax · Optional**: The sales tax of every line that names none (bexio's active sales taxes).
- **Prices · Optional**: Whether prices include VAT, exclude it, or are VAT-exempt. Options: Including VAT, Excluding VAT, Exempt from VAT. Default: Including VAT.
- **Date · Optional**: The document's date (2026-11-01). Empty: today.
- **Due Date · Optional**: Empty: bexio's default.
- **Introduction · Optional**: The text above the positions.
- **Closing Text · Optional**: The text below the positions.
- **Responsible User · Optional**: Empty: the signed-in user.
- **Project · Optional**: A project the document belongs to.
- **Reference · Optional**: Your own reference for it (bexio's api_reference, visible only through the API).
- **Other Fields · Optional**: More of bexio's fields as JSON, such as {"currency_id": 1, "language_id": 1}. A field set above wins.

### Get, Issue, Mark as Sent, Cancel and Delete

- **Invoice · Required**: The invoice's id, or its link from bexio.

### Get Many

- **Order · Optional**: How the list is sorted. Options: id, ascending, id, descending, total, ascending, total, descending, updated at, ascending, updated at, descending. Default: id, ascending.
- **Return All · Optional**: Read every invoice, page by page (at most 5000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many invoices to return (1–5000). Default: 50. Shows when **Return All** is off.

### Search

- **Field · Required**: The field to search by. Options: document_nr, title, contact_id, kb_item_status_id, api_reference, user_id, total, is_valid_from, is_valid_to, updated_at, id. Default: document_nr.
- **Condition · Optional**: How the field is compared. Options: contains, is, is not, greater than, at least, less than, at most, does not contain, is empty, is not empty. Default: contains.
- **Value · Optional**: What to compare with (a date as 2026-11-01, an id as a number). Not needed for is empty / is not empty.
- **Return All · Optional**: Read every invoice, page by page (at most 5000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many invoices to return (1–5000). Default: 50. Shows when **Return All** is off.

### Send by Email

- **Invoice · Required**: The invoice's id, or its link from bexio.
- **To · Required**: The recipient's email address.
- **Subject · Required**
- **Message · Required**: The email's text. It must hold the placeholder [Network Link], which bexio replaces with the document's link. Default: ```text
Guten Tag

Ihr Dokument finden Sie hier: [Network Link]

Freundliche Grüsse
```
- **Mark as Open · Optional**: Issue the document as it is sent. On by default.
- **Attach the PDF · Optional**: On by default.

### Download PDF

- **Invoice · Required**: The invoice's id, or its link from bexio.
- **With Letterhead · Optional**: Print the PDF on the company's letterhead. On by default.

### Add Payment

- **Invoice · Required**: The invoice's id, or its link from bexio.
- **Amount · Required**: The amount paid.
- **Payment Date · Optional**: When it was paid (2026-11-01). Empty: today.
- **Bank Account · Optional**: The account it was paid to.

### bexio › Quote

### Create

- **Contact · Required**: The customer the quote is for.
- **Title · Optional**
- **Positions · Required**: The lines: a free line (text, quantity, price), an article, or a text only.
- **Tax · Optional**: The sales tax of every line that names none (bexio's active sales taxes).
- **Prices · Optional**: Whether prices include VAT, exclude it, or are VAT-exempt. Options: Including VAT, Excluding VAT, Exempt from VAT. Default: Including VAT.
- **Date · Optional**: The document's date (2026-11-01). Empty: today.
- **Valid Until · Optional**: Empty: bexio's default.
- **Introduction · Optional**: The text above the positions.
- **Closing Text · Optional**: The text below the positions.
- **Responsible User · Optional**: Empty: the signed-in user.
- **Project · Optional**: A project the document belongs to.
- **Reference · Optional**: Your own reference for it (bexio's api_reference, visible only through the API).
- **Other Fields · Optional**: More of bexio's fields as JSON, such as {"currency_id": 1, "language_id": 1}. A field set above wins.

### Get, Issue, Accept, Decline, Mark as Sent, Create Order, Create Invoice and Delete

- **Quote · Required**: The quote's id, or its link from bexio.

### Get Many

- **Order · Optional**: How the list is sorted. Options: id, ascending, id, descending, total, ascending, total, descending, updated at, ascending, updated at, descending. Default: id, ascending.
- **Return All · Optional**: Read every quote, page by page (at most 5000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many quotes to return (1–5000). Default: 50. Shows when **Return All** is off.

### Search

- **Field · Required**: The field to search by. Options: document_nr, title, contact_id, kb_item_status_id, user_id, total, is_valid_from, is_valid_until, updated_at, id. Default: document_nr.
- **Condition · Optional**: How the field is compared. Options: contains, is, is not, greater than, at least, less than, at most, does not contain, is empty, is not empty. Default: contains.
- **Value · Optional**: What to compare with (a date as 2026-11-01, an id as a number). Not needed for is empty / is not empty.
- **Return All · Optional**: Read every quote, page by page (at most 5000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many quotes to return (1–5000). Default: 50. Shows when **Return All** is off.

### Send by Email

- **Quote · Required**: The quote's id, or its link from bexio.
- **To · Required**: The recipient's email address.
- **Subject · Required**
- **Message · Required**: The email's text. It must hold the placeholder [Network Link], which bexio replaces with the document's link. Default: ```text
Guten Tag

Ihr Dokument finden Sie hier: [Network Link]

Freundliche Grüsse
```
- **Mark as Open · Optional**: Issue the document as it is sent. On by default.
- **Attach the PDF · Optional**: On by default.

### Download PDF

- **Quote · Required**: The quote's id, or its link from bexio.
- **With Letterhead · Optional**: Print the PDF on the company's letterhead. On by default.

### bexio › Order

### Create

- **Contact · Required**: The customer the order is for.
- **Title · Optional**
- **Positions · Required**: The lines: a free line (text, quantity, price), an article, or a text only.
- **Tax · Optional**: The sales tax of every line that names none (bexio's active sales taxes).
- **Prices · Optional**: Whether prices include VAT, exclude it, or are VAT-exempt. Options: Including VAT, Excluding VAT, Exempt from VAT. Default: Including VAT.
- **Date · Optional**: The document's date (2026-11-01). Empty: today.
- **Valid Until · Optional**: Empty: bexio's default.
- **Introduction · Optional**: The text above the positions.
- **Closing Text · Optional**: The text below the positions.
- **Responsible User · Optional**: Empty: the signed-in user.
- **Project · Optional**: A project the document belongs to.
- **Reference · Optional**: Your own reference for it (bexio's api_reference, visible only through the API).
- **Other Fields · Optional**: More of bexio's fields as JSON, such as {"currency_id": 1, "language_id": 1}. A field set above wins.

### Get, Create Invoice, Create Delivery and Delete

- **Order · Required**: The order's id, or its link from bexio.

### Get Many

- **Order · Optional**: How the list is sorted. Options: id, ascending, id, descending, total, ascending, total, descending, updated at, ascending, updated at, descending. Default: id, ascending.
- **Return All · Optional**: Read every order, page by page (at most 5000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many orders to return (1–5000). Default: 50. Shows when **Return All** is off.

### Search

- **Field · Required**: The field to search by. Options: document_nr, title, contact_id, kb_item_status_id, user_id, total, is_valid_from, is_valid_to, updated_at, id. Default: document_nr.
- **Condition · Optional**: How the field is compared. Options: contains, is, is not, greater than, at least, less than, at most, does not contain, is empty, is not empty. Default: contains.
- **Value · Optional**: What to compare with (a date as 2026-11-01, an id as a number). Not needed for is empty / is not empty.
- **Return All · Optional**: Read every order, page by page (at most 5000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many orders to return (1–5000). Default: 50. Shows when **Return All** is off.

### Download PDF

- **Order · Required**: The order's id, or its link from bexio.
- **With Letterhead · Optional**: Print the PDF on the company's letterhead. On by default.

### bexio › Article

### Create

- **Name · Optional**: The article's name. Required to create.
- **Article Code · Optional**: Your own code for it.
- **Type · Optional**: A physical product or a service. Empty: product when creating. Options: Product, Service.
- **Sale Price · Optional**
- **Purchase Price · Optional**
- **Unit · Optional**: The unit it is sold in.
- **Sales Tax · Optional**: The tax it is sold with.
- **Description · Optional**
- **Remarks · Optional**

### Get and Delete

- **Article · Required**: The article.

### Get Many

- **Order · Optional**: How the list is sorted. Options: id, ascending, id, descending, intern name, ascending, intern name, descending. Default: id, ascending.
- **Return All · Optional**: Read every article, page by page (at most 5000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many articles to return (1–5000). Default: 50. Shows when **Return All** is off.

### Search

- **Field · Required**: The field to search by. Options: intern_name, intern_code. Default: intern_name.
- **Condition · Optional**: How the field is compared. Options: contains, is, is not, greater than, at least, less than, at most, does not contain, is empty, is not empty. Default: contains.
- **Value · Optional**: What to compare with (a date as 2026-11-01, an id as a number). Not needed for is empty / is not empty.
- **Return All · Optional**: Read every article, page by page (at most 5000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many articles to return (1–5000). Default: 50. Shows when **Return All** is off.

### Update

- **Article · Required**: The article.
- **Name · Optional**: The article's name. Required to create.
- **Article Code · Optional**: Your own code for it.
- **Type · Optional**: A physical product or a service. Empty: product when creating. Options: Product, Service.
- **Sale Price · Optional**
- **Purchase Price · Optional**
- **Unit · Optional**: The unit it is sold in.
- **Sales Tax · Optional**: The tax it is sold with.
- **Description · Optional**
- **Remarks · Optional**

### bexio › Project

### Create

- **Name · Optional**: Required to create.
- **Contact · Optional**: The customer. Required to create.
- **Status · Optional**: The project's status (bexio's project states). Required to create.
- **Project Type · Optional**: Required to create.
- **Start · Optional**: 2026-11-01.
- **End · Optional**
- **Comment · Optional**
- **Responsible User · Optional**: Empty when creating: the signed-in user.

### Get, Archive, Reactivate and Delete

- **Project · Required**: The project.

### Get Many

- **Order · Optional**: How the list is sorted. Options: id, ascending, id, descending, name, ascending, name, descending. Default: id, ascending.
- **Return All · Optional**: Read every project, page by page (at most 5000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many projects to return (1–5000). Default: 50. Shows when **Return All** is off.

### Search

- **Field · Required**: The field to search by. Options: name, contact_id, pr_state_id. Default: name.
- **Condition · Optional**: How the field is compared. Options: contains, is, is not, greater than, at least, less than, at most, does not contain, is empty, is not empty. Default: contains.
- **Value · Optional**: What to compare with (a date as 2026-11-01, an id as a number). Not needed for is empty / is not empty.
- **Return All · Optional**: Read every project, page by page (at most 5000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many projects to return (1–5000). Default: 50. Shows when **Return All** is off.

### Update

- **Name · Optional**: Required to create.
- **Project · Required**: The project.
- **Contact · Optional**: The customer. Required to create.
- **Status · Optional**: The project's status (bexio's project states). Required to create.
- **Project Type · Optional**: Required to create.
- **Start · Optional**: 2026-11-01.
- **End · Optional**
- **Comment · Optional**
- **Responsible User · Optional**: Empty when creating: the signed-in user.

### bexio › Timesheet

### Create

- **Activity · Required**: The business activity (Tätigkeit) the time is for.
- **Date · Optional**: The day worked (2026-11-01). Empty: today.
- **Duration · Required**: Hours and minutes, such as 01:30.
- **Description · Optional**
- **Billable · Optional**: On by default.
- **Contact · Optional**
- **Project · Optional**
- **User · Optional**: Who worked. Empty: the signed-in user.

### Get and Delete

- **Timesheet · Required**: The timesheet entry's id.

### Get Many

- **Order · Optional**: How the list is sorted. Options: id, ascending, id, descending, date, ascending, date, descending. Default: id, ascending.
- **Return All · Optional**: Read every timesheet entry, page by page (at most 5000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many timesheet entrys to return (1–5000). Default: 50. Shows when **Return All** is off.

### Search

- **Field · Required**: The field to search by. Options: contact_id, pr_project_id, user_id, client_service_id, status_id, id. Default: contact_id.
- **Condition · Optional**: How the field is compared. Options: contains, is, is not, greater than, at least, less than, at most, does not contain, is empty, is not empty. Default: contains.
- **Value · Optional**: What to compare with (a date as 2026-11-01, an id as a number). Not needed for is empty / is not empty.
- **Return All · Optional**: Read every timesheet entry, page by page (at most 5000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many timesheet entrys to return (1–5000). Default: 50. Shows when **Return All** is off.

### bexio › Manual Entry

### Create

- **Date · Optional**: The booking date (2026-11-01). Empty: today.
- **Debit Account · Required**: The account debited (Soll).
- **Credit Account · Required**: The account credited (Haben).
- **Amount · Required**
- **Description · Optional**
- **Tax · Optional**: A tax on the entry. Empty: none.
- **Reference Number · Optional**: Empty: bexio's next.

### bexio › File

### Upload

- **File · Required**: Upload a file, or switch to an expression to use one from an earlier step (such as {{steps.download.result}}). A receipt or document for bexio's inbox.

### bexio › User

### Get Me and Get Many

Nothing to fill in.

Source: https://docs.gorunner.io/apps/bexio
