Getting Started

Pricing

Prepaid credits: 1 credit per hour for tunnels and webhooks, 1 per 100 pulse runs, and no endpoint ever bills more than $3 per 30 days.

Docs for LLMs

OtterKit uses prepaid credits, and 1 credit is $0.01. There is no subscription. The same credits pay for endpoints created from the CLI, MCP server, console, and Mac app, and the Mac app itself is free.

WhatCost
Tunnel1 credit ($0.01) per connected hour. Billing pauses while disconnected.
Webhook endpoint1 credit ($0.01) per hour while the endpoint is live.
Pulse1 credit per 100 runs (scheduled calls or check-ins).
Cap on every endpoint300 credits ($3) per rolling 30 days. Usage beyond the cap is free.
First charge1 credit when the endpoint is created (the first hour, or first 100 runs).
Auto-stopDefault 24h for tunnels and webhooks; set with --ttl, or "never".
Custom domains, email inboxes, replayNo extra charge.

Credit packs#

New accounts get 10 free credits. Buy more on the console's billing page↗:

PackPriceCredits
Starter$5500
Builder$202,200 (includes 200 bonus)
Scale$506,000 (includes 1,000 bonus)

Fair use and running out of credits#

Each webhook endpoint serves up to 100,000 requests per rolling 30 days, then answers 429 until the window rolls. This is a limit, not a price.

When your balance hits zero, a tunnel stops. A webhook endpoint instead enters a 72-hour grace standby: it keeps answering senders and buffers up to 200 requests, while forwarding and history pause. Grace time isn't billed. Top up within 72 hours and everything resumes on its own.

Pricing API#

Read current pricing programmatically. No token is needed.

GET/api/agent/pricing
JSON
{
  "currency": "credits",
  "note": "1 credit = $0.01 USD. Buy credits at https://console.otterkit.com/billing",
  "tunnel": {
    "description": "Expose a local port to the internet.",
    "hourlyCredits": 1,
    "monthlyCapCredits": 300,
    "billing": "1 credit per connected hour (first hour charged at provision). Never bills more than 300 credits per rolling 30 days (~$3/mo always-on). Sessions run until stopped; pass ttl (default 24h, or \"never\") for an optional auto-stop."
  },
  "webhook": {
    "description": "Capture incoming HTTP requests without a local server. Same pricing.",
    "hourlyCredits": 1,
    "monthlyCapCredits": 300,
    "billing": "..."
  }
}