Базовый URL
Все запросы к моделям отправляются на https://inference.dahl.global/v1. Для запросов Chat Completions нужен заголовок Authorization: Bearer <API_KEY> и ключ с токенами на балансе.
Генерация ответов (Chat Completions)
POST /v1/chat/completions совместим с API OpenAI. Передай model и messages. Текст ответа — в choices[0].message.content.
curl https://inference.dahl.global/v1/chat/completions \
-H "Authorization: Bearer $DAHL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "MiniMaxAI/MiniMax-M2.7",
"messages": [
{ "role": "user", "content": "Hello, Dahl!" }
]
}'{
"choices": [
{
"message": {
"role": "assistant",
"content": "..."
}
}
]
}Потоковая передача
Добавь "stream": true. Dahl проксирует OpenAI SSE (строки data: {…}, в конце data: [DONE]). Для длинных ответов потоковая передача удобнее: клиент отображает токены по мере поступления.
curl https://inference.dahl.global/v1/chat/completions \
-H "Authorization: Bearer $DAHL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "MiniMaxAI/MiniMax-M2.7",
"messages": [{"role": "user", "content": "Hello!"}],
"stream": true
}'Responses (Codex / Agents SDK)
POST /v1/responses — адаптер для тех же моделей, что доступны через Chat Completions. Codex CLI и OpenAI Agents SDK используют этот эндпоинт по умолчанию. Передай model и input (строку или список элементов). Текст ответа — в output_text или output[]. Потоковая передача использует события Responses SSE (response.created … response.completed), без data: [DONE].
curl https://inference.dahl.global/v1/responses \
-H "Authorization: Bearer $DAHL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "MiniMaxAI/MiniMax-M2.7",
"input": "Hello, Dahl!"
}'{
"id": "resp_…",
"object": "response",
"status": "completed",
"model": "MiniMaxAI/MiniMax-M2.7",
"output_text": "…",
"output": [
{
"type": "message",
"role": "assistant",
"content": [
{ "type": "output_text", "text": "…" }
]
}
]
}В Codex укажи собственный идентификатор провайдера (dahl) вместо встроенного openai. Иначе Codex обращается к /v1/responses/compact, который брокер не поддерживает. Сжатие контекста выполняется локально.
model = "MiniMaxAI/MiniMax-M2.7" model_provider = "dahl" [model_providers.dahl] name = "Dahl" base_url = "https://inference.dahl.global/v1" env_key = "DAHL_API_KEY" requires_openai_auth = false
import os
from openai import OpenAI
client = OpenAI(
base_url="https://inference.dahl.global/v1",
api_key=os.environ["DAHL_API_KEY"],
)
r = client.responses.create(
model="MiniMaxAI/MiniMax-M2.7",
input="Hello, Dahl!",
)
print(r.output_text)Используешь OpenCode? См. страницу настройки OpenCode.
Инструменты
MiniMax и DeepSeek Flash принимают tools / tool_choice в формате OpenAI. Изображения (vision) на текущих моделях не принимаются. Перед запросами с инструментами проверь, что модель сейчас есть в GET /v1/models.
Публичные эндпоинты
Ключ не нужен:
GET /v1/models— актуальные ID моделейGET /v1/status?window=1h|24h|7d|30d— результаты проверок доступности (по умолчанию за 24 часа)GET /health— состояние процессаGET /v1/auth/check-username?username=…— доступность имени пользователя
Ошибки
| Статус | Сообщение | Что делать |
|---|---|---|
| 401 | Missing API token / invalid API token | Передай Authorization: Bearer с актуальным ключом |
| 402 | available tokens exhausted | Переведи токены из пула или пополни |
| 429 | too many signup/sign-in attempts | Подожди и повтори |
| 400 | This model is not currently offered (+ актуальные ID) | Поставь в model id из ошибки или GET /v1/models |
| 503 / таймауты | перегрузка сети или узла | Немного подожди и повтори запрос |