{"id":50406883,"url":"https://github.com/rvben/yuki-cli","last_synced_at":"2026-05-31T02:01:46.353Z","repository":{"id":347413317,"uuid":"1194011888","full_name":"rvben/yuki-cli","owner":"rvben","description":"CLI client for the Yuki bookkeeping SOAP API","archived":false,"fork":false,"pushed_at":"2026-04-24T05:44:22.000Z","size":303,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-29T03:05:23.225Z","etag":null,"topics":["accounting","bookkeeping","cli","rust","soap-api"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rvben.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-27T20:26:50.000Z","updated_at":"2026-04-24T05:44:26.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/rvben/yuki-cli","commit_stats":null,"previous_names":["rvben/yuki-cli"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/rvben/yuki-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rvben%2Fyuki-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rvben%2Fyuki-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rvben%2Fyuki-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rvben%2Fyuki-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rvben","download_url":"https://codeload.github.com/rvben/yuki-cli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rvben%2Fyuki-cli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33716339,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["accounting","bookkeeping","cli","rust","soap-api"],"created_at":"2026-05-31T02:01:45.554Z","updated_at":"2026-05-31T02:01:46.343Z","avatar_url":"https://github.com/rvben.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# yuki\n\n[![codecov](https://codecov.io/gh/rvben/yuki-cli/graph/badge.svg)](https://codecov.io/gh/rvben/yuki-cli)\n\nCLI client for the [Yuki](https://www.yukiworks.nl) bookkeeping SOAP API.\n\n[Yuki](https://www.yukiworks.nl) is a Dutch bookkeeping SaaS used for accounting, VAT returns, and document archiving. This CLI lets you query your administration, find missing invoices, and upload documents — from the terminal or as part of automated workflows.\n\n\u003e **Note:** This project is not affiliated with or endorsed by Yuki Software.\n\n## Install\n\n```sh\ncargo install yuki-cli\n```\n\nOr via pip:\n\n```sh\npip install yuki-cli\n```\n\nBoth install the `yuki` binary.\n\n## Setup\n\n1. Get a Yuki API key from your Yuki portal under **Settings \u003e API keys**.\n2. Run `yuki init` and paste your key when prompted. The CLI discovers your administrations and writes the config to `~/.config/yuki/config.toml`.\n\n```sh\nyuki init\n```\n\nNon-interactive (for scripting):\n\n```sh\nyuki init --api-key \u003ckey\u003e --default-admin \u003cname\u003e\n```\n\nTo rotate your API key later:\n\n```sh\nyuki init --api-key \u003cnew-key\u003e\n```\n\n## Quick start: find missing invoices\n\nThe main workflow is finding bank transactions that don't have a matching invoice in Yuki:\n\n```sh\n# Show bank debits without matching invoices for Q1 2025\nyuki check unmatched --period 2025-Q1\n```\n\nThis cross-references bank transactions against outstanding creditor items, booked archive documents, and known counterparty names. The output shows unmatched transactions with their date, amount, counterparty, and description.\n\nFor each unmatched item, you can check if the invoice is already in the archive, and upload it if not:\n\n```sh\n# Check if an invoice already exists\nyuki documents exists --amount 7.28 --date 2025-03\n\n# Upload an invoice (Yuki auto-sorts it)\nyuki upload file invoice.pdf\n\n# Or upload to a specific folder with metadata\nyuki upload file invoice.pdf --folder inkoop --amount 7.28 --remarks \"Hetzner hosting\"\n```\n\n## Commands\n\n### Querying\n\n```sh\nyuki vat returns                          # List all VAT return periods\nyuki vat returns --year 2025              # Filter by year\nyuki vat codes                            # List active VAT codes\n\nyuki invoices list --invoice-type purchase # Outstanding purchase invoices\nyuki invoices show \u003ctransaction-id\u003e       # Transaction details\nyuki invoices document \u003ctransaction-id\u003e   # Document linked to a transaction\n\nyuki contacts search \"Hetzner\"            # Search contacts\nyuki contacts list                        # List all suppliers and customers\n\nyuki accounts balance --account 11001 --period 2025-Q1\nyuki accounts transactions --account 11001 --period 2025-Q1\nyuki accounts scheme                      # Chart of accounts (GL scheme)\nyuki accounts revenue --period 2025-Q1    # Net revenue for a period\nyuki accounts start-balance --year 2025   # Opening balances per GL account\n\nyuki projects list                        # List all projects\nyuki projects balance \u003ccode\u003e --period 2025  # Project balance\n\nyuki documents list --folder inkoop       # List documents in a folder\nyuki documents search \"factuur\"           # Full-text search\nyuki documents exists --amount 7.28 --date 2025-03  # Check if invoice exists\n\nyuki admin list                           # List administrations\nyuki admin switch \u003cname\u003e                  # Change default administration\n```\n\n### Gap analysis\n\n```sh\nyuki check btw 2025-Q4                    # VAT period check: outstanding items\nyuki check unmatched --period 2026-Q1     # Bank debits without matching invoices\nyuki check outstanding \u003creference\u003e        # Check if a reference is still outstanding\n```\n\n### Uploading\n\n```sh\nyuki upload file invoice.pdf                           # Upload to uitzoeken (auto-sorted)\nyuki upload file invoice.pdf --folder inkoop            # Upload to specific folder\nyuki upload file invoice.pdf --amount 114.27 \\\n  --category 45100 --payment-method 4 \\\n  --remarks \"Hosting\"                                   # Upload with metadata\n\nyuki upload categories                                  # List cost category IDs\nyuki upload payment-methods                             # List payment method IDs\n```\n\n### Global flags\n\n| Flag | Description |\n|------|-------------|\n| `--admin \u003cname\u003e` | Override default administration |\n| `--format table\\|json` | Output format (auto-detects TTY) |\n| `--quiet` | Suppress informational output |\n\n## Periods\n\nThe `--period` flag accepts:\n\n- `2025` — full year\n- `2025-Q1` — quarter\n- `2025-03` — single month\n\n## Agent use\n\nWhen stdout is not a TTY (piped or called by an agent), output defaults to JSON. Errors are also structured JSON on stderr. Exit codes: 0 success, 1 general error, 2 auth error, 3 not found, 4 rate limited.\n\nThe `documents exists` command exits with code 3 when no matching document is found, making it easy to use in scripts and agent workflows.\n\n## Config\n\n`~/.config/yuki/config.toml`:\n\n```toml\napi_key = \"your-api-key\"\ndefault_admin = \"company_name\"\n\n# Skip these counterparties in `check unmatched` (case-insensitive substring match)\nunmatched_ignore = [\n  \"Belastingdienst\",\n  \"ING bankkosten\",\n]\n\n[administrations.company_name]\ndomain_id = \"domain-uuid\"\nadmin_id = \"admin-uuid\"\n```\n\n## Development\n\n```\nmake check    # Run clippy + fmt check + tests\nmake build    # Debug build\nmake release  # Release build\nmake fmt      # Format code\nmake install  # Install to ~/.cargo/bin/\n```\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frvben%2Fyuki-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frvben%2Fyuki-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frvben%2Fyuki-cli/lists"}