{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Webhooks CLI","siteUrl":"https://developer.flute.com","description":"Documentation and API reference for integrating Flute payment processing.","lang":"en-US"},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"webhooks-cli","__idx":0},"children":["Webhooks CLI"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Webhooks CLI is a monitoring and debugging developer tool for Flute webhooks."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["It is a command-line and terminal UI application that can display call statuses, inspect delivery logs, manage endpoints, and forward live webhook payloads. The tool can initiate and test webhook calls, including creating new webhooks and using existing ones. It supports all Flute webhook endpoints."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"download-and-installation","__idx":1},"children":["Download and Installation"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Download and install the application for your platform. It does not require a global installation and runs from any directory."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["macOS / Linux (curl)"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl -LsSf https://github.com/getflute/flute-webhooks-cli/releases/latest/download/flute-webhooks-cli-installer.sh | sh\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["macOS / Linux (Homebrew)"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"brew install getflute/flute-webhooks-cli/flute-webhooks-cli\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Windows (x64, PowerShell)"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"irm https://github.com/getflute/flute-webhooks-cli/releases/latest/download/flute-webhooks-cli-installer.ps1 | iex\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"updating","__idx":2},"children":["Updating"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When launched, the application automatically checks for a newer version. When a newer version exists, a non-blocking notice displays."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To update, run:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"flute-webhooks-cli update\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Then launch the application again."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"configuration","__idx":3},"children":["Configuration"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["An optional configuration file is automatically created at ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["~/.flute/config.toml"]},"."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Setting"},"children":["Setting"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Default"},"children":["Default"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["default_profile"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sandbox"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Default environment profile. Valid values: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sandbox"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["production"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["auto_update_check"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["true"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Checks for updates on each launch, at most once every 24 hours."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["poll_interval_seconds"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["5"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Polling interval in seconds. Valid range: 5 to 60. Out-of-range values fall back to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["5"]}," with a warning."]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"profiles","__idx":4},"children":["Profiles"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Profile"},"children":["Profile"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"API Base URL"},"children":["API Base URL"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"OAuth URL"},"children":["OAuth URL"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sandbox"]}," (default)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://sandbox.api.flute.com"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://sandbox.oauth.api.flute.com/oauth2/token"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["production"]}," (alias ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["prod"]},")"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://api.flute.com"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://oauth.api.flute.com/oauth2/token"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["--profile"]}," to select a profile (global flag, accepted before or after the subcommand). The active profile is shown in the dashboard title."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"authenticating","__idx":5},"children":["Authenticating"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"flute-webhooks-cli auth login\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You will be prompted for your ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["client_id"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["client_secret"]},". The secret prompt is hidden. Credentials are stored in your OS keychain and never written to disk in plaintext."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["By default, credentials are stored for the sandbox profile. To set up production:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"flute-webhooks-cli --profile production auth login\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"verifying","__idx":6},"children":["Verifying"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To print the current bearer token (useful for curl smoke tests):"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"flute-webhooks-cli auth token\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"running-webhooks-cli","__idx":7},"children":["Running Webhooks CLI"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Webhooks CLI runs in two modes: ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["TUI"]}," (terminal user interface) and ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["command line"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"tui-mode","__idx":8},"children":["TUI Mode"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The TUI is an interactive interface that runs in a terminal window. Use arrow keys to navigate rows, expand items, and toggle checkboxes."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"img","attributes":{"src":"/img/webhook-tui-application.png","alt":"Webhooks example"},"children":[]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To start the TUI:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"flute-webhooks-cli tui\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"tui-key-bindings","__idx":9},"children":["TUI Key Bindings"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Context"},"children":["Context"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Controls"},"children":["Controls"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Top level"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Tab"]}," switch tabs, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["q"]}," quit, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Ctrl-C"]}," quit anywhere"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Endpoints tab"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["↑↓"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["jk"]}," navigate, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["c"]}," create, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["e"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Enter"]}," edit, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["d"]}," delete, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["p"]}," ping"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Delivery Logs tab"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["↑↓"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["jk"]}," navigate, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PgUp"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PgDn"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Home"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["End"]}," jump, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Enter"]}," view details, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["t"]}," trigger forward, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["r"]}," retry (failed only), ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["l"]}," listener config, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["1"]}," cycle endpoint filter, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["2"]}," cycle event-type filter, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["3"]}," cycle status filter, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["s"]}," toggle sort, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["x"]}," clear filters"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Form modal (create/edit)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Tab"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["↑↓"]}," move between fields, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["←→"]}," swap Cancel/Submit, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Space"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Enter"]}," toggle controls, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PgUp"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PgDn"]}," scroll event list, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Esc"]}," cancel"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Listener modal"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Tab"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["↑↓"]}," move between fields, type the URL, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Space"]}," toggle Enabled, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Enter"]}," activate, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Esc"]}," cancel"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Delete confirm"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["y"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Enter"]}," delete, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["n"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Esc"]}," cancel"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Details modal"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["↑↓"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["jk"]}," scroll, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PgUp"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PgDn"]}," page, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Esc"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Enter"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["q"]}," close"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Error modal"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Enter"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Esc"]}," dismiss"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Update-available modal"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Enter"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Esc"]}," dismiss"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["While typing in a text field (URL or Name), single-character keys such as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["q"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["c"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["d"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["e"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["p"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["r"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["l"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["t"]}," are treated as literal characters and will not trigger TUI commands."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"command-line-mode","__idx":10},"children":["Command Line Mode"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The CLI mode issues instructions through the terminal and is scriptable. For example:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"flute-webhooks-cli webhooks endpoints list\nflute-webhooks-cli --output json webhooks deliveries list --limit 15 | jq\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"cli-reference","__idx":11},"children":["CLI Reference"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Endpoints"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"flute-webhooks-cli webhooks endpoints list\nflute-webhooks-cli webhooks endpoints get <id>\nflute-webhooks-cli webhooks endpoints create --url https://… --events transaction.card.captured,refund.completed [--name \"My Hook\"]\nflute-webhooks-cli webhooks endpoints update <id> [--url …] [--events …] [--name …] [--status active|inactive]\nflute-webhooks-cli webhooks endpoints delete <id> --yes\nflute-webhooks-cli webhooks endpoints ping <id>\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Event types"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"flute-webhooks-cli webhooks event-types list\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Delivery logs"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"flute-webhooks-cli webhooks deliveries list [--endpoint-id <id>] [--status success|failed] [--limit 50]\nflute-webhooks-cli webhooks deliveries get <id>\nflute-webhooks-cli webhooks deliveries retry <id>\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Headless listener"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Forwards every new successful delivery's headers and body to a local URL. Runs in the foreground until ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Ctrl-C"]},"."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"flute-webhooks-cli listen --forward-to http://127.0.0.1:3000/webhook\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Global flags"]}," (accepted on every subcommand)"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"--profile <sandbox|production>\n--debug\n--output table|json\n"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["--output json"]}," works on every CLI subcommand, producing pretty-printed JSON for piping into ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["jq"]},". Use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["--output json >> output.json"]}," to save output to a file."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"capabilities","__idx":12},"children":["Capabilities"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Every documented Webhook API call is reachable from both TUI and CLI:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Action"},"children":["Action"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"TUI"},"children":["TUI"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"CLI"},"children":["CLI"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["List endpoints"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Endpoints tab"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["webhooks endpoints list"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Get one endpoint"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["implicit (table shows all fields)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["webhooks endpoints get <id>"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Create endpoint"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["c"]}," → form modal"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["webhooks endpoints create"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Update endpoint"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["e"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Enter"]}," → form modal"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["webhooks endpoints update <id>"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Delete endpoint"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["d"]}," → confirm modal"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["webhooks endpoints delete <id> --yes"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Ping endpoint"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["p"]}," (toast on result)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["webhooks endpoints ping <id>"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["List event types"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["used to populate the form"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["webhooks event-types list"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["List delivery logs"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Delivery Logs tab"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["webhooks deliveries list"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Get delivery log detail"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Enter"]}," → details modal"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["webhooks deliveries get <id>"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Retry failed delivery"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["r"]}," on a failed row"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["webhooks deliveries retry <id>"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Listen and forward locally"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["l"]}," → listener modal"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["flute-webhooks-cli listen --forward-to <url>"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Manual one-shot forward"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["t"]}," on a successful row"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"em","attributes":{},"children":["(listen covers it; manual one-shot deferred)"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"debugging-http-traffic","__idx":13},"children":["Debugging HTTP Traffic"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Pass ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["--debug"]}," to log every HTTP request and response (status, URL, body):"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"flute-webhooks-cli --debug auth token   # traces print to stdout\nflute-webhooks-cli --debug tui          # traces go to ~/.flute/flute-webhooks-cli.log\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For non-TUI commands, traces print to stdout so you can pipe them through ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["jq"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["grep"]},". For the TUI, stdout is owned by the terminal renderer, so traces are appended to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["~/.flute/flute-webhooks-cli.log"]},". Open a second terminal and run ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["tail -f ~/.flute/flute-webhooks-cli.log"]}," to watch live."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Response bodies are logged in full with no truncation, so server stack traces are captured intact. The bearer token is never logged."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Without ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["--debug"]},", default tracing is INFO/WARN. Non-TUI commands write to stderr; the TUI writes to the log file."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"troubleshooting","__idx":14},"children":["Troubleshooting"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Issue"},"children":["Issue"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Resolution"},"children":["Resolution"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No credentials for the sandbox"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Run ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["flute-webhooks-cli auth login"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Terminal looks broken after a crash"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The panic hook should restore it automatically. If it did not, run ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["reset"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["stty sane"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Busy: \"try again in a moment\""]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The action queue is briefly saturated by an in-flight API call. The next keypress will go through."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Polling cadence seems slow after an error"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["This is exponential backoff. On consecutive ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["401"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["403"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["404"]},", or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["5xx"]}," failures the poll interval doubles each time, capped at 30 seconds. The counter resets on the first successful poll."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Token refresh"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Bearer tokens are cached in memory and proactively refreshed 60 seconds before expiry. If the server returns a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["401"]}," anyway, the client invalidates the cache, fetches a fresh token, and retries the original request once. Only requests that fail twice in a row are surfaced as errors."]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"license","__idx":15},"children":["License"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["MIT."]}]},"headings":[{"value":"Webhooks CLI","id":"webhooks-cli","depth":1},{"value":"Download and Installation","id":"download-and-installation","depth":2},{"value":"Updating","id":"updating","depth":3},{"value":"Configuration","id":"configuration","depth":3},{"value":"Profiles","id":"profiles","depth":3},{"value":"Authenticating","id":"authenticating","depth":2},{"value":"Verifying","id":"verifying","depth":3},{"value":"Running Webhooks CLI","id":"running-webhooks-cli","depth":2},{"value":"TUI Mode","id":"tui-mode","depth":3},{"value":"TUI Key Bindings","id":"tui-key-bindings","depth":4},{"value":"Command Line Mode","id":"command-line-mode","depth":3},{"value":"CLI Reference","id":"cli-reference","depth":4},{"value":"Capabilities","id":"capabilities","depth":2},{"value":"Debugging HTTP Traffic","id":"debugging-http-traffic","depth":2},{"value":"Troubleshooting","id":"troubleshooting","depth":2},{"value":"License","id":"license","depth":2}],"frontmatter":{"title":"Webhooks CLI","description":"A CLI-based webhooks monitor","seo":{"title":"Webhooks CLI"}},"lastModified":"2026-08-19T19:06:05.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/docs/sdk/webhooks-cli","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}