Awesome-omni-skill fakturoid

Czech invoicing API integration for Fakturoid. Use when the user needs to create, manage, or retrieve invoices, contacts/subjects, or expenses from Fakturoid. Supports OAuth 2.0 authentication, invoice creation with Czech tax compliance (IČO, DIČ, VAT), PDF downloads, payment tracking, expense management, inventory, recurring invoices, webhooks, and invoice templates (generators). Triggers on mentions of Fakturoid, Czech invoicing, IČO/DIČ, or invoice management tasks.

install
source · Clone the upstream repo
git clone https://github.com/diegosouzapw/awesome-omni-skill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/testing-security/fakturoid-majncz" ~/.claude/skills/diegosouzapw-awesome-omni-skill-fakturoid && rm -rf "$T"
manifest: skills/testing-security/fakturoid-majncz/SKILL.md
source content

Fakturoid API v3

Czech invoicing service API integration - comprehensive reference for building integrations.

Quick Start

Environment Setup

export FAKTUROID_CLIENT_ID="your-client-id"
export FAKTUROID_CLIENT_SECRET="your-client-secret"
export FAKTUROID_ACCOUNT_SLUG="your-account-slug"

Authenticate

python scripts/auth.py credentials --save

Create Invoice

python scripts/invoice.py create --subject-id 123 --lines '[
  {"name": "Consulting", "quantity": 8, "unit_name": "hours", "unit_price": 2000, "vat_rate": 21}
]'

API Basics

SettingValue
Base URL
https://app.fakturoid.cz/api/v3
Account URL
https://app.fakturoid.cz/api/v3/accounts/{slug}
AuthOAuth 2.0 (Client Credentials or Authorization Code)
Pagination40 records per page
Rate Limit400 requests per 60 seconds

Required Headers

User-Agent: YourAppName (your@email.com)
Authorization: Bearer {access_token}
Content-Type: application/json
Accept: application/json

Scripts Reference

Core Scripts

ScriptCommandsDescription
auth.py
credentials, refresh, revoke, statusOAuth token management
subject.py
list, get, search, create, update, delete, lookup-icoContact management
invoice.py
list, get, search, create, update, delete, action, pdf, pay, pay-deleteInvoice operations
expense.py
list, get, search, create, update, delete, action, pay, pay-deleteExpense tracking
generator.py
list, get, create, update, deleteInvoice templates

Additional Scripts

ScriptCommandsDescription
user.py
get, listUser and account info
bank_account.py
listBank account listing
inventory.py
list-items, get-item, create-item, list-moves, create-moveInventory management
recurring.py
list, get, create, update, delete, pause, activateRecurring invoices
inbox.py
list, upload, send-to-ocr, download, deleteOCR file processing
event.py
list, list-paidActivity log
todo.py
list, toggleTask management
message.py
sendSend invoice emails
webhook.py
list, get, create, update, deleteWebhook management

Common Workflows

Create Invoice for New Customer

# 1. Create subject
python scripts/subject.py create --name "Acme s.r.o." --ico 12345678 --dic CZ12345678

# 2. Create invoice (use returned subject ID)
python scripts/invoice.py create --subject-id 456 --lines '[
  {"name": "Web development", "quantity": 40, "unit_name": "hours", "unit_price": 1500, "vat_rate": 21}
]'

# 3. Mark as sent and download PDF
python scripts/invoice.py action 789 mark_as_sent
python scripts/invoice.py pdf 789 --output invoice.pdf

Record Expense from Supplier

# 1. Ensure supplier exists
python scripts/subject.py create --name "Supplier Ltd" --type supplier --ico 87654321

# 2. Create expense
python scripts/expense.py create --subject-id 321 --original-number "FV-2024-0456" --lines '[
  {"name": "Office supplies", "quantity": 10, "unit_name": "ks", "unit_price": 450, "vat_rate": 21}
]'

Setup Monthly Recurring Invoice

python scripts/recurring.py create --name "Monthly Hosting" --subject-id 123 \
  --start-date 2024-02-01 --months-period 1 --send-email \
  --lines '[{"name": "Web hosting - {MMMM} {YYYY}", "unit_price": 500, "vat_rate": 21}]'

Process Inbox File with OCR

# Upload and send to OCR
python scripts/inbox.py upload invoice.pdf --send-to-ocr

# Check status
python scripts/inbox.py list

Enums Reference

Document Types

