Seedance 2.5 is live — 30-second cinematic video with native audio & real-person references
rreAPI Docs

claude-fable-5-1

Claude Fable 5.1 — Anthropic's most capable widely released model, for the most demanding reasoning and long-horizon agentic work. OpenAI-compatible /api/v1/chat/completions on reapi.ai with a 1,000,000-token context window, 128,000 max output tokens, thinking always on, and all five reasoning-effort rungs.

Anthropic's Claude Fable 5.1 — its most capable widely released model, for the most demanding reasoning and long-horizon agentic work — exposed through reAPI as a drop-in OpenAI-compatible Chat Completions endpoint. A 1,000,000-token context window (the maximum is also the default), 128,000 max output tokens, thinking always on, and reasoning_effort across all five rungs from low to max. The wire model id is claude-fable-5-1. Current rates live on the model page.

Quick example

curl https://reapi.ai/api/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-fable-5-1",
    "messages": [
      { "role": "user", "content": "Port this module to the new API and keep going until the test suite is green." }
    ],
    "reasoning_effort": "high",
    "max_tokens": 16000,
    "stream": true
  }'
from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://reapi.ai/api/v1",
)

stream = client.chat.completions.create(
    model="claude-fable-5-1",
    messages=[{"role": "user", "content": "Port this module to the new API and keep going until the test suite is green."}],
    reasoning_effort="high",
    max_tokens=16000,
    stream=True,
)
for chunk in stream:
    delta = chunk.choices[0].delta.content if chunk.choices else None
    if delta:
        print(delta, end="")
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: "YOUR_API_KEY",
  baseURL: "https://reapi.ai/api/v1",
});

