FastBill
SkillCommerce & financeWork with FastBill invoices, customers, payments, reminders, and e-invoice exports through the FastBill XML API.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the FastBill skill
What this skill tells your AI
The instructions your AI receives, as published by hybridaione/hybridclaw in skills/fastbill/SKILL.md and read by ahel’s review.
Use this skill for FastBill invoices, customers, payments, reminders, and document metadata. The helper wraps concrete FastBill API services: it serializes JSON-shaped inputs to XML and parses XML responses.
Core Rules
- Use the helper plus built-in
http_requestfor live API calls. Do not usecurl, ad hocnode -e,grep, or shell parsing for FastBill. - FastBill API URL:
https://my.fastbill.com/api/1.0/api.php. The/api/1.0/prefix is only for secret-route matching. - Basic auth is injected by the gateway from
FASTBILL_BASIC_AUTH. Never print, build, or ask for the FastBill API key. - Writes require explicit operator intent and
--operator-grant. Prefer--dry-runwhen converting free text, CSV, or time tracking into invoice data. - Prefer invoice IDs for writes. If multiple invoices/customers match, ask for the exact ID before writing.
- If unsure about a service or field, check
https://apidocs.fastbill.com.
Commands
Show commands:
node skills/fastbill/fastbill.cjs --help
Build an http_request payload for the built-in http_request tool:
node skills/fastbill/fastbill.cjs http-request invoice.get --filter-json '{"INVOICE_ID":"123"}'
node skills/fastbill/fastbill.cjs http-request customer.create --data-json '{"CUSTOMER_TYPE":"business","ORGANIZATION":"Acme GmbH","COUNTRY_CODE":"DE"}' --operator-grant
Parse a saved http_request response wrapper/body:
node skills/fastbill/fastbill.cjs parse-response --body-file /tmp/fastbill-response.json
Direct helper network calls are only for operator-controlled shell tests with a valid gateway token already exported:
node skills/fastbill/fastbill.cjs request invoice.get --filter-json '{"INVOICE_ID":"123"}'
Common invoice payloads:
node skills/fastbill/fastbill.cjs http-request invoice.get --filter-json '{"END_DUE_DATE":"2026-04-08"}' --limit 100
node skills/fastbill/fastbill.cjs http-request invoice.create --data-json '{"CUSTOMER_ID":"123","INVOICE_TITLE":"Consulting Januar - Juni 2026","ITEMS":{"ITEM":[{"DESCRIPTION":"Consulting","QUANTITY":"8","UNIT_PRICE":"120.00","VAT_PERCENT":"19"}]}}' --operator-grant
node skills/fastbill/fastbill.cjs http-request invoice.update --data-json '{"INVOICE_ID":"456","INVOICE_TITLE":"YouGov SVOD Januar - Juni 2026"}' --operator-grant
node skills/fastbill/fastbill.cjs http-request invoice.setpaid --data-json '{"INVOICE_ID":"456","PAID_DATE":"2026-05-07","PAYMENT_METHOD":"bank transfer"}' --operator-grant
node skills/fastbill/fastbill.cjs http-request invoice.sendbyemail --data-json '{"INVOICE_ID":"456","RECIPIENT":{"TO":"billing@example.com"},"SUBJECT":"Payment reminder","MESSAGE":"Please review the outstanding invoice and payment status."}' --operator-grant
Clone / Copy Invoice
FastBill's API does not expose a dedicated invoice clone/copy service, even
though the UI has one. Implement clone as invoice.get then invoice.create.
- Use one targeted
invoice.get; prefer date, customer/project text, title, and service-period terms over broad account-wide searches. - Select one source invoice. If ambiguous, ask for the invoice ID.
- Copy relevant source fields:
CUSTOMER_ID,CUSTOMER_COSTCENTER_ID,CONTACT_ID,CURRENCY_CODE,TEMPLATE_ID/TEMPLATE_HASH,INTROTEXT,INVOICE_TITLE, references, discounts, VAT settings, andITEMS. - Omit lifecycle/source fields:
INVOICE_ID,INVOICE_NUMBER,STATE,PAID_DATE,PAYMENTS,DOCUMENT_URL,DETAILS_URL, totals, and cancellation flags. - Apply requested changes, then create the draft with
invoice.create --operator-grant. Extra reads need a concrete missing field.
Invoice Title Fields
- Invoice title field:
INVOICE_TITLEininvoice.createandinvoice.update. Do not useTITLE,NAME, orSUBJECT. - Existing draft title edit:
invoice.updatewithINVOICE_IDandINVOICE_TITLE. INTROTEXTis intro/body text before line items.ITEMS.ITEM[].DESCRIPTIONis line-item text.SUBJECTis only for email actions such asinvoice.sendbyemail.- Do not set
INVOICE_NUMBERwhen creating or editing a draft title.
Write Services
These require --operator-grant: customer.create/update/delete,
contact.create/update/delete, invoice.create/update/delete/complete/cancel/lock/sendbyemail/sendbypost/setpaid,
estimate.create/delete/sendbyemail/createinvoice, article.create/update/delete,
recurring.create/update/delete, revenue.create/setpaid/delete,
expense.create, project.create/update/delete, time.create/update/delete,
and document.create, webhook.create/delete.
Errors
- Gateway 401 mentioning
WEB_API_TOKENorGATEWAY_API_TOKEN: the request did not reach FastBill; use built-inhttp_requestin normal runtime. - Missing/forbidden secret route: fix
FASTBILL_BASIC_AUTHor its route. - FastBill 401 with
Wrong API KEY/ credentials: the route worked, but FastBill rejected the stored Basic credential.
References
- Operator setup and API notes: references/operator-setup.md
Validation
Run:
python3 skills/skill-creator/scripts/quick_validate.py skills/fastbill
node skills/fastbill/fastbill.cjs --help
node skills/fastbill/fastbill.cjs http-request invoice.get --filter-json '{"INVOICE_ID":"123"}'
node skills/fastbill/fastbill.cjs request invoice.get --filter-json '{"INVOICE_ID":"123"}' --dry-run
Signals
- GitHub stars
- 132
- Forks
- 12
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
fastbill- Source
- github.com/hybridaione/hybridclaw