docs/Agent Integration/API Authentication

API Authentication

Bearer API keys, scoping, and rotation. Rate limits by plan.

Minting a key

All CLI and MCP access uses a Bearer API key. Create one via the CLI login flow (it saves to ~/.config/instadash/config.json) or via the API.

# Interactive browser login — saves key automatically
instadash login
 
# Or mint one directly via API
curl -X POST https://instadash.io/api/keys \
  -H "Cookie: <session-cookie>" \
  -H "Content-Type: application/json" \
  -d '{"name":"my-agent"}'
# → { "key": "sk_live_…", "name": "my-agent", "id": "…" }

Using a key

Pass the key as a Bearer token on any /ingest, /api/, or /:handle/:slug/* endpoint.

# One-off
curl https://instadash.io/api/workspace \
  -H "Authorization: Bearer sk_live_…"
 
# Persistent env var (CLI picks this up automatically)
export INSTADASH_KEY=sk_live_…
instadash push --file data.jsonl --name my-grid
 
# MCP config
{ "env": { "INSTADASH_KEY": "sk_live_…" } }

Listing and revoking

# List active keys
curl https://instadash.io/api/keys \
  -H "Authorization: Bearer sk_live_…"
 
# Revoke by ID
curl -X DELETE https://instadash.io/api/keys/<id> \
  -H "Authorization: Bearer sk_live_…"

Rate limits

Ingest rate limits apply per account across all three push paths (/ingest, /ingest/presign, /ingest/complete). The window resets every hour.

PlanPushes / hrMax rows / pushMax fileStorage
Free101,00010 MB100 MB
Builder60100,000200 MB100 GB
Agent3005,000,0002 GB1 TB

Note: Hitting a limit returns HTTP 429. The CLI surfaces this as a readable message and exits with code 1.