easybill integration
easybill is a German online invoicing service. An agent can create, update, finalize, convert, cancel and send documents (invoices, offers, credit notes, orders, delivery notes, reminders, dunnings, recurring invoices) by email, fax or post, download them as PDF, ZUGFeRD or XRechnung, book payments, prepare SEPA direct debits and transfers for bank export, and manage customers and their contacts, customer groups, products and services (positions), position groups, customer discounts, stock entries, serial numbers, projects, tasks, time tracking, text templates, attachments, incoming supplier invoices and webhooks. Customer, contact and login records are personal data; the read tools never return bank account numbers or IBANs (of customers, SEPA records and suppliers) nor webhook secrets. Amounts are in cents and times in Europe/Berlin; lists return 100 items by default, at most 1000. Request limits: 10 per minute on the PLUS plan, 60 on BUSINESS. Authentication: an easybill API key sent as a Bearer token.
Say what should happen.
The workflow builds itself.
What you can do with easybill
Each of these is one operation on one endpoint, available both as a workflow step and as a tool an AI agent can call on its own. Nothing bundles several operations into one action, so what a run did stays readable afterwards.
Each badge shows the default agent permission of an endpoint (allowed: an agent calls it without asking; ask first: you are asked before an agent calls it, when the agent or chat asks permission for sensitive actions; never: no agent may call it), which every user can change endpoint by endpoint in their credential settings.
Most endpoints run on the free plan. A few, mainly the ones that publish on your behalf, need a paid plan.
Document, 13 operations
cancel_documentCancel documentPOSTAgents: ask firstCancels a finalized invoice by creating its cancellation document (STORNO), a legal accounting record that cannot be deleted. Returns the cancellation document.convert_documentConvert documentPOSTAgents: ask firstCreates a new document of another type (INVOICE, CREDIT, DELIVERY, ORDER, CHARGE, CHARGE_CONFIRM, REMINDER or DUNNING) from an existing document. Returns the new document.create_documentCreate documentPOSTAgents: ask firstCreates a document as a draft (type INVOICE by default; OFFER, CREDIT, ORDER, DELIVERY...). Nothing is sent: finalize it with finalize_document, then send it with send_document.delete_documentDelete documentDELETEAgents: ask firstDeletes a document. Drafts can always be deleted; finalized invoices and their cancellations cannot (German GoBD retention): cancel those with cancel_document. Other finalized types can.download_documentDownload documentGETAgents: ask firstDownloads a document in the format named by the Accept header: PDF, ZUGFeRD PDF or XRechnung XML. Answers 406 when no matching format exists. Returns a stored file.download_document_imageDownload document imageGETAgents: ask firstDownloads pages of a document as a JPEG image (offset = first page, limit = last page). Returns a stored file.download_document_pdfDownload document pdfGETAgents: ask firstDownloads a document as a PDF file and returns it as a stored file.finalize_documentFinalize documentPUTAgents: ask firstFinalizes a draft document into a legal record: a finalized invoice can no longer be deleted, only cancelled, and later changes are saved as versions. RECURRING documents cannot be finalized.get_documentGet documentGETAgents: ask firstReturns one document: type, number, dates, items, totals in cents, paid amount, status, recurrence and the customer snapshot (personal data; bank account number and IBAN left out).list_documentsList documentsGETAgents: ask firstLists documents (invoices, offers, credits...) with items, totals in cents and the customer snapshot (personal data; IBAN left out). Filter by type, customer_id, dates; paid_at as the text null lists unpaid. Paged: page, limit (max 1000).search_documentsSearch documentsGETAgents: ask firstFull-text search over documents, newest first. Pass query. Returns the customer snapshot (personal data). The total may exceed the items returned. Paged: page and limit (default 100, at most 1000).send_documentSend documentPOSTAgents: ask firstSends a finalized document to the customer by email, fax or post (post has the document printed and mailed as a letter). Drafts are refused. Track the send job with list_post_boxes.update_documentUpdate documentPUTAgents: ask firstChanges a document; send only the fields to change (type cannot change). On a finalized document pass reason_for_change, which is saved on the new version.
Discount, 10 operations
create_position_discountCreate position discountPOSTAgents: ask firstCreates a discount for one customer on one product or service (position): customer_id, position_id, discount and discount_type.create_position_group_discountCreate position group discountPOSTAgents: ask firstCreates a discount for one customer on a whole position group: customer_id, position_group_id, discount and discount_type.delete_position_discountDelete position discountDELETEAgents: ask firstPermanently deletes a position discount. Pass the discount id from list_position_discounts.delete_position_group_discountDelete position group discountDELETEAgents: ask firstPermanently deletes a position-group discount. Pass the discount id from list_position_group_discounts.get_position_discountGet position discountGETAgents: ask firstReturns one position discount (customer, position, discount and type).get_position_group_discountGet position group discountGETAgents: ask firstReturns one position-group discount (customer, position group, discount and type).list_position_discountsList position discountsGETAgents: ask firstLists customer-specific discounts on single products or services (positions). Filter by customer_id (comma-separated). Paged: page and limit (default 100, at most 1000).list_position_group_discountsList position group discountsGETAgents: ask firstLists customer-specific discounts on position groups. Filter by customer_id (comma-separated). Paged: page and limit (default 100, at most 1000).update_position_discountUpdate position discountPUTAgents: ask firstChanges a position discount. Send only the fields to change.update_position_group_discountUpdate position group discountPUTAgents: ask firstChanges a position-group discount. Send only the fields to change.
Incoming document, 7 operations
complete_incoming_documentComplete incoming documentPUTAgents: ask firstCompletes an incoming document (status DONE) and assigns its internal document number. Needs a document_type and balanced amounts (net plus line taxes equals gross).delete_incoming_documentDelete incoming documentDELETEAgents: ask firstDeletes an incoming document in any status, completed ones included, with its files, accounting lines and payments. Refused (409) while it is still being processed.get_incoming_documentGet incoming documentGETAgents: ask firstReturns one incoming document: status, type, dates, amounts in cents, accounting lines, payments and supplier data (IBAN left out). Pass the UUID id.list_incoming_documentsList incoming documentsGETAgents: ask firstLists incoming documents (supplier invoices and credit notes) with amounts in cents, dates, status, supplier and payments. Filter by created_at; sort ASC or DESC. Paged: page and limit (default 100, at most 1000).search_incoming_documentsSearch incoming documentsGETAgents: ask firstFull-text search over incoming documents (document and external number, file name, text of attached PDF or XML files), newest first. Pass query. Paged: page and limit (default 100, at most 1000).update_incoming_documentUpdate incoming documentPUTAgents: ask firstChanges an incoming document in status DRAFT or DONE; only fields sent change. accounting_positions replaces all lines. Completed documents must stay balanced.upload_incoming_documentUpload incoming documentPOSTAgents: ask firstUploads a file (multipart field file) as a new incoming document. It is processed in the background: status stays PREPARING or PROCESSING until then; read it with get_incoming_document.
Attachment, 6 operations
create_attachmentCreate attachmentPOSTAgents: ask firstUploads a file as a new attachment (multipart field file). It starts in the global context: link it to one customer, document or project afterwards with update_attachment.delete_attachmentDelete attachmentDELETEAgents: ask firstPermanently deletes an attachment and its file. Pass the attachment id from list_attachments.download_attachmentDownload attachmentGETAgents: ask firstDownloads the file of an attachment and returns it as a stored file. Pass the attachment id from list_attachments.get_attachmentGet attachmentGETAgents: ask firstReturns one attachment's metadata (file name, size, linked customer, document or project). Use download_attachment for the file itself.list_attachmentsList attachmentsGETAgents: ask firstLists uploaded attachments with their file name, size and the customer, document or project each belongs to (all null for a global attachment). Paged: page and limit (default 100, at most 1000).update_attachmentUpdate attachmentPUTAgents: ask firstLinks an attachment to exactly one context: customer_id, document_id or project_id (sending two or more is refused). Leave all out to keep the current link.
Customer, 6 operations
create_customerCreate customerPOSTAgents: ask firstCreates a customer or supplier record (type query: CUSTOMER, SUPPLIER or both); the number is generated when left out. Returns the new record with its id. Stores personal data.delete_customerDelete customerDELETEAgents: ask firstPermanently deletes a customer or supplier record. Pass the customer id from list_customers.get_customerGet customerGETAgents: ask firstReturns one customer or supplier: address, delivery and PO box address, contact data, payment terms, tax and SEPA mandate details (bank account number and IBAN are left out). Personal data.list_customersList customersGETAgents: ask firstLists customers and suppliers with address, contact and payment terms (personal data; bank account number and IBAN are left out). Filters take comma-separated values. Paged: page and limit (default 100, at most 1000).search_customersSearch customersGETAgents: ask firstFull-text search over customers and suppliers, archived ones included, sorted by customer number. Pass query; contactType narrows to CUSTOMER or SUPPLIER. Returns personal data.update_customerUpdate customerPUTAgents: ask firstChanges a customer or supplier (personal data); send only the fields to change, and a list sent replaces the stored one. Changing SEPA fields revokes an existing mandate at the payment provider (status revoking).
Contact, 5 operations
create_contactCreate contactPOSTAgents: ask firstAdds a contact person to a customer; city and street are required. Returns the new contact with its id. Stores personal data.delete_contactDelete contactDELETEAgents: ask firstPermanently deletes a contact person of a customer. Pass customerId and the contact id from list_contacts.get_contactGet contactGETAgents: ask firstReturns one contact person of a customer (name, department, emails, phones, address). Personal data.list_contactsList contactsGETAgents: ask firstLists the contact persons of one customer (name, department, emails, phones, address). Personal data. Pass customerId from list_customers. Paged: page and limit (default 100, at most 1000).update_contactUpdate contactPUTAgents: ask firstChanges a contact person of a customer (personal data). Send only the fields to change; a list sent (emails) replaces the stored one. Returns the updated contact.
Customer group, 5 operations
create_customer_groupCreate customer groupPOSTAgents: ask firstCreates a customer group from a number you choose and a name.delete_customer_groupDelete customer groupDELETEAgents: ask firstPermanently deletes a customer group. Pass the group id from list_customer_groups.get_customer_groupGet customer groupGETAgents: ask firstReturns one customer group (number, name, description, display name).list_customer_groupsList customer groupsGETAgents: ask firstLists customer groups (number, name, description). Use a group id as group_id when creating or filtering customers. Paged: page and limit (default 100, at most 1000).update_customer_groupUpdate customer groupPUTAgents: ask firstChanges a customer group's number, name or description. Send only the fields to change.
Position, 5 operations
create_positionCreate positionPOSTAgents: ask firstCreates a stored product or service (position) with number, description and sale_price in cents, for reuse as document items.delete_positionDelete positionDELETEAgents: ask firstPermanently deletes a stored product or service (position). Pass the position id from list_positions.get_positionGet positionGETAgents: ask firstReturns one stored product or service: number, description, unit, prices in cents per price level, VAT, cost price, revenue accounts and stock settings.list_positionsList positionsGETAgents: ask firstLists stored products and services (positions): number, description, prices in cents, VAT, unit, stock. Filter by type or number (comma-separated). Paged: page and limit (default 100, at most 1000).update_positionUpdate positionPUTAgents: ask firstChanges a stored product or service (position). Send only the fields to change; prices are in cents.
Position group, 5 operations
create_position_groupCreate position groupPOSTAgents: ask firstCreates a position group from a number you choose and a name.delete_position_groupDelete position groupDELETEAgents: ask firstPermanently deletes a position group. Pass the group id from list_position_groups.get_position_groupGet position groupGETAgents: ask firstReturns one position group (number, name, description, display name).list_position_groupsList position groupsGETAgents: ask firstLists position groups (groups of products and services): number, name, description. Paged: page and limit (default 100, at most 1000).update_position_groupUpdate position groupPUTAgents: ask firstChanges a position group's number, name or description. Send only the fields to change.
Project, 5 operations
create_projectCreate projectPOSTAgents: ask firstCreates a project (name required) with optional customer, budget in cents, time budget in minutes and hourly rate in cents.delete_projectDelete projectDELETEAgents: ask firstPermanently deletes a project. Pass the project id from list_projects.get_projectGet projectGETAgents: ask firstReturns one project: name, customer, status, budgets, hourly rate, consumed time and amount, due date.list_projectsList projectsGETAgents: ask firstLists projects with budget (cents and minutes), hourly rate, consumed time and amount, status. Filter by customer_id or status. Paged: page and limit (default 100, at most 1000).update_projectUpdate projectPUTAgents: ask firstChanges a project. Send only the fields to change; amounts are in cents, times in minutes.
Sepa payment, 5 operations
create_sepa_paymentCreate sepa paymentPOSTAgents: ask firstCreates a SEPA direct debit (DEBIT) or credit transfer (CREDIT) record for a document, for later bank export. Moves no money: the user submits the exported file to the bank.delete_sepa_paymentDelete sepa paymentDELETEAgents: ask firstDeletes a SEPA payment record. Pass the id from list_sepa_payments.get_sepa_paymentGet sepa paymentGETAgents: ask firstReturns one SEPA payment record: amount in cents, type, mandate, sequence type, debtor and creditor names, addresses and BICs (personal data), export state (IBANs left out).list_sepa_paymentsList sepa paymentsGETAgents: ask firstLists SEPA payment records prepared for bank export (amount in cents, mandate, debtor and creditor names and addresses: personal data; IBANs left out). Filter by document_id. Paged: page and limit (at most 1000).update_sepa_paymentUpdate sepa paymentPUTAgents: ask firstChanges a SEPA payment record before export; executes no payment. Send only the fields to change.
Task, 5 operations
create_taskCreate taskPOSTAgents: ask firstCreates a task (name and status required), optionally linked to a customer, document, project or position and assigned to a login.delete_taskDelete taskDELETEAgents: ask firstPermanently deletes a task. Pass the task id from list_tasks.get_taskGet taskGETAgents: ask firstReturns one task: name, description, category, status and percent, priority, start, deadline and finish time, links.list_tasksList tasksGETAgents: ask firstLists tasks (name, category, status, priority, deadline, linked customer, document, project). Paged: page and limit (default 100, at most 1000).update_taskUpdate taskPUTAgents: ask firstChanges a task, for example its status or deadline. Send only the fields to change.
Text template, 5 operations
create_text_templateCreate text templatePOSTAgents: ask firstCreates a text template from a title and a text.delete_text_templateDelete text templateDELETEAgents: ask firstPermanently deletes a text template. Pass the id from list_text_templates.get_text_templateGet text templateGETAgents: ask firstReturns one text template (title and text).list_text_templatesList text templatesGETAgents: ask firstLists text templates (title and text) for document texts. Paged: page and limit (default 100, at most 1000).update_text_templateUpdate text templatePUTAgents: ask firstChanges a text template's title or text. Send only the fields to change.
Time tracking, 5 operations
create_time_trackingCreate time trackingPOSTAgents: ask firstRecords a time tracking entry (description required): minutes in timer_value or a period, optional project, position and hourly rate in cents.delete_time_trackingDelete time trackingDELETEAgents: ask firstPermanently deletes a time tracking entry. Pass the id from list_time_trackings.get_time_trackingGet time trackingGETAgents: ask firstReturns one time tracking entry: description, period, minutes, hourly rate in cents, project, position, cleared date.list_time_trackingsList time trackingsGETAgents: ask firstLists time tracking entries (minutes, period, hourly rate in cents, project, login). Filter by login_id, project_id, date_from_at, date_thru_at. Paged: page and limit (default 100, at most 1000).update_time_trackingUpdate time trackingPUTAgents: ask firstChanges a time tracking entry. Send only the fields to change.
Webhook, 5 operations
create_webhookCreate webhookPOSTAgents: ask firstRegisters a webhook: easybill delivers the chosen events (document, customer, contact, position, postbox) to url while is_active is true. The secret is never returned.delete_webhookDelete webhookDELETEAgents: ask firstDeletes a webhook; its URL stops receiving events. Pass the id from list_webhooks.get_webhookGet webhookGETAgents: ask firstReturns one webhook: URL, events, format, active flag and the last delivery answer (secret left out).list_webhooksList webhooksGETAgents: ask firstLists webhooks with their URL, events, format, active flag and the last delivery answer (secrets left out). Paged: page and limit (default 100, at most 1000).update_webhookUpdate webhookPUTAgents: ask firstChanges a webhook (URL, events, format, description, active flag, secret). Send only the fields to change.
Document payment, 4 operations
create_document_paymentCreate document paymentPOSTAgents: ask firstBooks a payment (amount in cents) on a document. paid=true also marks the document paid when the payment is less than the document amount.delete_document_paymentDelete document paymentDELETEAgents: ask firstDeletes a payment booked on a document. Pass the payment id from list_document_payments.get_document_paymentGet document paymentGETAgents: ask firstReturns one payment booked on a document (amount in cents, date, type, provider, reference, notice).list_document_paymentsList document paymentsGETAgents: ask firstLists payments booked on documents (amount in cents, date, type, provider, reference). Filter by document_id, payment_at or reference. Paged: page and limit (default 100, at most 1000).
Serial number, 4 operations
create_serial_numberCreate serial numberPOSTAgents: ask firstAdds a serial number to a product (position_id).delete_serial_numberDelete serial numberDELETEAgents: ask firstPermanently deletes a serial number. Pass the id from list_serial_numbers.get_serial_numberGet serial numberGETAgents: ask firstReturns one serial number with its product and, once used, the document and date.list_serial_numbersList serial numbersGETAgents: ask firstLists serial numbers of products, with the document they were used on. Filter by position_id, document_id or in_use. Paged: page and limit (default 100, at most 1000).
Document version, 3 operations
download_document_version_fileDownload document version fileGETAgents: ask firstDownloads one stored file (PDF or XML) of a document version and returns it as a stored file.get_document_versionGet document versionGETAgents: ask firstReturns one version of a document with the ids of its stored files (PDF, ZUGFeRD, XRechnung) for download_document_version_file.list_document_versionsList document versionsGETAgents: ask firstLists the stored versions of a document (each with its date, reason and file items). Paged: page and limit (default 100, at most 1000).
Post box, 3 operations
delete_post_boxDelete post boxDELETEAgents: ask firstDeletes a send job (post box entry). Pass the id from list_post_boxes.get_post_boxGet post boxGETAgents: ask firstReturns one send job of a document: channel, recipients (personal data), subject, status and its message, tracking number of a registered letter.list_post_boxesList post boxesGETAgents: ask firstLists send jobs of documents by email, fax or post with recipients (personal data) and status (WAITING, PREPARE, PROCESSING, OK, ERROR). Filter by document_id, type, status. Paged: page and limit (at most 1000).
Stock, 3 operations
create_stockCreate stockPOSTAgents: ask firstRecords a stock entry for a product (position_id, stock_count, optional note and stored_at).get_stockGet stockGETAgents: ask firstReturns one stock entry of a product.list_stocksList stocksGETAgents: ask firstLists stock entries of products (count, note, date, the document that caused it). Filter by position_id or document_id. Paged: page and limit (default 100, at most 1000).
Incoming document file, 2 operations
download_incoming_document_fileDownload incoming document fileGETAgents: ask firstDownloads one file of an incoming document and returns it as a stored file.list_incoming_document_filesList incoming document filesGETAgents: ask firstLists the files of an incoming document (name, extension, size). Pass a file id to download_incoming_document_file. Paged: page and limit (default 100, at most 1000).
Login, 2 operations
get_loginGet loginGETAgents: ask firstReturns one easybill login (name, email, phone, role, locale, time zone; security settings only for an admin key). Personal data.list_loginsList loginsGETAgents: ask firstLists the easybill logins (admin and employee accounts) of the account: name, email, phone, role, locale. Personal data. Use an id as login_id. Paged: page and limit (default 100, at most 1000).
Pdf template, 1 operation
list_pdf_templatesList pdf templatesGETAgents: ask firstLists the PDF layout templates with their default texts and email subject and message. Use pdf_template as a document's pdf_template. Filter by document type.
Sepa mandate, 1 operation
transfer_sepa_mandateTransfer sepa mandatePOSTAgents: ask firstTransfers a customer's stored SEPA mandate data to the connected payment provider (for example Mollie), creating a provider customer and mandate. Collects no money. Needs recurring payments connected.
Use easybill from Claude Code, Cursor or Codex
Connect easybill in LiveContext, create an API key in Settings, then add the LiveContext MCP server to your client. Its easybill operations become tools the client can call, next to every other integration you connected.
claude mcp add --transport http livecontext https://livecontext.ai/mcp --header "X-API-Key: YOUR_API_KEY"[mcp_servers.livecontext]
url = "https://livecontext.ai/mcp"
[mcp_servers.livecontext.http_headers]
"X-API-Key" = "YOUR_API_KEY"{
"mcpServers": {
"livecontext": {
"type": "http",
"url": "https://livecontext.ai/mcp",
"headers": {
"X-API-Key": "YOUR_API_KEY"
}
}
}
}How to connect easybill
- Create your workspace
Sign up free. Nothing to install.
- Connect easybill once
Add your easybill connection in Settings. Every tool from this integration reuses it, and secrets are encrypted at rest and visible only to you.
- Describe the job in chat
The workflow builds itself in front of you and picks the endpoints it needs. Drag the steps yourself on the canvas whenever you would rather be explicit.
easybill integration FAQ
What can you do with the easybill integration?
LiveContext exposes 115 operations on easybill, covering document, discount, incoming document and attachment.