const stream = await client.chat.completions.create({
  model: "claude-fable-5-1",
  messages: [{ role: "user", content: "Port this module to the new API and keep going until the test suite is green." }],
  reasoning_effort: "high",
  max_tokens: 16000,
  stream: true,
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io"
    "net/http"
)

func main() {
    body, _ := json.Marshal(map[string]any{
        "model": "claude-fable-5-1",
        "messages": []map[string]string{
            {"role": "user", "content": "Port this module to the new API and keep going until the test suite is green."},
        },
        "reasoning_effort": "high",
        "max_tokens":       16000,
    })
    req, _ := http.NewRequest("POST",
        "https://reapi.ai/api/v1/chat/completions", bytes.NewReader(body))
    req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
    req.Header.Set("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    out, _ := io.ReadAll(resp.Body)
    fmt.Println(string(out))
}

Authentication

Use your reAPI API key — the same key that calls the image, video and audio endpoints — as a bearer token:

Authorization: Bearer YOUR_API_KEY

Create one under API keys in your reAPI dashboard. Chat requests are billed from the same credit balance as every other model on the platform.


Endpoint

POST /api/v1/chat/completions

Base URL https://reapi.ai/api/v1. The wire format is OpenAI-compatible, so the same SDKs work once you swap the base URL, the key and the model string. The request is translated to Anthropic's native shape before it reaches the model, which is what the parameter table below is describing.

Parameter support on this model

The table records what each Chat Completions field does by the time the model sees it — some are translated, some are dropped in the translation, and some are rejected by the model itself.

FieldResult
reasoning_effortAccepts all five rungs: low, medium, high, xhigh, max
reasoning_effort: "minimal"Rewritten to low
reasoning_effort: "none"Thinking cannot be disabled on this model, and none does NOT pick the minimum either: the request runs at the default, high. Send low explicitly for the cheapest setting
max_tokensApplied, up to 128,000
max_completion_tokensAlso applied — both spellings cap this model
stopApplied, as stop sequences. String or array
streamApplied
tools, tool_choiceApplied — but a forced tool_choice is rejected, see Tool calling
temperature, top_p, top_kDropped. Anthropic removed sampling controls from this model
frequency_penalty, presence_penalty, logprobs, n, seedDropped — no equivalent in the native request
response_formatDropped. Constrain the output by prompt on this endpoint

The fields marked Dropped are accepted by the endpoint and then ignored: no error is raised, and the response comes back as if you had not sent them. That is worse than a rejection, because a temperature you believe is in effect never was. The playground on the model page offers only the fields that do something.

Request body

model — string, required

Must be claude-fable-5-1 exactly. Note that claude-fable-5 is a different model — the predecessor in the same tier — and not an alias.

messages — array, required

Conversation history, each entry an object with role and content. Roles are system, user and assistant.

Do not prefill the assistant turn. A trailing assistant message used to force the start of the reply is rejected by this model, as it is across Anthropic's current family.

max_tokens — integer

Upper bound on generated tokens for this response, thinking tokens included. The documented maximum output is 128,000 tokens. max_completion_tokens is accepted as an alias. Omitted, the request runs under the model's ceiling.

Thinking tokens bill as output tokens. This model thinks on every request and its reasoning is not returned to you, so a budget sized only for the visible answer can end the pass before the answer arrives.

reasoning_effort — string

How deeply the model thinks before answering. See Reasoning effort. Anthropic's family default is high.

stream — boolean, default false

When true, tokens arrive as server-sent events terminated by data: [DONE], with a final chunk carrying usage. Worth enabling here: a single request on a hard task can run for many minutes before the first visible token, and a non-streamed request with a large budget can reach an HTTP timeout.

stop — string or array of strings

Sequences that end the response when generated. Translated to the model's native stop sequences.


Reasoning effort

Thinking is always on for this model. There is no way to switch it off: reasoning_effort: "none" does not disable it — and it does not select the shallowest setting either: the request runs at the default, high. The control is depth, not presence, and the cheapest depth is low, sent explicitly.

EffortWhen to use it
lowRoutine work, sub-agents, high-volume routes where quality holds
mediumThe cost-saving step down from the default where evals show no loss
highAnthropic's family default. Intelligence-sensitive work, long-horizon agentic runs
xhighCoding and agentic work that measurably benefits from more depth
maxWhen correctness matters more than cost

All five reach this model. Effort is the first quality-trading lever after caching, and the top of the range earns its cost only on hard problems — raise to max when measurement shows headroom at the level below, not by default.

The raw chain of thought is never returned, on any setting. You are billed for thinking tokens you do not receive; usage.completion_tokens is the number that reflects them, and it is the number to reconcile a bill against.


Tool calling

Tools work on this endpoint. What this model rejects is forcing a tool: tool_choice set to a specific tool, or to "any tool", returns an error.

Leave tool_choice on its automatic setting and name the tool you want in the prompt instead. If the forced call only existed to get structured JSON back, describe the schema in the prompt and validate the result — response_format does not reach this model through this endpoint.

The model is built for long-horizon agentic runs, so give it the full task specification up front rather than feeding it one step at a time.


Operating constraints

Two things about this model are policy rather than parameters, and both can surprise a caller who has only used other tiers.

Refusals arrive as a successful response

Anthropic runs safety classifiers on this model that may decline a request. On this endpoint the result is HTTP 200 with choices[0].finish_reason: "content_filter" — the OpenAI-format spelling of Anthropic's native refusal stop reason — not an error status. Check finish_reason before reading the content, or a declined request reads as an empty answer. Anthropic's native stop_details.category is not part of the Chat Completions shape and is not carried through.

30-day data retention is required

This model is not available under zero data retention unless Anthropic has expressly authorized it. An organization whose retention configuration does not meet the requirement gets a 400 invalid_request_error.


Pricing dimensions

Billing is per token, from your reAPI credit balance, with separate input and output rates:

  • Thinking tokens bill as output. Effort is the first lever on cost, and on this model it is the main one.
  • One rate at every prompt length. Unlike some flagship models, there is no long-context tier here — a 900K-token prompt bills at the same per-token rate as a 900-token one.
  • Tier is the second lever. Route the routine turns to a cheaper chat model and escalate by changing the model string.

Both rates sit 20% below Anthropic's published per-token rate. Current numbers are on the model page — that table is the canonical source, not this page. The platform constants are 1 credit = $0.001 and $1 = 1,000 credits; a request's cost is its input and output tokens at the per-million rates, converted at that ratio.

Prompt caching is priced separately. A cache write costs more per token than plain input and has its own row in the pricing table. There is no discounted cache read rate on this model — cached prompt tokens bill at the input rate — so the table shows no read row rather than advertising a discount that does not exist. Each request is charged the exact amount the serving gateway settled it at, so the invoice follows those dimensions without any re-derivation here.


Response shape

Non-streaming (stream: false)

{
  "id": "chatcmpl-...",
  "object": "chat.completion",
  "created": 1788600000,
  "model": "claude-fable-5-1",
  "choices": [
    {
      "index": 0,
      "message": { "role": "assistant", "content": "..." },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 1204,
    "completion_tokens": 860,
    "total_tokens": 2064
  }
}

usage.completion_tokens includes thinking tokens, so it is the number to reconcile a bill against.

Streaming (stream: true)

Server-sent events, each data: line carrying a chat.completion.chunk with the incremental text in choices[0].delta.content. The last chunk before data: [DONE] carries usage; a chunk with an empty choices array is normal and should be skipped.


Errors

Failures use the standard envelope: error.code, error.message and error.request_id. See the errors catalog for the full code list. Common cases:

TriggerWhat to do
Missing or invalid API keyCreate a key under API keys in the reAPI dashboard
Unknown model valueSend claude-fable-5-1 exactly — claude-fable-5 is a different model
Forced tool_choiceSwitch to the automatic setting and name the tool in the prompt
A trailing assistant message used as a prefillRemove it; state the required format in the prompt instead
max_tokens above the ceilingLower it; the documented maximum output is 128,000
Truncated answer on a hard promptThe thinking pass consumed the allowance — raise max_tokens
Empty content on a 200Check finish_reason: a refusal arrives as content_filter
400 invalid_request_error on an org with zero data retentionThis model requires 30-day retention
Insufficient balanceTop up your reAPI credits
Upstream rate limitRetry with backoff, or route through another tier

Tips

  • Stream, and budget generously. Requests on hard tasks run for minutes and the thinking you pay for is invisible until the answer starts.
  • Give it the whole task. This model is tuned for autonomy; prompts written for earlier models are often too prescriptive and reduce output quality.
  • Sweep effort downward, not upward. Start at the default and check whether medium or low holds on your evals before assuming the top rungs are needed.
  • Don't reach for temperature. It does nothing here. Effort and the token budget are the two controls that change the result.
  • Coming from the predecessor? claude-fable-5 is the same tier at the same per-token price. Moving up costs nothing per token; the surface tightens around forced tool choice.

Table of Contents