smallinvoice MCP by usefulapi
Read smallinvoice contacts, invoices, offers, projects and hours; create contacts and invoices.
¿Debería usar esto?
Calidad y seguridad
Hallazgos (9)
- LOWen smallinvoice_list_contact_addresses
- LOWen smallinvoice_list_contact_people
- LOWen smallinvoice_list_contact_groups
- LOWen smallinvoice_list_invoice_payments
- LOWen smallinvoice_list_order_confirmations
- LOWen smallinvoice_get_order_confirmation
- LOWen smallinvoice_list_delivery_notes
- LOWen smallinvoice_list_bank_accounts
- LOWen smallinvoice_list_working_hours
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"smallinvoice": {
"url": "https://smallinvoice.usefulapi.io/mcp"
}
}
}Puntos de conexión remotos
https://smallinvoice.usefulapi.io/mcpstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (27)
🟢smallinvoice_get_owner
The smallinvoice account the API client belongs to (the owner's id and details). A cheap check that the connection works. GET /auth/owner.
Esquema de entrada
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢smallinvoice_list_contacts(q, filter, sort, with, limit, ...)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional free-text search over several fields."
},
"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."
},
"sort": {
"type": "string",
"maxLength": 200,
"pattern": "^-?[A-Za-z0-9_.]+(,-?[A-Za-z0-9_.]+)*$",
"description": "Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several."
},
"with": {
"type": "string",
"maxLength": 200,
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
},
"limit": {
"description": "Items per page (default 100, max 200).",
"type": "integer",
"minimum": 1,
"maximum": 200
},
"offset": {
"description": "Items to skip (paging: the previous reply's next_offset).",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢smallinvoice_get_contact(id, with)
One contact by id, with its fields. Add with=main_address for the main address. Needs the "contact" scope. GET /contacts/{id}.
Esquema de entrada
{
"type": "object",
"properties": {
"id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The contact id (from smallinvoice_list_contacts)."
},
"with": {
"type": "string",
"maxLength": 200,
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢smallinvoice_list_contact_addresses(contact_id, limit, offset)
All addresses of one contact. Needs the "contact" scope. GET /contacts/{contactId}/addresses.
Esquema de entrada
{
"type": "object",
"properties": {
"contact_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The contact id."
},
"limit": {
"description": "Items per page (default 100, max 200).",
"type": "integer",
"minimum": 1,
"maximum": 200
},
"offset": {
"description": "Items to skip (paging: the previous reply's next_offset).",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"required": [
"contact_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢smallinvoice_list_contact_people(contact_id, limit, offset)
The contact persons of one company contact. Needs the "contact" scope. GET /contacts/{contactId}/people.
Esquema de entrada
{
"type": "object",
"properties": {
"contact_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The contact id."
},
"limit": {
"description": "Items per page (default 100, max 200).",
"type": "integer",
"minimum": 1,
"maximum": 200
},
"offset": {
"description": "Items to skip (paging: the previous reply's next_offset).",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"required": [
"contact_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢smallinvoice_list_contact_groups(q, filter, sort, with, limit, ...)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional free-text search over several fields."
},
"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."
},
"sort": {
"type": "string",
"maxLength": 200,
"pattern": "^-?[A-Za-z0-9_.]+(,-?[A-Za-z0-9_.]+)*$",
"description": "Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several."
},
"with": {
"type": "string",
"maxLength": 200,
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
},
"limit": {
"description": "Items per page (default 100, max 200).",
"type": "integer",
"minimum": 1,
"maximum": 200
},
"offset": {
"description": "Items to skip (paging: the previous reply's next_offset).",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢smallinvoice_list_invoices(q, filter, sort, with, limit, ...)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional free-text search over several fields."
},
"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."
},
"sort": {
"type": "string",
"maxLength": 200,
"pattern": "^-?[A-Za-z0-9_.]+(,-?[A-Za-z0-9_.]+)*$",
"description": "Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several."
},
"with": {
"type": "string",
"maxLength": 200,
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
},
"limit": {
"description": "Items per page (default 100, max 200).",
"type": "integer",
"minimum": 1,
"maximum": 200
},
"offset": {
"description": "Items to skip (paging: the previous reply's next_offset).",
"type": "integer",
"minimum": 0,
"maximum": 1000000
},
"contact_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Only documents of this contact (customer) id."
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢smallinvoice_get_invoice(id, with)
One invoice by id with its positions, totals and status. Needs the "invoice" scope. GET /receivables/invoices/{id}.
Esquema de entrada
{
"type": "object",
"properties": {
"id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The invoice id (from smallinvoice_list_invoices)."
},
"with": {
"type": "string",
"maxLength": 200,
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢smallinvoice_list_invoice_payments(invoice_id, limit, offset)
The payments recorded on one invoice. Needs the "invoice" scope. GET /receivables/invoices/{invoiceId}/payments.
Esquema de entrada
{
"type": "object",
"properties": {
"invoice_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The invoice id."
},
"limit": {
"description": "Items per page (default 100, max 200).",
"type": "integer",
"minimum": 1,
"maximum": 200
},
"offset": {
"description": "Items to skip (paging: the previous reply's next_offset).",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"required": [
"invoice_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢smallinvoice_list_offers(q, filter, sort, with, limit, ...)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional free-text search over several fields."
},
"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."
},
"sort": {
"type": "string",
"maxLength": 200,
"pattern": "^-?[A-Za-z0-9_.]+(,-?[A-Za-z0-9_.]+)*$",
"description": "Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several."
},
"with": {
"type": "string",
"maxLength": 200,
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
},
"limit": {
"description": "Items per page (default 100, max 200).",
"type": "integer",
"minimum": 1,
"maximum": 200
},
"offset": {
"description": "Items to skip (paging: the previous reply's next_offset).",
"type": "integer",
"minimum": 0,
"maximum": 1000000
},
"contact_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Only documents of this contact (customer) id."
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢smallinvoice_get_offer(id, with)
One offer (quote) by id with its positions and totals. Needs the "offer" scope. GET /receivables/offers/{id}.
Esquema de entrada
{
"type": "object",
"properties": {
"id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The offer id (from smallinvoice_list_offers)."
},
"with": {
"type": "string",
"maxLength": 200,
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢smallinvoice_list_order_confirmations(q, filter, sort, with, limit, ...)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional free-text search over several fields."
},
"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."
},
"sort": {
"type": "string",
"maxLength": 200,
"pattern": "^-?[A-Za-z0-9_.]+(,-?[A-Za-z0-9_.]+)*$",
"description": "Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several."
},
"with": {
"type": "string",
"maxLength": 200,
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
},
"limit": {
"description": "Items per page (default 100, max 200).",
"type": "integer",
"minimum": 1,
"maximum": 200
},
"offset": {
"description": "Items to skip (paging: the previous reply's next_offset).",
"type": "integer",
"minimum": 0,
"maximum": 1000000
},
"contact_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Only documents of this contact (customer) id."
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢smallinvoice_get_order_confirmation(id, with)
One order confirmation by id. Needs the "order_confirmation" scope. GET /receivables/order-confirmations/{id}.
Esquema de entrada
{
"type": "object",
"properties": {
"id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The order confirmation id."
},
"with": {
"type": "string",
"maxLength": 200,
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢smallinvoice_list_delivery_notes(q, filter, sort, with, limit, ...)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional free-text search over several fields."
},
"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."
},
"sort": {
"type": "string",
"maxLength": 200,
"pattern": "^-?[A-Za-z0-9_.]+(,-?[A-Za-z0-9_.]+)*$",
"description": "Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several."
},
"with": {
"type": "string",
"maxLength": 200,
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
},
"limit": {
"description": "Items per page (default 100, max 200).",
"type": "integer",
"minimum": 1,
"maximum": 200
},
"offset": {
"description": "Items to skip (paging: the previous reply's next_offset).",
"type": "integer",
"minimum": 0,
"maximum": 1000000
},
"contact_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Only documents of this contact (customer) id."
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢smallinvoice_get_delivery_note(id, with)
One delivery note by id. Needs the "delivery_note" scope. GET /receivables/delivery-notes/{id}.
Esquema de entrada
{
"type": "object",
"properties": {
"id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The delivery note id."
},
"with": {
"type": "string",
"maxLength": 200,
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢smallinvoice_list_products(q, filter, sort, with, limit, ...)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional free-text search over several fields."
},
"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."
},
"sort": {
"type": "string",
"maxLength": 200,
"pattern": "^-?[A-Za-z0-9_.]+(,-?[A-Za-z0-9_.]+)*$",
"description": "Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several."
},
"with": {
"type": "string",
"maxLength": 200,
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
},
"limit": {
"description": "Items per page (default 100, max 200).",
"type": "integer",
"minimum": 1,
"maximum": 200
},
"offset": {
"description": "Items to skip (paging: the previous reply's next_offset).",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢smallinvoice_list_services(q, filter, sort, with, limit, ...)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional free-text search over several fields."
},
"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."
},
"sort": {
"type": "string",
"maxLength": 200,
"pattern": "^-?[A-Za-z0-9_.]+(,-?[A-Za-z0-9_.]+)*$",
"description": "Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several."
},
"with": {
"type": "string",
"maxLength": 200,
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
},
"limit": {
"description": "Items per page (default 100, max 200).",
"type": "integer",
"minimum": 1,
"maximum": 200
},
"offset": {
"description": "Items to skip (paging: the previous reply's next_offset).",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢smallinvoice_list_units(q, filter, sort, with, limit, ...)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional free-text search over several fields."
},
"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."
},
"sort": {
"type": "string",
"maxLength": 200,
"pattern": "^-?[A-Za-z0-9_.]+(,-?[A-Za-z0-9_.]+)*$",
"description": "Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several."
},
"with": {
"type": "string",
"maxLength": 200,
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
},
"limit": {
"description": "Items per page (default 100, max 200).",
"type": "integer",
"minimum": 1,
"maximum": 200
},
"offset": {
"description": "Items to skip (paging: the previous reply's next_offset).",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢smallinvoice_list_bank_accounts(q, filter, sort, with, limit, ...)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional free-text search over several fields."
},
"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."
},
"sort": {
"type": "string",
"maxLength": 200,
"pattern": "^-?[A-Za-z0-9_.]+(,-?[A-Za-z0-9_.]+)*$",
"description": "Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several."
},
"with": {
"type": "string",
"maxLength": 200,
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
},
"limit": {
"description": "Items per page (default 100, max 200).",
"type": "integer",
"minimum": 1,
"maximum": 200
},
"offset": {
"description": "Items to skip (paging: the previous reply's next_offset).",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢smallinvoice_list_projects(q, filter, sort, with, limit, ...)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional free-text search over several fields."
},
"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."
},
"sort": {
"type": "string",
"maxLength": 200,
"pattern": "^-?[A-Za-z0-9_.]+(,-?[A-Za-z0-9_.]+)*$",
"description": "Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several."
},
"with": {
"type": "string",
"maxLength": 200,
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
},
"limit": {
"description": "Items per page (default 100, max 200).",
"type": "integer",
"minimum": 1,
"maximum": 200
},
"offset": {
"description": "Items to skip (paging: the previous reply's next_offset).",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢smallinvoice_get_project(id, with)
One project by id. Needs the "project" scope. GET /reporting/projects/{id}.
Esquema de entrada
{
"type": "object",
"properties": {
"id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The project id (from smallinvoice_list_projects)."
},
"with": {
"type": "string",
"maxLength": 200,
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢smallinvoice_list_working_hours(q, filter, sort, with, limit, ...)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional free-text search over several fields."
},
"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."
},
"sort": {
"type": "string",
"maxLength": 200,
"pattern": "^-?[A-Za-z0-9_.]+(,-?[A-Za-z0-9_.]+)*$",
"description": "Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several."
},
"with": {
"type": "string",
"maxLength": 200,
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
},
"limit": {
"description": "Items per page (default 100, max 200).",
"type": "integer",
"minimum": 1,
"maximum": 200
},
"offset": {
"description": "Items to skip (paging: the previous reply's next_offset).",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢smallinvoice_list_efforts(q, filter, sort, with, limit, ...)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional free-text search over several fields."
},
"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."
},
"sort": {
"type": "string",
"maxLength": 200,
"pattern": "^-?[A-Za-z0-9_.]+(,-?[A-Za-z0-9_.]+)*$",
"description": "Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several."
},
"with": {
"type": "string",
"maxLength": 200,
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
},
"limit": {
"description": "Items per page (default 100, max 200).",
"type": "integer",
"minimum": 1,
"maximum": 200
},
"offset": {
"description": "Items to skip (paging: the previous reply's next_offset).",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢smallinvoice_list_activities(q, filter, sort, with, limit, ...)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional free-text search over several fields."
},
"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."
},
"sort": {
"type": "string",
"maxLength": 200,
"pattern": "^-?[A-Za-z0-9_.]+(,-?[A-Za-z0-9_.]+)*$",
"description": "Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several."
},
"with": {
"type": "string",
"maxLength": 200,
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
},
"limit": {
"description": "Items per page (default 100, max 200).",
"type": "integer",
"minimum": 1,
"maximum": 200
},
"offset": {
"description": "Items to skip (paging: the previous reply's next_offset).",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢smallinvoice_list_cost_units(q, filter, sort, with, limit, ...)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Optional free-text search over several fields."
},
"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."
},
"sort": {
"type": "string",
"maxLength": 200,
"pattern": "^-?[A-Za-z0-9_.]+(,-?[A-Za-z0-9_.]+)*$",
"description": "Optional sort: 'name' ascending, '-name' descending, '-surname,name' for several."
},
"with": {
"type": "string",
"maxLength": 200,
"pattern": "^[A-Za-z0-9_.]+(,[A-Za-z0-9_.]+)*$",
"description": "Optional extra fields to include, comma separated (e.g. 'main_address' on contacts)."
},
"limit": {
"description": "Items per page (default 100, max 200).",
"type": "integer",
"minimum": 1,
"maximum": 200
},
"offset": {
"description": "Items to skip (paging: the previous reply's next_offset).",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡smallinvoice_create_contact(name, street, postcode, city, country, ...)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Company name, as printed on documents."
},
"street": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Main address: street and number."
},
"postcode": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"description": "Main address: postcode."
},
"city": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Main address: city."
},
"country": {
"type": "string",
"pattern": "^[A-Z]{2}$",
"description": "Main address: ISO country code, e.g. CH."
},
"relation": {
"description": "Relation codes (default ['CL'] = client, as in the vendor's example). See the vendor docs for the others.",
"maxItems": 5,
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Z]{2}$"
}
},
"email": {
"description": "E-mail address.",
"type": "string",
"maxLength": 200,
"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,}$"
},
"currency": {
"description": "ISO currency, e.g. CHF or EUR.",
"type": "string",
"pattern": "^[A-Z]{3}$"
}
},
"required": [
"name",
"street",
"postcode",
"city",
"country"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡smallinvoice_create_invoice(contact_id, contact_address_id, date, due, currency, ...)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"contact_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The contact (customer) id."
},
"contact_address_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The id of the contact's address to print (smallinvoice_list_contact_addresses, or main_address_id on the contact)."
},
"date": {
"type": "string",
"description": "Invoice date, yyyy-mm-dd."
},
"due": {
"type": "string",
"description": "Due 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": {
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 300,
"description": "Position name."
},
"description": {
"description": "Position description.",
"type": "string",
"maxLength": 2000
},
"price": {
"type": "number",
"minimum": 0,
"maximum": 1000000000,
"description": "Unit price (net, in the invoice currency)."
},
"amount": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 1000000000,
"description": "Quantity."
},
"unit_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Unit id (smallinvoice_list_units)."
},
"vat": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "VAT percentage, e.g. 8.1."
},
"type": {
"description": "Position type (default 'N' = normal, as in the vendor's example).",
"type": "string",
"pattern": "^[A-Z]$"
},
"catalog_type": {
"description": "Catalog type (default 'P', as in the vendor's example).",
"type": "string",
"pattern": "^[A-Z]$"
}
},
"required": [
"name",
"price",
"amount",
"unit_id",
"vat"
]
},
"description": "The invoice positions."
}
},
"required": [
"contact_id",
"contact_address_id",
"date",
"due",
"currency",
"language",
"positions"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Comunidad
Evidencia