agentsclimarketplace

Openrouter pricing basics

Skill jeremylongshore/claude-code-plugins-plus-skills/skills/.curated/openrouter-pricing-basics

'Understand OpenRouter pricing, calculate costs, and optimize spend. Use when budgeting, comparing model costs, or tracking spend. Triggers: ''openrouter pricing'', ''openrouter cost'', ''model pricing'', ''openrouter budget'', ''how much does openrouter cost''.From its SKILL.md

Install
npx -y skills add jeremylongshore/claude-code-plugins-plus-skills --skill openrouter-pricing-basics

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

What its file declares

Copied from the file, not written here

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

8.3 KB, ~2.1k tokens by cl100k_base, as published. Nobody here has run it

OpenRouter Pricing Basics

Overview

OpenRouter charges per token with separate rates for prompt (input) and completion (output) tokens. Prices are listed per token in the models API (multiply by 1M for per-million rates). Credits are prepaid with a 5.5% processing fee ($0.80 minimum). Free models are available for testing and low-volume use.

Prerequisites

  • An OpenRouter API key (sk-or-v1-...) exported as OPENROUTER_API_KEY — see the openrouter-install-auth skill for setup
  • curl and jq for the model-pricing and credit-balance queries
  • Python 3.8+ with the OpenAI SDK plus the requests package for the cost-calculation and generation-endpoint snippets
  • Prepaid credits for paid models — the public models/pricing endpoint needs no auth, but real completions require credits or a :free model

Instructions

  1. Read How Pricing Works: prepaid credits (5.5% fee, $0.80 minimum) are drawn down per request as (prompt_tokens * prompt_rate) + (completion_tokens * completion_rate).
  2. Query per-token rates via GET /api/v1/models per Query Model Pricing, and place candidate models in the Cost Tiers table (free → premium).
  3. Estimate spend before committing: run estimate_cost() from Calculate Request Cost with your expected prompt/completion token counts.
  4. After sending real traffic, fetch the exact charge with GET /api/v1/generation?id= per Track Actual Cost Per Request.
  5. Watch the balance via GET /api/v1/auth/key per Check Credit Balance, and enable auto-topup for production keys.
  6. Cut costs with the :floor and :free variants per Save Money with Variants, and check Special Pricing for reasoning tokens, image inputs, per-request fees, and BYOK.

How Pricing Works

  1. Buy credits at openrouter.ai/credits (5.5% fee, $0.80 minimum)
  2. Each request deducts (prompt_tokens * prompt_rate) + (completion_tokens * completion_rate)
  3. Check balance via GET /api/v1/auth/key or the dashboard
  4. Auto-topup is available to prevent service interruption

Query Model Pricing

# Get pricing for all models
curl -s https://openrouter.ai/api/v1/models | jq '.data[] | select(.id == "anthropic/claude-3.5-sonnet") | {
  id: .id,
  prompt_per_M: ((.pricing.prompt | tonumber) * 1000000),
  completion_per_M: ((.pricing.completion | tonumber) * 1000000),
  context: .context_length
}'
# → { "id": "anthropic/claude-3.5-sonnet", "prompt_per_M": 3, "completion_per_M": 15, "context": 200000 }

Cost Tiers (Representative)

TierExample ModelPrompt/1MCompletion/1MUse Case
Freegoogle/gemma-2-9b-it:free$0.00$0.00Testing, prototyping
Budgetmeta-llama/llama-3.1-8b-instruct$0.06$0.06Simple Q&A, classification
Midopenai/gpt-4o-mini$0.15$0.60General purpose
Standardanthropic/claude-3.5-sonnet$3.00$15.00Complex reasoning, code
Premiumopenai/o1$15.00$60.00Deep reasoning

Calculate Request Cost

def estimate_cost(model_id: str, prompt_tokens: int, completion_tokens: int) -> float:
    """Calculate cost for a single request."""
    import requests
    models = requests.get("https://openrouter.ai/api/v1/models").json()["data"]
    model = next((m for m in models if m["id"] == model_id), None)
    if not model:
        raise ValueError(f"Model {model_id} not found")

    prompt_rate = float(model["pricing"]["prompt"])       # Cost per token
    completion_rate = float(model["pricing"]["completion"])
    return (prompt_tokens * prompt_rate) + (completion_tokens * completion_rate)

# Example: Claude 3.5 Sonnet, 1000 prompt + 500 completion tokens
cost = estimate_cost("anthropic/claude-3.5-sonnet", 1000, 500)
print(f"Estimated cost: ${cost:.6f}")  # ~$0.0105

Track Actual Cost Per Request

import requests

# Method 1: From response usage (estimate)
response = client.chat.completions.create(
    model="anthropic/claude-3.5-sonnet",
    messages=[{"role": "user", "content": "Hello"}],
    max_tokens=100,
)
# response.usage.prompt_tokens, response.usage.completion_tokens

