Console Dashboard
Quickstart
RevAI is a private AI API. Every request needs a bearer token created from the Dashboard. The base URL for all endpoints is below.
Base URL
https://revai.my.to
cURL example
curl https://revai.my.to/chat \
  -H "Authorization: Bearer rai-your-token" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "large",
    "messages": [{"role": "user", "content": "Hello"}]
  }'
Full endpoint map
Chat & Text
EndpointPurpose
POST /chatStreaming text generation (SSE)
GET /modelsMachine-readable model catalog (requires auth)
GET /healthLiveness check, no auth required
Audio
EndpointPurpose
POST /transcribeAudio → text, with diarization
POST /speechText → audio, binary response
POST /speech/streamText → audio, low-latency SSE chunks
GET /tonesList configured tone presets
GET /voicesList preset and custom voices
POST /voicesRegister a custom voice from a sample
DELETE /voices/{id}Remove a custom voice
Image Generation
EndpointPurpose
POST /image/blueprintDiagrams, wireframes, schematics
POST /image/illustrateMulti-image with 300+ art styles
POST /image/renderHigh-quality single image generation
POST /image/refineImage-to-image transformation
GET /image/optionsAll valid parameters and style lists
Document & Utility
EndpointPurpose
POST /embedText embeddings
POST /ocrOCR — extract text from PDFs/images
POST /moderateContent moderation scoring
Authentication
All API requests must include an Authorization header with a valid bearer token. Tokens are created and managed in the Dashboard.
Authorization: Bearer rai-xxxxxxxxxxxxxxxxxxxx
Token security
Treat tokens like passwords. Do not commit them to source control. Rotate compromised tokens immediately from the Dashboard.
ConditionResult
Missing header401 Missing API token
Invalid token401 Invalid or inactive token
Expired token401 Token expired
Disabled token401 Invalid or inactive token
POST /chat
Streaming text generation via Server-Sent Events. Responses arrive as data: lines terminated by [DONE].
Request body
ParameterDescription
modelstringoptional Model alias. Defaults to large. See Models for the full list.
messagesarrayrequired Conversation history. Each object: {role, content}. Roles: user, assistant, system.
Streaming response
: keep-alive

