Skip to content
StartMuse API

Muse API

Muse Wonder 1.0, Muse Spark 1.3, and Muse Spark 1.2 through Messages, Chat Completions, and Responses: window, prices, reasoning, search, connection, and the server prompt.

Muse uses the same gd-… key and shared Guard balance. Generation exposes three exact model IDs: muse-wonder-1.0, muse-spark-1.3, and muse-spark-1.2. The short name muse resolves to Muse Wonder 1.0. No other public Muse IDs exist.

Get a key from @guardapi, then choose HTTP, the Python SDK, or the Node.js SDK. One shared key is issued; no separate Meta account is required.

Quick start

  1. Save the key in GUARD_API_KEY; do not commit it or print it to logs.
  2. Choose Messages, Chat Completions, or Responses. Applications with an OpenAI-compatible API use https://api.guardrelay.ai/v1, Anthropic clients use https://api.guardrelay.ai.
  3. Send the exact model (muse-wonder-1.0) and an output budget. Use a regular JSON response for the first request.
  4. Check the text, terminal state, and usage; then enable stream: true if needed.
bash
export GUARD_API_KEY="gd-your-key"
curl https://api.guardrelay.ai/v1/chat/completions \
  -H "Authorization: Bearer $GUARD_API_KEY" \
  -H "content-type: application/json" \
  -d '{"model":"muse-wonder-1.0","messages":[{"role":"user","content":"Reply with OK"}],"max_tokens":4096}'
powershell
$env:GUARD_API_KEY = "gd-your-key"
$headers = @{ Authorization = "Bearer $env:GUARD_API_KEY" }
$body = @{
  model = "muse-wonder-1.0"
  max_tokens = 4096
  messages = @(@{ role = "user"; content = "Reply with OK" })
} | ConvertTo-Json -Depth 10
Invoke-RestMethod -Method Post `
  -Uri "https://api.guardrelay.ai/v1/chat/completions" `
  -Headers $headers `
  -ContentType "application/json" `
  -Body $body

One address, three APIs

APIPathOutput budget
MessagesPOST /v1/messagesmax_tokens; 131,072 when omitted, or 32,000 when the key's balance cannot cover that reserve plus eight more reserves at 32,000
Chat CompletionsPOST /v1/chat/completionsmax_tokens / max_completion_tokens; 4096 when omitted
ResponsesPOST /v1/responsesmax_output_tokens; 4096 when omitted

The defaults are set by the Guard gateway, not by the model.

The family is selected by the exact model on the shared address. Anthropic clients use https://api.guardrelay.ai (the client appends /v1/messages itself), OpenAI-compatible ones use https://api.guardrelay.ai/v1.

Messages:

bash
curl https://api.guardrelay.ai/v1/messages \
  -H "Authorization: Bearer $GUARD_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"muse-wonder-1.0","max_tokens":4096,"messages":[{"role":"user","content":"Reply with OK"}]}'

Responses:

bash
curl https://api.guardrelay.ai/v1/responses \
  -H "Authorization: Bearer $GUARD_API_KEY" \
  -H "content-type: application/json" \
  -d '{"model":"muse-wonder-1.0","input":"Reply with OK","max_output_tokens":4096}'

Chat Completions is shown above, in the quick start.

Models and input

Model IDNameWindowAnswer limitInput
muse-wonder-1.0Muse Wonder 1.01,048,576Meta does not publish a limitText, images, PDF
muse-spark-1.3Muse Spark 1.31,048,576Meta does not publish a limitText, images, PDF
muse-spark-1.2Muse Spark 1.21,048,576Meta does not publish a limitText, images, PDF

Images and PDF are sent as embedded base64 data. How to do it is shown on the Vision and PDF / documents pages.

Pricing

ModelUncached input / 1MCache read / 1MOutput / 1M
muse-wonder-1.0$4.00$0.20$20.00
muse-spark-1.3$1.25$0.15$4.25
muse-spark-1.2$1.25$0.15$4.25

Rates are USD per 1M tokens and equal the Meta Model API rates. Writing to the cache has no separate charge, and a cache read is billed at the rate in the table. A long context is billed without a surcharge.

For muse-wonder-1.0, 4,000 uncached input + 8,000 cached input + 1,000 output tokens cost 4000×4.00/1M + 8000×0.20/1M + 1000×20.00/1M = $0.03760000.

Web search is billed separately: $0.0025 for each Muse search request, starting with the first. See the search section below for details.

Reasoning

The reasoning level is set by a field of the selected API. Muse does not return the full reasoning text; in Responses with reasoning.summary: "auto" Meta may return a short summary of it (a reasoning item with a summary field).

APILevel field
Chat Completionsreasoning_effort
Responsesreasoning.effort
Messagesoutput_config.effort

Level values: minimal, low, medium, high, xhigh, and max. The value none is not accepted and gets a refusal.

Muse searches the web with Meta search through Messages and Responses; Chat Completions has no search. Guard translates the web_search_20250305 tool that Claude Code sends into Meta search.

json
{
  "model": "muse-wonder-1.0",
  "max_tokens": 4096,
  "messages": [{"role": "user", "content": "What is new today?"}],
  "tools": [{"type": "web_search_20250305", "name": "web_search"}]
}
ItemCharge
A search request$0.0025 for each request, starting with the first
Before the answerthe cost of five searches (5 × $0.0025 = $0.0125) is held; the final charge uses the actual number of searches
Reading a pagegoes through the native Meta search and is not counted as a paid search by itself
  • The native Meta search reads the pages. Muse has no separate web_fetch tool.
  • The search limit max_uses, which Claude Code sends with every search, is accepted but not kept: Meta decides how many searches to run. Every search is billed at the price above. Search from Claude Code works.
  • Meta does not support site lists (allowed_domains, blocked_domains): a request with them gets a clear refusal.

Token counting

POST /v1/messages/count_tokens works for Muse as well. The free count before an answer returns an approximate estimate, not an exact Meta count. It is a reference number: the charge follows the actual usage, not the estimate.

Server prompt

The Muse server prompt is configured like that of the other families: the key needs an active entitlement for the Muse family and the application option turned on. Without them, the request goes without a prompt. See Server prompts for details.

Errors and limits

  • The error format, codes, and request_id are shared by all families: see Error codes.
  • A clear refusal comes back for, among other cases: video and audio; the reasoning level none; site lists in search; a separate web_fetch tool.

Where to go next

MessagesBody, usage, stop_reason, tools, and SSE.Chat CompletionsThe OpenAI-compatible request and response.ResponsesThe Responses request and terminal usage.Server promptsEntitlement, option, and the UNLOCK mark.Python SDKExamples for anthropic and openai.Node.js SDKExamples for the two SDKs.

Sections

On this page