All Guides
API

🔌 API Integration Guide

Complete guide to integrating Vigthoria APIs into your applications.

20 min read Developer Guide

Authentication

All API requests require authentication using your API key.

Getting Your API Key

  1. Go to Dashboard → API Settings
  2. Click "Generate New Key"
  3. Copy and store your key securely

Using Your API Key

Include your key in the Authorization header:

Authorization: Bearer YOUR_API_KEY
Security Warning

Never expose your API key in client-side code, public repositories, or logs. Use environment variables and server-side proxies.

Base URL & Endpoints

All API requests use the base URL:

https://api.vigthoria.io/v1

Core Endpoints

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

Making Requests

Chat Completions

cURL
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
  }'
Python
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"])
JavaScript (Node.js)
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);

Request Parameters

Required Parameters

Optional Parameters

Temperature Guide
  • 0.0-0.3 — Deterministic, factual responses
  • 0.4-0.7 — Balanced creativity and consistency
  • 0.8-1.2 — Creative, varied responses
  • 1.3-2.0 — Highly creative, unpredictable

Response Format

{
  "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
  }
}

Finish Reasons

Error Handling

The API returns standard HTTP status codes:

Error Response Format

{
  "error": {
    "message": "Invalid API key provided",
    "type": "authentication_error",
    "code": "invalid_api_key"
  }
}

Retry Strategy

Python Example
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

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