ValueCzechDescription
invoice
FakturaStandard invoice
proforma
Zálohová fakturaAdvance payment request
partial_proforma
Částečná zálohaLegacy partial advance
correction
DobropisCredit note
tax_document
Daňový dokladTax receipt for proforma payment
final_invoice
Vyúčtovací fakturaFinal invoice from tax documents

Invoice Status

ValueDescription
open
New, unpaid, not sent
sent
Sent to client, not overdue
overdue
Past due date
paid
Fully paid
cancelled
Cancelled (VAT payers only)
uncollectible
Marked as bad debt

Expense Status

ValueDescription
open
Received, not paid
overdue
Past due date
paid
Fully paid

VAT Modes

ValueCzechDescription
vat_payer
Plátce DPHStandard VAT payer
non_vat_payer
Neplátce DPHNon-VAT payer
identified_person
Identifikovaná osobaEU VAT identified person

VAT Price Modes

ValueDescription
without_vat
Prices entered without VAT
from_total_with_vat
Calculate VAT from total with VAT

VAT Rates

ValueRateDescription
standard
21%Standard rate
reduced
12%First reduced rate
reduced2
10%Second reduced rate
zero
0%Zero VAT

Payment Methods

ValueDescription
bank
Bank transfer
cash
Cash payment
cod
Cash on delivery
card
Card payment
paypal
PayPal
custom
Custom (see
custom_payment_method
)

Languages

ValueLanguage
cz
Czech
sk
Slovak
en
English
de
German
fr
French
it
Italian
es
Spanish
ru
Russian
pl
Polish
hu
Hungarian
ro
Romanian

Subject Types

ValueDescription
customer
Customer only
supplier
Supplier only
both
Both customer and supplier

Invoice Actions

ActionDescription
mark_as_sent
Mark invoice as sent
cancel
Cancel invoice
undo_cancel
Revert cancellation
lock
Lock from editing
unlock
Unlock for editing
mark_as_uncollectible
Mark as bad debt
undo_uncollectible
Revert uncollectible

Expense Actions

ActionDescription
lock
Lock from editing
unlock
Unlock for editing

OSS Modes (EU One Stop Shop)

ValueDescription
disabled
OSS disabled
service
OSS for services
goods
OSS for goods

Proforma Followup Documents

ValueDescription
final_invoice_paid
Auto-create paid invoice
final_invoice
Manual invoice creation
tax_document
Auto-create tax document
none
No followup document

OCR Status

ValueDescription
created
OCR requested
processing
OCR in progress
processing_failed
OCR failed
processing_rejected
File rejected
processed
Successfully processed

Czech-Specific Fields

API FieldCzechExample
registration_no
IČO
12345678
vat_no
DIČ
CZ12345678
local_vat_no
SK DIČ
1234567890
taxable_fulfillment_due
DUZP
2024-01-15
transferred_tax_liability
Přenesená daňová povinnost
true
supply_code
Kód předmětu plnění
4

Line Item Structure

{
  "name": "Service description",
  "quantity": 10,
  "unit_name": "hours",
  "unit_price": 1500,
  "vat_rate": 21,
  "inventory_item_id": 123,
  "sku": "PROD-001"
}

Line Operations

OperationMethod
Add lineOmit
id
Update lineInclude
id
Delete lineInclude
id
and
_destroy: true

References

Core Documentation

Resource Documentation

Additional Resources


Error Handling

StatusMeaningAction
400Bad RequestCheck date formats, User-Agent header
401UnauthorizedRefresh OAuth token
402Payment RequiredFakturoid account blocked
403ForbiddenPermission denied, resource limits
404Not FoundResource doesn't exist
422Validation ErrorCheck
errors
field for details
429Rate LimitedWait for
X-RateLimit
reset
503UnavailableMaintenance, retry later

Token Management

# Get new token
python scripts/auth.py credentials --save

# Check token status
python scripts/auth.py status

# Refresh expired token (Authorization Code flow)
python scripts/auth.py refresh

# Revoke token
python scripts/auth.py revoke

Token file:

~/.fakturoid/token.json


Rate Limiting

Headers on every response:

X-RateLimit-Policy: default;q=400;w=60
X-RateLimit: default;r=398;t=55
  • q=400
    : Max 400 requests
  • w=60
    : Per 60 seconds window
  • r=398
    : Remaining requests
  • t=55
    : Seconds until reset

When exceeded:

429 Too Many Requests
- wait for reset.