sevdesk MCP by usefulapi

Look up contacts, invoices, vouchers, orders, bank transactions and parts, and create drafts.

Should I use this

Quality & Safety

A
Description quality
97%
Schema completeness
88%
Naming quality
76%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (4)

  • LOWTool 'sevdesk_get_bookkeeping_system_version' name length outside 3-30 rangein sevdesk_get_bookkeeping_system_version
  • LOWTool 'sevdesk_list_communication_ways' name length outside 3-30 rangein sevdesk_list_communication_ways
  • LOWTool 'sevdesk_list_communication_way_keys' name length outside 3-30 rangein sevdesk_list_communication_way_keys
  • LOWTool 'sevdesk_get_check_account_balance' name length outside 3-30 rangein sevdesk_get_check_account_balance

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~6,496Tokens (tool definitions)
~2.9 KBTypical response size
Significant attention impact (5.08% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "sevdesk": {
      "url": "https://sevdesk.usefulapi.io/mcp"
    }
  }
}

Remote endpoints

https://sevdesk.usefulapi.io/mcpstreamable-http

What it can do

Tool inventory

Tools (20)

🟒 Read-only🟑 WriteπŸ”΄ Deleteβšͺ Unknown
🟒sevdesk_get_bookkeeping_system_version

Return whether the account runs sevdesk bookkeeping 1.0 or 2.0 (2.0 uses taxRule instead of taxType on invoices). Also a cheap way to confirm the API token works. sevdesk: GET /Tools/bookkeepingSystemVersion.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟒sevdesk_list_contacts(include_persons, name, customer_number, city, zip, ...)

List contacts (customers, suppliers, partners, prospects). By default sevdesk returns only organisations; set include_persons to also get individual persons. sevdesk: GET /Contact.

Input Schema