data: {"content": "Hello"}
data: {"content": "! How"}
data: {"content": " can I help?"}
data: [DONE]
JavaScript example
const resp = await fetch("https://revai.my.to/chat", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${token}`,
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    model: "large",
    messages: [{ role: "user", content: "Hello" }]
  })
});
const reader = resp.body.getReader();
const dec = new TextDecoder();
while (true) {
  const { done, value } = await reader.read();
  if (done) break;
  for (const line of dec.decode(value).split("\n")) {
    if (!line.startsWith("data: ")) continue;
    const chunk = line.slice(6);
    if (chunk === "[DONE]") break;
    process.stdout.write(JSON.parse(chunk).content);
  }
}
POST /transcribe
Transcribe audio files via multipart/form-data. Files over 24 MB are auto-chunked server-side.
Form fields
FieldDescription
filefilerequiredAudio file. Formats: mp3, wav, m4a, ogg, flac, webm.
modelstringoptionalDefault: transcribe. Options: transcribe, transcribe-rt, voice-pro.
languagestringoptionalISO 639-1 code e.g. en, fr. Auto-detected if omitted.
diarizebooleanoptionalLabel speakers. Returns segments array. Not supported with transcribe-rt.
context_biasstringoptionalComma-separated vocabulary hints, up to 100 terms.
timestamp_granularitiesstringoptionalsegment or word level timestamps.
curl https://revai.my.to/transcribe \
  -H "Authorization: Bearer rai-your-token" \
  -F "file=@recording.mp3" \
  -F "model=transcribe" \
  -F "diarize=true"
POST /speech
Text to speech. 8 tone presets, custom voice cloning, 5 output formats. Hard cap 40k characters per request. Use /speech/stream for low-latency SSE chunks.
Request body
ParameterDescription
inputstringrequiredText to speak. Max 40,000 chars. Best quality under ~300 words.
modelstringoptionalDefault: tts
tonestringoptionalPreset: neutral, warm, bright, calm, serious, urgent, narration, support
voice_idstringoptionalVoice ID from GET /voices. Overrides tone.
ref_audiostringoptionalBase64 audio for one-off voice cloning (5–25s ideal). Overrides tone and voice_id.
formatstringoptionalmp3 (default), wav, pcm, flac, opus
encodingstringoptionalbinary (default) or base64 JSON envelope
403 on /speech is not an auth failure
Speech runs content moderation upstream. A 403 means the text was rejected — check your input before rotating tokens.
Image Generation
Four models, all returning base64 image data over SSE. Check GET /image/options (requires auth) for the machine-readable list of all valid parameters. The Dashboard → Image tab has the full visual reference including all 300+ art styles.
Blueprint — POST /image/blueprint
Generates designs, diagrams, and structured visuals. Returns 1 image.
ParameterDescription
promptstringrequiredDescribe the diagram to generate
aspect_ratiostringoptional1:1 · 4:3 · 3:4 · 16:9 · 9:16
Illustrate — POST /image/illustrate
Generates images from descriptions with 300+ art styles, style blending, negative prompts, and guidance scale. Up to 40 images per call.
ParameterDescription
promptstringrequiredWhat to generate
negative_promptstringoptionalWhat to avoid
art_stylestringoptionalPrimary style. Full list at GET /image/options or Dashboard → Image.
art_style_mixstringoptionalSecondary style to blend with primary
shapestringoptionalSquare · Portrait · Landscape · Random
num_imagesintegeroptional2, 4, 6, 8, 12, 18, 24, 32, 40
guidancestringoptionaldefault(7) or 1–30. Higher = more prompt-adherent, lower = more creative.
Render — POST /image/render
Blueprint but with artistic design approaches. Quality may vary. Returns 1 image.
ParameterDescription
promptstringrequiredWhat to render
aspect_ratiostringoptional1:1 · 4:3 · 3:4 · 16:9 · 9:16 · 21:9 · 9:21
Refine — POST /image/refine
Render's image generation model repurposed for editing parts of an existing image as per your prompt.
ParameterDescription
promptstringrequiredHow to transform the image
imagestringrequiredBase64-encoded source image
image_mimestringoptionalimage/png (default) or image/jpeg
aspect_ratiostringoptionalauto · 1:1 · 1:2 · 2:1 · 2:3 · 3:2 · 9:16 · 16:9
SSE event format (all image endpoints)
data: {"type": "status", "message": "Preparing generation", "model": "rev-render-v1"}
data: {"type": "image", "index": 0, "model": "rev-render-v1", "format": "png", "data": "<base64>"}
data: {"type": "done", "count": 1}
data: [DONE]
POST /embed
Generate text embeddings for semantic search, retrieval, and clustering.
ParameterDescription
inputsarrayrequiredArray of strings to embed. Each truncated at 8k tokens.
modelstringoptionalembed (default) or codex-embed for code
POST /ocr
Extract text from PDFs and images with paragraph-level bounding boxes and structural block labels.
ParameterDescription
documentobjectrequiredObject with type (url or base64_image) and the corresponding url or image_url field.
modelstringoptionalscan (default, v4) or scan-legacy (v3)
POST /moderate
Content moderation scoring. Classifies toxicity, jailbreak attempts, and policy violations. Returns category scores.
ParameterDescription
inputsarrayrequiredArray of strings or conversation arrays to moderate
modelstringoptionalguard (default)
Voices
List, create, and delete custom voices for use with /speech.
EndpointDescription
GET /voicesList all voices. Optional query: ?limit=, ?offset=
POST /voicesRegister a voice. Fields: name, sample_audio (base64, 5–25s), optional languages, gender, tags
DELETE /voices/{id}Delete a voice by ID
Model list
Two ways to explore models: the machine-readable API endpoint and the interactive Dashboard. For per-model detail — aliases, rate limits, context, and code examples — click through to the model page.
GET /models — machine-readable catalog
curl https://revai.my.to/models \
  -H "Authorization: Bearer rai-your-token"
{
  "data": [
    { "id": "rev-large-v3", "name": "RevAI Large v3", "alias": "large", "family": "chat", "context": 256000 },
    ...
  ]
}
Full details per model
The Dashboard → Models tab has the full catalog with filters, rate limits, and usage stats. Each model card links to /model/{id} — a dedicated page with all aliases, context window, TPM/RPS limits, request parameters, and a cURL example. For image models (Illustrate), the detail page includes the full art style list.
Chat & Reasoning
Code
Audio
Image
Embeddings, OCR & Moderation
Migration
Retired aliases are silently remapped — nothing breaks. Update your calls when you can, since remapped requests log under the new model ID.
Retired aliasNow routes to
nano · nemomini-8b
visionmini-14b
vision-promedium
thinkmedium
think-mini · dev · dev-medium · dev-smallsmall
large2large
voicetranscribe
Errors
All errors return JSON with a detail field.
CodeMeaningCommon cause
400Bad RequestMalformed JSON, missing field, bad audio format, or diarize with transcribe-rt
401UnauthorizedMissing, invalid, expired, or disabled token
403ForbiddenOn /speech: input text rejected by content moderation
404Not FoundUnknown endpoint, voice id, or resource
422UnprocessableValidation error on request body
500Server ErrorUpstream failure or server misconfiguration
{ "detail": "Invalid or inactive token" }