Provider catalogue
Cohere Command API guide
Use the shared customer chat-completion endpoint with the currently published Cohere Command model identifiers and service availability.
- Choose the API productDistinguish inference requests from model-training workflows.
- Read its contractUse the matching API documentation and OpenAPI reference.
- Create a scoped keyGenerate and store a customer API key securely.
- Integrate and verifySend a documented request and inspect its response.
- Monitor and rotateReview usage and revoke or rotate keys when appropriate.
Published Cohere Command models
Names, exact routing identifiers, versions, and inference status are listed from the enabled model registry when available. A blank identifier means the catalogue has not published a routing value; do not derive one from the model name.
| Model name | Exact model identifier | Version | Inference status |
|---|---|---|---|
| Command A+ | command-a-plus-05-2026 |
— | Active · Available for inference |
| Command A Reasoning | command-a-reasoning-08-2025 |
— | Active · Available for inference |
| Command A Vision | command-a-vision-07-2025 |
— | Active · Available for inference |
| Command A Translate | command-a-translate-08-2025 |
— | Active · Available for inference |
| Embed v5.0 Pro | embed-v5.0-pro |
— | Active · Available for inference |
| Embed v5.0 Fast | embed-v5.0-fast |
— | Active · Available for inference |
| Rerank v5.0 Pro | rerank-v5.0-pro |
— | Active · Available for inference |
| Rerank v5.0 Fast | rerank-v5.0-fast |
— | Active · Available for inference |
| Command R | No routing identifier published | — | Direct-call availability cannot be confirmed without a public routing identifier. |
| Command R+ | No routing identifier published | — | Direct-call availability cannot be confirmed without a public routing identifier. |
| Embed | No routing identifier published | — | Direct-call availability cannot be confirmed without a public routing identifier. |
| Rerank | No routing identifier published | — | Direct-call availability cannot be confirmed without a public routing identifier. |
Using this provider
- Choose a model by its exact identifier and verify its status before configuring an application. A display label is for people; only the identifier is suitable for the model field.
- Each provider page offers OpenAI-compatible and Claude Messages examples. Choose the protocol that your client uses; the selected model must also support the requested features.
- For an existing-customer-only service, retain existing account access and do not treat the published model list as an invitation to start a new subscription.
Model API examples
Choose a published model identifier, API protocol, and language to view a request example. Keep customer API keys on a trusted server.
Protocol requirements
OpenAI-compatible requests use POST /chat/completions at the configured customer API base URL (default https://fusionpointai.com/api/v1). Authenticate with Authorization: Bearer using a customer key with inference access. The full default URL is https://fusionpointai.com/api/v1/chat/completions.
Claude Messages requests use POST /api/v1/messages. Send the customer key in x-api-key and set anthropic-version to 2023-06-01. The Anthropic SDK base URL is https://fusionpointai.com/api because the SDK appends /v1/messages; bearer authentication is also supported.
Supported capabilities
The current OpenAI-compatible chat endpoint handles synchronous text messages. Streaming and tool calls are not supported by this endpoint.
The Claude Messages proxy preserves native content blocks, tool data, and real server-sent event streaming when the selected upstream model supports them.
Install a client
Install the Python and Node.js clients as separate packages:
Python: pip install openai anthropic
Node.js: npm install openai @anthropic-ai/sdk
curl 'https://fusionpointai.com/api/v1/chat/completions' \
-H "Authorization: Bearer $FUSIONPOINTAI_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "command-a-plus-05-2026",
"messages": [
{
"role": "user",
"content": "Summarize this in one sentence."
}
],
"temperature": 0.7,
"max_tokens": 300
}'
Request patterns
Set up API keys safely
Create a customer API key with inference access and provide it to a server process through its secret manager or environment.
- Set
FUSIONPOINTAI_API_KEYin the server environment; do not embed the key in browser code or commit it to source control. - Use HTTPS and restrict the key to the account and inference permissions required by the application.
- Redact authorization and
x-api-keyheaders from logs, traces, and support requests; revoke a key if it may have been exposed.
export FUSIONPOINTAI_API_KEY="YOUR_CUSTOMER_API_KEY"
Select an exact model identifier
The model field is a routing value, not a display label. Choose an identifier published in the live model catalogue.
- Select an active or legacy model that is marked available for inference.
- Copy its identifier exactly, including punctuation and version suffixes; never derive an ID from the model name.
- If no identifier is published, wait for the catalogue to provide one rather than substituting a guessed value.
model_id = "command-a-plus-05-2026"
# Use this exact identifier with either protocol.
Send system and multi-turn messages
Keep conversation turns in their original order and use only the roles and content shapes supported by the selected protocol and model.
- For OpenAI-compatible requests, send system, user, and assistant messages as ordered string-content entries.
- For Claude Messages, send the supported system instruction and ordered user/assistant turns in the protocol-native fields.
- Retain only the conversation context your application needs and observe the selected model’s context limits.
response = client.messages.create(
model="command-a-plus-05-2026",
max_tokens=512,
system="Answer in clear, concise German.",
messages=[
{"role": "user", "content": "What is an API?"},
{"role": "assistant", "content": "An API lets software exchange requests and responses."},
{"role": "user", "content": "Give a practical example."},
],
)
for block in response.content:
if block.type == "text":
print(block.text)
Request JSON responses
When an application needs structured output, validate the response against its own schema before using it.
- Use the structured-output controls supported by the chosen protocol and the selected upstream model.
- Treat generated JSON as untrusted input: parse it, validate required fields and types, and handle invalid output.
- Do not assume that a model or protocol combination supports a JSON mode unless the model documentation says so.
import json
# JSON is generated content, not trusted application input.
response = client.messages.create(
model="command-a-plus-05-2026", max_tokens=256,
messages=[{"role": "user", "content": 'Return only JSON with a string field named "summary". Explain an API in one sentence.'}],
)
text = "".join(block.text for block in response.content if block.type == "text")
try:
result = json.loads(text)
if not isinstance(result, dict) or not isinstance(result.get("summary"), str):
raise ValueError("Unexpected response schema")
print(result["summary"])
except (json.JSONDecodeError, ValueError) as error:
print("Handle invalid model output:", error)
Receive real-time SSE output
Streaming behavior depends on the selected protocol and upstream model; an ordinary JSON response is not a stream.
- OpenAI-compatible chat currently returns synchronous text and does not provide streaming.
- For Claude Messages, use stream mode where the selected upstream model supports it; the proxy forwards native server-sent events.
- Consume events incrementally, stop cleanly on completion or error, and do not treat partial output as a completed answer.
# client is the Anthropic client configured above.
with client.messages.stream(
model="command-a-plus-05-2026", max_tokens=512,
messages=[{"role": "user", "content": "Explain API authentication."}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
final_message = stream.get_final_message()
print("\nStop reason:", final_message.stop_reason)
Handle tools, content blocks, and errors
Keep protocol-native structures intact and make application behavior explicit for tool calls, multimodal content, and failures.
- OpenAI-compatible chat currently supports neither tool calls nor non-text content blocks.
- Claude preserves native content blocks and tool-use/result data when supported by the selected upstream model; validate tool names and arguments before execution.
- Check the HTTP status and response body, distinguish authentication, permission, validation, and rate-limit failures, and retry transient errors with backoff.
import json
from datetime import datetime, timezone
from anthropic import APIError
messages = [{"role": "user", "content": "What time is it in UTC?"}]
tools = [{
"name": "current_utc_time", "description": "Read the current UTC time.",
"input_schema": {"type": "object", "properties": {}, "additionalProperties": False},
}]
try:
reply = client.messages.create(model="command-a-plus-05-2026", max_tokens=256, messages=messages, tools=tools)
results = []
for block in reply.content:
if block.type == "tool_use":
if block.name != "current_utc_time" or block.input != {}:
raise ValueError("Unapproved tool request")
results.append({"type": "tool_result", "tool_use_id": block.id,
"content": json.dumps({"utc": datetime.now(timezone.utc).isoformat()})})
if results:
messages.append({"role": "assistant", "content": reply.content})
messages.append({"role": "user", "content": results})
reply = client.messages.create(model="command-a-plus-05-2026", max_tokens=256, messages=messages, tools=tools)
print("".join(block.text for block in reply.content if block.type == "text"))
except APIError as error:
# Log status only; never log keys or private prompts.
print("API request failed:", getattr(error, "status_code", None))
Frequently asked questions
Can I use a model display name in a request?
Use only the exact identifier published for inference. A display name is not a routing value, and an unpublished identifier should never be guessed.
Which environment variable holds the customer key?
Use FUSIONPOINTAI_API_KEY for both protocols. Keep its value in a trusted server environment and out of client-side code and logs.
What URL should the OpenAI client use?
Use the configured customer API base URL, which defaults to https://fusionpointai.com/api/v1. The chat-completions endpoint adds /chat/completions.
Why is the Claude SDK base URL different from cURL?
The Anthropic SDK appends /v1/messages, so set its base URL to https://fusionpointai.com/api. A direct HTTP request uses the full /api/v1/messages URL.
Does OpenAI-compatible chat support streaming or tools?
No. The current endpoint supports synchronous text messages only; streaming and tool calls are not available there.
Are all Claude models guaranteed to support blocks, tools, or streaming?
No. These native features are preserved when supported by the selected upstream model. Check that model’s capabilities and handle unsupported requests.
Claude Messages · POST /messages
Claude Messages requests use POST /api/v1/messages. Send the customer key in x-api-key and set anthropic-version to 2023-06-01. The Anthropic SDK base URL is https://fusionpointai.com/api because the SDK appends /v1/messages; bearer authentication is also supported.
The Claude Messages proxy preserves native content blocks, tool data, and real server-sent event streaming when the selected upstream model supports them.
| Field | Type | Required | Constraints |
|---|---|---|---|
model |
string |
Yes | {"minLength":1,"maxLength":160} |
max_tokens |
integer |
Yes | {"minimum":1,"maximum":100000} |
messages |
array |
Yes | {"minItems":1,"maxItems":100,"items":{"type":"object","required":["role","content"],"properties":{"role":{"type":"string","enum":["user","assistant"]},"content":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"object","required":["type"],"properties":{"type":{"type":"string","maxLength":80}},"additionalProperties":true}}]}}}} |
system |
string | array |
No | {"oneOf":[{"type":"string"},{"type":"array","items":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string"}},"additionalProperties":true}}]} |
stream |
boolean |
No | {"default":false} |
temperature |
number |
No | {"minimum":0,"maximum":1} |
top_p |
number |
No | {"minimum":0,"maximum":1} |
top_k |
integer |
No | {"minimum":0,"maximum":100000} |
stop_sequences |
array |
No | {"items":{"type":"string"}} |
tools |
array |
No | {"items":{"type":"object","additionalProperties":true}} |
tool_choice |
object |
No | {"additionalProperties":true} |
thinking |
object |
No | {"additionalProperties":true} |
metadata |
object |
No | {"additionalProperties":true} |
output_config |
object |
No | {"additionalProperties":true} |
service_tier |
string |
No | [] |
{
"id": "msg_example",
"type": "message",
"role": "assistant",
"model": "command-a-plus-05-2026",
"content": [
{
"type": "text",
"text": "A concise answer to the supplied question."
}
],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 12,
"output_tokens": 10
}
}
{"type":"error","error":{"type":"authentication_error","message":"Invalid or missing API key."}}
Make your first request
Send HTTPS requests to the base URL below. Use POST /chat/completions for OpenAI-compatible text chat or POST /messages for Claude Messages. Select the protocol in the model workbench and use its exact URL and JSON format.
API base URL: https://fusionpointai.com/api/v1
Create or manage a customer API key in your account’s API key settings. Send it as a bearer token and keep it on a trusted server; do not place it in browser code, source control, or a public log.
The key needs the ai:inference scope and access to the relevant customer subscription. The public API key is not an account password and must not be shared.
These examples use the registered JSON chat-completion endpoint and the OpenAI-compatible Python and Node.js clients. Store the key in the FUSIONPOINTAI_API_KEY environment variable. Replace the model value only with an exact identifier listed above.
# Install the client for your application language.
# Python:
python -m pip install openai
# Node.js:
npm install openai
# Bash: enter the key without storing it in shell history.
read -rs -p 'FusionPointAI API key: ' FUSIONPOINTAI_API_KEY
export FUSIONPOINTAI_API_KEY
printf '\n'
# After finishing:
# unset FUSIONPOINTAI_API_KEY
curl 'https://fusionpointai.com/api/v1/chat/completions' \
-H "Authorization: Bearer $FUSIONPOINTAI_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "command-a-plus-05-2026",
"messages": [
{
"role": "user",
"content": "Summarize this in one sentence."
}
],
"temperature": 0.7,
"max_tokens": 300
}'
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["FUSIONPOINTAI_API_KEY"],
base_url="https://fusionpointai.com/api/v1",
)
response = client.chat.completions.create(
model="command-a-plus-05-2026",
messages=[{"role": "user", "content": "Summarize this in one sentence."}],
temperature=0.7,
max_tokens=300,
)
print(response.choices[0].message.content)
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.FUSIONPOINTAI_API_KEY,
baseURL: "https://fusionpointai.com/api/v1",
});
const response = await client.chat.completions.create({
model: "command-a-plus-05-2026",
messages: [{ role: "user", content: "Summarize this in one sentence." }],
temperature: 0.7,
max_tokens: 300,
});
console.log(response.choices[0].message.content);
OpenAI · Request and response contract
The endpoint accepts JSON. Messages are sent in order; each message has a supported role and string content. Optional generation controls must remain within the validation limits below. The response is a JSON chat.completion object with choices and, when returned by the provider, token usage.
| Field | Type | Required | Constraints |
|---|---|---|---|
model | string | Yes | String, maximum 160 characters; use a published identifier. |
messages | array | Yes | Array of 1 to 100 messages. |
messages[].role | string | Yes | Each role is system, user, or assistant. |
messages[].content | string | Yes | Each message content is a string up to 100,000 characters. |
temperature | number | No | Optional number from 0 through 2. |
max_tokens | integer | No | Optional integer from 1 through 100,000; the selected model may have a lower output limit. |
Response shape
A successful response contains id, object (chat.completion), created, model and choices. A choice contains its index, assistant message and finish_reason. Token counts may be returned in usage. Provider-specific limits can apply even when a request passes gateway validation.
{
"id": "chatcmpl_example",
"object": "chat.completion",
"created": 1700000000,
"model": "command-a-plus-05-2026",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "A concise summary of the supplied text."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 12,
"completion_tokens": 10,
"total_tokens": 22
}
}
Access, limits, and operating safely
Live customer subscriptions do not meter request or token usage against a quota; sandbox keys are limited to their published monthly allowance. This subscription statement is separate from model and upstream technical limits.
- Model context windows, maximum output size, supported request features, and temporary upstream traffic controls vary. Check the provider and model information before sending production traffic.
- The endpoint has an application throttle of 60 requests per minute per applicable throttle identity. HTTP 429 can also indicate temporary upstream traffic controls; retry with backoff rather than a tight loop.
- Use HTTPS, keep keys server-side, grant only the inference scope required, and revoke a key promptly if it may have been exposed.
- Chat Completions supports synchronous text. Claude Messages separately supports native content blocks, tools and SSE where the selected model allows them. Other provider endpoints are not part of these contracts.
Provider access and account requirements
Authenticate with a customer API key that has the ai:inference scope and belongs to an account with access to this service. The catalogue indicates whether new customers are currently allowed. It does not grant access, create a subscription, or override account and key permissions.
Errors and troubleshooting
Validation failures and unusable provider results returned by the endpoint use a JSON error object with message, type, and code; validation failures may also include field details. Do not send API keys or private prompt content in support tickets.
Request validation and provider failures returned by the chat operation use an error object. Authentication, scope, and throttle middleware can instead return a top-level message field. Check the status and response body together.
| HTTP status | Meaning and next step |
|---|---|
400 | Invalid request body. Check required fields, message count and content, role values, temperature, and max_tokens.
|
401 | Missing or invalid bearer key. Confirm the key is active and sent in the Authorization header. |
403 | The key may not have the required inference scope or account access. Review key permissions and subscription access. |
429 | A request throttle or upstream traffic control applied. Slow down and retry with exponential backoff. |
500 | The provider did not return a usable completion or the service failed. Retry cautiously; contact support with the timestamp and a redacted request identifier. |
Frequently asked questions
Can I use the display name as the model value?
Only when that exact string is separately published as the routing identifier. Use the identifier column; if it is blank, no routing value is published here.
Can I use the Claude SDK?
Yes. Choose Claude in the model workbench and use the Anthropic SDK with the base URL shown. It sends native Messages requests, not Chat Completions. Model-specific capabilities still apply.
Why might a listed model fail?
The model can be unavailable, access may not be enabled for your account or key, or an upstream technical limit may apply. Check the status, identifier, key scope, and error response.
What should I include in a support request?
Include the provider, exact model identifier, request time, HTTP status, and a redacted request ID. Remove API keys and sensitive prompt data.