SkillJavaScriptv1.0.9
smartbill-invoicing
Issue SmartBill invoices through the SmartBill.ro API with local automation.
213 downloads
maverick-ai-tech
Updated Feb 22, 2026SmartBill Invoicing
Use scripts/smartbill_cli.py for deterministic SmartBill API calls instead of ad-hoc HTTP snippets.
Workflow
- Collect invoice input from the user.
- Validate payload locally before sending:
python scripts/smartbill_cli.py validate-payload --input references/invoice-example.json --show-payload
- Dry-run to inspect the normalized payload without calling the API:
python scripts/smartbill_cli.py create-invoice --input <invoice.json> --dry-run
- Issue final invoice after explicit user confirmation:
python scripts/smartbill_cli.py create-invoice --input <invoice.json> --allow-final
- Retrieve PDF once series and number are known:
python scripts/smartbill_cli.py download-invoice-pdf --series-name <SERIES> --number <NO> --output <file.pdf>- Use the exact
numberstring returned by SmartBill (zero-padded, e.g."0123"). Do not strip leading zeros or convert to an integer. --outputaccepts absolute or relative paths and must end in.pdf.
Required Environment
Set these before calling SmartBill:
SMARTBILL_USERNAME- SmartBill login emailSMARTBILL_TOKEN- SmartBill API tokenSMARTBILL_COMPANY_VAT_CODE- default CIF (optional but recommended)
Optional overrides:
SMARTBILL_API_BASE(default:https://ws.smartbill.ro/SBORO/api)SMARTBILL_TIMEOUT_SECONDS(default:30)SMARTBILL_RETRIES(default:2)SMARTBILL_DEBUG(default: unset) — set to1,true, oryesto enable request/response debug logging to stderr
Command Guide
validate-payload- Parse and normalize payload shape (bare invoice object or
{ "invoice": {...} }wrapper both accepted). - Validate minimum required structure before API calls.
- Parse and normalize payload shape (bare invoice object or
create-invoice- Create invoice via
POST /invoice. - Requires
--allow-finalto issue a final invoice. - Supports
--dry-run(prints normalized payload, no API call) and--force-draft. - Pass
--debug(or setSMARTBILL_DEBUG=1) to print full request/response payloads to stderr.
- Create invoice via
get-series- Query available SmartBill series via
GET /series.
- Query available SmartBill series via
download-invoice-pdf- Fetch PDF via
GET /invoice/pdfusing CIF + series + number. --outputaccepts an absolute or relative.pdfpath. Relative paths are resolved against the current working directory. The resolved path must fall within an OpenClaw-allowed media root or the current working directory.
- Fetch PDF via
Payload Format
The invoice payload is a flat JSON object sent directly to the SmartBill API. See references/invoice-example.json for the canonical minimal example and references/smartbill-api.md for field documentation.
Both formats are accepted as input to the CLI:
- Bare invoice object:
{ "companyVatCode": "...", "client": {...}, ... } - Wrapped:
{ "invoice": { "companyVatCode": "...", "client": {...}, ... } }
The CLI unwraps automatically and sends the invoice object directly to the API.
Operational Rules
- Always use
--dry-runfirst to confirm the normalized payload before hitting the API. - Treat final invoice issuance (
isDraft: false) as a high-impact action requiring explicit user confirmation. - Set
client.saveToDb: falseandproducts[].saveToDb: falseto avoid persisting test data. - Preserve SmartBill response data (series, number, message) in run logs. Store
numberverbatim as returned — it is zero-padded (e.g."0123") and must never be stripped of leading zeros or cast to an integer. - Respect SmartBill rate limits: max 30 calls per 10 seconds.
References
- Read
references/smartbill-api.mdfor payload field reference, endpoint mapping, and auth/rate-limit notes. - Use
references/invoice-example.jsonas the canonical starting payload template.