geminilisted
Install: claude install-skill runapi-ai/gemini
# Gemini on RunAPI
Use Gemini contents at `https://runapi.ai` with `generateContent` or
`streamGenerateContent` as the primary protocol.
## Primary protocol recipe
### Authenticate
Set `GEMINI_API_KEY` to a RunAPI API key and the Gemini client base URL to
`https://runapi.ai`. Raw requests send the key with `x-goog-api-key`.
### Send request
```bash
curl -X POST \
"https://runapi.ai/v1beta/models/gemini-3.7-flash:streamGenerateContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"contents":[{"role":"user","parts":[{"text":"Summarize this review."}]}]}'
```
Use `generateContent` only when the selected model supports synchronous output;
`gemini-3.7-flash` accepts only `streamGenerateContent`. For this model, native
tools are limited to `functionDeclarations` and the `googleSearch` tool with an
empty object payload;
native thinking is limited to `generationConfig.thinkingConfig.includeThoughts`
and `thinkingLevel` of `low` or `high`.
### Verify result
Require candidate content, terminal `finishReason`, and `usageMetadata`. A
stream is complete only after the terminal candidate and Usage; an HTTP 2xx
without both is incomplete.
### Stop boundaries
Correct a rejected shape once using the structured error. Retry transport once
only before any candidate or Usage and when replay is safe. Record a terminal
error and stop without changing model or protocol.
## Compatibility protocols
Load [compatibility protocols](references/c