همهٔ مدلها و ابزارهای ساتاوس، با یک کلید API
مدلها، خدمات استودیو، ابزارهای سایت و منابع پشتیبانیشدهٔ Civitai و Hugging Face Spaces را از برنامهٔ خود استفاده کنید. مسیرهای سازگار با OpenAI و Anthropic برای اتصال ابزارهای برنامهنویسی ارائه شدهاند؛ قابلیتها و محدودیتهای هر مسیر را در ادامه بررسی کنید.
https://sataveslabs.com/v1نمای کلی
یک کلید؛ فراتر از فهرست مدلها
با یک کلید API به مدلها، گردشکارهای AI Studio، ابزارهای پشتیبانیشدهٔ سایت، شمارهٔ مجازی و هاب دسترسی دارید.
- خدمت AI Studio
- ۲۵
- فضای Hugging Face
- ۱٬۵۱۵٬۱۱۶
- مدل نمایهشدهٔ Civitai
- ۴۲٬۰۱۳
فضاهای Hugging Face و منابع Civitai را با API بررسی کنید و منابع سازگار را پس از بررسی دسترسی، موجود بودن و قیمت اجرا کنید.
تعداد منابع هاب از مدلهای API جداست؛ همهٔ منابع نمایهشده API اجرایی پشتیبانیشده ندارند. تاریخ آمار فهرست هاب: .
- گفتگو و عاملها: POST /v1/chat/completions و /v1/responses (قالب OpenAI) و POST /v1/messages (قالب Anthropic) با ابزار (function calling)، تصویر ورودی و استریم؛ و /v1/audio/speech و /v1/audio/transcriptions برای گفتار.
- خدمات استودیو: تولید تصویر و ویدیو، متن به گفتار، گفتار به متن، OCR، خلاصه، ترجمه، بازنویسی، موسیقی و امبدینگ.
- ابزارها و کارها: دانلود از لینک، ترجمه و دوبلهٔ ویدیو، زیرنویس، تبدیل فرمت، ابزارهای تصویر و فونت، شبکه و جستجو.
- Civitai و Hugging Face: منابع پشتیبانیشدهٔ Civitai و Hugging Face Spaces را پس از بررسی دسترسی و سازگاری اجرا کنید.
- اطلاعات: مدلها، دسترسپذیری، قیمتها، وضعیت، موجودی و مصرف هر کلید — همه با API.
هزینهٔ هر درخواست API دقیقاً مانند همان کار در سایت از موجودی حساب شما کم میشود. اشتراک یا هزینهٔ جداگانهای برای API وجود ندارد.
سازگاری و محدودیتها
| مسیر | قابلیتهای پشتیبانیشده |
|---|---|
| Chat Completions | متن، تصویر و ابزارهای تابعی مدل؛ استریم بافرشده |
| Messages | پیامهای Anthropic و رفتوبرگشت ابزار؛ استریم بافرشده |
| Responses | بدون وضعیت؛ تاریخچه را در هر درخواست بفرستید. ابزار میزبانیشده اجرا نمیشود. |
| Structured output | JSON Schema پشتیبانی نمیشود و با خطا رد میشود. |
| Speech | AAC، FLAC و PCM پشتیبانی نمیشوند؛ قالب خروجی را از قرارداد مسیر بررسی کنید. |
نمونهها الگوی اتصال هستند؛ سازگاری تمام نسخههای SDK تضمین نشده است. max_output_tokens سقف مؤثر API است و provider_max_output_tokens ظرفیت مدل را نشان میدهد. درخواست بالاتر از سقف با خطای 400 رد میشود.
/v1/status دسترسی به API و کاتالوگ را گزارش میکند؛ سلامت زندهٔ ارائهدهندگان یا موجودی آنها را آزمایش نمیکند.
قیمتهای مدل با سیاست دلاری جاری محاسبه میشوند. tiers و adjustments شامل بازههای مصرف، کارمزد، تخفیف و سقف هستند. برای خدمات دیگر پیشفاکتور همان خدمت را بگیرید. رزرو درخواست متنی با ورودی، ابزارها، رسانه و سقف خروجی محاسبه میشود؛ رزرو استفادهنشده آزاد میشود.
purchase_outcome_unknown یعنی نتیجه خرید شماره قطعی نیست. با کلید جدید تکرار نکنید؛ رزرو تا بررسی ارائهدهنده حفظ میشود. همان Idempotency-Key را برای بازیابی سفارش ذخیرهشده به کار ببرید و برای نتیجه نامشخص با پشتیبانی تماس بگیرید.
شروع سریع
- وارد حساب شوید و از حساب ← کلیدهای API یک کلید بسازید. کلید فقط یک بار نمایش داده میشود.
- کلید را در متغیر محیطی SATAVES_API_KEY بگذارید (هرگز در کد سمت مرورگر یا مخزن عمومی).
- اولین درخواست را بفرستید:
export SATAVES_API_KEY="sk-sat-..."
curl https://sataveslabs.com/v1/chat/completions \
-H "Authorization: Bearer $SATAVES_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-4.1-mini",
"messages": [{"role": "user", "content": "Write a haiku about the sea."}]
}'مدلهای موجود را ببینید (بدون کلید):
# Every model (public, no key needed)
curl https://sataveslabs.com/v1/models
# Only one kind: chat, ocr, image, video, tts, transcribe, embedding, music
curl "https://sataveslabs.com/v1/models?type=image"
# One model
curl https://sataveslabs.com/v1/models/anthropic/claude-sonnet-4.5احراز هویت و دسترسیها
هر درخواست کلید را در یکی از این سرآیندها میفرستد:
# OpenAI style (all endpoints)
Authorization: Bearer sk-sat-...
# Anthropic style (also accepted everywhere)
x-api-key: sk-sat-...هنگام ساخت کلید دسترسیهای آن را انتخاب میکنید. درخواست بیرون از دسترسیهای کلید با 403 رد میشود. تنظیمات حساب، ورود، شارژ کیف پول، پشتیبانی و مدیریت با کلید API در دسترس نیستند؛ خرید شماره مجازی با دسترسی numbers مجاز است و کلید نمیتواند کلید دیگری بسازد.
| Scope | دسترسی |
|---|---|
models | مدلها، قیمتها، وضعیت، مرجع OpenAPI |
chat | /v1/chat/completions، /v1/messages |
ai | خدمات استودیو: تصویر، ویدیو، گفتار، OCR، متن، موسیقی، امبدینگ، پیشفاکتور قیمت |
tools | ابزارهای سایت: دانلود، تبدیل، تصویر، فونت، شبکه، جستجو |
jobs | ساخت، پیگیری و دریافت خروجی کارهای پسزمینه |
hub | Civitai و Hugging Face |
numbers | خرید شماره مجازی، دریافت پیامک و مدیریت سفارشهای خودتان |
account | خواندن موجودی، دفتر حساب و مصرف API |
کلیدها انقضای اختیاری دارند، هر لحظه باطل میشوند و آخرین زمان استفادهٔ هر کلید در حساب نمایش داده میشود. حسابهای مدیر کلید API نمیسازند.
گفتگو — سازگار با OpenAI
POST /v1/chat/completions
قالب درخواست و پاسخ همان Chat Completions است. هر مدل نوع chat از /v1/models کار میکند. پارامترهای پشتیبانیشده:
model,messages(system, developer, user, assistant, tool)tools,tool_choice(auto, none, required, named function)stream,stream_options.include_usagetemperature,max_tokens/max_completion_tokens,reasoning_effort- محتوای چندبخشی: text، image_url (https یا data:)، file (PDF)
پشتیبانی نمیشود: response_format از نوع json_object/json_schema (با خطای 400 رد میشود؛ برای خروجی ساختاریافته از tools استفاده کنید — در LangChain با method="function_calling")، و n بیشتر از ۱. پارامترهای stop، top_p، seed و logprobs نادیده گرفته میشوند.
پاسخ استریم به صورت Server-Sent Events میآید:
curl https://sataveslabs.com/v1/chat/completions \
-H "Authorization: Bearer $SATAVES_API_KEY" -H "Content-Type: application/json" \
-N -d '{
"model": "anthropic/claude-sonnet-4.5",
"stream": true,
"stream_options": {"include_usage": true},
"messages": [{"role": "user", "content": "Explain RAG in two sentences."}]
}'در استریم، تا وقتی مدل کار میکند سرآیند keep-alive فرستاده میشود و متن پس از آمادهشدن پاسخ در چند تکه میرسد. هر پاسخ فیلد billing (هزینهٔ همین درخواست) و سرآیندهای X-Api-Charged-Usd-Micros و X-Api-Charged-Toman دارد.
تصویر ورودی برای مدلهای بینایی:
client.chat.completions.create(
model="anthropic/claude-sonnet-4.5",
messages=[{"role": "user", "content": [
{"type": "text", "text": "What is in this picture?"},
{"type": "image_url", "image_url": {"url": "https://example.com/photo.jpg"}},
]}],
)مسیر /v1/responses از متن، تصویر و ابزارهای اجرایی سمت کاربر (function و custom، از جمله فراخوانی موازی) پشتیبانی میکند. تاریخچهٔ کامل را با store=false بفرستید. ابزارهای میزبانیشده مثل web_search نادیده گرفته میشوند و ذخیرهٔ مکالمه پشتیبانی نمیشود.
# pip install openai
reply = client.responses.create(
model="anthropic/claude-sonnet-4.5",
store=False,
instructions="You are a concise assistant.",
input="Explain what a motion graphic is.",
)
print(reply.output_text)
# For tool loops, send the full input history plus output items and function_call_output.
# Stored conversations, previous_response_id and hosted tools are unavailable.Messages — سازگار با Anthropic
POST /v1/messages · POST /v1/messages/count_tokens
قالب Messages شامل system، بلوکهای text، image، document، tool_use و tool_result، ابزارها با input_schema، tool_choice، thinking و استریم رویدادی است. هر مدل گفتگو — Claude یا غیر آن — از این مسیر کار میکند. نشانی پایه برای SDKهای Anthropic بدون /v1 است.
curl https://sataveslabs.com/v1/messages \
-H "x-api-key: $SATAVES_API_KEY" \
-H "anthropic-version: 2023-06-01" -H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-4.5",
"max_tokens": 1024,
"system": "You are a concise assistant.",
"messages": [{"role": "user", "content": "Name three uses of embeddings."}]
}'ابزارهای عاملمحور و SDKها
مدلهای ما را در ابزارهای کدنویسی و عاملها به کار بگیرید. در همهٔ نمونهها کلید خود را جایگزین sk-sat-... کنید و میتوانید هر شناسهٔ مدل گفتگو را از فهرست مدلها بگذارید.
Claude Code
Claude Code به نقطهٔ پایانی سازگار با Anthropic وصل میشود. نشانی پایه را بدون /v1 بدهید؛ نامهای مدل Claude (مثل claude-sonnet-4-5-20250929) هم خودکار به مدل متناظر نگاشت میشوند.
export ANTHROPIC_BASE_URL="https://sataveslabs.com"
export ANTHROPIC_AUTH_TOKEN="sk-sat-..."
# Any chat model from /v1/models works, Claude or not:
export ANTHROPIC_MODEL="anthropic/claude-sonnet-4.5"
export ANTHROPIC_DEFAULT_SONNET_MODEL="anthropic/claude-sonnet-4.5"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="anthropic/claude-haiku-4.5"
export ANTHROPIC_SMALL_FAST_MODEL="anthropic/claude-haiku-4.5" # older Claude Code versions
claudeOpenAI Codex CLI
در ~/.codex/config.toml یک ارائهدهندهٔ سفارشی با قالب Responses تعریف کنید و کلید را در متغیر محیطی بگذارید.
# ~/.codex/config.toml
model = "qwen/qwen3-coder"
model_provider = "sataves"
[model_providers.sataves]
name = "Sataves"
base_url = "https://sataveslabs.com/v1"
env_key = "SATAVES_API_KEY"
wire_api = "responses"Cline / Roo Code / Kilo Code
تنظیمات ← API Provider را روی «OpenAI Compatible» بگذارید و این مقادیر را وارد کنید.
Base URL: https://sataveslabs.com/v1
API Key: sk-sat-...
Model ID: anthropic/claude-sonnet-4.5
Supports images: on (for vision models)Continue (VS Code / JetBrains)
مدل را در ~/.continue/config.yaml با ارائهدهندهٔ openai و نشانی پایهٔ ما اضافه کنید.
models:
- name: Claude Sonnet (Sataves)
provider: openai
model: anthropic/claude-sonnet-4.5
apiBase: https://sataveslabs.com/v1
apiKey: ${{ secrets.SATAVES_API_KEY }}
roles: [chat, edit, apply]
- name: Embeddings (Sataves)
provider: openai
model: openai/text-embedding-3-small
apiBase: https://sataveslabs.com/v1
apiKey: ${{ secrets.SATAVES_API_KEY }}
roles: [embed]Aider
Aider از LiteLLM استفاده میکند؛ پیشوند openai/ را پیش از شناسهٔ مدل بگذارید.
export OPENAI_API_BASE="https://sataveslabs.com/v1"
export OPENAI_API_KEY="sk-sat-..."
aider --model openai/anthropic/claude-sonnet-4.5OpenCode
یک ارائهدهندهٔ سازگار با OpenAI در opencode.json تعریف کنید.
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"sataves": {
"npm": "@ai-sdk/openai-compatible",
"name": "Sataves",
"options": { "baseURL": "https://sataveslabs.com/v1", "apiKey": "{env:SATAVES_API_KEY}" },
"models": {
"anthropic/claude-sonnet-4.5": { "name": "Claude Sonnet 4.5" },
"qwen/qwen3-coder": { "name": "Qwen3 Coder" }
}
}
}
}LangChain / LangGraph
ChatOpenAI و OpenAIEmbeddings را با نشانی پایهٔ ما بسازید؛ ابزارها و عاملهای LangGraph بدون تغییر کار میکنند.
# pip install langchain-openai
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
llm = ChatOpenAI(base_url="https://sataveslabs.com/v1", api_key="sk-sat-...", model="anthropic/claude-sonnet-4.5")
embeddings = OpenAIEmbeddings(base_url="https://sataveslabs.com/v1", api_key="sk-sat-...",
model="openai/text-embedding-3-small", check_embedding_ctx_length=False)
print(llm.invoke("One sentence about Persian poetry.").content)Vercel AI SDK
با @ai-sdk/openai-compatible یک ارائهدهنده بسازید.
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
import { generateText } from "ai";
const sataves = createOpenAICompatible({
name: "sataves", baseURL: "https://sataveslabs.com/v1", apiKey: process.env.SATAVES_API_KEY,
});
const { text } = await generateText({ model: sataves("anthropic/claude-sonnet-4.5"), prompt: "Hello!" });ساخت عامل خودتان با ابزارها
حلقهٔ عامل: مدل ابزار درخواست میکند، شما اجرا میکنید و نتیجه را برمیگردانید تا مدل پاسخ نهایی بدهد. میتوانید خدمات ساتاوس (مثل تولید تصویر یا ترجمه) را هم به عنوان ابزار به عامل بدهید.
import json, os
from openai import OpenAI
client = OpenAI(base_url="https://sataveslabs.com/v1", api_key=os.environ["SATAVES_API_KEY"])
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Current weather for a city",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
},
}]
def get_weather(city):
return {"city": city, "temperature_c": 21, "sky": "clear"}
messages = [{"role": "user", "content": "Should I take an umbrella in Tehran today?"}]
while True:
reply = client.chat.completions.create(model="anthropic/claude-sonnet-4.5", messages=messages, tools=tools)
message = reply.choices[0].message
messages.append(message.model_dump(exclude_none=True))
if not message.tool_calls:
print(message.content)
break
for call in message.tool_calls:
result = get_weather(**json.loads(call.function.arguments))
messages.append({"role": "tool", "tool_call_id": call.id, "content": json.dumps(result)})امبدینگ
POST /v1/embeddings
تا ۱۰۰ متن در هر درخواست؛ dimensions اختیاری و encoding_format برابر float یا base64 (پیشفرض SDK رسمی OpenAI).
curl https://sataveslabs.com/v1/embeddings \
-H "Authorization: Bearer $SATAVES_API_KEY" -H "Content-Type: application/json" \
-d '{"model": "openai/text-embedding-3-small", "input": ["first text", "second text"]}'خدمات استودیو هوش مصنوعی
خدمات استودیو همان نقاط پایانی سایت زیر /api هستند و با همان کلید کار میکنند. شناسههای مدل همان شناسههای /v1/models هستند. پاسخها قالب {ok, data} دارند.
تولید تصویر (با پیشفاکتور)
تولید تصویر و ویدیو ابتدا پیشفاکتور میخواهد: قیمت قطعی و سقف هزینه پیش از هر هزینهای مشخص میشود.
# 1) Ask for a price quote (nothing is charged)
curl https://sataveslabs.com/api/ai/generation/quote -H "Authorization: Bearer $SATAVES_API_KEY" -H "Content-Type: application/json" -d '{
"service": "ai:image", "model": "openai/gpt-image-1",
"prompt": "A lighthouse at dawn, watercolor", "size": "1024x1024", "output_count": 1
}'
# -> {"ok": true, "data": {"quote_id": "...", "estimated_usd_micros": ..., "maximum_authorized_usd_micros": ...}}
# 2) Confirm it (add "accept_cost_estimate": true when the quote says requires_cost_estimate_acceptance)
curl -X POST https://sataveslabs.com/api/ai/generation/quotes/QUOTE_ID/confirm -H "Authorization: Bearer $SATAVES_API_KEY" -H "Content-Type: application/json" -d '{}'
# 3) Generate with the same parameters and the quote id
curl https://sataveslabs.com/api/ai/image -H "Authorization: Bearer $SATAVES_API_KEY" -H "Content-Type: application/json" -d '{
"model": "openai/gpt-image-1", "prompt": "A lighthouse at dawn, watercolor",
"size": "1024x1024", "output_count": 1, "quote_id": "QUOTE_ID"
}'
# -> {"ok": true, "data": {"image_url": "/api/ai/images/.../file", "billing": {...}}}رنگآمیزی و تغییر رنگ تصویر
با دسترسی ai، تصویر را به POST /api/ai/color/assets بفرستید و شناسه آن را در source قرار دهید. حالت colorize یا recolor، توضیح سوژه، palette و تصویر reference اختیاری هستند. ماسک باید هماندازه تصویر باشد؛ سفید بخش ویرایش و سیاه ناحیه حفظشده است.
سپس POST /api/ai/color/quote را با تنظیمات بفرستید؛ هزینه از سیاست تصویر با واحد USD محاسبه میشود. شناسه برگشتی را با accept_cost_estimate در POST /api/ai/color/generate تأیید کنید. درخواست تکراری با همان شناسه، دوباره تولید یا هزینه ایجاد نمیکند. وضعیت و تاریخچه در GET /api/ai/color/runs و /runs/{id} است. فایلها خصوصی همان حساب هستند.
تولید ویدیو (ناهمگام)
# Quote and confirm exactly like images, with "service": "ai:video"
curl https://sataveslabs.com/api/ai/generation/quote -H "Authorization: Bearer $SATAVES_API_KEY" -H "Content-Type: application/json" -d '{
"service": "ai:video", "model": "google/veo-3.1-fast", "prompt": "Drone shot over a desert at sunset",
"size": "1280x720", "aspect_ratio": "16:9", "duration_seconds": 8
}'
curl -X POST https://sataveslabs.com/api/ai/generation/quotes/QUOTE_ID/confirm -H "Authorization: Bearer $SATAVES_API_KEY" -H "Content-Type: application/json" -d '{}'
curl https://sataveslabs.com/api/ai/video -H "Authorization: Bearer $SATAVES_API_KEY" -H "Content-Type: application/json" -d '{
"model": "google/veo-3.1-fast", "prompt": "Drone shot over a desert at sunset",
"size": "1280x720", "aspect_ratio": "16:9", "duration_seconds": 8, "quote_id": "QUOTE_ID"
}'
# -> {"data": {"task_id": "...", "status": "processing"}}
# Poll, then download
curl https://sataveslabs.com/api/ai/video/status/TASK_ID -H "Authorization: Bearer $SATAVES_API_KEY"
curl -o video.mp4 https://sataveslabs.com/api/ai/video/content/TASK_ID -H "Authorization: Bearer $SATAVES_API_KEY"گفتار و رونویسی — سازگار با OpenAI
POST /v1/audio/speech · POST /v1/audio/transcriptions
با SDK رسمی OpenAI کار میکند. خروجی گفتار همان فرمت مدل است (mp3، wav یا ogg را میتوانید بخواهید)؛ رونویسی json، text یا verbose_json برمیگرداند.
# OpenAI-compatible: the response body is the audio file
curl https://sataveslabs.com/v1/audio/speech -H "Authorization: Bearer $SATAVES_API_KEY" -H "Content-Type: application/json" \
-d '{"model": "gemini-2.5-flash-tts", "input": "Hello from Sataves!", "voice": "Kore"}' -o hello.wav
curl https://sataveslabs.com/v1/audio/transcriptions -H "Authorization: Bearer $SATAVES_API_KEY" \
-F "file=@meeting.mp3" -F "model=whisper-1" -F "response_format=json"گفتار، رونویسی و OCR با تنظیمات کامل
# Text to speech: list voices, then synthesize
curl "https://sataveslabs.com/api/ai/tts/model-voices?model=gemini-2.5-flash-tts" -H "Authorization: Bearer $SATAVES_API_KEY"
curl https://sataveslabs.com/api/ai/tts -H "Authorization: Bearer $SATAVES_API_KEY" -H "Content-Type: application/json" \
-d '{"model": "gemini-2.5-flash-tts", "text": "Hello from Sataves!", "voice": "Kore"}'
# -> {"data": {"audio_b64": "...", "format": "audio/wav", "audio_url": "/api/ai/audio/..."}}
# Speech to text (multipart upload)
curl https://sataveslabs.com/api/ai/transcribe -H "Authorization: Bearer $SATAVES_API_KEY" \
-F "file=@meeting.mp3" -F "model=whisper-1"
# -> {"ok": true, "data": {"text": "...", "billing": {...}}}
# OCR on an image or PDF (any vision-capable model)
curl https://sataveslabs.com/api/ai/ocr -H "Authorization: Bearer $SATAVES_API_KEY" -F "file=@invoice.pdf" -F "model=anthropic/claude-sonnet-4.5"خلاصه، ترجمه و بازنویسی
curl https://sataveslabs.com/api/ai/summarize -H "Authorization: Bearer $SATAVES_API_KEY" -H "Content-Type: application/json" \
-d '{"text": "...long text...", "model": "openai/gpt-4.1-mini", "format": "key_points"}'
curl https://sataveslabs.com/api/ai/translate -H "Authorization: Bearer $SATAVES_API_KEY" -H "Content-Type: application/json" \
-d '{"text": "Good morning", "target": "Persian"}'
curl https://sataveslabs.com/api/ai/rewrite -H "Authorization: Bearer $SATAVES_API_KEY" -H "Content-Type: application/json" \
-d '{"text": "...", "model": "openai/gpt-4.1-mini"}'موسیقی
# Music is generated into a private studio project
curl https://sataveslabs.com/api/studio/projects -H "Authorization: Bearer $SATAVES_API_KEY" -H "Content-Type: application/json" \
-d '{"title": "API music", "manifest": {"schema_version": 1, "assets": []}}'
# -> {"ok": true, "project": {"id": "PROJECT_ID", ...}}
curl https://sataveslabs.com/api/studio/projects/PROJECT_ID/creative/music -H "Authorization: Bearer $SATAVES_API_KEY" -H "Content-Type: application/json" \
-d '{"model": "google/lyria-3-clip-preview", "prompt": "Calm lo-fi beat with soft piano", "instrumental": true}'
# The new track appears in the project's media bin
curl https://sataveslabs.com/api/studio/projects/PROJECT_ID/assets -H "Authorization: Bearer $SATAVES_API_KEY"قفل قیمت (اختیاری)
برای خدمات متنی، گفتار، OCR و تولید استودیو میتوانید ابتدا قیمت را قفل کنید؛ بدون آن هم درخواست اجرا و بر اساس مصرف واقعی محاسبه میشود.
# Optional for text services, TTS, OCR and studio generation: lock the price first
curl https://sataveslabs.com/api/credits/studio/quote -H "Authorization: Bearer $SATAVES_API_KEY" -H "Content-Type: application/json" \
-d '{"path": "/ai/tts", "payload": {"model": "gemini-2.5-flash-tts", "text": "Hello", "voice": "Kore"}}'
curl -X POST https://sataveslabs.com/api/credits/studio/quotes/QUOTE_ID/confirm -H "Authorization: Bearer $SATAVES_API_KEY"
# Send the identical request with the quote headers
curl https://sataveslabs.com/api/ai/tts -H "Authorization: Bearer $SATAVES_API_KEY" -H "Content-Type: application/json" \
-H "X-Studio-Request: 1" -H "X-Studio-Quote-Id: QUOTE_ID" \
-d '{"model": "gemini-2.5-flash-tts", "text": "Hello", "voice": "Kore"}'برخی مدلها روی ورودیها آموزش میبینند و در فهرست مدلها با requires_training_consent مشخص شدهاند. برای آنها باید "training_consent": true بفرستید.
موشنگرافیک: ساخت و دریافت GIF
import os, time, requests
root = "https://sataveslabs.com"
headers = {"Authorization": "Bearer " + os.environ["SATAVES_API_KEY"]}
def call(method, path, **kwargs):
response = requests.request(method, root + path, headers=headers, timeout=300, **kwargs)
response.raise_for_status()
return response.json()["data"]
spec = {
"mode": "template", "title": "Ideas in motion", "subtitle": "Your brand, animated",
"primary": "#8b5cf6", "secondary": "#f472b6", "aspect": "16:9",
"seconds": 4, "position": "bottom"
}
quote = call("POST", "/api/ai/motion/quote", json=spec)
# Local template is free. For mode=ai, review the returned quote then explicitly confirm it:
# call("POST", "/api/ai/generation/quotes/" + quote["quote"]["quote_id"] + "/confirm",
# json={"accept_cost_estimate": True})
run = call("POST", "/api/ai/motion/generate", json={"id": quote["id"]})
while run["state"] not in ("completed", "failed", "render_failed", "uncertain"):
time.sleep(5)
run = call("GET", "/api/ai/motion/runs/" + run["id"])
if run["state"] == "completed":
gif = requests.get(root + run["outputs"]["gif"], headers=headers, timeout=60)
gif.raise_for_status()
open("motion.gif", "wb").write(gif.content)
# An uncertain submission must never be blindly retried. Retry only local rendering when appropriate.ابزارهای سایت و کارهای پسزمینه
ابزارهای سایت (تبدیل فرمت، فشردهسازی، ابزارهای تصویر و PDF، فونت، QR، شبکه و جستجو) و کارهای طولانی (ترجمه و دوبلهٔ ویدیو، زیرنویس، دانلود) با دسترسی tools و jobs در دسترساند. فهرست کامل مسیرها و ورودیها در مرجع کامل نقاط پایانی آمده است.
# Long tasks (video translation, subtitles, downloads, conversions) run as jobs
curl https://sataveslabs.com/api/jobs -H "Authorization: Bearer $SATAVES_API_KEY" # your jobs
curl https://sataveslabs.com/api/jobs/JOB_ID -H "Authorization: Bearer $SATAVES_API_KEY" # status and progress
curl -o result.zip https://sataveslabs.com/api/jobs/JOB_ID/file -H "Authorization: Bearer $SATAVES_API_KEY"
# Download from a link
curl https://sataveslabs.com/api/downloads/formats -H "Authorization: Bearer $SATAVES_API_KEY" -H "Content-Type: application/json" -d '{"url": "https://www.youtube.com/watch?v=..."}'
curl https://sataveslabs.com/api/downloads/jobs -H "Authorization: Bearer $SATAVES_API_KEY" -H "Content-Type: application/json" -d '{"url": "https://www.youtube.com/watch?v=...", "fmt": "best"}'
curl https://sataveslabs.com/api/downloads/jobs/JOB_ID -H "Authorization: Bearer $SATAVES_API_KEY"
curl -o video.mp4 https://sataveslabs.com/api/downloads/jobs/JOB_ID/file -H "Authorization: Bearer $SATAVES_API_KEY"تبدیل فرمت رسانه و تصویر
فهرست فرمتها و محدودیتها: GET /api/convert/formats. فایل و target را با multipart/form-data به POST /api/convert/media یا POST /api/images/convert بفرستید؛ پاسخ موفق خود فایل خروجی است. برای کار پسزمینه از media_convert یا img_convert در مسیر tools استفاده کنید.
| نوع | خروجیها |
|---|---|
| Video | MP4, MKV, WebM, MOV, AVI, MPEG / MPG, TS, M4V, 3GP |
| Audio | MP3, M4A, WAV, OGG, FLAC, AAC, OPUS, AIFF, WMA |
| Images | WebP, PNG, JPG, ICO, BMP, TIFF, GIF, AVIF, TGA, PPM, APNG |
| Animation | GIF, Animated WebP, APNG |
خروجی متحرک از ویدیو بیصداست: ورودی حداکثر ۶۰ ثانیه، عرض خروجی تا ۹۶۰ پیکسل و ۱۲ فریم بر ثانیه. تبدیل تصاویر به GIF، WebP یا PNG/APNG زمانبندی و تکرار پویانمایی را حفظ میکند؛ قالبهای دیگر نخستین فریم را ذخیره میکنند. پاسخهای خطا JSON هستند؛ همیشه Content-Type پاسخ را بررسی کنید.
Civitai و Hugging Face
منابع منتخب در /v1/hub/catalog هستند. مدلهای پشتیبانیشدهٔ Civitai و Spaces در Hugging Face را با نشانی پیدا کنید و پیش از اجرا دسترسی و سازگاری را بررسی کنید. ثبت در کاتالوگ تضمین اجرا نیست و مخزن مدل Hugging Face با Space تفاوت دارد.
# Discover featured resources; this does not run inference
curl https://sataveslabs.com/v1/hub/catalog
# Resolve a supported resource and review availability first
curl https://sataveslabs.com/api/ai/hub/resolve -H "Authorization: Bearer $SATAVES_API_KEY" -H "Content-Type: application/json" -d '{"url":"https://civitai.com/models/4201"}'
# Save the exact Civitai inputs you intend to submit
printf '%s' '{"model_name":"MODEL_NAME","model_urn":"VERIFIED_AIR_URN","prompt":"portrait, soft light"}' > civitai-input.json
curl https://sataveslabs.com/api/ai/hub/civitai/estimate -H "Authorization: Bearer $SATAVES_API_KEY" -H "Content-Type: application/json" -d @civitai-input.json
# Review quote_id, estimated_micros, maximum_micros, expires_at and can_start.
# Amounts are micro-USD: 1000000 = $1. A quote reserves nothing yet.
# After approving the displayed price, set SATAVES_HUB_QUOTE_ID to that quote_id.
# jq is required. Keep the quoted inputs unchanged; reuse the retry key after a timeout.
jq --arg q "$SATAVES_HUB_QUOTE_ID" '. + {quote_id:$q,accept_cost_estimate:true,idempotency_key:"civitai-001"}' civitai-input.json > civitai-run.json
curl https://sataveslabs.com/api/ai/hub/civitai/runs -H "Authorization: Bearer $SATAVES_API_KEY" -H "Content-Type: application/json" -d @civitai-run.json
# Hugging Face: discover the real endpoint, parameter names and schema hash
curl https://sataveslabs.com/api/ai/hub/research/discover -H "Authorization: Bearer $SATAVES_API_KEY" -H "Content-Type: application/json" -d '{"kind":"space","repo_id":"SPACE_OWNER/SPACE_NAME"}'
printf '%s' '{"kind":"space","repo_id":"SPACE_OWNER/SPACE_NAME","endpoint":"ENDPOINT_FROM_DISCOVER","values":{"INPUT_NAME_FROM_DISCOVER":"a red fox"},"options":{},"schema_hash":"SCHEMA_HASH_FROM_DISCOVER","consent":true}' > space-input.json
curl https://sataveslabs.com/api/ai/hub/research/quote -H "Authorization: Bearer $SATAVES_API_KEY" -H "Content-Type: application/json" -d @space-input.json
# Review this quote, then set SATAVES_HUB_QUOTE_ID to its quote_id.
jq --arg q "$SATAVES_HUB_QUOTE_ID" '. + {quote_id:$q,accept_cost_estimate:true,idempotency_key:"space-001"}' space-input.json > space-run.json
curl https://sataveslabs.com/api/ai/hub/research/runs -H "Authorization: Bearer $SATAVES_API_KEY" -H "Content-Type: application/json" -d @space-run.json
# Poll and download using the same account/key
curl https://sataveslabs.com/api/jobs/JOB_ID -H "Authorization: Bearer $SATAVES_API_KEY"
curl -O https://sataveslabs.com/api/ai/hub/runs/JOB_ID/files/FILE_NAME -H "Authorization: Bearer $SATAVES_API_KEY"
# Final result.billing reports charged_micros, refunded_micros,
# price_estimated and cost_basis. Async API usage updates after settlement.اجرای مدیریتشده Spaces
با GET /api/ai/hub/research/execution-options?repo_id=OWNER/SPACE مسیرهای مجاز را بررسی کنید. execution_mode برابر host از میزبان اصلی استفاده میکند؛ توکن ساتاوس فقط برای همان مخزن تأییدشده ارسال میشود. managed نسخه خصوصی بازبینیشده را با CPU یا GPU مجاز راهاندازی و پس از اجرا متوقف میکند. همین execution_mode را در discover، quote و runs نگه دارید.
رابط Space که در مرورگر نمایش داده میشود، از حساب مرورگر بازدیدکننده استفاده میکند و به اعتبار سرور متصل نیست. اجرای API به موجودی دلاری رزروشده نیاز دارد؛ هزینه محاسبات برآوردی و شامل حاشیه قیمتگذاری جاری است. سهمیه ZeroGPU، صف، اعتبار ارائهدهنده، مجوز، کلیدهای خارجی و بازبینی نسخه ممکن است مانع اجرا شوند. در خطای hf_source_changed_review_required یا hf_execution_plan_changed_requote، ابتدا سازگاری را دوباره بررسی و پیشفاکتور تازه دریافت کنید.
مسیرهای هاب و روند اجرا
کلید به دسترسی hub نیاز دارد؛ برای پیگیری کارها دسترسی jobs و برای موجودی و مصرف account را نیز فعال کنید. اجرا به حساب تأییدشده نیاز دارد.
| عملیات | Endpoint |
|---|---|
| منابع منتخب | GET /v1/hub/catalog |
| تشخیص منبع و نسخه | POST /api/ai/hub/resolve |
| برآورد Civitai با تنظیمات انتخابی | POST /api/ai/hub/civitai/estimate |
| اجرای Civitai | POST /api/ai/hub/civitai/runs |
| کشف ورودیها و وضعیت Space | POST /api/ai/hub/research/discover |
| آمادهسازی Space | POST /api/ai/hub/research/prepare |
| آپلود ورودی با multipart و فیلد file | POST /api/ai/hub/research/upload |
| برآورد دلاری Space یا مدل میزبانیشده | POST /api/ai/hub/research/quote |
| اجرای Space | POST /api/ai/hub/research/runs |
| تاریخچه هاب | GET /api/ai/hub/research/runs |
| پیگیری وضعیت کار | GET /api/jobs/{job_id} |
| دریافت فایل خروجی با همان کلید | GET /api/ai/hub/runs/{job_id}/files/{name} |
برای Space، kind را space بگذارید و repo_id، نام endpoint، ورودیها و schema_hash همان endpoint را از discover بگیرید. consent پذیرش شرایط منبع است. اگر تنظیمات عوض شد، دوباره کشف و بررسی کنید. Space خوابیده یا بدون API سازگار ممکن است اجرا نشود؛ مسیر prepare آمادهسازی را بهصورت کار پسزمینه پیگیری میکند.
قیمت، سقف هزینه و تکرار درخواست
برای هر اجرا، ابتدا هزینه را با همان ورودیها بررسی کنید. quote_id به حساب، مدل، نسخه، endpoint و تنظیمات وابسته است و تاریخ انقضا دارد. estimated_micros هزینه تخمینی و maximum_micros بیشترین مبلغ مجاز مشتری است؛ یک میلیون واحد برابر یک دلار است. هنگام اجرا quote_id و در صورت پذیرش برآورد accept_cost_estimate: true بفرستید. تغییر ورودیها به برآورد جدید نیاز دارد.
پس از اجرا، هزینه مصرف تأییدشده یا برآورد پذیرفتهشده اعمال و بخش مصرفنشده رزرو آزاد میشود. Space عمومی الزاماً رایگان نیست. صف و زمان انتظار، متر مصرف GPU محسوب نمیشوند. قیمت مشتری از سقف تأییدشده بیشتر نمیشود؛ نتیجهٔ نهایی billing.price_estimated و billing.cost_basis را مشخص میکند.
تعرفهٔ جاری خدمات را در /v1/pricing با کلیدهای open-ai-hub و open-ai-hub:research بررسی کنید. عمومی بودن یک Space به معنی رایگان بودن دائمی نیست. در کارهای پسزمینه، هزینه ممکن است پس از ارسال درخواست تسویه شود؛ صفر در گزارش اولیهٔ /v1/usage تضمین رایگان بودن نیست. مبلغ نهایی را با نتیجهٔ کار و دفتر حساب تطبیق دهید.
پاسخ 202 یعنی پذیرفتهشدن کار، نه موفقیت تولید. idempotency_key بدنه را برای تکرار همان ارسال حفظ کنید؛ شناسهٔ کار را ذخیره کنید و وضعیت را با فاصله بررسی کنید. در خطای دسترسی، تغییر schema یا منبع غیرفعال، پیش از اجرای مجدد مشکل را رفع کنید؛ ورودی فایل باید از آپلود همان حساب باشد.
شماره مجازی و پیامک
کلیدی با دسترسی numbers بسازید؛ کلیدهای قبلی این دسترسی تازه را خودکار نمیگیرند. سرویسها، کشورها، اپراتورها و موجودی را از پیشنهادها بگیرید و همان قیمت خردهفروشی وبسایت را برای خرید تأیید کنید. تمام سفارشها و پیامکها متعلق به حساب صاحب کلید هستند.
| عملیات | Endpoint |
|---|---|
| قابلیتها و واحد قیمت | GET /api/numbers/capabilities |
| فهرست سرویسها | GET /api/numbers/platforms |
| کشور، اپراتور، موجودی و قیمت | GET /api/numbers/offers?platform=telegram&country=England |
| خرید با قیمت تأییدشده | POST /api/numbers/purchase |
| تاریخچه سفارشهای من | GET /api/numbers/orders |
| کد و متن پیامک، وضعیت و انقضا | GET /api/numbers/orders/{key}/status |
| لغو، گزارش شماره یا پایان | POST /api/numbers/orders/{key}/cancel | ban | finish |
برای خرید، platform، pid و sid را از پیشنهاد انتخابشده بفرستید. در حالت USD_CREDIT، price باید دقیقاً price_usd_micros باشد؛ هر دلار ۱٬۰۰۰٬۰۰۰ میکرو است. در حالت TOMAN، price مقدار تومان پیشنهاد است. موجودی کافی لازم است و قیمت هنگام خرید دوباره بررسی میشود.
هدر Idempotency-Key برای خرید اجباری است (۸ تا ۱۲۸ نویسه: حروف، عدد، _، .، : یا -). برای تکرار همان درخواست پس از قطع اتصال، همان کلید و همان بدنه را بفرستید تا شماره و هزینه تکراری ایجاد نشود. کلید یکسان با بدنه متفاوت خطای 409 میدهد. در purchase_in_progress یا purchase_outcome_unknown سفارشهای خود را بررسی کنید؛ با کلید جدید کورکورانه خرید نکنید.
import os, time, requests
root = "https://sataveslabs.com"
headers = {"Authorization": "Bearer " + os.environ["SATAVES_API_KEY"]}
def call(method, path, **kwargs):
request_headers = kwargs.pop("headers", headers)
r = requests.request(method, root + path, headers=request_headers, timeout=60, **kwargs)
r.raise_for_status()
result = r.json()
if not result["ok"]:
raise RuntimeError(result["data"].get("error", "request_failed"))
return result["data"]
offers = call("GET", "/api/numbers/offers", params={"platform": "telegram"})
if offers.get("partial") or not offers["items"]:
raise RuntimeError("Catalog warming or out of stock; retry browsing later")
offer = offers["items"][0] # Select the country/operator you actually want.
assert offer["billing_currency"] == "USD_CREDIT"
price = offer["price_usd_micros"]
# Set a deliberate budget before running. This example buys a real number.
assert price <= int(os.environ["MAX_NUMBER_PRICE_MICROS"])
# Save this unique purchase id; reuse it and the SAME body on network retries.
purchase_id = os.environ["NUMBER_PURCHASE_ID"] # e.g. telegram-order-20261025-001
body = {"pid": offer["pid"], "sid": offer["sid"], "platform": "telegram", "price": price}
purchase = call("POST", "/api/numbers/purchase", json=body,
headers={**headers, "Idempotency-Key": purchase_id})
key = purchase["order"]["key"]
for _ in range(60):
status = call("GET", "/api/numbers/orders/" + key + "/status")
if status.get("code") or status["state"] in ("completed", "canceled", "banned"):
print(status) # code, sms text/sender, expiry and state when available
break
time.sleep(5)
# Actions, when appropriate (each can be refused by the provider):
# call("POST", "/api/numbers/orders/" + key + "/finish")
# call("POST", "/api/numbers/orders/" + key + "/cancel")
# call("POST", "/api/numbers/orders/" + key + "/ban")وضعیت را هر ۵ ثانیه بررسی کنید. لغو و گزارش شماره پیش از دریافت کد، تنها پس از تأیید ارائهدهنده میتواند بازگشت وجه داشته باشد؛ pending یعنی هنوز تأیید نشده است. پایان سفارش بازگشت وجه ندارد. نتیجه ok:false را نیز بررسی کنید. خطاهای API شامل 402 موجودی ناکافی، 404 سفارش متعلق به شما نیست، 409 تغییر قیمت/وجود کد و 503 عدم تأیید ارائهدهنده هستند.
پوشش فعلی برای شماره فعالسازی یکبارمصرف است. اجاره بلندمدت، خرید مجدد پولی یک شماره و تنظیمات حساب اصلی ارائهدهنده در این API عرضه نشدهاند. مسیر repeat فعلی با خطای repeat_not_supported پاسخ میدهد؛ دریافت پیامکهای بیشتر را از status پیگیری کنید. مبلغ هر خرید تازه در هدرهای X-Api-Charged-* و گزارش مصرف میآید؛ درخواست تکراری هزینه تازهای ندارد.
مدلها و قیمت فهرست
این جدول مستقیم از GET /v1/models خوانده میشود و همیشه بهروز است. قیمتها دلاریاند: توکنها به ازای هر یک میلیون، بقیه به ازای واحد نامبرده. مدلهایی که pricing.free دارند هزینهٔ مصرف ندارند. مبلغ دقیق هر درخواست در پاسخ آن برمیگردد.
در حال بارگذاری دادهٔ زنده…
تعرفهٔ خدمات و صورتحساب
- پیش از هر درخواست سقف هزینه رزرو و پس از پایان فقط مصرف واقعی کسر میشود؛ باقیماندهٔ رزرو آزاد میشود.
- شکست تأییدشده رزرو استفادهنشده را آزاد میکند. خرید شماره با نتیجه نامشخص تا تعیین تکلیف رزرو را نگه میدارد؛ خرید دیگری ارسال نکنید. اگر پس از شروع تولید اتصال قطع شود، کار انجامشده میتواند هزینه داشته باشد؛ پیش از تکرار دفتر حساب را بررسی کنید.
- هزینه هرگز از سقف تأییدشده بیشتر نمیشود.
در حال بارگذاری دادهٔ زنده…
حساب، موجودی و مصرف
curl https://sataveslabs.com/v1/account -H "Authorization: Bearer $SATAVES_API_KEY" # balance, this key, rate limits
curl "https://sataveslabs.com/v1/usage?days=7&key=current" -H "Authorization: Bearer $SATAVES_API_KEY" # requests and charges
curl https://sataveslabs.com/v1/pricing # price list (public)
curl https://sataveslabs.com/v1/status # API status and model counts (public)/v1/usage درخواستهای کلید و هزینهٔ گزارششدهٔ همان درخواست را نشان میدهد؛ key میتواند all، current یا شناسهٔ کلید باشد. تسویهٔ کار پسزمینه ممکن است دیرتر انجام شود؛ صفر در گزارش به معنی رایگانبودن نیست. مبلغ نهایی را در دفتر حساب و صورتحساب کار بررسی کنید.
مرجع کامل نقاط پایانی
هر مسیری که کلید API میتواند صدا بزند، با scope لازم. ورودی و خروجی دقیق هر مسیر در سند OpenAPI است: /v1/openapi.json
در حال بارگذاری دادهٔ زنده…
خطاها و محدودیت نرخ
// /v1/chat/completions, /v1/embeddings and other /v1 endpoints (OpenAI shape)
{"error": {"message": "Your balance is too low for this request.", "type": "insufficient_quota", "code": "insufficient_balance"}}
// /v1/messages (Anthropic shape)
{"type": "error", "error": {"type": "billing_error", "message": "Your balance is too low for this request."}}
// /api/... website endpoints
{"ok": false, "error": "generation_quote_required", "detail": "generation_quote_required"}| HTTP | کد | معنی |
|---|---|---|
| 400 | invalid_request · unsupported_content | درخواست یا پارامتر نامعتبر |
| 401 | invalid_api_key · missing_token | کلید نامعتبر، باطلشده یا منقضی |
| 402 | insufficient_balance | موجودی کافی نیست؛ حساب را شارژ کنید |
| 403 | api_key_scope_missing · api_key_endpoint_not_allowed · model_disabled | کلید این دسترسی را ندارد یا این مسیر با کلید باز نیست |
| 404 | model_not_found | مدل وجود ندارد یا از این نوع نیست |
| 409 | generation_quote_required · studio_quote_required | پیشفاکتور لازم است یا با درخواست نمیخواند |
| 429 | rate_limited | بیش از حد مجاز درخواست؛ با تأخیر دوباره بفرستید |
| 502 / 503 | upstream_error · service_unavailable | مدل پاسخی نداد؛ دوباره تلاش کنید یا مدل دیگری بگیرید |
محدودیت نرخ پیشفرض ۱۲۰ درخواست در دقیقه برای /v1 است (مقدار دقیق در /v1/account). پاسخ 429 را با تأخیر نمایی دوباره بفرستید.
داده و امنیت کلید
- مدلهایی که ارائهدهندهشان روی درخواستها آموزش میبیند ارائه نمیشوند، مگر مدلهایی که با requires_training_consent مشخص شدهاند و فقط با رضایت صریح شما در همان درخواست اجرا میشوند.
- کلید را فقط سمت سرور نگه دارید؛ در اپلیکیشن موبایل یا کد مرورگر قرار ندهید.
- برای هر برنامه کلید جدا با کمترین دسترسی لازم بسازید و کلید لو رفته را فوراً باطل کنید.