Skip to content
VexAPI Legacy API Reference

Legacy API (/api/v1)

These endpoints keep working for existing integrations, but new projects should use the v1 platform API, which is compatible with the OpenAI and Anthropic SDKs.

Base URL

https://api.arioron.com/api/v1

Quick Start (cURL)

curl -X POST "https://api.arioron.com/api/v1/ai/generate" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "perceptix-vex-amber-2.0", "prompt": "Hello"}'

Quick Start (Python)

import requests

response = requests.post(
    "https://api.arioron.com/api/v1/ai/generate",
    headers={"X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json"},
    json={"model": "perceptix-vex-amber-2.0", "prompt": "Hello"}
)
print(response.json())

Authentication

Pass your API key in the X-API-Key request header. Keys are created from the Dashboard.

X-API-Key: ar_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
401 — Missing API key
403 — Invalid / inactive key

Models

Use the model field with one of these IDs in AI requests.

Model ID Multimodal
perceptix-vex-amber-2.0 Yes
perceptix-vex-amber-latest Yes
photon-lite-latest Yes

AI Generation

POST /api/v1/ai/generate

Single-turn text generation with optional tool calling and safety settings.

Request Body

{
 "model": "perceptix-vex-amber-2.0",
 "prompt": "Your prompt",
 "system_prompt": "optional",

                "enable_tools": true,
 "tools": ["web_search", "calculate"],
 "safety_harassment": "BLOCK_NONE",

                "safety_hate": "BLOCK_NONE",
 "safety_sexual": "BLOCK_NONE",
 "safety_dangerous": "BLOCK_NONE"
}

Response

{"model", "response", "tool_calls", "finish_reason"}

POST /api/v1/ai/stream

Streaming text generation via SSE. Same body as /ai/generate. Returns token-by-token via Server-Sent Events.

Response

SSE stream: data: {"token": "..."} ... data: {"done": true}

POST /api/v1/ai/generate-with-tools

Multi-turn generation with automatic tool calling. Tools are executed server-side and the final answer is returned.

Request Body

