Skill: pushp1997/firefly-iii (version 1.0.0)

--- name: firefly-iii description: Manage personal finances via Firefly III API. Use when user asks about budgets, transactions, accounts, categories, piggy banks, subscriptions, recurring transactions, or financial reports. Supports creating, listing, updating transactions; managing accounts and balances; setting budgets; tracking savings goals. --- # Firefly III Firefly III is a self-hosted personal finance manager. This skill provides API access for managing finances. ## Configuration Required environment: - `FIREFLY_URL`: Base URL (e.g., `https://budget.example.com`) - `FIREFLY_TOKEN`: Personal Access Token (stored at `~/.firefly_token`) Get [REDACTED_SECRET] → OAuth → Personal Access Tokens → Create new token ## API Basics ```bash TOKEN=$(cat ~/.firefly_token) BASE="$FIREFLY_URL/api/v1" curl -s "$BASE/endpoint" \ -H "Authorization: Bearer $TOKEN" \ -H "Accept: application/json" \ -H "Content-Type: application/json" ``` ## Core Endpoints ### Accounts ```bash # List accounts curl "$BASE/accounts?type=asset" # asset|expense|revenue|liability # Create account curl -X POST "$BASE/accounts" -d '{ "name": "Bank Account", "type": "asset", "account_role": "defaultAsset", "currency_code": "EUR" }' ``` Account types: `asset`, `expense`, `revenue`, `liability` Asset roles: `defaultAsset`, `savingAsset`, `sharedAsset`, `ccAsset` ### Transactions ```bash # List transactions curl "$BASE/transactions?type=withdrawal&start=2026-01-01&end=2026-01-31" # Create withdrawal (expense) curl -X POST "$BASE/transactions" -d '{ "transactions": [{ "type": "withdrawal", "date": "2026-01-15", "amount": "50.00", "description": "Groceries", "source_name": "Bank Account", "destination_name": "Supermarket", "category_name": "Groceries" }] }' # Create deposit (income) curl -X POST "$BASE/transactions" -d '{ "transactions": [{ "type": "deposit", "date": "2026-01-01", "amount": "3000.00", "description": "Salary", "source_name": "Employer", "destination_name": "Bank Account", "category_name": "Salary" }] }' # Create transfer curl -X POST "$BASE/transactions" -d '{ "transactions": [{ "type": "transfer", "date": "2026-01-05", "amount": "500.00", "description": "Savings", "source_name": "Bank Account", "destination_name": "Savings Account" }] }' ``` Transaction types: `withdrawal`, `deposit`, `transfer` ### Categories ```bash # List categories curl "$BASE/categories" # Create category curl -X POST "$BASE/categories" -d '{"name": "Groceries"}' ``` ### Budgets ```bash # List budgets curl "$BASE/budgets" # Create budget curl -X POST "$BASE/budgets" -d '{"name": "Food", "active": true}' # Set budget limit for period curl -X POST "$BASE/budgets/{id}/limits" -d '{ "start": "2026-01-01", "end": "2026-01-31", "amount": "500.00" }' ``` ### Piggy Banks (Savings Goals) ```bash # List piggy banks curl "$BASE/piggy-banks" # Create piggy bank curl -X POST "$BASE/piggy-banks" -d '{ "name": "Vacation Fund", "target_amount": "2000.00", "accounts": [{"account_id": "1"}], "start_date": "2026-01-01", "target_date": "2026-12-31", "transaction_currency_code": "EUR" }' # Add money to piggy bank curl -X POST "$BASE/piggy-banks/{id}/events" -d '{"amount": "100.00"}' ``` ### Subscriptions (Bills) ```bash # List subscriptions curl "$BASE/subscriptions" # Create subscription curl -X POST "$BASE/subscriptions" -d '{ "name": "Netflix", "amount_min": "12.99", "amount_max": "12.99", "date": "2026-01-15", "repeat_freq": "monthly", "currency_code": "EUR" }' ``` Repeat frequencies: `weekly`, `monthly`, `quarterly`, `half-year`, `yearly` ### Recurring Transactions ```bash # List recurring transactions curl "$BASE/recurrences" # Create recurring transaction curl -X POST "$BASE/recurrences" -d '{ "type": "withdrawal", "title": "Rent", "first_date": "2026-01-01", "repeat_until": "2026-12-31", "repetitions": [{ "type": "monthly", "moment": "1" }], "transactions": [{ "amount": "1000.00", "description": "Monthly rent", "source_id": "1", "destination_name": "Landlord", "category_name": "Rent" }] }' ``` ### Rules (Auto-categorization) ```bash # List rules curl "$BASE/rules" # Create rule curl -X POST "$BASE/rules" -d '{ "title": "Categorize groceries", "trigger": "store-journal", "active": true, "strict": false, "triggers": [ {"type": "description_contains", "value": "ALDI"} ], "actions": [ {"type": "set_category", "value": "Groceries"} ] }' ``` Trigger types: `description_contains`, `description_starts`, `description_ends`, `amount_less`, `amount_more`, `source_account_is`, etc. Action types: `set_category`, `set_budget`, `add_tag`, `set_description`, etc. ### Tags ```bash # List tags curl "$BASE/tags" # Create tag curl -X POST "$BASE/tags" -d '{"tag": "vacation"}' ``` ### Reports & Summary ```bash # Account balance over time curl "$BASE/accounts/{id}/transactions?start=2026-01-01&end=2026-01-31" # Get current balances curl "$BASE/accounts" | jq '.data[] | {name: .attributes.name, balance: .attributes.current_balance}' ``` ## Common Tasks ### Get spending by category ```bash curl "$BASE/categories" | jq '.data[] | {name: .attributes.name, spent: .attributes.spent}' ``` ### Get budget progress ```bash curl "$BASE/budgets" | jq '.data[] | {name: .attributes.name, spent: .attributes.spent}' ``` ### Search transactions ```bash curl "$BASE/search/transactions?query=groceries&limit=25" ``` ## Error Handling - `422 Unprocessable Entity`: Check required fields in error response - `401 Unauthorized`: Token expired or invalid - `404 Not Found`: Resource doesn't exist ## Tips - Use `source_name`/`destination_name` to auto-create expense/revenue accounts - Categories are different from budgets (categories for classification, budgets for limits) - Piggy banks require linking to an asset account - Use rules to auto-categorize transactions on creation


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: suspicious | SkillSpector: suspicious (MEDIUM)