SillyTavern
Custom endpoint: https://vicecityai.shop/v1Select Chat Completion, enter your key and a current model ID, then enable streaming if desired.

Connect supported text and media models through one OpenAI-compatible API. This guide takes you from the first request to streaming, integrations, billing and error handling.
https://vicecityai.shop/v1curl https://vicecityai.shop/v1/chat/completions \
-H "Authorization: Bearer vc_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-5",
"messages": [{"role": "user", "content": "Hello!"}],
"stream": false
}'
Send your ViceCityAI key as a Bearer token on every API request. Keep it on the server and never expose it in browser code or public repositories.
Authorization: Bearer vc_your_api_key_here
Use the live models endpoint as the source of truth. The catalog may change when upstream availability changes. Prices and observed uptime are shown on the Pricing page.
curl https://vicecityai.shop/v1/models \
-H "Authorization: Bearer vc_your_api_key_here"
POST /v1/chat/completions
The request format follows OpenAI Chat Completions. Set stream to true for Server-Sent Events; the stream ends with data: [DONE].
curl -N https://vicecityai.shop/v1/chat/completions \
-H "Authorization: Bearer vc_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-5",
"messages": [
{"role": "system", "content": "Be concise."},
{"role": "user", "content": "Explain SSE."}
],
"stream": true
}'
| Field | Required | Description |
|---|---|---|
model | Yes | Full provider/model ID |
messages | Yes | Conversation messages |
stream | No | Return SSE chunks when true |
max_tokens | No | Maximum generated tokens |
For vision-capable models, send message content as an array containing text and an image_url. ViceCityAI currently accepts PNG, JPEG and WebP data URLs through this endpoint.
{
"model": "openai/gpt-5",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "Describe this image"},
{"type": "image_url", "image_url": {
"url": "data:image/png;base64,..."
}}
]
}]
}
POST /v1/images/generationsGenerate images with a supported media model.POST /v1/videos/generationsGenerate video when the selected model supports it.Check the live model catalog before use. Media availability and accepted parameters differ by model.
from openai import OpenAI
client = OpenAI(
api_key="vc_your_api_key_here",
base_url="https://vicecityai.shop/v1"
)
response = client.chat.completions.create(
model="openai/gpt-5",
messages=[{"role": "user", "content": "Hello!"}]
)
print(response.choices[0].message.content)
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "vc_your_api_key_here",
baseURL: "https://vicecityai.shop/v1"
});
const response = await client.chat.completions.create({
model: "openai/gpt-5",
messages: [{ role: "user", content: "Hello!" }]
});
console.log(response.choices[0].message.content);
Use the OpenAI-compatible option in tools that allow a custom base URL. Exact settings and supported features depend on the client.
Custom endpoint: https://vicecityai.shop/v1Select Chat Completion, enter your key and a current model ID, then enable streaming if desired.
POST /v1/chat/completionsUse an HTTP Request node or an OpenAI-compatible connector with a configurable base URL.
Usage is charged from your prepaid balance after a successful request. Text-model cost is calculated from input and output token usage at the prices shown on the Pricing page.
cost = (input_tokens × input_price + output_tokens × output_price) / 1,000,000
| HTTP | Meaning | Action |
|---|---|---|
400 | Invalid request | Check the body and model ID |
401 | Invalid API key | Check or rotate the key |
402 | Insufficient balance | Top up the account |
403 | Account restriction | Verify email or contact support |
429 | Rate limit or concurrent request | Retry with backoff |
502–504 | Upstream unavailable | Retry safely or choose another model |