One base URL. Provider-scoped keys.
Set the base URL and the matching Jovethra key in your OpenAI client. Always keep the key on the server.
curl https://api.jovethra.xyz/v1/responses \
-H "Authorization: Bearer $JOVETHRA_GPT_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.6-sol",
"store": false,
"input": "Summarize this release note in one sentence."
}'JOVETHRA_GPT_KEY ou JOVETHRA_CLAUDE_KEYResponses API
Use POST /v1/responses for new GPT integrations. Text, structured output, tools, and usage accounting follow the OpenAI-compatible contract.
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.JOVETHRA_GPT_KEY,
baseURL: "https://api.jovethra.xyz/v1",
});
const response = await client.responses.create({
model: "gpt-5.6-sol",
store: false,
input: "List three concise naming ideas.",
});
console.log(response.output_text);modelPublic model identifier.requiredinputText or structured input.requiredstoreEnforced as false by the gateway.falsestreamEnables server-sent events.optionalChat Completions
Existing clients can keep using POST /v1/chat/completions. This path is available for all six public models.
const completion = await client.chat.completions.create({
model: "gpt-5.6-sol",
messages: [
{ role: "system", content: "Be concise and precise." },
{ role: "user", content: "Explain idempotency." },
],
});
console.log(completion.choices[0].message.content);Controlled function calling.
Declare tools with the standard tools field. The model proposes arguments; your application remains responsible for validating them and every side effect.
const response = await client.responses.create({
model: "gpt-5.6-sol",
input: "What is the weather in Paris?",
tools: [{
type: "function",
name: "get_weather",
description: "Get current weather for a city",
parameters: {
type: "object",
properties: { city: { type: "string" } },
required: ["city"],
},
}],
});Render output as it arrives.
Set stream: true. Consume the stream until completion; Chat Completions automatically requests usage in the stream.
const stream = await client.responses.create({
model: "gpt-5.6-sol",
input: "Write a two-line product description.",
stream: true,
});
for await (const event of stream) {
if (event.type === "response.output_text.delta") {
process.stdout.write(event.delta);
}
}A precise public contract.
Jovethra exposes only the models authorized by the presented key. Responses is available for GPT; Chat Completions covers GPT and Claude. Unpublished paths return unsupported_endpoint.
GET /v1/modelsLists only models authorized by the key.all keysPOST /v1/responsesText, streaming, structured output, and tools for Sol, Terra, and Luna.GPTPOST /v1/chat/completionsMessages, streaming, and usage for all six models.all modelsSSE streamingAvailable on Chat Completions and Responses for GPT.documentedTools / function callingAvailable on GPT; validate the exact Claude compatibility first.validate firstgpt-5.6-solgpt-5.6-terragpt-5.6-lunaclaude-fable-5claude-opus-5-thinkingclaude-sonnet-5-thinking- JSON request bodies only, limited to 4 MiB.
store=falseis enforced by the gateway.- Default output ceiling: 4,096 tokens.
- Images, audio, files, batch, fine-tuning, and Assistants are not part of the contract.
Visible limits, no automatic overage.
Input, output, and cached tokens are tracked separately. Plans also enforce request-rate and concurrency limits.
20M input · 1.25M output · 30M cache
45M input · 2.5M output · 60M cache
110M input · 6.25M output · 150M cache
Request rate30 / 60 / 120 requests per minute by plan.per keyConcurrency2 / 4 / 8 in-flight requests by plan.per keyModel unitsEach model consumes a different share of the quota.weightedSol 1.0xTerra 0.6xLuna 0.1xFable 2.0xOpus 1.0xSonnet 0.4xWhen a hard quota is reached, the request is rejected instead of triggering an automatic overage charge. Review usage in the portal.
Keep the integration predictable.
Production requires isolated secrets, explicit timeouts, and a retry policy that understands streaming.
Retry only when delivery is unambiguous.
HTTP errors use a stable Jovethra envelope with a public code and request reference. Internal provider details are never exposed.
invalid_requestFix the JSON. Do not retry unchanged.invalid_api_keyReplace the invalid, expired, or revoked key.model_not_allowedUse a model authorized for this key.invalid_requestReduce the request below 4 MiB.unsupported_media_typeSend application/json.rate_limit_exceededWait, then use bounded backoff.quota_exceededWait for renewal or change plan.service_busyHonor Retry-After, currently 1 second.service_unavailableRetry only if no response bytes were delivered.{
"error": {
"message": "The API request could not be completed.",
"type": "gateway_error",
"code": "service_unavailable",
"request_id": "jov_..."
}
}Support with the right context.
Report an issue from the customer portal. Include a request reference, never an API key, payment data, or a complete prompt.
For general questions and persistent incidents.