Read smallinvoice contacts, invoices, offers, projects and hours; create contacts and invoices.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
WRITE: creates a new company contact (customer) in smallinvoice, with its main address. Needs the "contact" scope. POST /contacts. Nothing is sent to anyone. Private persons are not supported here (smallinvoice needs more fields for them): create those in smallinvoice. Check smallinvoice_list_contacts first so you do not create a duplicate.
Main address: city.
Company name, as printed on documents.
Main address: street and number.
Main address: ISO country code, e.g. CH.
Main address: postcode.
E-mail address.
ISO currency, e.g. CHF or EUR.
Relation codes (default ['CL'] = client, as in the vendor's example). See the vendor docs for the others.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
WRITE: creates a new company contact (customer) in smallinvoice, with its main address. Needs the "contact" scope. POST /contacts. Nothing is sent to anyone. Private persons are not supported here (smallinvoice needs more fields for them): create those in smallinvoice. Check smallinvoice_list_contacts first so you do not create a duplicate.
| Argument | Type | Description |
|---|---|---|
| city* | string | Main address: city. |
| name* | string | Company name, as printed on documents. |
| string | E-mail address. | |
| street* | string | Main address: street and number. |
| country* | string | Main address: ISO country code, e.g. CH. |
| currency | string | ISO currency, e.g. CHF or EUR. |
| postcode* | string | Main address: postcode. |
| relation | array | Relation codes (default ['CL'] = client, as in the vendor's example). See the vendor docs for the others. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name",
"street",
"postcode",
"city",
"country"
],
"properties": {
"city": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Main address: city."
},
"name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Company name, as printed on documents."
},
"email": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 200,
"description": "E-mail address."
},
"street": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Main address: street and number."
},
"country": {
"type": "string",
"pattern": "^[A-Z]{2}$",
"description": "Main address: ISO country code, e.g. CH."
},
"currency": {
"type": "string",
"pattern": "^[A-Z]{3}$",
"description": "ISO currency, e.g. CHF or EUR."
},
"postcode": {
"type": "string",
"maxLength": 20,
"minLength": 1,
"description": "Main address: postcode."
},
"relation": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"maxItems": 5,
"description": "Relation codes (default ['CL'] = client, as in the vendor's example). See the vendor docs for the others."
}
}
}WRITE: creates a new invoice for a contact. Needs the "invoice" scope. POST /receivables/invoices. It is only created: it is NOT sent by e-mail or post and its status is not changed; the user reviews it in smallinvoice. Not idempotent: calling it twice creates two invoices. Use smallinvoice_list_contacts / smallinvoice_list_units first for the ids.
| Argument | Type | Description |
|---|---|---|
| due* | string | Due date, yyyy-mm-dd. |
| date* | string | Invoice date, yyyy-mm-dd. |
| currency* | string | ISO currency, e.g. CHF. |
| language* | string | Document language: de, en, fr or it. |
| positions* | array | The invoice positions. |
| contact_id* | integer | The contact (customer) id. |
| contact_address_id* | integer | The id of the contact's address to print (smallinvoice_list_contact_addresses, or main_address_id on the contact). |
One contact by id, with its fields. Add with=main_address for the main address. Needs the "contact" scope. GET /contacts/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | integer | The contact id (from smallinvoice_list_contacts). |
| with | string | Optional extra fields to include, comma separated (e.g. 'main_address' on contacts). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The contact id (from smallinvoice_list_contacts).",
"exclusiveMinimum": 0
},
"with": {
"type": "string",
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
}
}
}One delivery note by id. Needs the "delivery_note" scope. GET /receivables/delivery-notes/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | integer | The delivery note id. |
| with | string | Optional extra fields to include, comma separated (e.g. 'main_address' on contacts). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The delivery note id.",
"exclusiveMinimum": 0
},
"with": {
"type": "string",
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
}
}
}One invoice by id with its positions, totals and status. Needs the "invoice" scope. GET /receivables/invoices/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | integer | The invoice id (from smallinvoice_list_invoices). |
| with | string | Optional extra fields to include, comma separated (e.g. 'main_address' on contacts). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The invoice id (from smallinvoice_list_invoices).",
"exclusiveMinimum": 0
},
"with": {
"type": "string",
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
}
}
}One offer (quote) by id with its positions and totals. Needs the "offer" scope. GET /receivables/offers/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | integer | The offer id (from smallinvoice_list_offers). |
| with | string | Optional extra fields to include, comma separated (e.g. 'main_address' on contacts). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The offer id (from smallinvoice_list_offers).",
"exclusiveMinimum": 0
},
"with": {
"type": "string",
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
}
}
}One order confirmation by id. Needs the "order_confirmation" scope. GET /receivables/order-confirmations/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | integer | The order confirmation id. |
| with | string | Optional extra fields to include, comma separated (e.g. 'main_address' on contacts). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The order confirmation id.",
"exclusiveMinimum": 0
},
"with": {
"type": "string",
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
}
}
}The smallinvoice account the API client belongs to (the owner's id and details). A cheap check that the connection works. GET /auth/owner.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}One project by id. Needs the "project" scope. GET /reporting/projects/{id}.
| Argument | Type | Description |
|---|---|---|
| id* | integer | The project id (from smallinvoice_list_projects). |
| with | string | Optional extra fields to include, comma separated (e.g. 'main_address' on contacts). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The project id (from smallinvoice_list_projects).",
"exclusiveMinimum": 0
},
"with": {
"type": "string",
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
}
}
}List activities (the kinds of work that hours are booked on). Needs the "activity" scope. GET /reporting/activities. Returns count, total, next_offset (pass it as offset for the next page) and the items.
| Argument | Type | Description |
|---|---|---|
| q | string | Optional free-text search over several fields. |
| sort | string | Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several. |
| with | string | Optional extra fields to include, comma separated (e.g. 'main_address' on contacts). |
| limit | integer | Items per page (default 100, max 200). |
| filter | string | Optional filter as a JSON object string, e.g. {"currency":"CHF"}; combine with {"and":[...]} / {"or":[...]}. Comparators go before the value: "<", "<=", ">", ">=", "!" (not), "~" (contains), e.g. {"name":"~ACME"}. Unknown field names are answered with HTTP 400. |
| offset | integer | Items to skip (paging: the previous reply's next_offset). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional free-text search over several fields."
},
"sort": {
"type": "string",
"pattern": "^-?[A-Za-z0-9_.]+(,-?[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several."
},
"with": {
"type": "string",
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Items per page (default 100, max 200)."
},
"filter": {
"type": "string",
"maxLength": 2000,
"description": "Optional filter as a JSON object string, e.g. {\"currency\":\"CHF\"}; combine with {\"and\":[...]} / {\"or\":[...]}. Comparators go before the value: \"<\", \"<=\", \">\", \">=\", \"!\" (not), \"~\" (contains), e.g. {\"name\":\"~ACME\"}. Unknown field names are answered with HTTP 400."
},
"offset": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Items to skip (paging: the previous reply's next_offset)."
}
}
}List the account's bank accounts (as printed on documents). Needs the "configuration" scope. GET /configuration/bank-accounts. Returns count, total, next_offset (pass it as offset for the next page) and the items.
| Argument | Type | Description |
|---|---|---|
| q | string | Optional free-text search over several fields. |
| sort | string | Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several. |
| with | string | Optional extra fields to include, comma separated (e.g. 'main_address' on contacts). |
| limit | integer | Items per page (default 100, max 200). |
| filter | string | Optional filter as a JSON object string, e.g. {"currency":"CHF"}; combine with {"and":[...]} / {"or":[...]}. Comparators go before the value: "<", "<=", ">", ">=", "!" (not), "~" (contains), e.g. {"name":"~ACME"}. Unknown field names are answered with HTTP 400. |
| offset | integer | Items to skip (paging: the previous reply's next_offset). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional free-text search over several fields."
},
"sort": {
"type": "string",
"pattern": "^-?[A-Za-z0-9_.]+(,-?[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several."
},
"with": {
"type": "string",
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Items per page (default 100, max 200)."
},
"filter": {
"type": "string",
"maxLength": 2000,
"description": "Optional filter as a JSON object string, e.g. {\"currency\":\"CHF\"}; combine with {\"and\":[...]} / {\"or\":[...]}. Comparators go before the value: \"<\", \"<=\", \">\", \">=\", \"!\" (not), \"~\" (contains), e.g. {\"name\":\"~ACME\"}. Unknown field names are answered with HTTP 400."
},
"offset": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Items to skip (paging: the previous reply's next_offset)."
}
}
}All addresses of one contact. Needs the "contact" scope. GET /contacts/{contactId}/addresses.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Items per page (default 100, max 200). |
| offset | integer | Items to skip (paging: the previous reply's next_offset). |
| contact_id* | integer | The contact id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"contact_id"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Items per page (default 100, max 200)."
},
"offset": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Items to skip (paging: the previous reply's next_offset)."
},
"contact_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The contact id.",
"exclusiveMinimum": 0
}
}
}List the contact groups. Needs the "contact" scope. GET /contacts/configuration/groups. Returns count, total, next_offset (pass it as offset for the next page) and the items.
| Argument | Type | Description |
|---|---|---|
| q | string | Optional free-text search over several fields. |
| sort | string | Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several. |
| with | string | Optional extra fields to include, comma separated (e.g. 'main_address' on contacts). |
| limit | integer | Items per page (default 100, max 200). |
| filter | string | Optional filter as a JSON object string, e.g. {"currency":"CHF"}; combine with {"and":[...]} / {"or":[...]}. Comparators go before the value: "<", "<=", ">", ">=", "!" (not), "~" (contains), e.g. {"name":"~ACME"}. Unknown field names are answered with HTTP 400. |
| offset | integer | Items to skip (paging: the previous reply's next_offset). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional free-text search over several fields."
},
"sort": {
"type": "string",
"pattern": "^-?[A-Za-z0-9_.]+(,-?[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several."
},
"with": {
"type": "string",
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Items per page (default 100, max 200)."
},
"filter": {
"type": "string",
"maxLength": 2000,
"description": "Optional filter as a JSON object string, e.g. {\"currency\":\"CHF\"}; combine with {\"and\":[...]} / {\"or\":[...]}. Comparators go before the value: \"<\", \"<=\", \">\", \">=\", \"!\" (not), \"~\" (contains), e.g. {\"name\":\"~ACME\"}. Unknown field names are answered with HTTP 400."
},
"offset": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Items to skip (paging: the previous reply's next_offset)."
}
}
}The contact persons of one company contact. Needs the "contact" scope. GET /contacts/{contactId}/people.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Items per page (default 100, max 200). |
| offset | integer | Items to skip (paging: the previous reply's next_offset). |
| contact_id* | integer | The contact id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"contact_id"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Items per page (default 100, max 200)."
},
"offset": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Items to skip (paging: the previous reply's next_offset)."
},
"contact_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The contact id.",
"exclusiveMinimum": 0
}
}
}List contacts (customers and suppliers): name, type (company or person), relation, e-mail, currency. Add with=main_address for the address. Needs the "contact" scope. GET /contacts. Returns count, total, next_offset (pass it as offset for the next page) and the items.
| Argument | Type | Description |
|---|---|---|
| q | string | Optional free-text search over several fields. |
| sort | string | Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several. |
| with | string | Optional extra fields to include, comma separated (e.g. 'main_address' on contacts). |
| limit | integer | Items per page (default 100, max 200). |
| filter | string | Optional filter as a JSON object string, e.g. {"currency":"CHF"}; combine with {"and":[...]} / {"or":[...]}. Comparators go before the value: "<", "<=", ">", ">=", "!" (not), "~" (contains), e.g. {"name":"~ACME"}. Unknown field names are answered with HTTP 400. |
| offset | integer | Items to skip (paging: the previous reply's next_offset). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional free-text search over several fields."
},
"sort": {
"type": "string",
"pattern": "^-?[A-Za-z0-9_.]+(,-?[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several."
},
"with": {
"type": "string",
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Items per page (default 100, max 200)."
},
"filter": {
"type": "string",
"maxLength": 2000,
"description": "Optional filter as a JSON object string, e.g. {\"currency\":\"CHF\"}; combine with {\"and\":[...]} / {\"or\":[...]}. Comparators go before the value: \"<\", \"<=\", \">\", \">=\", \"!\" (not), \"~\" (contains), e.g. {\"name\":\"~ACME\"}. Unknown field names are answered with HTTP 400."
},
"offset": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Items to skip (paging: the previous reply's next_offset)."
}
}
}List cost units. Needs the "cost_unit" scope. GET /reporting/cost-units. Returns count, total, next_offset (pass it as offset for the next page) and the items.
| Argument | Type | Description |
|---|---|---|
| q | string | Optional free-text search over several fields. |
| sort | string | Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several. |
| with | string | Optional extra fields to include, comma separated (e.g. 'main_address' on contacts). |
| limit | integer | Items per page (default 100, max 200). |
| filter | string | Optional filter as a JSON object string, e.g. {"currency":"CHF"}; combine with {"and":[...]} / {"or":[...]}. Comparators go before the value: "<", "<=", ">", ">=", "!" (not), "~" (contains), e.g. {"name":"~ACME"}. Unknown field names are answered with HTTP 400. |
| offset | integer | Items to skip (paging: the previous reply's next_offset). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional free-text search over several fields."
},
"sort": {
"type": "string",
"pattern": "^-?[A-Za-z0-9_.]+(,-?[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several."
},
"with": {
"type": "string",
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Items per page (default 100, max 200)."
},
"filter": {
"type": "string",
"maxLength": 2000,
"description": "Optional filter as a JSON object string, e.g. {\"currency\":\"CHF\"}; combine with {\"and\":[...]} / {\"or\":[...]}. Comparators go before the value: \"<\", \"<=\", \">\", \">=\", \"!\" (not), \"~\" (contains), e.g. {\"name\":\"~ACME\"}. Unknown field names are answered with HTTP 400."
},
"offset": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Items to skip (paging: the previous reply's next_offset)."
}
}
}List delivery notes. Filter by contact_id or a JSON filter. Needs the "delivery_note" scope. GET /receivables/delivery-notes. Returns count, total, next_offset (pass it as offset for the next page) and the items.
| Argument | Type | Description |
|---|---|---|
| q | string | Optional free-text search over several fields. |
| sort | string | Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several. |
| with | string | Optional extra fields to include, comma separated (e.g. 'main_address' on contacts). |
| limit | integer | Items per page (default 100, max 200). |
| filter | string | Optional filter as a JSON object string, e.g. {"currency":"CHF"}; combine with {"and":[...]} / {"or":[...]}. Comparators go before the value: "<", "<=", ">", ">=", "!" (not), "~" (contains), e.g. {"name":"~ACME"}. Unknown field names are answered with HTTP 400. |
| offset | integer | Items to skip (paging: the previous reply's next_offset). |
| contact_id | integer | Only documents of this contact (customer) id. |
List efforts (expenses and services recorded against projects). Needs the "effort" scope. GET /reporting/efforts. Returns count, total, next_offset (pass it as offset for the next page) and the items.
| Argument | Type | Description |
|---|---|---|
| q | string | Optional free-text search over several fields. |
| sort | string | Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several. |
| with | string | Optional extra fields to include, comma separated (e.g. 'main_address' on contacts). |
| limit | integer | Items per page (default 100, max 200). |
| filter | string | Optional filter as a JSON object string, e.g. {"currency":"CHF"}; combine with {"and":[...]} / {"or":[...]}. Comparators go before the value: "<", "<=", ">", ">=", "!" (not), "~" (contains), e.g. {"name":"~ACME"}. Unknown field names are answered with HTTP 400. |
| offset | integer | Items to skip (paging: the previous reply's next_offset). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional free-text search over several fields."
},
"sort": {
"type": "string",
"pattern": "^-?[A-Za-z0-9_.]+(,-?[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several."
},
"with": {
"type": "string",
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Items per page (default 100, max 200)."
},
"filter": {
"type": "string",
"maxLength": 2000,
"description": "Optional filter as a JSON object string, e.g. {\"currency\":\"CHF\"}; combine with {\"and\":[...]} / {\"or\":[...]}. Comparators go before the value: \"<\", \"<=\", \">\", \">=\", \"!\" (not), \"~\" (contains), e.g. {\"name\":\"~ACME\"}. Unknown field names are answered with HTTP 400."
},
"offset": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Items to skip (paging: the previous reply's next_offset)."
}
}
}The payments recorded on one invoice. Needs the "invoice" scope. GET /receivables/invoices/{invoiceId}/payments.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Items per page (default 100, max 200). |
| offset | integer | Items to skip (paging: the previous reply's next_offset). |
| invoice_id* | integer | The invoice id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"invoice_id"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Items per page (default 100, max 200)."
},
"offset": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Items to skip (paging: the previous reply's next_offset)."
},
"invoice_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The invoice id.",
"exclusiveMinimum": 0
}
}
}List invoices: number, contact, dates, total, currency, status. Filter by contact_id or a JSON filter. Needs the "invoice" scope. GET /receivables/invoices. Returns count, total, next_offset (pass it as offset for the next page) and the items.
| Argument | Type | Description |
|---|---|---|
| q | string | Optional free-text search over several fields. |
| sort | string | Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several. |
| with | string | Optional extra fields to include, comma separated (e.g. 'main_address' on contacts). |
| limit | integer | Items per page (default 100, max 200). |
| filter | string | Optional filter as a JSON object string, e.g. {"currency":"CHF"}; combine with {"and":[...]} / {"or":[...]}. Comparators go before the value: "<", "<=", ">", ">=", "!" (not), "~" (contains), e.g. {"name":"~ACME"}. Unknown field names are answered with HTTP 400. |
| offset | integer | Items to skip (paging: the previous reply's next_offset). |
| contact_id | integer | Only documents of this contact (customer) id. |
List offers (quotes). Filter by contact_id or a JSON filter. Needs the "offer" scope. GET /receivables/offers. Returns count, total, next_offset (pass it as offset for the next page) and the items.
| Argument | Type | Description |
|---|---|---|
| q | string | Optional free-text search over several fields. |
| sort | string | Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several. |
| with | string | Optional extra fields to include, comma separated (e.g. 'main_address' on contacts). |
| limit | integer | Items per page (default 100, max 200). |
| filter | string | Optional filter as a JSON object string, e.g. {"currency":"CHF"}; combine with {"and":[...]} / {"or":[...]}. Comparators go before the value: "<", "<=", ">", ">=", "!" (not), "~" (contains), e.g. {"name":"~ACME"}. Unknown field names are answered with HTTP 400. |
| offset | integer | Items to skip (paging: the previous reply's next_offset). |
| contact_id | integer | Only documents of this contact (customer) id. |
List order confirmations. Filter by contact_id or a JSON filter. Needs the "order_confirmation" scope. GET /receivables/order-confirmations. Returns count, total, next_offset (pass it as offset for the next page) and the items.
| Argument | Type | Description |
|---|---|---|
| q | string | Optional free-text search over several fields. |
| sort | string | Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several. |
| with | string | Optional extra fields to include, comma separated (e.g. 'main_address' on contacts). |
| limit | integer | Items per page (default 100, max 200). |
| filter | string | Optional filter as a JSON object string, e.g. {"currency":"CHF"}; combine with {"and":[...]} / {"or":[...]}. Comparators go before the value: "<", "<=", ">", ">=", "!" (not), "~" (contains), e.g. {"name":"~ACME"}. Unknown field names are answered with HTTP 400. |
| offset | integer | Items to skip (paging: the previous reply's next_offset). |
| contact_id | integer | Only documents of this contact (customer) id. |
List the catalog's products (articles). Needs the "catalog" scope. GET /catalog/products. Returns count, total, next_offset (pass it as offset for the next page) and the items.
| Argument | Type | Description |
|---|---|---|
| q | string | Optional free-text search over several fields. |
| sort | string | Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several. |
| with | string | Optional extra fields to include, comma separated (e.g. 'main_address' on contacts). |
| limit | integer | Items per page (default 100, max 200). |
| filter | string | Optional filter as a JSON object string, e.g. {"currency":"CHF"}; combine with {"and":[...]} / {"or":[...]}. Comparators go before the value: "<", "<=", ">", ">=", "!" (not), "~" (contains), e.g. {"name":"~ACME"}. Unknown field names are answered with HTTP 400. |
| offset | integer | Items to skip (paging: the previous reply's next_offset). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional free-text search over several fields."
},
"sort": {
"type": "string",
"pattern": "^-?[A-Za-z0-9_.]+(,-?[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several."
},
"with": {
"type": "string",
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Items per page (default 100, max 200)."
},
"filter": {
"type": "string",
"maxLength": 2000,
"description": "Optional filter as a JSON object string, e.g. {\"currency\":\"CHF\"}; combine with {\"and\":[...]} / {\"or\":[...]}. Comparators go before the value: \"<\", \"<=\", \">\", \">=\", \"!\" (not), \"~\" (contains), e.g. {\"name\":\"~ACME\"}. Unknown field names are answered with HTTP 400."
},
"offset": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Items to skip (paging: the previous reply's next_offset)."
}
}
}List projects. Needs the "project" scope. GET /reporting/projects. Returns count, total, next_offset (pass it as offset for the next page) and the items.
| Argument | Type | Description |
|---|---|---|
| q | string | Optional free-text search over several fields. |
| sort | string | Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several. |
| with | string | Optional extra fields to include, comma separated (e.g. 'main_address' on contacts). |
| limit | integer | Items per page (default 100, max 200). |
| filter | string | Optional filter as a JSON object string, e.g. {"currency":"CHF"}; combine with {"and":[...]} / {"or":[...]}. Comparators go before the value: "<", "<=", ">", ">=", "!" (not), "~" (contains), e.g. {"name":"~ACME"}. Unknown field names are answered with HTTP 400. |
| offset | integer | Items to skip (paging: the previous reply's next_offset). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional free-text search over several fields."
},
"sort": {
"type": "string",
"pattern": "^-?[A-Za-z0-9_.]+(,-?[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several."
},
"with": {
"type": "string",
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Items per page (default 100, max 200)."
},
"filter": {
"type": "string",
"maxLength": 2000,
"description": "Optional filter as a JSON object string, e.g. {\"currency\":\"CHF\"}; combine with {\"and\":[...]} / {\"or\":[...]}. Comparators go before the value: \"<\", \"<=\", \">\", \">=\", \"!\" (not), \"~\" (contains), e.g. {\"name\":\"~ACME\"}. Unknown field names are answered with HTTP 400."
},
"offset": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Items to skip (paging: the previous reply's next_offset)."
}
}
}List the catalog's services. Needs the "catalog" scope. GET /catalog/services. Returns count, total, next_offset (pass it as offset for the next page) and the items.
| Argument | Type | Description |
|---|---|---|
| q | string | Optional free-text search over several fields. |
| sort | string | Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several. |
| with | string | Optional extra fields to include, comma separated (e.g. 'main_address' on contacts). |
| limit | integer | Items per page (default 100, max 200). |
| filter | string | Optional filter as a JSON object string, e.g. {"currency":"CHF"}; combine with {"and":[...]} / {"or":[...]}. Comparators go before the value: "<", "<=", ">", ">=", "!" (not), "~" (contains), e.g. {"name":"~ACME"}. Unknown field names are answered with HTTP 400. |
| offset | integer | Items to skip (paging: the previous reply's next_offset). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional free-text search over several fields."
},
"sort": {
"type": "string",
"pattern": "^-?[A-Za-z0-9_.]+(,-?[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several."
},
"with": {
"type": "string",
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Items per page (default 100, max 200)."
},
"filter": {
"type": "string",
"maxLength": 2000,
"description": "Optional filter as a JSON object string, e.g. {\"currency\":\"CHF\"}; combine with {\"and\":[...]} / {\"or\":[...]}. Comparators go before the value: \"<\", \"<=\", \">\", \">=\", \"!\" (not), \"~\" (contains), e.g. {\"name\":\"~ACME\"}. Unknown field names are answered with HTTP 400."
},
"offset": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Items to skip (paging: the previous reply's next_offset)."
}
}
}List the units (piece, hour, ...) with their ids, which an invoice position's unit_id refers to. Needs the "configuration" scope. GET /catalog/configuration/units. Returns count, total, next_offset (pass it as offset for the next page) and the items.
| Argument | Type | Description |
|---|---|---|
| q | string | Optional free-text search over several fields. |
| sort | string | Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several. |
| with | string | Optional extra fields to include, comma separated (e.g. 'main_address' on contacts). |
| limit | integer | Items per page (default 100, max 200). |
| filter | string | Optional filter as a JSON object string, e.g. {"currency":"CHF"}; combine with {"and":[...]} / {"or":[...]}. Comparators go before the value: "<", "<=", ">", ">=", "!" (not), "~" (contains), e.g. {"name":"~ACME"}. Unknown field names are answered with HTTP 400. |
| offset | integer | Items to skip (paging: the previous reply's next_offset). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional free-text search over several fields."
},
"sort": {
"type": "string",
"pattern": "^-?[A-Za-z0-9_.]+(,-?[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several."
},
"with": {
"type": "string",
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Items per page (default 100, max 200)."
},
"filter": {
"type": "string",
"maxLength": 2000,
"description": "Optional filter as a JSON object string, e.g. {\"currency\":\"CHF\"}; combine with {\"and\":[...]} / {\"or\":[...]}. Comparators go before the value: \"<\", \"<=\", \">\", \">=\", \"!\" (not), \"~\" (contains), e.g. {\"name\":\"~ACME\"}. Unknown field names are answered with HTTP 400."
},
"offset": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Items to skip (paging: the previous reply's next_offset)."
}
}
}List recorded working hours (time tracking entries). Needs the "working_hours" scope. GET /reporting/working-hours. Returns count, total, next_offset (pass it as offset for the next page) and the items.
| Argument | Type | Description |
|---|---|---|
| q | string | Optional free-text search over several fields. |
| sort | string | Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several. |
| with | string | Optional extra fields to include, comma separated (e.g. 'main_address' on contacts). |
| limit | integer | Items per page (default 100, max 200). |
| filter | string | Optional filter as a JSON object string, e.g. {"currency":"CHF"}; combine with {"and":[...]} / {"or":[...]}. Comparators go before the value: "<", "<=", ">", ">=", "!" (not), "~" (contains), e.g. {"name":"~ACME"}. Unknown field names are answered with HTTP 400. |
| offset | integer | Items to skip (paging: the previous reply's next_offset). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional free-text search over several fields."
},
"sort": {
"type": "string",
"pattern": "^-?[A-Za-z0-9_.]+(,-?[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several."
},
"with": {
"type": "string",
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Items per page (default 100, max 200)."
},
"filter": {
"type": "string",
"maxLength": 2000,
"description": "Optional filter as a JSON object string, e.g. {\"currency\":\"CHF\"}; combine with {\"and\":[...]} / {\"or\":[...]}. Comparators go before the value: \"<\", \"<=\", \">\", \">=\", \"!\" (not), \"~\" (contains), e.g. {\"name\":\"~ACME\"}. Unknown field names are answered with HTTP 400."
},
"offset": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Items to skip (paging: the previous reply's next_offset)."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"contact_id",
"contact_address_id",
"date",
"due",
"currency",
"language",
"positions"
],
"properties": {
"due": {
"type": "string",
"description": "Due date, yyyy-mm-dd."
},
"date": {
"type": "string",
"description": "Invoice date, yyyy-mm-dd."
},
"currency": {
"type": "string",
"pattern": "^[A-Z]{3}$",
"description": "ISO currency, e.g. CHF."
},
"language": {
"type": "string",
"pattern": "^[a-z]{2}$",
"description": "Document language: de, en, fr or it."
},
"positions": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"price",
"amount",
"unit_id",
"vat"
],
"properties": {
"vat": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "VAT percentage, e.g. 8.1."
},
"name": {
"type": "string",
"maxLength": 300,
"minLength": 1,
"description": "Position name."
},
"type": {
"type": "string",
"pattern": "^[A-Z]$",
"description": "Position type (default 'N' = normal, as in the vendor's example)."
},
"price": {
"type": "number",
"maximum": 1000000000,
"minimum": 0,
"description": "Unit price (net, in the invoice currency)."
},
"amount": {
"type": "number",
"maximum": 1000000000,
"description": "Quantity.",
"exclusiveMinimum": 0
},
"unit_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Unit id (smallinvoice_list_units).",
"exclusiveMinimum": 0
},
"description": {
"type": "string",
"maxLength": 2000,
"description": "Position description."
},
"catalog_type": {
"type": "string",
"pattern": "^[A-Z]$",
"description": "Catalog type (default 'P', as in the vendor's example)."
}
}
},
"maxItems": 100,
"minItems": 1,
"description": "The invoice positions."
},
"contact_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The contact (customer) id.",
"exclusiveMinimum": 0
},
"contact_address_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The id of the contact's address to print (smallinvoice_list_contact_addresses, or main_address_id on the contact).",
"exclusiveMinimum": 0
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional free-text search over several fields."
},
"sort": {
"type": "string",
"pattern": "^-?[A-Za-z0-9_.]+(,-?[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several."
},
"with": {
"type": "string",
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Items per page (default 100, max 200)."
},
"filter": {
"type": "string",
"maxLength": 2000,
"description": "Optional filter as a JSON object string, e.g. {\"currency\":\"CHF\"}; combine with {\"and\":[...]} / {\"or\":[...]}. Comparators go before the value: \"<\", \"<=\", \">\", \">=\", \"!\" (not), \"~\" (contains), e.g. {\"name\":\"~ACME\"}. Unknown field names are answered with HTTP 400."
},
"offset": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Items to skip (paging: the previous reply's next_offset)."
},
"contact_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only documents of this contact (customer) id.",
"exclusiveMinimum": 0
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional free-text search over several fields."
},
"sort": {
"type": "string",
"pattern": "^-?[A-Za-z0-9_.]+(,-?[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several."
},
"with": {
"type": "string",
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Items per page (default 100, max 200)."
},
"filter": {
"type": "string",
"maxLength": 2000,
"description": "Optional filter as a JSON object string, e.g. {\"currency\":\"CHF\"}; combine with {\"and\":[...]} / {\"or\":[...]}. Comparators go before the value: \"<\", \"<=\", \">\", \">=\", \"!\" (not), \"~\" (contains), e.g. {\"name\":\"~ACME\"}. Unknown field names are answered with HTTP 400."
},
"offset": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Items to skip (paging: the previous reply's next_offset)."
},
"contact_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only documents of this contact (customer) id.",
"exclusiveMinimum": 0
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional free-text search over several fields."
},
"sort": {
"type": "string",
"pattern": "^-?[A-Za-z0-9_.]+(,-?[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several."
},
"with": {
"type": "string",
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Items per page (default 100, max 200)."
},
"filter": {
"type": "string",
"maxLength": 2000,
"description": "Optional filter as a JSON object string, e.g. {\"currency\":\"CHF\"}; combine with {\"and\":[...]} / {\"or\":[...]}. Comparators go before the value: \"<\", \"<=\", \">\", \">=\", \"!\" (not), \"~\" (contains), e.g. {\"name\":\"~ACME\"}. Unknown field names are answered with HTTP 400."
},
"offset": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Items to skip (paging: the previous reply's next_offset)."
},
"contact_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only documents of this contact (customer) id.",
"exclusiveMinimum": 0
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional free-text search over several fields."
},
"sort": {
"type": "string",
"pattern": "^-?[A-Za-z0-9_.]+(,-?[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several."
},
"with": {
"type": "string",
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"maxLength": 200,
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Items per page (default 100, max 200)."
},
"filter": {
"type": "string",
"maxLength": 2000,
"description": "Optional filter as a JSON object string, e.g. {\"currency\":\"CHF\"}; combine with {\"and\":[...]} / {\"or\":[...]}. Comparators go before the value: \"<\", \"<=\", \">\", \">=\", \"!\" (not), \"~\" (contains), e.g. {\"name\":\"~ACME\"}. Unknown field names are answered with HTTP 400."
},
"offset": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Items to skip (paging: the previous reply's next_offset)."
},
"contact_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only documents of this contact (customer) id.",
"exclusiveMinimum": 0
}
}
}