AI Features

Documents & Media

Beyond text, VectorAxis fronts the multimodal AI APIs — audio (transcription, translation, text-to-speech), image generation and editing, files, async batches, and the Responses API — through the same gateway, the same one-line auth, and the same billing, limits, and logs as your chat traffic. The endpoints are OpenAI-compatible, so an OpenAI SDK works by just pointing it at VectorAxis.

python
from openai import OpenAI

# Point any OpenAI SDK at VectorAxis and use a virtual key as the api_key.
client = OpenAI(base_url="https://api.vectoraxis.ai/v1", api_key="vk-1a2b3c4d5e6f7a8b")
Base URL & paths. The endpoint tables below show the full HTTP path, including the /v1 prefix, for direct HTTP clients.
OpenAI SDK: set base_url to https://api.vectoraxis.ai/v1 (with /v1) — the SDK appends the endpoint, so you call /audio/transcriptions, not the full path.
Direct HTTP: use https://api.vectoraxis.ai as the base (without /v1) and request the full path shown below, e.g. https://api.vectoraxis.ai/v1/audio/transcriptions.
Why it matters
  • One integration for everything. Transcribe a call, generate an image, and run a chat — all through one gateway and one key, instead of wiring up each provider separately.
  • Pick the best provider per task. Use OpenAI for images, a specialist like ElevenLabs for lifelike speech, or Sarvam for Indic-language audio — without changing how your app calls them.
  • Unified controls. The same virtual keys, spend caps, rate limits, and observability that govern chat also cover audio, images, and files.
How to authenticate

Document endpoints accept either a BYOK virtual key (Authorization: Bearer vk-…) or direct provider credentials (x-provider + x-api-key).

PLATFORM-mode keys don’t work here. A platform (credit-mode) key on any audio, image, files, batches, or Responses call is rejected with a 400 — those are limited to chat and prompt completions. Use a BYOK key or direct credentials for media. See Platform Keys.
Supported providers by modality

Each modality is backed by the providers below. A request is routed to the provider of the key (or the x-provider you send); using an unsupported provider for a modality returns a clear error.

ModalityProviders
Audio — transcription (speech → text)OpenAI, Groq, Sarvam, ElevenLabs
Audio — translation (speech → English text)OpenAI, Sarvam
Audio — text-to-speechOpenAI, ElevenLabs, Sarvam
Streaming transcriptionOpenAI
Images — generation & editingOpenAI
FilesOpenAI
BatchesOpenAI
Responses APIOpenAI
The provider set is configuration-driven and grows over time. Audio uses provider-specific adapters (OpenAI, ElevenLabs, Sarvam), and any other OpenAI-compatible provider — such as Groq for Whisper transcription — is served through the OpenAI-format path. Images, files, batches, and Responses are currently OpenAI-only.

Audio

Three operations, all OpenAI-compatible. Transcription and translation take an audio file (multipart upload); text-to-speech takes text and returns audio.

MethodPathWhat it does
POST/v1/audio/transcriptionsTurn speech into text in its original language. Optional streaming (OpenAI).
POST/v1/audio/translationsTurn speech in another language into English text.
POST/v1/audio/speechTurn text into spoken audio (choose a voice and format).
Provider notes. OpenAI covers all three (and is the one that streams transcription). ElevenLabs does transcription and high-quality speech. Sarvam covers all three with strong Indic-language support. Groq handles fast Whisper transcription. Uploads follow the provider’s size limit (OpenAI-compatible providers default to 25 MB).
python
# Transcription  ->  POST /v1/audio/transcriptions
client.audio.transcriptions.create(model="whisper-1", file=open("call.mp3", "rb"))

# Translation (to English)  ->  POST /v1/audio/translations
client.audio.translations.create(model="whisper-1", file=open("call-es.mp3", "rb"))

# Text-to-speech  ->  POST /v1/audio/speech
client.audio.speech.create(model="tts-1", voice="alloy", input="Hello there!")

Images

Generate an image from a prompt, or edit an existing one (multipart upload). OpenAI.

MethodPathWhat it does
POST/v1/images/generationsCreate images from a text prompt (size, quality, count).
POST/v1/images/editsEdit or extend an uploaded image with a prompt and optional mask.
python
# Generate  ->  POST /v1/images/generations
client.images.generate(model="gpt-image-1", prompt="a red bicycle", size="1024x1024")

# Edit  ->  POST /v1/images/edits
client.images.edit(model="gpt-image-1", image=open("photo.png", "rb"), prompt="add a sunset")

Files

Upload and manage files used by batches and the Responses API. OpenAI.

MethodPathWhat it does
POST/v1/filesUpload a file (multipart). Returns a vxf-… id.
GET/v1/filesList your files.
GET/v1/files/{id}Fetch a file’s metadata.
DELETE/v1/files/{id}Delete a file.
GET/v1/files/{id}/contentDownload the file’s raw content.
Stable vxf-… file IDs. VectorAxis gives every upload its own vxf-* id and maps it to the provider’s file id internally. You always use the vxf-* id — in batches and Responses too — and never see the underlying provider id.
python
# Upload  ->  POST /v1/files   (returns a vxf-… id)
f = client.files.create(file=open("requests.jsonl", "rb"), purpose="batch")

client.files.list()                       # GET    /v1/files
client.files.retrieve(f.id)               # GET    /v1/files/{id}
client.files.content(f.id)                # GET    /v1/files/{id}/content
client.files.delete(f.id)                 # DELETE /v1/files/{id}

Batches

Run a large set of requests asynchronously at lower cost: upload a file of requests, start a batch, poll it, and download the results. OpenAI.

MethodPathWhat it does
POST/v1/batchesStart a batch from an uploaded input file (vxf-…).
GET/v1/batchesList batches.
GET/v1/batches/{id}Check a batch’s status and progress.
POST/v1/batches/{id}/cancelCancel an in-progress batch.
GET/v1/batches/{id}/outputDownload the batch results once complete.
python
# Start  ->  POST /v1/batches
b = client.batches.create(input_file_id="vxf-...", endpoint="/v1/chat/completions",
                          completion_window="24h")

client.batches.list()                     # GET  /v1/batches
client.batches.retrieve(b.id)             # GET  /v1/batches/{id}
client.batches.cancel(b.id)               # POST /v1/batches/{id}/cancel
# Results:  GET /v1/batches/{id}/output

Responses API

The stateful Responses API — create a response, retrieve or delete it, and inspect its input items. OpenAI.

MethodPathWhat it does
POST/v1/responsesCreate a response.
GET/v1/responses/{id}Retrieve a previously created response.
DELETE/v1/responses/{id}Delete a stored response.
GET/v1/responses/{id}/input_itemsList the input items that produced a response.
python
# Create  ->  POST /v1/responses
r = client.responses.create(model="gpt-4o", input="Write a haiku about the sea.")

client.responses.retrieve(r.id)           # GET    /v1/responses/{id}
client.responses.input_items.list(r.id)   # GET    /v1/responses/{id}/input_items
client.responses.delete(r.id)             # DELETE /v1/responses/{id}
Getting started: point your OpenAI SDK’s base_url at VectorAxis, use a BYOK virtual key (or x-provider + x-api-key), and call the audio, image, files, batch, or Responses endpoint you need. Everything lands in your request logs alongside your chat traffic.