{
  "type": "object",
  "properties": {
    "include_persons": {
      "description": "If true, return organisations AND persons (sevdesk depth=1). Default: organisations only.",
      "type": "boolean"
    },
    "name": {
      "description": "Only contacts whose name, first name or last name matches.",
      "type": "string"
    },
    "customer_number": {
      "description": "Only the contact with this customer number.",
      "type": "string"
    },
    "city": {
      "description": "Only contacts in this city.",
      "type": "string"
    },
    "zip": {
      "description": "Only contacts with this ZIP code.",
      "type": "string"
    },
    "category_id": {
      "description": "Only contacts in this category: 2 Supplier, 3 Customer, 4 Partner, 28 Prospect customer.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "parent_id": {
      "description": "Only persons belonging to this parent organisation's id.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "limit": {
      "description": "Max entries to return, 1-1000 (sevdesk suggests 10-100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "offset": {
      "description": "Number of entries to skip, for paging.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "count_all": {
      "description": "If true, the response also carries `total`, the full match count.",
      "type": "boolean"
    },
    "embed": {
      "description": "Comma-separated nested resources to expand inline, e.g. contact,category.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟒sevdesk_get_contact(contact_id, embed)

Fetch a single contact by id. sevdesk: GET /Contact/{contactId}.

Input Schema

{
  "type": "object",
  "properties": {
    "contact_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "The contact's numeric id."
    },
    "embed": {
      "description": "Comma-separated nested resources to expand inline, e.g. contact,category.",
      "type": "string"
    }
  },
  "required": [
    "contact_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟒sevdesk_list_communication_ways(contact_id, type, main_only, limit, offset, ...)

List communication ways (email addresses, phone and mobile numbers, websites), optionally for one contact. sevdesk: GET /CommunicationWay.

Input Schema

{
  "type": "object",
  "properties": {
    "contact_id": {
      "description": "Only this contact's communication ways.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "type": {
      "description": "Only this type.",
      "type": "string",
      "enum": [
        "EMAIL",
        "PHONE",
        "MOBILE",
        "WEB"
      ]
    },
    "main_only": {
      "description": "If true, only the main communication way(s).",
      "type": "boolean"
    },
    "limit": {
      "description": "Max entries to return, 1-1000 (sevdesk suggests 10-100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "offset": {
      "description": "Number of entries to skip, for paging.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "count_all": {
      "description": "If true, the response also carries `total`, the full match count.",
      "type": "boolean"
    },
    "embed": {
      "description": "Comma-separated nested resources to expand inline, e.g. contact,category.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟒sevdesk_list_communication_way_keys

List the labels a communication way can carry (1 Privat, 2 Arbeit, 3 Fax, 4 Mobil, 6 Autobox, 7 Newsletter, 8 Rechnungsadresse). Needed for sevdesk_add_communication_way. sevdesk: GET /CommunicationWayKey.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟒sevdesk_list_invoices(status, invoice_number, start_date, end_date, contact_id, ...)

List invoices, filterable by status, number, date range and contact. Status: 50 deactivated recurring, 100 draft, 200 open/due, 750 partially paid, 1000 paid. sevdesk: GET /Invoice.

Input Schema

{
  "type": "object",
  "properties": {
    "status": {
      "description": "Only invoices with this status code.",
      "type": "string",
      "enum": [
        "50",
        "100",
        "200",
        "750",
        "1000"
      ]
    },
    "invoice_number": {
      "description": "Only the invoice with this number.",
      "type": "string"
    },
    "start_date": {
      "description": "Only invoices dated on or after this, as a Unix timestamp in seconds.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "end_date": {
      "description": "Only invoices dated on or before this, as a Unix timestamp in seconds.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "contact_id": {
      "description": "Only invoices for this contact id.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "delinquent": {
      "description": "If true, only overdue (delinquent) invoices.",
      "type": "boolean"
    },
    "invoice_type": {
      "description": "Only this type: RE normal, WKR recurring, SR cancellation, MA reminder, TR partial, AR advance, ER final.",
      "type": "string",
      "enum": [
        "RE",
        "WKR",
        "SR",
        "MA",
        "TR",
        "AR",
        "ER"
      ]
    },
    "limit": {
      "description": "Max entries to return, 1-1000 (sevdesk suggests 10-100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "offset": {
      "description": "Number of entries to skip, for paging.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "count_all": {
      "description": "If true, the response also carries `total`, the full match count.",
      "type": "boolean"
    },
    "embed": {
      "description": "Comma-separated nested resources to expand inline, e.g. contact,category.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟒sevdesk_get_invoice(invoice_id, embed)

Fetch a single invoice by id β€” totals, status, dates, contact and contact person. sevdesk: GET /Invoice/{invoiceId}.

Input Schema

{
  "type": "object",
  "properties": {
    "invoice_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "The invoice's numeric id."
    },
    "embed": {
      "description": "Comma-separated nested resources to expand inline, e.g. contact,category.",
      "type": "string"
    }
  },
  "required": [
    "invoice_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟒sevdesk_get_invoice_positions(invoice_id, limit, offset, embed)

List the positions (line items) of one invoice: name, quantity, price, tax rate, sums. sevdesk: GET /Invoice/{invoiceId}/getPositions.

Input Schema

{
  "type": "object",
  "properties": {
    "invoice_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "The invoice's numeric id."
    },
    "limit": {
      "description": "Max entries to return, 1-1000 (sevdesk suggests 10-100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "offset": {
      "description": "Number of entries to skip, for paging.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "embed": {
      "description": "Comma-separated nested resources to expand inline, e.g. contact,category.",
      "type": "string"
    }
  },
  "required": [
    "invoice_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟒sevdesk_list_vouchers(status, credit_debit, description_like, start_date, end_date, ...)

List vouchers β€” receipts and incoming/outgoing bills. Status: 50 draft, 100 unpaid/due, 1000 paid. credit_debit C = credit (revenue), D = debit (expense). sevdesk: GET /Voucher.

Input Schema

{
  "type": "object",
  "properties": {
    "status": {
      "description": "Only vouchers with this status code.",
      "type": "string",
      "enum": [
        "50",
        "100",
        "1000"
      ]
    },
    "credit_debit": {
      "description": "C for credit (revenue) or D for debit (expense) vouchers.",
      "type": "string",
      "enum": [
        "C",
        "D"
      ]
    },
    "description_like": {
      "description": "Only vouchers whose description contains this text.",
      "type": "string"
    },
    "start_date": {
      "description": "Only vouchers dated on or after this, as a Unix timestamp in seconds.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "end_date": {
      "description": "Only vouchers dated on or before this, as a Unix timestamp in seconds.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "contact_id": {
      "description": "Only vouchers for this contact id.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "limit": {
      "description": "Max entries to return, 1-1000 (sevdesk suggests 10-100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "offset": {
      "description": "Number of entries to skip, for paging.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "count_all": {
      "description": "If true, the response also carries `total`, the full match count.",
      "type": "boolean"
    },
    "embed": {
      "description": "Comma-separated nested resources to expand inline, e.g. contact,category.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟒sevdesk_get_voucher(voucher_id, embed)

Fetch a single voucher (receipt) by id. sevdesk: GET /Voucher/{voucherId}.

Input Schema

{
  "type": "object",
  "properties": {
    "voucher_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "The voucher's numeric id."
    },
    "embed": {
      "description": "Comma-separated nested resources to expand inline, e.g. contact,category.",
      "type": "string"
    }
  },
  "required": [
    "voucher_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟒sevdesk_list_credit_notes(status, credit_note_number, start_date, end_date, contact_id, ...)

List credit notes (Gutschriften), filterable by status, number, date range and contact. Status: 100 draft, 200 open/delivered, 750 partially paid, 1000 paid. sevdesk: GET /CreditNote.

Input Schema

{
  "type": "object",
  "properties": {
    "status": {
      "description": "Only credit notes with this status code.",
      "type": "string",
      "enum": [
        "100",
        "200",
        "750",
        "1000"
      ]
    },
    "credit_note_number": {
      "description": "Only the credit note with this number.",
      "type": "string"
    },
    "start_date": {
      "description": "Only credit notes dated on or after this, as a Unix timestamp in seconds.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "end_date": {
      "description": "Only credit notes dated on or before this, as a Unix timestamp in seconds.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "contact_id": {
      "description": "Only credit notes for this contact id.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "limit": {
      "description": "Max entries to return, 1-1000 (sevdesk suggests 10-100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "offset": {
      "description": "Number of entries to skip, for paging.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "count_all": {
      "description": "If true, the response also carries `total`, the full match count.",
      "type": "boolean"
    },
    "embed": {
      "description": "Comma-separated nested resources to expand inline, e.g. contact,category.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟒sevdesk_list_orders(status, order_number, start_date, end_date, contact_id, ...)

List orders β€” quotes (Angebote), order confirmations and delivery notes β€” filterable by status, number, date range and contact. Status: 100 draft, 200 delivered, 300 rejected, 500 accepted, 750 partially calculated, 1000 calculated. sevdesk: GET /Order.

Input Schema

{
  "type": "object",
  "properties": {
    "status": {
      "description": "Only orders with this status code.",
      "type": "string",
      "enum": [
        "100",
        "200",
        "300",
        "500",
        "750",
        "1000"
      ]
    },
    "order_number": {
      "description": "Only the order with this number.",
      "type": "string"
    },
    "start_date": {
      "description": "Only orders dated on or after this, as a Unix timestamp in seconds.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "end_date": {
      "description": "Only orders dated on or before this, as a Unix timestamp in seconds.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "contact_id": {
      "description": "Only orders for this contact id.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "limit": {
      "description": "Max entries to return, 1-1000 (sevdesk suggests 10-100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "offset": {
      "description": "Number of entries to skip, for paging.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "count_all": {
      "description": "If true, the response also carries `total`, the full match count.",
      "type": "boolean"
    },
    "embed": {
      "description": "Comma-separated nested resources to expand inline, e.g. contact,category.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟒sevdesk_list_parts(part_number, name, limit, offset, count_all, ...)

List parts β€” the products and services in the sevdesk inventory, with prices, tax rate and stock. sevdesk: GET /Part.

Input Schema

{
  "type": "object",
  "properties": {
    "part_number": {
      "description": "Only the part with this part number.",
      "type": "string"
    },
    "name": {
      "description": "Only parts with this name.",
      "type": "string"
    },
    "limit": {
      "description": "Max entries to return, 1-1000 (sevdesk suggests 10-100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "offset": {
      "description": "Number of entries to skip, for paging.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "count_all": {
      "description": "If true, the response also carries `total`, the full match count.",
      "type": "boolean"
    },
    "embed": {
      "description": "Comma-separated nested resources to expand inline, e.g. contact,category.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟒sevdesk_list_check_accounts(limit, offset, count_all, embed)

List check accounts β€” the bank accounts, cash registers and clearing accounts sevdesk tracks payments on, with IBAN, type and sync status. sevdesk: GET /CheckAccount.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Max entries to return, 1-1000 (sevdesk suggests 10-100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "offset": {
      "description": "Number of entries to skip, for paging.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "count_all": {
      "description": "If true, the response also carries `total`, the full match count.",
      "type": "boolean"
    },
    "embed": {
      "description": "Comma-separated nested resources to expand inline, e.g. contact,category.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟒sevdesk_get_check_account_balance(check_account_id, date)

Balance of one check account as the sum of every transaction sevdesk knows up to and including the given date. May differ from the real bank balance if older transactions were never imported. sevdesk: GET /CheckAccount/{checkAccountId}/getBalanceAtDate.

Input Schema

{
  "type": "object",
  "properties": {
    "check_account_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "The check account's numeric id."
    },
    "date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Consider transactions up to this date (YYYY-MM-DD, inclusive to 23:59:59)."
    }
  },
  "required": [
    "check_account_id",
    "date"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟒sevdesk_list_transactions(check_account_id, is_booked, payment_purpose, payee_payer_name, start_date, ...)

List check-account transactions (bank payments in and out), filterable by account, booking state, date range, payee/payer and purpose. sevdesk: GET /CheckAccountTransaction.

Input Schema

{
  "type": "object",
  "properties": {
    "check_account_id": {
      "description": "Only transactions on this check account id.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "is_booked": {
      "description": "If true, only transactions already booked against a document.",
      "type": "boolean"
    },
    "payment_purpose": {
      "description": "Only transactions with this payment purpose (Verwendungszweck).",
      "type": "string"
    },
    "payee_payer_name": {
      "description": "Only transactions with this payee / payer name.",
      "type": "string"
    },
    "start_date": {
      "description": "Only transactions from this date on (ISO 8601, e.g. 2026-01-01).",
      "type": "string"
    },
    "end_date": {
      "description": "Only transactions up to this date (ISO 8601).",
      "type": "string"
    },
    "only_credit": {
      "description": "If true, only incoming (credit) transactions.",
      "type": "boolean"
    },
    "only_debit": {
      "description": "If true, only outgoing (debit) transactions.",
      "type": "boolean"
    },
    "limit": {
      "description": "Max entries to return, 1-1000 (sevdesk suggests 10-100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "offset": {
      "description": "Number of entries to skip, for paging.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "count_all": {
      "description": "If true, the response also carries `total`, the full match count.",
      "type": "boolean"
    },
    "embed": {
      "description": "Comma-separated nested resources to expand inline, e.g. contact,category.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
πŸ”΄sevdesk_create_contact(name, surename, familyname, customer_number, status, ...)

Create a contact. Give `name` for an organisation, or `surename`/`familyname` for a person. Addresses and emails are separate (use sevdesk_add_communication_way). sevdesk: POST /Contact.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "description": "Organisation name. Setting it makes the contact an ORGANISATION β€” leave empty for a person.",
      "type": "string"
    },
    "surename": {
      "description": "First name of a PERSON (sevdesk's field is really spelled 'surename').",
      "type": "string"
    },
    "familyname": {
      "description": "Last name of a PERSON.",
      "type": "string"
    },
    "customer_number": {
      "description": "Customer number. Omit to let sevdesk leave it unset.",
      "type": "string"
    },
    "status": {
      "description": "100 Lead, 500 Pending, 1000 Active.",
      "anyOf": [
        {
          "type": "number",
          "const": 100
        },
        {
          "type": "number",
          "const": 500
        },
        {
          "type": "number",
          "const": 1000
        }
      ]
    },
    "description": {
      "description": "Free-text description.",
      "type": "string"
    },
    "vat_number": {
      "description": "VAT id (USt-IdNr.).",
      "type": "string"
    },
    "tax_number": {
      "description": "Tax number (Steuernummer).",
      "type": "string"
    },
    "default_time_to_pay": {
      "description": "Default payment term in days for this contact's invoices.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "parent_id": {
      "description": "For a person: the id of the organisation they belong to.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "category_id": {
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991,
      "description": "Required category: 2 Supplier, 3 Customer, 4 Partner, 28 Prospect customer."
    }
  },
  "required": [
    "category_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
πŸ”΄sevdesk_update_contact(contact_id, name, surename, familyname, customer_number, ...)

Update fields on an existing contact; only the fields you pass are sent. sevdesk: PUT /Contact/{contactId}.

Input Schema

{
  "type": "object",
  "properties": {
    "contact_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "The contact's numeric id."
    },
    "name": {
      "description": "Organisation name. Setting it makes the contact an ORGANISATION β€” leave empty for a person.",
      "type": "string"
    },
    "surename": {
      "description": "First name of a PERSON (sevdesk's field is really spelled 'surename').",
      "type": "string"
    },
    "familyname": {
      "description": "Last name of a PERSON.",
      "type": "string"
    },
    "customer_number": {
      "description": "Customer number. Omit to let sevdesk leave it unset.",
      "type": "string"
    },
    "status": {
      "description": "100 Lead, 500 Pending, 1000 Active.",
      "anyOf": [
        {
          "type": "number",
          "const": 100
        },
        {
          "type": "number",
          "const": 500
        },
        {
          "type": "number",
          "const": 1000
        }
      ]
    },
    "description": {
      "description": "Free-text description.",
      "type": "string"
    },
    "vat_number": {
      "description": "VAT id (USt-IdNr.).",
      "type": "string"
    },
    "tax_number": {
      "description": "Tax number (Steuernummer).",
      "type": "string"
    },
    "default_time_to_pay": {
      "description": "Default payment term in days for this contact's invoices.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "parent_id": {
      "description": "For a person: the id of the organisation they belong to.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "category_id": {
      "description": "Move to category: 2 Supplier, 3 Customer, 4 Partner, 28 Prospect.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "contact_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
πŸ”΄sevdesk_add_communication_way(contact_id, type, value, key_id, main)

Attach an email address, phone/mobile number or website to a contact. key_id labels it (2 Arbeit/work is a good default; see sevdesk_list_communication_way_keys). sevdesk: POST /CommunicationWay.

Input Schema

{
  "type": "object",
  "properties": {
    "contact_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "The contact's numeric id."
    },
    "type": {
      "type": "string",
      "enum": [
        "EMAIL",
        "PHONE",
        "MOBILE",
        "WEB"
      ],
      "description": "What kind of value this is."
    },
    "value": {
      "type": "string",
      "minLength": 1,
      "description": "The email address, number or URL."
    },
    "key_id": {
      "default": 2,
      "description": "Communication way key id (1 Privat, 2 Arbeit, 3 Fax, 4 Mobil, 8 Rechnungsadresse). Default 2.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "main": {
      "description": "Make this the contact's main communication way of its type.",
      "type": "boolean"
    }
  },
  "required": [
    "contact_id",
    "type",
    "value"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
πŸ”΄sevdesk_create_draft_invoice(contact_id, contact_person_id, invoice_date, positions, tax_rule_id, ...)

Create a normal invoice (type RE) with its line items, ALWAYS saved as a DRAFT (status 100): it is not sent, not booked and stays editable in sevdesk. contact_person_id is the sevdesk USER responsible for it β€” copy contactPerson.id from any existing invoice (sevdesk_get_invoice). Bookkeeping 2.0 accounts use tax_rule_id (1 = taxable sales in Germany, the usual choice); 1.0 accounts pass tax_type instead (check sevdesk_get_bookkeeping_system_version). sevdesk: POST /Invoice/Factory/saveInvoice.

Input Schema

{
  "type": "object",
  "properties": {
    "contact_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "The contact (customer)'s numeric id."
    },
    "contact_person_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Id of the sevdesk user (SevUser) acting as contact person β€” e.g. contactPerson.id of an existing invoice."
    },
    "invoice_date": {
      "type": "string",
      "pattern": "^\\d{2}\\.\\d{2}\\.\\d{4}$",
      "description": "Invoice date as dd.mm.yyyy."
    },
    "positions": {
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "Line item name."
          },
          "quantity": {
            "type": "number",
            "exclusiveMinimum": 0,
            "description": "Quantity."
          },
          "price": {
            "type": "number",
            "description": "Unit price β€” net if show_net is true (default), otherwise gross."
          },
          "tax_rate": {
            "type": "number",
            "minimum": 0,
            "description": "VAT rate in percent, e.g. 19, 7 or 0."
          },
          "unity_id": {
            "default": 1,
            "description": "Unit id (1 = StΓΌck/piece). Default 1.",
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "text": {
            "description": "Longer description shown under the name.",
            "type": "string"
          },
          "part_id": {
            "description": "Link the line to this inventory part id.",
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "name",
          "quantity",
          "price",
          "tax_rate"
        ]
      },
      "description": "Line items (at least one)."
    },
    "tax_rule_id": {
      "default": "1",
      "description": "Bookkeeping 2.0 VAT rule id. 1 taxable sales (Umsatzsteuerpflichtige UmsΓ€tze), 2 exports, 3 intra-EU supplies, 4 tax-free Β§4 UStG, 5 reverse charge Β§13b, 11 small business Β§19 (Kleinunternehmer), 17 not taxable in Germany, 18-20 One Stop Shop, 21 reverse charge Β§18b. Default 1.",
      "type": "string",
      "enum": [
        "1",
        "2",
        "3",
        "4",
        "5",
        "11",
        "17",
        "18",
        "19",
        "20",
        "21"
      ]
    },
    "tax_type": {
      "description": "Bookkeeping 1.0 only β€” leave unset on 2.0 accounts.",
      "type": "string",
      "enum": [
        "default",
        "eu",
        "noteu",
        "custom",
        "ss"
      ]
    },
    "tax_text": {
      "default": "Umsatzsteuer 19%",
      "description": "VAT text printed on the invoice. Default 'Umsatzsteuer 19%'.",
      "type": "string"
    },
    "currency": {
      "default": "EUR",
      "description": "ISO-4217 currency code. Default EUR.",
      "type": "string",
      "minLength": 3,
      "maxLength": 3
    },
    "address_country_id": {
      "default": 1,
      "description": "sevdesk StaticCountry id of the billing address (1 = Germany). Default 1.",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "address": {
      "description": "Complete recipient address with line breaks. Omit to leave it empty.",
      "type": "string"
    },
    "header": {
      "description": "Invoice header/title line.",
      "type": "string"
    },
    "head_text": {
      "description": "Text above the line items (some HTML allowed).",
      "type": "string"
    },
    "foot_text": {
      "description": "Text below the line items (some HTML allowed).",
      "type": "string"
    },
    "time_to_pay": {
      "description": "Payment term in days.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "delivery_date": {
      "description": "Delivery / service date as dd.mm.yyyy (must not be after invoice_date for a normal invoice).",
      "type": "string",
      "pattern": "^\\d{2}\\.\\d{2}\\.\\d{4}$"
    },
    "show_net": {
      "default": true,
      "description": "If true (default), position prices are net.",
      "type": "boolean"
    },
    "small_settlement": {
      "description": "True if the account uses the small-business scheme (no VAT).",
      "type": "boolean"
    },
    "customer_internal_note": {
      "description": "Reference / order number field.",
      "type": "string"
    }
  },
  "required": [
    "contact_id",
    "contact_person_id",
    "invoice_date",
    "positions"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded20 tools
verifiedversion not recorded20 tools