# Method 2: Query generation endpoint (exact cost from OpenRouter)
gen = requests.get(
    f"https://openrouter.ai/api/v1/generation?id={response.id}",
    headers={"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}"},
).json()
print(f"Exact cost: ${gen['data']['total_cost']}")
print(f"Tokens: {gen['data']['tokens_prompt']} prompt + {gen['data']['tokens_completion']} completion")

Check Credit Balance

curl -s https://openrouter.ai/api/v1/auth/key \
  -H "Authorization: Bearer $OPENROUTER_API_KEY" | jq '{
    credits_used: .data.usage,
    credit_limit: .data.limit,
    remaining: ((.data.limit // 0) - .data.usage),
    is_free_tier: .data.is_free_tier
  }'

Save Money with Variants

# :floor variant picks the cheapest provider for a model
response = client.chat.completions.create(
    model="anthropic/claude-3.5-sonnet:floor",  # Cheapest provider
    messages=[{"role": "user", "content": "Hello"}],
    max_tokens=100,
)

# :free variant uses free providers (where available)
response = client.chat.completions.create(
    model="google/gemma-2-9b-it:free",
    messages=[{"role": "user", "content": "Hello"}],
    max_tokens=100,
)

Special Pricing

ItemPricing
Reasoning tokensCharged as output tokens at completion rate
Image inputsPer-image charge listed in pricing.image
Per-request feeSome models charge a flat fee per request (pricing.request)
BYOKFirst 1M requests/month free; then 5% of normal provider cost
Free model limits50 req/day (free users), 1000 req/day (with $10+ credits)

Output

  • A per-model pricing record from the models API: prompt_per_M, completion_per_M, context (e.g. $3 / $15 per 1M tokens for anthropic/claude-3.5-sonnet)
  • A pre-request dollar estimate from estimate_cost() and the exact post-request figures from the generation endpoint: total_cost, tokens_prompt, tokens_completion
  • A credit-balance snapshot from /api/v1/auth/key: credits_used, credit_limit, remaining, is_free_tier

Examples

Check remaining credits before a batch job:

curl -s https://openrouter.ai/api/v1/auth/key \
  -H "Authorization: Bearer $OPENROUTER_API_KEY" | jq '{
    credits_used: .data.usage,
    remaining: ((.data.limit // 0) - .data.usage)
  }'
# {"credits_used": 2.34, "remaining": 47.66}

Estimating first keeps surprises out: 1,000 prompt + 500 completion tokens on anthropic/claude-3.5-sonnet comes to roughly $0.0105 via estimate_cost(), and the generation endpoint then confirms the exact charge. More worked examples: references/examples.md.

Error Handling

HTTPCauseFix
402Insufficient creditsTop up at openrouter.ai/credits or use :free model
402Key credit limit reachedIncrease key limit or use a different key

Enterprise Considerations

  • Set per-key credit limits via the dashboard or provisioning API to isolate blast radius
  • Query /api/v1/generation?id= after each request for exact cost auditing
  • Use :floor variant to automatically pick the cheapest provider
  • Route simple tasks to budget models and complex tasks to premium models (see openrouter-model-routing)
  • Set max_tokens on every request to cap completion cost
  • Enable auto-topup to prevent service interruptions in production

References

What ships with it: 7 files

8.5 KB alongside SKILL.md

Gives 0 of the 12 instructions most pricing monetisation skills give in ~2.1k tokens

Counted across 324 of the 339 authors here whose files we hold, read 2026-09-06

  • Read product marketing context before asking questionsin 39 of 324, across 16 files
  • Demonstrate paid feature value with previewsin 21 of 324, across 8 files
  • Choose a value metric that scales with customer valuein 21 of 324, across 14 files
  • Verify webhook signatures on every eventin 19 of 324
  • Send trial expiration warnings earlyin 16 of 324, across 6 files
  • Minimize steps from paywall to paymentin 15 of 324, across 5 files
  • Price between next best alternative and perceived valuein 15 of 324, across 7 files
  • Grandfather existing customers when raising pricesin 14 of 324, across 10 files
  • Understand upgrade context, product model, and user journey firstin 14 of 324, across 5 files
  • Show paywalls only after users experience valuein 13 of 324, across 6 files
  • Include an escape hatch on every paywallin 12 of 324, across 4 files
  • A/B test paywall variationsin 11 of 324, across 3 files

Said here and by no other author read

  • Calculate cost from prompt and completion token rates
  • Query per-token rates from the models endpoint
  • Place candidate models into cost tiers
  • Estimate spend before sending real traffic
  • Fetch exact charge from the generation endpoint
  • Monitor credit balance via the auth key endpoint

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.