Install
openclaw skills install @runapi-ai/runapi-claudeCall the Claude API (claude-opus, claude-sonnet, claude-haiku) through RunAPI using the official Anthropic SDK, OpenAI SDK, Gemini contents clients, or compatible clients. Use when the user asks for Claude / Anthropic chat, streaming messages, multimodal vision input, tool use, extended thinking, token counting, OpenAI or Gemini protocol compatibility, or when they want to point an existing LLM SDK setup at RunAPI as the base URL.
openclaw skills install @runapi-ai/runapi-claudeUse the official Anthropic SDK (Python, TypeScript, Ruby) -- or any
Anthropic-compatible HTTP client — and switch the base URL to
https://runapi.ai. The endpoint speaks the Anthropic Messages protocol
(POST /v1/messages), so no client code changes beyond base_url and
api_key.
ANTHROPIC_API_KEY=YOUR_RUNAPI_TOKEN
ANTHROPIC_BASE_URL=https://runapi.ai
Get a RunAPI API Key at https://runapi.ai/api_keys.
| Language | Init |
|---|---|
| Python | anthropic.Anthropic(api_key=..., base_url="https://runapi.ai") |
| TypeScript | new Anthropic({ apiKey: ..., baseURL: "https://runapi.ai" }) |
| Ruby | Anthropic::Client.new(api_key: ..., base_url: "https://runapi.ai") |
| curl | POST https://runapi.ai/v1/messages with x-api-key: header |
x-api-key and Authorization: Bearer ... both work; the SDK uses
x-api-key by default.
import anthropic
client = anthropic.Anthropic(
api_key="YOUR_RUNAPI_TOKEN",
base_url="https://runapi.ai",
)
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
system="You are a helpful assistant.",
messages=[{"role": "user", "content": "Explain quantum computing simply."}],
)
print(message.content[0].text)
print(message.usage) # input_tokens / output_tokens
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: "YOUR_RUNAPI_TOKEN",
baseURL: "https://runapi.ai",
});
const message = await client.messages.create({
model: "claude-sonnet-4-6",
max_tokens: 1024,
system: "You are a helpful assistant.",
messages: [{ role: "user", content: "Explain quantum computing simply." }],
});
max_tokens is required by the Anthropic API.
with client.messages.stream(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": "Write a haiku about coding."}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
const stream = await client.messages.stream({
model: "claude-sonnet-4-6",
max_tokens: 1024,
messages: [{ role: "user", content: "Write a haiku about coding." }],
});
for await (const event of stream) {
if (event.type === "content_block_delta") {
process.stdout.write(event.delta.text);
}
}
Streaming runs through a regional edge proxy so the request does not hold a
Rails/Puma thread. Long generations (extended thinking, large max_tokens)
should always stream.
{
"model": "claude-sonnet-4-6",
"max_tokens": 1024,
"messages": [
{
"role": "user",
"content": [
{ "type": "text", "text": "What is in this image?" },
{
"type": "image_url",
"image_url": { "url": "https://cdn.runapi.ai/public/samples/mask.png" }
}
]
}
]
}
Image input uses the standard Anthropic image_url block. URLs must be
publicly fetchable.
{
"model": "claude-sonnet-4-6",
"max_tokens": 1024,
"reasoning_effort": "high",
"include_thoughts": true,
"tools": [
{ "type": "function", "function": { "name": "googleSearch" } }
],
"messages": [
{ "role": "user", "content": "What's the latest on Claude 4.7?" }
]
}
reasoning_effort: "low" or "high". Supported on every model below.include_thoughts: returns reasoning content. Only claude-sonnet-4-5-20250929
and claude-sonnet-4-6 support this.googleSearch function tool.anthropic-beta: interleaved-thinking-2025-05-14 to interleave
thinking blocks with output.curl -X POST "https://runapi.ai/v1/messages/count_tokens" \
-H "x-api-key: YOUR_RUNAPI_TOKEN" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-6",
"messages": [{"role": "user", "content": "How many tokens?"}]
}'
Returns {"input_tokens": <n>}. Image blocks use a 512-token heuristic; for
exact response usage read usage from the actual POST /v1/messages response.
curl https://runapi.ai/v1/models -H "x-api-key: YOUR_RUNAPI_TOKEN"
Returns Anthropic-compatible model objects.
Claude models are also available through RunAPI's OpenAI-compatible and Gemini
contents client surfaces. Use these protocol paths when an existing agent
runtime already speaks Chat Completions, Responses, or Gemini
generateContent / streamGenerateContent; for new Claude-specific code,
prefer the Anthropic Messages setup above.
curl -X POST "https://runapi.ai/v1/chat/completions" \
-H "Authorization: Bearer YOUR_RUNAPI_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-6",
"messages": [{"role": "user", "content": "Draft a concise answer."}]
}'
curl -X POST "https://runapi.ai/v1/responses" \
-H "Authorization: Bearer YOUR_RUNAPI_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-6",
"input": "Draft a concise answer."
}'
curl -X POST \
"https://runapi.ai/v1beta/models/claude-sonnet-4-6:streamGenerateContent" \
-H "x-goog-api-key: YOUR_RUNAPI_TOKEN" \
-H "Content-Type: application/json" \
-d '{"contents":[{"role":"user","parts":[{"text":"Hello, Claude!"}]}]}'
Token counting remains specific to the Anthropic-compatible
/v1/messages/count_tokens endpoint.
| Model ID | Use when |
|---|---|
claude-fable-5 | Flagship — state-of-the-art coding, reasoning, and vision (1M context) |
claude-sonnet-5 | Near-Opus coding and agentic skill at Sonnet cost (1M context) |
claude-opus-4-8 | Strongest general model — agents, complex reasoning |
claude-opus-4-7 | Previous Opus generation for stable workloads |
claude-opus-4-6 | High-end reasoning workloads |
claude-sonnet-4-6 | Balanced default for production chat |
claude-opus-4-5-20251101 | Pin Opus 4.5 snapshot |
claude-sonnet-4-5-20250929 | Pin Sonnet 4.5 snapshot (supports include_thoughts) |
claude-haiku-4-5-20251001 | Highest throughput lightweight model |
claude-opus-4-1-20250805 | Pin Opus 4.1 snapshot |
Aliases auto-resolve to dated snapshots: claude-opus-4-5,
claude-sonnet-4-5, claude-haiku-4-5.
ANTHROPIC_BASE_URL=https://runapi.ai \
ANTHROPIC_API_KEY=YOUR_RUNAPI_TOKEN \
claude
max_tokens — the Anthropic API rejects requests without it.contents paths only for existing clients that
require those request shapes.include_thoughts only works on the two Sonnet models listed above; do not
send it on Opus or Haiku.usage from the POST /v1/messages
response, not from /v1/messages/count_tokens.