OpenRouter logo

Skill

openrouter-generations

retrieve metadata for OpenRouter generations

Covers LLM OpenRouter

Description

Retrieve detailed metadata and stored content for individual OpenRouter generations. Use when the user wants to inspect a specific request — its cost, latency, token usage, provider routing, or the actual prompt/completion text — or is debugging a failed or unexpected generation.

SKILL.md

openrouter-generations

Retrieve detailed metadata and stored content for individual OpenRouter generations. Use this skill when you need to inspect a specific request — its cost, latency, token usage, provider routing, or the actual prompt/completion text.

Prerequisites

  • Any valid OpenRouter API key (regular or management key). Get one at openrouter.ai/settings/keys.
  • Pass it via --api-key <key> or set the OPENROUTER_API_KEY environment variable
  • Generation IDs look like gen-1234567890 or gen-aBcDeFgHiJkLmNoPqRsT.

First-Time Setup

cd <skill-path>/scripts && npm install

Endpoints

EndpointMethodPurpose
/api/v1/generationGETRequest metadata and usage (tokens, cost, latency, model, provider)
/api/v1/generation/contentGETStored prompt and completion text

Both take a single query parameter: id (the generation ID).

Full API reference: openrouter.ai/docs/api/api-reference/generations/get-generation

Workflow

1. Get generation metadata

Retrieves everything about a generation except the actual prompt/completion text:

cd <skill-path>/scripts && npx tsx get-generation.ts gen-1234567890
npx tsx get-generation.ts --id gen-1234567890 --json

What you get back:

  • Model & routing: model, provider_name, router, service_tier
  • Tokens: tokens_prompt, tokens_completion, native_tokens_reasoning, native_tokens_cached
  • Cost: total_cost, usage, upstream_inference_cost, cache_discount
  • Performance: latency, generation_time, moderation_latency
  • Status: finish_reason, streamed, cancelled, is_byok
  • Context: created_at, app_id, external_user, session_id, request_id
  • Provider chain: provider_responses array showing fallback attempts with per-provider latency and status

2. Get generation content

Retrieves the stored prompt and completion:

cd <skill-path>/scripts && npx tsx get-generation-content.ts gen-1234567890
npx tsx get-generation-content.ts --id gen-1234567890 --json

What you get back:

  • Input: prompt (raw text) and/or messages (array of {role, content})
  • Output: completion (the model's response) and reasoning (chain-of-thought, if applicable)

Note: Content is only available if the generation was not made with Zero Data Retention (ZDR) enabled. If ZDR was on, this endpoint returns empty/null content.

Direct API Usage (curl)

Get metadata

curl -G https://openrouter.ai/api/v1/generation \
  -H "Authorization: Bearer $OPENROUTER_API_KEY" \
  -d id=gen-1234567890

Get content

curl -G https://openrouter.ai/api/v1/generation/content \
  -H "Authorization: Bearer $OPENROUTER_API_KEY" \
  -d id=gen-1234567890

Response Schemas

Metadata response (/api/v1/generation)

{
  "data": {
    "id": "gen-3bhGkxlo4XFrqiabUM7NDtwDzWwG",
    "api_type": "completions",
    "model": "openai/gpt-4o",
    "provider_name": "OpenAI",
    "created_at": "2024-07-15T23:33:19.433273+00:00",
    "tokens_prompt": 10,
    "tokens_completion": 25,
    "native_tokens_reasoning": 5,
    "native_tokens_cached": 3,
    "total_cost": 0.0015,
    "usage": 0.0015,
    "upstream_inference_cost": 0.0012,
    "latency": 1250,
    "generation_time": 1200,
    "finish_reason": "stop",
    "streamed": true,
    "is_byok": false,
    "cancelled": false,
    "router": "openrouter/auto",
    "service_tier": "priority",
    "provider_responses": [
      {
        "provider_name": "OpenAI",
        "model_permaslug": "openai/gpt-4o",
        "status": 200,
        "latency": 1200,
        "is_byok": false
      }
    ]
  }
}

Content response (/api/v1/generation/content)

{
  "data": {
    "input": {
      "prompt": "What is the meaning of life?",
      "messages": [
        {
          "content": "What is the meaning of life?",
          "role": "user"
        }
      ]
    },
    "output": {
      "completion": "The meaning of life is a philosophical question...",
      "reasoning": null
    }
  }
}

Common Use Cases

Debug a failed generation

# Check what happened — look at finish_reason, provider_responses, and cancelled
cd <skill-path>/scripts && npx tsx get-generation.ts gen-abc123 --json

Look for:

  • finish_reason = "length" means the model hit max tokens
  • finish_reason = "content_filter" means content was filtered
  • cancelled = true means the request was cancelled by the client
  • provider_responses with multiple entries means fallbacks occurred

Check cost of a specific request

cd <skill-path>/scripts && npx tsx get-generation.ts gen-abc123

Check total_cost (what you were charged) vs upstream_inference_cost (what the provider charged OpenRouter).

Review what was actually sent/received

cd <skill-path>/scripts && npx tsx get-generation-content.ts gen-abc123

Useful for debugging unexpected outputs — verify the actual prompt sent and completion received.

Trace a multi-generation session

If you have a request_id or session_id from one generation, you can find related generations via the analytics query endpoint (see openrouter-analytics skill).

Error Handling

StatusMeaning
401Invalid or missing API key
403You don't have access to this generation (belongs to another user)
404Generation ID not found
429Rate limited — wait and retry
500Server error — retry
502Upstream failure — retry

Key Fields Reference

Metadata fields

FieldTypeDescription
idstringGeneration ID (gen-...)
modelstringModel permaslug (e.g., openai/gpt-4o)
provider_namestring|nullProvider that served the request
api_typestringOne of: completions, embeddings, rerank, tts, stt, video
tokens_promptint|nullPrompt token count
tokens_completionint|nullCompletion token count
native_tokens_reasoningint|nullReasoning/thinking tokens
native_tokens_cachedint|nullCached input tokens
total_costnumberTotal cost in USD
usagenumberUsage amount in USD
upstream_inference_costnumber|nullProvider's cost in USD
cache_discountnumber|nullDiscount from caching
latencynumber|nullTotal latency in ms
generation_timenumber|nullModel generation time in ms
moderation_latencynumber|nullModeration check time in ms
finish_reasonstring|nullWhy generation stopped (stop, length, content_filter, etc.)
native_finish_reasonstring|nullRaw finish reason from provider
streamedbool|nullWhether response was streamed
is_byokboolWhether user's own provider key was used
cancelledbool|nullWhether request was cancelled
app_idint|nullOAuth app ID
external_userstring|nullExternal user identifier (X-External-User header)
session_idstring|nullSession grouping ID
request_idstring|nullRequest grouping ID (all gens from one API call)
routerstring|nullRouter used (e.g., openrouter/auto)
service_tierstring|nullProvider service tier
web_search_enginestring|nullSearch engine used (e.g., exa, firecrawl)
num_search_resultsint|nullNumber of search results included
provider_responsesarray|nullProvider attempt chain with per-provider latency/status

Content fields

FieldTypeDescription
data.input.promptstring|nullRaw prompt text
data.input.messagesarray|nullMessages array ([{role, content}])
data.output.completionstring|nullModel's completion text
data.output.reasoningstring|nullChain-of-thought reasoning

© 2026 YourAI.tools. Every skill from an identity-verified publisher.

Independent catalog. Not affiliated with, endorsed by, or sponsored by Anthropic or any listed publisher. All trademarks belong to their respective owners.