API Integrations

OpenAI & Anthropic Compatible APIs

UMVA AI provides both an OpenAI-compatible chat/completions API and an Anthropic-compatible messages API. Use whichever format your tool supports — no adapter needed. All requests are non-thinking by default; enable thinking with the thinking parameter.

API Endpoints & Authentication

Connect to UMVA AI from any tool, library, or editor

Base URLs
https://umva.net
https://umva.us
Retry on network error or 5xx status.
Authentication
Authorization: Bearer umva_ai_YOUR_API_KEY_HERE
x-api-key: umva_ai_YOUR_API_KEY_HERE
Generate API keys from your UMVA dashboard. The same key works for both auth methods.

List Available Models

Fetch the list of models you can use — both endpoints return the same model catalog

OpenAI-compatible (GET)

Returns a standard OpenAI models list

GET https://umva.net/v1/models
GET https://umva.us/v1/models
curl https://umva.net/v1/models \
-H "Authorization: Bearer ${UMVA_API_KEY}"
Anthropic-compatible (GET)

Returns models in Anthropic format

GET https://umva.net/v1/models
GET https://umva.us/v1/models
curl https://umva.net/v1/models \
-H "Authorization: Bearer ${UMVA_API_KEY}"

Both the OpenAI SDK base_url and the Anthropic SDK base_url point to https://umva.net . Available model IDs include umva-code-pro, umva-code-architect, umva-code-fast

OpenAI-Compatible API

Drop-in replacement for OpenAI's /v1/chat/completions — works with any OpenAI SDK or tool. Compatible with DeepSeek, OpenAI, and any SDK designed for the OpenAI protocol.

Simple cURL — Non-thinking (Default)

At UMVA, requests are non-thinking by default. No extra parameter needed.

curl -L -X POST https://umva.net/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Authorization: Bearer ${UMVA_API_KEY}" \
-d '{
"model": "umva-code-fast",
"messages": [
{
"content": "You are a helpful assistant",
"role": "system"
},
{
"content": "Hi",
"role": "user"
}
],
"max_tokens": 4096,
"response_format": {"type": "text"},
"stop": null,
"stream": false,
"stream_options": null,
"temperature": 1,
"top_p": 1,
"tools": null,
"tool_choice": "none",
"logprobs": false,
"top_logprobs": null
}'
Simple cURL — With Thinking / Reasoning Enabled

Add the thinking parameter to enable chain-of-thought reasoning (DeepSeek-style extended thinking)

curl -L -X POST https://umva.net/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Authorization: Bearer ${UMVA_API_KEY}" \
-d '{
"model": "umva-code-pro",
"messages": [
{
"content": "You are a helpful assistant",
"role": "system"
},
{
"content": "Solve a complex math problem step by step",
"role": "user"
}
],
"thinking": {
"type": "enabled"
},
"reasoning_effort": "high",
"max_tokens": 4096,
"response_format": {"type": "text"},
"stop": null,
"stream": false,
"stream_options": null,
"temperature": 1,
"top_p": 1,
"tools": null,
"tool_choice": "none",
"logprobs": false,
"top_logprobs": null
}'
thinking.type: "enabled"reasoning_effort: "high" | "max"
Python (OpenAI SDK)
from openai import OpenAI
client = OpenAI(
base_url="https://umva.net",
api_key=umva_ai_YOUR_API_KEY_HERE
)
# Non-thinking (default)
response = client.chat.completions.create(
model=umva-code-fast,
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello!"}
]
)
print(response.choices[0].message.content)
# With thinking enabled
response = client.chat.completions.create(
model=umva-code-fast,
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Solve this step by step"}
],
extra_body={
"thinking": {"type": "enabled"},
"reasoning_effort": "high"
}
)
print(response.choices[0].message.content)
Node.js (OpenAI SDK)
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://umva.net",
apiKey: "umva_ai_YOUR_API_KEY_HERE"
});
// Non-thinking (default)
const response = await client.chat.completions.create({
model: "umva-code-fast",
messages: [
{ role: "system", content: "You are a helpful assistant." },
{ role: "user", content: "Hello!" }
]
});
console.log(response.choices[0].message.content);
// With thinking enabled
const response2 = await client.chat.completions.create({
model: "umva-code-fast",
messages: [
{ role: "system", content: "You are a helpful assistant." },
{ role: "user", content: "Solve this step by step" }
],
thinking: { type: "enabled" },
reasoning_effort: "high"
});
console.log(response2.choices[0].message.content);

Also available via the fallback endpoint: https://umva.us/v1/chat/completions

Anthropic-Compatible API

Drop-in replacement for Anthropic's /v1/messages API — works with any Anthropic SDK or tool

Simple cURL — Non-thinking (Default)

At UMVA, requests are non-thinking by default. No extra parameter needed.

curl https://umva.net/v1/messages \
-H "Content-Type: application/json" \
-H "x-api-key: ${UMVA_API_KEY}" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "umva-code-pro",
"max_tokens": 4096,
"messages": [
{"role": "user", "content": "Hello!"}
]
}'
Simple cURL — With Thinking / Extended Thinking

Add the thinking parameter to enable chain-of-thought reasoning