{
 "model": "perceptix-vex-amber-2.0",
 "messages": [{"role": "user", "content": "Who is the CEO of
                Tesla?"}],
 "tools": null,
 "temperature": 0.7,
 "top_p": 1.0,
 "max_tokens": 2048
}
POST /api/v1/ai/stream-with-tools

Streaming generation with tool calls (SSE). Same body as generate-with-tools. Returns tool call events and text chunks.

POST /api/v1/responses

Fully agentic endpoint: multi-step reasoning, automatic tool execution (up to 10 iterations). Supports streaming (SSE) or JSON.

Request Body

{
 "model": "perceptix-vex-amber-2.0",
 "messages": [{"role": "user", "content": "Compare weather in
                Tokyo and London"}],
 "tools": null,
 "temperature": 0.7,
 "max_tokens": 2048,
 "system_prompt":
                "...",
 "stream": true
}

Response

SSE: event: tool_call / data: {"token": "..."} / data: {"done": true}. JSON: {"model", "response", "tool_calls", "finish_reason"}

GET /api/v1/ai/tools/available

Returns the list of all available tools for AI tool calling, including name, description, and syntax.

Response

{"tools": [{"name": "web_search", "description": "...", "syntax": "..."}]}

GET /api/v1/search/news

News articles about a topic, newest first. Query params: q (required), limit, time_range (day, week, month), region, safesearch.

Response

{"query": "...", "results": [{"title": "...", "url": "...", "source": "BBC", "published": "2026-10-04T09:12:00+00:00", "snippet": "...", "image": "..."}]}

GET /api/v1/search/images

Image search. Query params: q (required), limit, safesearch.

Response

{"query": "...", "results": [{"title": "...", "image_url": "...", "thumbnail_url": "...", "page_url": "...", "source": "..."}]}

GET /api/v1/search/autocomplete

Autocomplete suggestions. Query params: q (required).

Response

{"query": "...", "suggestions": [...]}

GET / POST /api/v1/news

Headlines from major publishers. GET ?q=topic searches news; ?category= (latest, technology, ai, business, world, general) returns one section; no params returns every section. limit, offset and keywords (comma-separated filter) apply to all. POST {"feed_urls": [...up to 10 RSS/Atom URLs], "keywords": ["ai"], "limit": 20, "offset": 0} merges feeds you choose.

Response

{"Latest": [...], "Technology": [...], ...} or {"category": "technology", "results": [...]} or {"count": n, "results": [...]}

Web Tools

POST /api/v1/tools/scrape

Scrape webpage content with optional link and image extraction.

Request Body

{"url": "https://example.com", "extract_links": true, "extract_images": false}
POST /api/v1/tools/extract-article

Extract clean article content (title, author, text) from a URL.

Request Body

{"url": "https://example.com/article"}
POST /api/v1/tools/metadata

Get page metadata including Open Graph, Twitter Card, and other meta tags.

Request Body

{"url": "https://example.com"}
POST /api/v1/tools/check-url

Check URL status, availability, and response headers.

Request Body

{"url": "https://example.com"}
POST /api/v1/tools/web-search

Perform a web search (convenience endpoint for tool use).

Request Body

{"query": "search terms", "limit": 10, "engines": ["google"]}

Code & Math

POST /api/v1/tools/code/execute

Execute Python code in a sandboxed environment (like OpenAI Code Interpreter).

Request Body

{"code": "print(2 + 2)", "timeout": 30}

Response

{"output": "4", "error": null, "execution_time": 0.01}

POST /api/v1/tools/code/validate

Validate Python code syntax without executing it.

Request Body

{"code": "def foo(): return 42"}

Response

{"valid": true, "errors": []}

POST /api/v1/tools/calculator/eval

Evaluate a mathematical expression safely.

Request Body

{"expression": "sqrt(144) + 3^2"}

Response

{"result": 21.0, "expression": "sqrt(144) + 3^2"}

POST /api/v1/tools/calculator/convert

Convert between units (length, weight, temperature, etc.).

Request Body

{"value": 100, "from_unit": "celsius", "to_unit": "fahrenheit"}

Response

{"result": 212.0, "from": "100 celsius", "to": "212.0 fahrenheit"}

Utility Endpoints

POST /api/v1/tools/weather

Current conditions and forecast. location takes a place name ("Paris", "Portland, Maine") or "lat,lon". Optional: units (metric or imperial), days (0-16, default 3), hours (0-48 hourly forecast).

Request Body

{"location": "Tokyo", "units": "metric", "days": 3}

Response

{"success": true, "location": {"name": "Tokyo", "country": "Japan", ...}, "units": {"temperature": "°C", ...}, "current": {"temperature": 17.9, "feels_like": 18.6, "condition": "partly cloudy", "humidity": 79, "wind_speed": 9.4, ...}, "daily": [{"date": "2026-10-04", "temperature_max": 22.1, "temperature_min": 15.3, "precipitation_probability": 10, ...}]}

GET / POST /api/v1/tools/time/current

Get current time in UTC or a specific timezone.

Request Body

{"timezone": "America/New_York"}

Response

{"utc": "...", "local": "...", "timezone": "America/New_York"}

POST /api/v1/tools/time/diff

Calculate the difference between two ISO timestamps.

Request Body

{"time1": "2024-01-01T00:00:00Z", "time2": "2024-06-15T12:30:00Z"}

Response

{"days": 166, "hours": 12, "minutes": 30, ...}

POST /api/v1/tools/file/create

Create a text file in the sandbox.

Request Body

{"filename": "notes.txt", "content": "Hello World", "encoding": "utf-8"}

Response

{"filename": "notes.txt", "size": 11, "created": true}

POST /api/v1/tools/file/read

Read a text file from the sandbox.

Request Body

{"filename": "notes.txt", "encoding": "utf-8"}

Response

{"filename": "notes.txt", "content": "Hello World", "size": 11}

Public Services

GET /api/v1/services/weather

Weather by query string. Params: q (location, required), units, days, hours. Same response as the weather tool above.

Response

{"success": true, "location": {...}, "current": {...}, "daily": [...]}

GET /api/v1/services/geolocation

IP geolocation lookup. Query param: ip (optional, defaults to caller IP).

Response

{"ip": "...", "country": "...", "city": "...", "lat": ..., "lon": ...}

Rate Limits

Limits are enforced per API key. Your tier defines RPM (requests/minute) and RPD (requests/day). Per-model overrides take precedence. Purchased credits add to your daily limit via rpd_bonus.

429 — Rate limit exceeded (RPM or RPD)

Error Codes

Code Meaning
400 Bad request — missing or invalid body/params
401 API key missing in X-API-Key header
403 Invalid or inactive API key
404 Model not found or inactive
429 Rate limit exceeded (RPM or RPD)
500 Internal server error