Complete guide to integrating Vigthoria APIs into your applications.
All API requests require authentication using your API key.
Include your key in the Authorization header:
Authorization: Bearer YOUR_API_KEY
Never expose your API key in client-side code, public repositories, or logs. Use environment variables and server-side proxies.
All API requests use the base URL:
https://api.vigthoria.io/v1
| Method | Endpoint | Description |
|---|---|---|
| POST | /chat/completions |
Generate AI chat responses |
| POST | /completions |
Text completion (non-chat) |
| GET | /models |
List available models |
| POST | /embeddings |
Generate text embeddings |
| GET | /usage |
Get API usage statistics |
curl https://api.vigthoria.io/v1/chat/completions \
-H "Authorization: Bearer $VIGTHORIA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "vigthoria-reasoning-v2",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Explain quantum computing"}
],
"max_tokens": 1000,
"temperature": 0.7
}'
import requests
import os
response = requests.post(
"https://api.vigthoria.io/v1/chat/completions",
headers={
"Authorization": f"Bearer {os.environ['VIGTHORIA_API_KEY']}",
"Content-Type": "application/json"
},
json={
"model": "vigthoria-reasoning-v2",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Explain quantum computing"}
],
"max_tokens": 1000,
"temperature": 0.7
}
)
result = response.json()
print(result["choices"][0]["message"]["content"])
const response = await fetch('https://api.vigthoria.io/v1/chat/completions', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.VIGTHORIA_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'vigthoria-reasoning-v2',
messages: [
{ role: 'system', content: 'You are a helpful assistant.' },
{ role: 'user', content: 'Explain quantum computing' }
],
max_tokens: 1000,
temperature: 0.7
})
});
const result = await response.json();
console.log(result.choices[0].message.content);
model — Model ID (e.g., "vigthoria-reasoning-v2")messages — Array of message objects with role and contentmax_tokens — Maximum tokens to generate (default: 1024)temperature — Randomness 0-2 (default: 1.0)top_p — Nucleus sampling 0-1 (default: 1.0)stream — Enable streaming responses (default: false)stop — Stop sequences (array of strings)presence_penalty — Penalize repeated topics -2 to 2frequency_penalty — Penalize repeated tokens -2 to 2{
"id": "chatcmpl-abc123",
"object": "chat.completion",
"created": 1705432800,
"model": "vigthoria-reasoning-v2",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Quantum computing is a revolutionary..."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 42,
"completion_tokens": 128,
"total_tokens": 170
}
}
stop — Natural completion or hit stop sequencelength — Reached max_tokens limitcontent_filter — Content was filteredThe API returns standard HTTP status codes:
200 — Success400 — Bad request (invalid parameters)401 — Unauthorized (invalid API key)429 — Rate limited (too many requests)500 — Server error{
"error": {
"message": "Invalid API key provided",
"type": "authentication_error",
"code": "invalid_api_key"
}
}
import time
import requests
def api_call_with_retry(url, headers, data, max_retries=3):
for attempt in range(max_retries):
try:
response = requests.post(url, headers=headers, json=data)
if response.status_code == 429:
wait_time = 2 ** attempt # Exponential backoff
time.sleep(wait_time)
continue
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
if attempt == max_retries - 1:
raise
time.sleep(2 ** attempt)
raise Exception("Max retries exceeded")
Rate limits vary by subscription tier:
Rate limit headers are included in responses:
X-RateLimit-Limit: 60 X-RateLimit-Remaining: 45 X-RateLimit-Reset: 1705433000