inference.place
[API · v1]

Документация

API для текстовых моделей совместим с OpenAI Chat Completions: подойдут официальные SDK OpenAI, LangChain и любые клиенты, где можно указать base_url. Базовый адрес:

https://inference.place/api/v1

Авторизация

Создайте ключ в разделе API-ключи и передавайте его в заголовке:

Authorization: Bearer sk-ip-...

Текстовые модели

POST /chat/completions. Идентификатор модели — из каталога. Поддерживаются стандартные параметры OpenAI: temperature, max_tokens, tools, response_format и другие.

curl
curl https://inference.place/api/v1/chat/completions \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-4o-mini",
    "messages": [{"role": "user", "content": "Привет!"}]
  }'
Python
from openai import OpenAI

client = OpenAI(base_url="https://inference.place/api/v1", api_key="sk-ip-...")

resp = client.chat.completions.create(
    model="anthropic/claude-sonnet-4.5",
    messages=[{"role": "user", "content": "Объясни квантовую запутанность простыми словами"}],
)
print(resp.choices[0].message.content)
print(resp.usage)  # prompt_tokens, completion_tokens, cost_rub
Node.js
import OpenAI from "openai";

const client = new OpenAI({ baseURL: "https://inference.place/api/v1", apiKey: process.env.API_KEY });

const resp = await client.chat.completions.create({
  model: "google/gemini-2.5-flash",
  messages: [{ role: "user", content: "Напиши хайку про осень" }],
});

В объекте usage ответа поле cost_rub — сумма, списанная с баланса за запрос.

Стриминг

Передайте "stream": true — ответ придёт в формате Server-Sent Events, как у OpenAI. Последний чанк содержит usage со стоимостью.

Python
stream = client.chat.completions.create(
    model="deepseek/deepseek-chat",
    messages=[{"role": "user", "content": "Расскажи историю"}],
    stream=True,
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")

Картинки через чат

Часть моделей умеет рисовать прямо в чате: Nano Banana и другие Gemini Image, GPT Image. В каталоге они отмечены как «Мультимодальные (через чат)». Вызываются обычным /chat/completions с параметром modalities. Картинка приходит в choices[0].message.images в виде data-URL (base64), стоимость — как обычно в usage.cost_rub.

Python
import base64
from openai import OpenAI

client = OpenAI(base_url="https://inference.place/api/v1", api_key="sk-ip-...")

resp = client.chat.completions.create(
    model="google/gemini-2.5-flash-image",
    messages=[{"role": "user", "content": "Минималистичный бумажный самолётик, чёрно-белый"}],
    extra_body={"modalities": ["image", "text"]},
)
url = resp.choices[0].message.images[0]["image_url"]["url"]  # data:image/png;base64,...
open("result.png", "wb").write(base64.b64decode(url.split(",", 1)[1]))

Чтобы отредактировать изображение, передайте его в сообщении пользователя частью {"type": "image_url", "image_url": {"url": "..."}} вместе с текстом задания.

Изображения, видео, аудио

Генерация работает асинхронно: создайте задачу, затем опрашивайте её статус. В input передаются параметры конкретной модели (их список есть на странице модели у провайдера: prompt, image_size, image_url и т. д.).

Создать задачу — POST /generations
curl https://inference.place/api/v1/generations \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "fal-ai/flux/dev",
    "input": { "prompt": "кот-астронавт, кинематографичный свет", "num_images": 1 }
  }'

# 202 Accepted
{ "id": "6c1f…", "status": "pending", "queue_status": "IN_QUEUE", "cost_rub": 2.47, "cost_final": false, … }
Получить результат — GET /generations/{id}
curl https://inference.place/api/v1/generations/6c1f… -H "Authorization: Bearer $API_KEY"

{
  "id": "6c1f…",
  "status": "completed",          // pending | completed | failed
  "output": { "images": [{ "url": "https://…/image.png", "width": 1024, "height": 768 }] },
  "cost_rub": 2.47,
  "cost_final": false             // true после сверки с фактической стоимостью
}

При создании задачи с баланса резервируется ориентировочная стоимость. После завершения сумма уточняется по фактическому счёту провайдера (разница возвращается или доначисляется), при ошибке генерации — возвращается полностью.

Список моделей

GET https://inference.place/api/v1/models            # все модели
GET https://inference.place/api/v1/models?type=chat  # только текстовые
GET https://inference.place/api/v1/models?type=generation

Ответ в формате OpenAI, дополнительно поле pricing_rub с ценами в рублях.

Баланс

GET https://inference.place/api/v1/balance

{ "balance_rub": 1250.37, "currency": "RUB" }

Ошибки

КодЗначение
400Некорректный запрос: нет model или messages, неверный JSON
401Неверный или отозванный API-ключ
402Недостаточно средств на балансе
404Модель не найдена или отключена
422Модель отклонила параметры input (детали в error.detail)
429Превышен лимит запросов у провайдера модели
5xxВременная ошибка провайдера — повторите запрос позже
{ "error": { "message": "…", "type": "insufficient_quota", "code": "insufficient_balance" } }