Beautiful, agentic-friendly CLI for Apideck Unified API.
OpenAPI is the source of truth — no SDK dependency, no code generation. Humans get a polished TUI. AI agents get token-efficient progressive disclosure.
Read the blog post
- OpenAPI-native — Parses the unified Apideck OpenAPI spec directly. No generated code, no SDK dependency.
- Beautiful TUI explorer — Interactive API playground in the terminal.
- AI agent-ready —
apideck agent-promptoutputs a token-optimized prompt (~80 tokens vs ~3,600 for MCP). - Permission layers — Auto-classified operations (read/write/dangerous) with built-in safety rails.
- DX Ready — Styled output, interactive wizards, spinners, semantic colors, adaptive themes.
brew install apideck-libraries/tap/apideckgo install github.com/apideck-libraries/cli/cmd/apideck@latestdocker run -e APIDECK_API_KEY=xxx -e APIDECK_APP_ID=xxx -e APIDECK_CONSUMER_ID=xxx apideck/cli accounting invoices listgit clone https://github.com/apideck-libraries/cli.git
cd cli
make build
./bin/apideck --help# Option A: Environment variables
export APIDECK_API_KEY=your-api-key
export APIDECK_APP_ID=your-app-id
export APIDECK_CONSUMER_ID=your-consumer-id
# Option B: Interactive setup wizard
apideck auth setup# List available API groups
apideck --list
# List invoices
apideck accounting invoices list
# Create a contact
apideck crm contacts create --name "Jane Doe" --email "jane@example.com"
# Get a specific invoice
apideck accounting invoices get --id inv_001
# Use a specific connector
apideck accounting invoices list --service-id xero# Launch the TUI explorer
apideck explore
# Scoped to a specific API
apideck accounting explore# Discovery
apideck --list # List available API groups
apideck accounting --list # List resources + operations
apideck accounting invoices --help # Show operations + params
# API calls
apideck accounting invoices list --limit 10
apideck accounting invoices create --customer-id "cus_123" --total 150
apideck crm contacts list --output json
# Complex requests via raw JSON
apideck accounting invoices create --data '{"customer_id": "cus_123", "line_items": [...]}'
apideck accounting invoices create --data @invoice.json
# Management
apideck auth status # Show credential sources
apideck sync # Update to latest API spec
apideck info # Spec version, cache status
apideck history # Recent API calls timeline
apideck permissions # Show/edit permission configThe CLI auto-detects your environment:
| Context | Default | Override with |
|---|---|---|
| Interactive terminal | table |
--output json|yaml|csv |
| Piped / non-TTY | json |
--output table|yaml|csv |
# Select specific fields
apideck accounting invoices list --fields id,customer,total
# Raw API response
apideck accounting invoices list --raw
# Quiet mode (no spinners, no status lines)
apideck accounting invoices list -q -o json# Manual pagination
apideck accounting invoices list --cursor "next_page_token"
# Fetch all pages automatically
apideck accounting invoices list --all
# Limit total pages fetched
apideck accounting invoices list --all --max-pages 10Operations are auto-classified based on HTTP method:
| HTTP Method | Level | Behavior |
|---|---|---|
| GET, HEAD, OPTIONS | read |
Auto-approved |
| POST, PUT, PATCH | write |
Confirmation prompt |
| DELETE | dangerous |
Blocked unless overridden |
Override defaults in ~/.apideck-cli/permissions.yaml:
defaults:
read: allow
write: prompt
dangerous: block
overrides:
accounting.payments.create: dangerous # upgrade: payments are sensitive
crm.contacts.delete: write # downgrade: allow with promptUse --yes to skip write prompts. Use --force to override dangerous blocks.
The Apideck CLI is designed to be the most efficient way for AI agents to interact with the Apideck API.
apideck agent-promptOutputs a token-optimized prompt that teaches any AI agent how to use the CLI. Compare this to loading a full OpenAPI spec (~50,000 tokens) or MCP tool schemas (~3,600 tokens per API).
Agents discover capabilities lazily — only loading what they need:
apideck --list # What APIs exist?
apideck accounting --list # What resources?
apideck accounting invoices create --help # What parameters?apideck skill installThis writes a skill file to ~/.claude/skills/apideck.md so Claude Code automatically knows how to use the Apideck CLI.
When running in a non-interactive environment (CI/CD, agent frameworks):
readoperations execute normallywrite/dangerousoperations fail with exit code 1 and structured JSON error- Use
--yesand--forceflags to allow operations programmatically
The obvious question: AI agents can already read OpenAPI specs and make HTTP requests with curl. Why build another tool?
Because "can" ≠ "should". Agents can write raw assembly too — we still give them Python.
A typical OpenAPI spec is 5,000–50,000+ tokens. An AI agent that loads the full spec to list customers just burned thousands of tokens on endpoints it will never use.
Apideck CLI: apideck agent-prompt → ~80 tokens. Progressive disclosure via --list and --help means the agent only loads what it needs, when it needs it.
An AI agent using curl must parse security schemes, manage token storage and refresh, and construct auth headers correctly every time. One mistake = leaked credentials or broken auth.
Apideck CLI: Auth is configured once and injected automatically. The agent never sees or handles credentials directly.
Give an AI agent curl and it can DELETE /accounting/invoices/{id} just as easily as GET /accounting/invoices. There's no distinction between reading data and destroying it.
Apideck CLI: Auto-classified permission layers. GET is auto-approved. POST/PUT prompts for confirmation. DELETE is blocked unless explicitly allowed. Safety is structural, not an afterthought.
With curl + OpenAPI, every API call requires: load spec → parse → search → extract params → construct request → execute → parse response. That's 7 steps of repeated token-burning work.
Apideck CLI: apideck accounting invoices list --limit 10. One step.
| Dimension | curl + OpenAPI | MCP | Apideck CLI |
|---|---|---|---|
| Context cost | ~5,000–50,000 tokens | ~3,600 tokens/API | ~80 tokens |
| Auth handling | Manual, per-request | Per-server, inconsistent | Automatic |
| Safety/Permissions | None | Optional, per-server | Built-in |
| Discovery | Load entire spec | Schema dump upfront | Lazy, progressive |
| Runtime deps | None | Server process | None (static binary) |
| Agent compatibility | Any (shell) | MCP clients only | Any (shell) |
| Custom code needed | Yes | Yes, per server | None |
The best AI agent interface isn't a new protocol — it's the oldest one we have: a well-designed command-line tool.
┌─────────────────────────────────────────────────────┐
│ apideck binary │
│ │
│ ┌──────────┐ ┌──────────┐ ┌───────────────────┐ │
│ │ Parser │ │ TUI │ │ Agent Interface │ │
│ │ OpenAPI │ │ Explorer │ │ --help/--list │ │
│ │ libopenapi│ │ bubbletea│ │ agent-prompt │ │
│ └────┬─────┘ └────┬─────┘ └────────┬──────────┘ │
│ │ │ │ │
│ ┌────▼──────────────▼─────────────────▼──────────┐ │
│ │ Command Router │ │
│ │ spec → operations → subcommands + flags │ │
│ └────────────────────┬───────────────────────────┘ │
│ │ │
│ ┌────────────────────▼───────────────────────────┐ │
│ │ Permission Engine │ │
│ │ read / write (prompt) / dangerous (block) │ │
│ └────────────────────┬───────────────────────────┘ │
│ │ │
│ ┌────────────────────▼───────────────────────────┐ │
│ │ Auth Manager │ │
│ │ env vars > config file > setup wizard │ │
│ └────────────────────┬───────────────────────────┘ │
│ │ │
│ ┌────────────────────▼───────────────────────────┐ │
│ │ HTTP Client + Response Formatter │ │
│ │ retry · rate-limit · JSON/table/YAML/CSV │ │
│ └────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘
| Component | Choice |
|---|---|
| Language | Go |
| CLI framework | Cobra |
| TUI framework | Bubbletea + Lipgloss |
| Interactive forms | Huh |
| OpenAPI parsing | libopenapi |
| HTTP client | net/http + retryablehttp |
# Build
make build
# Run
make run
# Test
make test
# Clean
make cleanMIT