curl https://umva.net/v1/messages \
-H "Content-Type: application/json" \
-H "x-api-key: ${UMVA_API_KEY}" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "umva-code-pro",
"max_tokens": 8192,
"thinking": {"type": "enabled", "budget_tokens": 4096},
"messages": [
{"role": "user", "content": "Solve a complex math problem step by step"}
]
}'
thinking.type: "enabled"thinking.budget_tokens: <max_tokens_for_thinking>max_tokens must be > budget_tokens
Python (Anthropic SDK)
from anthropic import Anthropic
client = Anthropic(
base_url="https://umva.net",
api_key=umva_ai_YOUR_API_KEY_HERE
)
# Non-thinking (default)
response = client.messages.create(
model=umva-code-fast,
max_tokens=4096,
messages=[
{"role": "user", "content": "Hello!"}
]
)
print(response.content[0].text)
# With thinking enabled
response = client.messages.create(
model=umva-code-fast,
max_tokens=8192,
thinking={"type": "enabled", "budget_tokens": 4096},
messages=[
{"role": "user", "content": "Walk through the solution step by step"}
]
)
for block in response.content:
if block.type == "thinking":
print(f"Thinking: {block.thinking}")
elif block.type == "text":
print(f"Answer: {block.text}")
Node.js (Anthropic SDK)
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
baseURL: "https://umva.net",
apiKey: "umva_ai_YOUR_API_KEY_HERE"
});
// Non-thinking (default)
const response = await client.messages.create({
model: "umva-code-fast",
max_tokens: 4096,
messages: [
{ role: "user", content: "Hello!" }
]
});
console.log(response.content[0].text);
// With thinking enabled
const response2 = await client.messages.create({
model: "umva-code-fast",
max_tokens: 8192,
thinking: { type: "enabled", budget_tokens: 4096 },
messages: [
{ role: "user", content: "Walk through the solution step by step" }
]
});
for (const block of response2.content) {
if (block.type === "thinking") {
console.log("Thinking:", block.thinking);
} else if (block.type === "text") {
console.log("Answer:", block.text);
}
}

Also available via the fallback endpoint: https://umva.us/v1/messages

API Endpoint Reference

All available endpoints at a glance

APIMethodEndpointAuthPurpose
OpenAIGET/v1/modelsBearerList available models
OpenAIPOST/v1/chat/completionsBearerChat completions (OpenAI format)
OpenAIPOST/v1/completionsBearerLegacy completions (OpenAI format)
AnthropicPOST/v1/messagesx-api-keyMessages (Anthropic format)

Request Body Parameters

Full reference for the /v1/chat/completions request body

ParameterTypeRequiredDefaultDescription
modelstringYes-ID of the model to use. Options: umva-code-pro, umva-code-architect, umva-code-fast
messagesobject[]Yes-A list of messages comprising the conversation. Each message has role (system, user, assistant, tool), content (string, the message text), and optional name (participant identifier, a-z, A-Z, 0-9, dashes, underscores, max 64 chars).
thinkingobject | nullNonullControls thinking mode. Object with type ("enabled" or "disabled". At UMVA, default is disabled.)
thinking.typestringNo"disabled"Values: "enabled" (enable chain-of-thought reasoning), "disabled" (standard response).
reasoning_effortstringNo"high"Controls reasoning effort. Values: "high", "max". "low" and "medium" map to "high". "xhigh" maps to "max". For complex agent requests (Claude Code, OpenCode), effort is automatically set to "max".
max_tokensint | nullNomodel defaultMaximum number of tokens to generate. Total length of input + generated tokens limited by model context length.
response_formatobject | nullNo{"type": "text"}Specifies output format. "text" for plain text, "json_object" for valid JSON. When using json_object, you must instruct the model to produce JSON via system/user message.
stopstring | string[] | nullNonullUp to 16 sequences where the API will stop generating further tokens. Pass null for no custom stop.
streambool | nullNofalseIf true, partial message deltas are sent as SSE. Stream terminated by data: [DONE].
stream_optionsobject | nullNonullOptions for streaming. Only set when stream: true. Use {"include_usage": true} to get token usage before [DONE].
temperaturenumber | nullNo1Sampling temperature, 0 to 2. Higher values (e.g. 0.8) make output more random, lower values (e.g. 0.2) more deterministic. Alter this or top_p, not both.
top_pnumber | nullNo1Nucleus sampling. Consider tokens with top_p probability mass. 0.1 means top 10% probability mass. Alter this or temperature, not both.
toolsobject[] | nullNonullList of tools the model may call. Currently only "function" type supported. Each tool has type (function) and function object with name, description, parameters (JSON Schema). Max 128 functions.
tool_choicestring | object | nullNo"none" (no tools) / "auto" (tools present)"none": model won't call tools, "auto": model decides, "required": model must call a tool, or {"type": "function", "function": {"name": "my_function"}}: force specific tool.
logprobsbool | nullNofalseIf true, returns log probabilities of each output token in message.content.
top_logprobsint | nullNonullInteger 0-20 specifying number of most likely tokens to return at each position with log probabilities. Requires logprobs: true.
Deprecated / No Longer Supported
frequency_penalty-No-deprecated This parameter is no longer supported. Passing it will have no effect.
presence_penalty-No-deprecated This parameter is no longer supported. Passing it will have no effect.
Additional Optional Parameters
user_idstringNonullCustom user identifier. Allowed chars: [a-zA-Z0-9\-_], max 512 chars. Used for content safety review, KVCache isolation, and scheduling isolation. Do not include user privacy information.

At UMVA, all requests are non-thinking by default. You must explicitly pass thinking: {"type": "enabled"} to enable reasoning. This differs from providers where thinking is enabled by default.

Works With Your Workflow

OpenAI and Anthropic compatible — UMVA AI fits right in. Start integrating today.