A command-line tool for the Konzertmeister API. Manage appointments and members, and view replies and attendance for your music association.
- A Konzertmeister account with API access
- Your association's API key (see Konzertmeister API documentation)
brew install nikbucher/tap/konzertmeister-cliDownload the latest binary for your platform from GitHub Releases:
| Platform | Architecture | Download |
|---|---|---|
| Linux | x86_64 | km-x86_64-unknown-linux-gnu.tar.gz |
| Linux | aarch64 | km-aarch64-unknown-linux-gnu.tar.gz |
| macOS | Intel | km-x86_64-apple-darwin.tar.gz |
| macOS | Apple Silicon | km-aarch64-apple-darwin.tar.gz |
| Windows | x86_64 | km-x86_64-pc-windows-msvc.zip |
| Windows | aarch64 | km-aarch64-pc-windows-msvc.zip |
Extract the archive and place the km binary somewhere on your PATH.
Requires Rust (edition 2024):
cargo install --git https://github.com/nikbucher/konzertmeister-cliConfigure your association profile. You will be prompted for the API key and creator email if not provided as flags:
km config set my-associationOr pass them directly:
km config set my-association --api-key YOUR_API_KEY --creator-mail admin@example.comIf you manage multiple associations, add more profiles and set a default:
km config set other-association
km config default my-associationThe config file is stored at ~/.config/km/config.toml on Linux (or under $XDG_CONFIG_HOME), and at ~/Library/Application Support/km/config.toml on macOS. Run km config path to see the exact location. On Unix, the file has restricted permissions (600).
# Upcoming appointments (default output: JSON)
km appointment list
# Filter by date range
km appointment list --from 2026-01-01 --to 2026-06-30
# Only active, published appointments
km appointment list --active --published
# Filter by tag
km appointment list --tag rehearsal
# Filter by appointment type ID
km appointment list --type 1 --type 5
# Sort by deadline instead of start date
km appointment list --sort deadline
# Table output
km appointment list --format table
# Show times in UTC
km appointment list --format table --utcJSON output is designed to be pipeable, e.g. with jq:
km appointment list | jq '.[].name'Appointments are created from templates. You can find template external IDs in the Konzertmeister web UI.
# Create from a template
km appointment create --template tmpl-abc --start 2026-06-15T19:30
# With a custom name and description
km appointment create --template tmpl-abc --start 2026-06-15T19:30 --name "Summer Concert" --description "Annual open-air event"
# Preview the request without sending it
km appointment create --template tmpl-abc --start 2026-06-15T19:30 --dry-runNaive datetimes (without timezone offset) are interpreted as your local timezone. You can also provide an explicit offset:
km appointment create --template tmpl-abc --start "2026-06-15T19:30:00+02:00"km member list --format table
km member list --mail person@example.comThe default JSON output includes member data fields. Email matching ignores case. An empty result is a successful empty list.
km member add --mail person@example.com --firstname Alex --prop-string section=brass
km member update --mail person@example.com --mobile-phone 123 --prop-bool active=true
km member add --mail person@example.com --prop-number score=1.5 --dry-run--mail is required. Updates also need at least one changed detail or data field. Member data fields use their external IDs: --prop-string EXT=VALUE, --prop-number EXT=VALUE, --prop-date EXT=VALUE, and --prop-bool EXT=true|false. Repeat a flag to set multiple fields. Date values accept a local datetime or an explicit offset. The API input has no dedicated select value field. --dry-run prints the request JSON without sending it. Successful live requests report to stderr and exit with code 0; the API returns no body.
km reply list 123
km reply list 123 --reply positive --format tableUse an appointment ID from km appointment list. Reply filters are positive, maybe, negative, and unanswered. The default output is JSON.
km attendance list 123
km attendance list 123 --attending --format table
km attendance list 123 --absent--attending and --absent are mutually exclusive. Recorded attendance uses the API's v2 endpoint. The default output is JSON.
All commands use these exit codes:
| Code | Meaning |
|---|---|
0 |
Command succeeded or help/version was displayed |
1 |
Runtime error, such as a missing association profile or API failure |
2 |
Argument error, such as an unknown option or missing required argument |
km config path # Print config file location
km config edit # Open config in $EDITORGenerate a completion script for bash, zsh, fish, elvish or PowerShell and install it once:
km completions zsh > ~/.zfunc/_km # add `fpath+=~/.zfunc` before `compinit` in ~/.zshrc
km completions bash > ~/.local/share/bash-completion/completions/km
km completions fish > ~/.config/fish/completions/km.fishAfter restarting the shell, km app<TAB> completes subcommands, flags and values such as --format.
km --version # Print the installed CLI version, e.g. km 0.3.0Override the default profile for any command with --association:
km appointment list --association other-association
km appointment create --association other-association --template tmpl-abc --start 2026-06-15T19:30Releases are automated via GitHub Actions. To create a new release:
git tag -a v0.3.0 -m "v0.3.0"
git push origin v0.3.0This triggers a build for all supported platforms and creates a GitHub Release with the binaries attached.
- Vision — project goals and scope
- Requirements — functional and non-functional requirements
- Use cases — feature overview, specifications, and test traceability
- API spec — OpenAPI 3.1 (source:
https://rest.konzertmeister.app/v3/api-docs/m2m)
See CONTRIBUTING.md for domain terminology, coding conventions, and commit message guidelines.