{"openapi":"3.1.0","info":{"title":"FusionPointAI Customer API","version":"1.0.0","description":"OpenAI-compatible synchronous text Chat Completions and native Claude Messages. Use https:\/\/fusionpointai.com\/api\/v1 as the production HTTP base URL. Claude SDKs use the base without \/v1 because they append \/v1\/messages. Model capabilities, subscription permissions and technical limits still apply. Native streaming and content blocks belong to the Messages operation, not Chat Completions."},"servers":[{"url":"https:\/\/fusionpointai.com\/api\/v1","description":"FusionPointAI Production API"}],"security":[{"bearerAuth":[]}],"tags":[{"name":"Inference","description":"Synchronous JSON chat completion"}],"x-rateLimitPolicy":{"type":"unmetered_subscription","summary":"Live subscriptions do not meter request or token usage against a quota; sandbox keys use their published monthly allowance.","technical_constraints":"Model context windows, maximum output sizes, and temporary traffic controls may still apply according to the selected model or upstream provider."},"x-errorReference":[{"status":200,"description":"The completion was created successfully."},{"status":400,"description":"The request body or one of its parameters is invalid."},{"status":401,"description":"The bearer API key is missing or invalid."},{"status":403,"description":"The key lacks the required inference scope or account access."},{"status":429,"description":"The request was limited by application throttling or an upstream provider."},{"status":500,"description":"The service could not complete the request."}],"paths":{"\/chat\/completions":{"post":{"tags":["Inference"],"summary":"Create a chat completion","operationId":"createChatCompletion","description":"Create a synchronous JSON completion. Messages support system, user, and assistant roles with string content. Use the separate Messages operation for native Claude content blocks and SSE.","security":[{"bearerAuth":[]}],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl 'https:\/\/fusionpointai.com\/api\/v1\/chat\/completions' \\\n  -H \"Authorization: Bearer $FUSIONPOINTAI_API_KEY\" \\\n  -H \"Content-Type: application\/json\" \\\n  --data '{\n    \"model\": \"Jurassic-2\",\n    \"messages\": [\n        {\n            \"role\": \"user\",\n            \"content\": \"Summarize this in one sentence.\"\n        }\n    ],\n    \"temperature\": 0.7,\n    \"max_tokens\": 300\n}'"},{"lang":"Python","label":"Python","source":"import os\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=os.environ[\"FUSIONPOINTAI_API_KEY\"],\n    base_url=\"https:\/\/fusionpointai.com\/api\/v1\",\n)\n\nresponse = client.chat.completions.create(\n    model=\"Jurassic-2\",\n    messages=[{\"role\": \"user\", \"content\": \"Summarize this in one sentence.\"}],\n    temperature=0.7,\n    max_tokens=300,\n)\nprint(response.choices[0].message.content)"},{"lang":"Node.js","label":"Node.js","source":"import OpenAI from \"openai\";\n\nconst client = new OpenAI({\n  apiKey: process.env.FUSIONPOINTAI_API_KEY,\n  baseURL: \"https:\/\/fusionpointai.com\/api\/v1\",\n});\n\nconst response = await client.chat.completions.create({\n  model: \"Jurassic-2\",\n  messages: [{ role: \"user\", content: \"Summarize this in one sentence.\" }],\n  temperature: 0.7,\n  max_tokens: 300,\n});\nconsole.log(response.choices[0].message.content);"}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ChatCompletionRequest"}}}},"responses":{"200":{"description":"Completion created","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ChatCompletionResponse"}}}},"400":{"$ref":"#\/components\/responses\/BadRequest"},"401":{"$ref":"#\/components\/responses\/Unauthorised"},"403":{"$ref":"#\/components\/responses\/Forbidden"},"429":{"$ref":"#\/components\/responses\/RateLimited"},"500":{"$ref":"#\/components\/responses\/ServerError"}}}},"\/messages":{"post":{"tags":["Inference"],"summary":"Create a Claude Messages response","operationId":"createMessage","description":"Native Messages format. The model must support the requested content blocks, tools and streaming options. The gateway forwards provider-native JSON or real SSE without translating it into Chat Completions. A configured native upstream is required. Maximum JSON request size: 12 MiB.","security":[{"claudeApiKey":[]},{"bearerAuth":[]}],"parameters":[{"in":"header","name":"anthropic-version","schema":{"type":"string","maxLength":64},"example":"2023-06-01"},{"in":"header","name":"anthropic-beta","schema":{"type":"string","maxLength":512}}],"x-codeSamples":[{"lang":"cURL","label":"cURL","source":"curl 'https:\/\/fusionpointai.com\/api\/v1\/messages' \\\n  -H \"x-api-key: $FUSIONPOINTAI_API_KEY\" \\\n  -H \"anthropic-version: 2023-06-01\" \\\n  -H \"Content-Type: application\/json\" \\\n  --data '{\n    \"model\": \"Jurassic-2\",\n    \"max_tokens\": 300,\n    \"messages\": [\n        {\n            \"role\": \"user\",\n            \"content\": \"Summarize this in one sentence.\"\n        }\n    ]\n}'"},{"lang":"Python","label":"Python","source":"import os\nfrom anthropic import Anthropic\n\nclient = Anthropic(\n    api_key=os.environ[\"FUSIONPOINTAI_API_KEY\"],\n    base_url=\"https:\/\/fusionpointai.com\/api\",\n)\n\nresponse = client.messages.create(\n    model=\"Jurassic-2\",\n    max_tokens=300,\n    messages=[{\"role\": \"user\", \"content\": \"Summarize this in one sentence.\"}],\n)\nprint(response.content)"},{"lang":"Node.js","label":"Node.js","source":"import Anthropic from \"@anthropic-ai\/sdk\";\n\nconst client = new Anthropic({\n  apiKey: process.env.FUSIONPOINTAI_API_KEY,\n  baseURL: \"https:\/\/fusionpointai.com\/api\",\n});\n\nconst response = await client.messages.create({\n  model: \"Jurassic-2\",\n  max_tokens: 300,\n  messages: [{ role: \"user\", content: \"Summarize this in one sentence.\" }],\n});\nconsole.log(response.content);"}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ClaudeMessagesRequest"}}}},"responses":{"200":{"description":"Native message or incremental native SSE events.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ClaudeMessage"}},"text\/event-stream":{"schema":{"type":"string","description":"message_start, content_block_start\/delta\/stop, message_delta\/stop and provider error events as delivered upstream."}}}},"201":{"description":"Invalid JSON, message structure, field type or bounds.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ClaudeError"}}}},"202":{"description":"Missing, invalid, conflicting or query-string credentials.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ClaudeError"}}}},"203":{"description":"Scope, account or training-reference permission denied.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ClaudeError"}}}},"204":{"description":"Request exceeds 12 MiB.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ClaudeError"}}}},"205":{"description":"Application or upstream rate limit.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ClaudeError"}}}},"206":{"description":"Inference provider or service failure.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ClaudeError"}}}},"207":{"description":"Inference provider or service failure.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ClaudeError"}}}},"208":{"description":"Native upstream or server credentials are not configured.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ClaudeError"}}}},"209":{"description":"Upstream overloaded.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ClaudeError"}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API key"},"claudeApiKey":{"type":"apiKey","in":"header","name":"x-api-key"}},"schemas":{"ChatCompletionRequest":{"type":"object","required":["model","messages"],"properties":{"model":{"type":"string","maxLength":160,"enum":["Jurassic-2","Claude Fable 5.1","claude-opus-5-5","claude-sonnet-5-5","claude-haiku-5-5","Claude Opus 5","Claude Fable 5","Claude Mythos 5","Claude Sonnet 5","Claude Opus 4.8","Claude Haiku 4.5","command-a-plus-05-2026","command-a-reasoning-08-2025","command-a-vision-07-2025","command-a-translate-08-2025","embed-v5.0-pro","embed-v5.0-fast","rerank-v5.0-pro","rerank-v5.0-fast","Command R","Command R+","Embed","Rerank","deepseek-flash","DeepSeek V4","GLM-5.3","glm-5.3-flashx","GLM-5.3 Flash","GLM-4.7","kimi-k3.1-pro","kimi-k3.1-pro-highspeed","Kimi K3","Kimi K2.7 Code","Kimi K2.6","Kimi K2.5","Astra 6","gpt-6.1-sol","gpt-6.1-terra","gpt-6-luna","GPT-5.6 Sol","GPT-5.6 Terra","GPT-5.6 Luna","GPT-5.5","GPT-5.4","GPT-5.4 mini","GPT-5.4 nano","qwen3.8-max","qwen3.8-flash","qwen3.8-omni-flash","qwen3.7-plus","Qwen3.8","Qwen3 Coder Next","Qwen3-VL"],"description":"An exact registered model identifier currently published for inference."},"messages":{"type":"array","minItems":1,"maxItems":100,"items":{"$ref":"#\/components\/schemas\/ChatMessage"}},"temperature":{"type":"number","minimum":0,"maximum":2},"max_tokens":{"type":"integer","minimum":1,"maximum":100000,"description":"The selected model may impose a lower output limit."}}},"ChatMessage":{"type":"object","required":["role","content"],"properties":{"role":{"type":"string","enum":["system","user","assistant"]},"content":{"type":"string","maxLength":100000}}},"ChatCompletionResponse":{"type":"object","required":["id","object","model","choices"],"properties":{"id":{"type":"string"},"object":{"type":"string","example":"chat.completion"},"created":{"type":"integer"},"model":{"type":"string"},"choices":{"type":"array","items":{"$ref":"#\/components\/schemas\/ChatChoice"}},"usage":{"$ref":"#\/components\/schemas\/TokenUsage"}}},"ChatChoice":{"type":"object","properties":{"index":{"type":"integer"},"message":{"$ref":"#\/components\/schemas\/ChatMessage"},"finish_reason":{"type":["string","null"]}}},"TokenUsage":{"type":"object","properties":{"prompt_tokens":{"type":"integer"},"completion_tokens":{"type":"integer"},"total_tokens":{"type":"integer"}}},"Error":{"oneOf":[{"$ref":"#\/components\/schemas\/OperationError"},{"$ref":"#\/components\/schemas\/MiddlewareError"}]},"OperationError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["message","type","code"],"properties":{"message":{"type":"string"},"type":{"type":"string"},"code":{"type":["string","integer","null"]},"details":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}}}}},"MiddlewareError":{"type":"object","required":["message"],"properties":{"message":{"type":"string"}},"additionalProperties":true},"ClaudeMessagesRequest":{"type":"object","required":["model","max_tokens","messages"],"properties":{"model":{"type":"string","minLength":1,"maxLength":160,"enum":["Jurassic-2","Claude Fable 5.1","claude-opus-5-5","claude-sonnet-5-5","claude-haiku-5-5","Claude Opus 5","Claude Fable 5","Claude Mythos 5","Claude Sonnet 5","Claude Opus 4.8","Claude Haiku 4.5","command-a-plus-05-2026","command-a-reasoning-08-2025","command-a-vision-07-2025","command-a-translate-08-2025","embed-v5.0-pro","embed-v5.0-fast","rerank-v5.0-pro","rerank-v5.0-fast","Command R","Command R+","Embed","Rerank","deepseek-flash","DeepSeek V4","GLM-5.3","glm-5.3-flashx","GLM-5.3 Flash","GLM-4.7","kimi-k3.1-pro","kimi-k3.1-pro-highspeed","Kimi K3","Kimi K2.7 Code","Kimi K2.6","Kimi K2.5","Astra 6","gpt-6.1-sol","gpt-6.1-terra","gpt-6-luna","GPT-5.6 Sol","GPT-5.6 Terra","GPT-5.6 Luna","GPT-5.5","GPT-5.4","GPT-5.4 mini","GPT-5.4 nano","qwen3.8-max","qwen3.8-flash","qwen3.8-omni-flash","qwen3.7-plus","Qwen3.8","Qwen3 Coder Next","Qwen3-VL"]},"max_tokens":{"type":"integer","minimum":1,"maximum":100000},"messages":{"type":"array","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":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string"}},"additionalProperties":true}}]},"stream":{"type":"boolean","default":false},"temperature":{"type":"number","minimum":0,"maximum":1},"top_p":{"type":"number","minimum":0,"maximum":1},"top_k":{"type":"integer","minimum":0,"maximum":100000},"stop_sequences":{"type":"array","items":{"type":"string"}},"tools":{"type":"array","items":{"type":"object","additionalProperties":true}},"tool_choice":{"type":"object","additionalProperties":true},"thinking":{"type":"object","additionalProperties":true},"metadata":{"type":"object","additionalProperties":true},"output_config":{"type":"object","additionalProperties":true},"service_tier":{"type":"string"}},"additionalProperties":true},"ClaudeMessage":{"type":"object","required":["type","content"],"properties":{"id":{"type":"string"},"type":{"const":"message"},"role":{"const":"assistant"},"content":{"type":"array","items":{"type":"object","required":["type"],"properties":{"type":{"type":"string","maxLength":80}},"additionalProperties":true}},"model":{"type":"string"},"stop_reason":{"type":["string","null"]},"usage":{"type":"object","properties":{"input_tokens":{"type":"integer"},"output_tokens":{"type":"integer"}},"additionalProperties":true}},"additionalProperties":true},"ClaudeError":{"type":"object","required":["type","error"],"properties":{"type":{"const":"error"},"error":{"type":"object","required":["type","message"],"properties":{"type":{"type":"string"},"message":{"type":"string"}}}}}},"responses":{"BadRequest":{"description":"Invalid request body or parameter.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"Unauthorised":{"description":"Missing or invalid bearer API key.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"Forbidden":{"description":"The key lacks the required inference scope or account access.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"RateLimited":{"description":"Application throttle or temporary upstream traffic control.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"ServerError":{"description":"The service could not return a usable completion.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}}