API توسعه‌دهندگان

همهٔ مدل‌ها و ابزارهای ساتاوس، با یک کلید API

مدل‌ها، خدمات استودیو، ابزارهای سایت و منابع پشتیبانی‌شدهٔ Civitai و Hugging Face Spaces را از برنامهٔ خود استفاده کنید. مسیرهای سازگار با OpenAI و Anthropic برای اتصال ابزارهای برنامه‌نویسی ارائه شده‌اند؛ قابلیت‌ها و محدودیت‌های هر مسیر را در ادامه بررسی کنید.

Base URLhttps://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 outputJSON Schema پشتیبانی نمی‌شود و با خطا رد می‌شود.
SpeechAAC، FLAC و PCM پشتیبانی نمی‌شوند؛ قالب خروجی را از قرارداد مسیر بررسی کنید.

نمونه‌ها الگوی اتصال هستند؛ سازگاری تمام نسخه‌های SDK تضمین نشده است. max_output_tokens سقف مؤثر API است و provider_max_output_tokens ظرفیت مدل را نشان می‌دهد. درخواست بالاتر از سقف با خطای 400 رد می‌شود.

/v1/status دسترسی به API و کاتالوگ را گزارش می‌کند؛ سلامت زندهٔ ارائه‌دهندگان یا موجودی آن‌ها را آزمایش نمی‌کند.

قیمت‌های مدل با سیاست دلاری جاری محاسبه می‌شوند. tiers و adjustments شامل بازه‌های مصرف، کارمزد، تخفیف و سقف هستند. برای خدمات دیگر پیش‌فاکتور همان خدمت را بگیرید. رزرو درخواست متنی با ورودی، ابزارها، رسانه و سقف خروجی محاسبه می‌شود؛ رزرو استفاده‌نشده آزاد می‌شود.

purchase_outcome_unknown یعنی نتیجه خرید شماره قطعی نیست. با کلید جدید تکرار نکنید؛ رزرو تا بررسی ارائه‌دهنده حفظ می‌شود. همان Idempotency-Key را برای بازیابی سفارش ذخیره‌شده به کار ببرید و برای نتیجه نامشخص با پشتیبانی تماس بگیرید.

شروع سریع

  1. وارد حساب شوید و از حساب ← کلیدهای API یک کلید بسازید. کلید فقط یک بار نمایش داده می‌شود.
  2. کلید را در متغیر محیطی SATAVES_API_KEY بگذارید (هرگز در کد سمت مرورگر یا مخزن عمومی).
  3. اولین درخواست را بفرستید:
bash
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."}]
  }'

مدل‌های موجود را ببینید (بدون کلید):

bash
# 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

احراز هویت و دسترسی‌ها

هر درخواست کلید را در یکی از این سرآیندها می‌فرستد:

http
# 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ساخت، پیگیری و دریافت خروجی کارهای پس‌زمینه
hubCivitai و 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_usage
  • temperature, 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 می‌آید:

bash
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 دارد.

تصویر ورودی برای مدل‌های بینایی:

python
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 نادیده گرفته می‌شوند و ذخیرهٔ مکالمه پشتیبانی نمی‌شود.

python
# 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 است.

bash
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) هم خودکار به مدل متناظر نگاشت می‌شوند.

bash
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
claude

OpenAI Codex CLI

در ~/.codex/config.toml یک ارائه‌دهندهٔ سفارشی با قالب Responses تعریف کنید و کلید را در متغیر محیطی بگذارید.

toml
# ~/.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» بگذارید و این مقادیر را وارد کنید.

text
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 و نشانی پایهٔ ما اضافه کنید.

yaml
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/ را پیش از شناسهٔ مدل بگذارید.

bash
export OPENAI_API_BASE="https://sataveslabs.com/v1"
export OPENAI_API_KEY="sk-sat-..."
aider --model openai/anthropic/claude-sonnet-4.5

OpenCode

یک ارائه‌دهندهٔ سازگار با OpenAI در opencode.json تعریف کنید.

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 بدون تغییر کار می‌کنند.

python
# 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 یک ارائه‌دهنده بسازید.

javascript
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!" });

ساخت عامل خودتان با ابزارها

حلقهٔ عامل: مدل ابزار درخواست می‌کند، شما اجرا می‌کنید و نتیجه را برمی‌گردانید تا مدل پاسخ نهایی بدهد. می‌توانید خدمات ساتاوس (مثل تولید تصویر یا ترجمه) را هم به عنوان ابزار به عامل بدهید.

python
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).

bash
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} دارند.

تولید تصویر (با پیش‌فاکتور)

تولید تصویر و ویدیو ابتدا پیش‌فاکتور می‌خواهد: قیمت قطعی و سقف هزینه پیش از هر هزینه‌ای مشخص می‌شود.

bash
# 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} است. فایل‌ها خصوصی همان حساب هستند.

تولید ویدیو (ناهمگام)

bash
# 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 برمی‌گرداند.

bash
# 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 با تنظیمات کامل

bash
# 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"

خلاصه، ترجمه و بازنویسی

bash
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"}'

موسیقی

bash
# 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 و تولید استودیو می‌توانید ابتدا قیمت را قفل کنید؛ بدون آن هم درخواست اجرا و بر اساس مصرف واقعی محاسبه می‌شود.

bash
# 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

python
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 در دسترس‌اند. فهرست کامل مسیرها و ورودی‌ها در مرجع کامل نقاط پایانی آمده است.

bash
# 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 استفاده کنید.

نوعخروجی‌ها
VideoMP4, MKV, WebM, MOV, AVI, MPEG / MPG, TS, M4V, 3GP
AudioMP3, M4A, WAV, OGG, FLAC, AAC, OPUS, AIFF, WMA
ImagesWebP, PNG, JPG, ICO, BMP, TIFF, GIF, AVIF, TGA, PPM, APNG
AnimationGIF, Animated WebP, APNG

خروجی متحرک از ویدیو بی‌صداست: ورودی حداکثر ۶۰ ثانیه، عرض خروجی تا ۹۶۰ پیکسل و ۱۲ فریم بر ثانیه. تبدیل تصاویر به GIF، WebP یا PNG/APNG زمان‌بندی و تکرار پویانمایی را حفظ می‌کند؛ قالب‌های دیگر نخستین فریم را ذخیره می‌کنند. پاسخ‌های خطا JSON هستند؛ همیشه Content-Type پاسخ را بررسی کنید.

Civitai و Hugging Face

منابع منتخب در /v1/hub/catalog هستند. مدل‌های پشتیبانی‌شدهٔ Civitai و Spaces در Hugging Face را با نشانی پیدا کنید و پیش از اجرا دسترسی و سازگاری را بررسی کنید. ثبت در کاتالوگ تضمین اجرا نیست و مخزن مدل Hugging Face با Space تفاوت دارد.

bash
# 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
اجرای CivitaiPOST /api/ai/hub/civitai/runs
کشف ورودی‌ها و وضعیت SpacePOST /api/ai/hub/research/discover
آماده‌سازی SpacePOST /api/ai/hub/research/prepare
آپلود ورودی با multipart و فیلد filePOST /api/ai/hub/research/upload
برآورد دلاری Space یا مدل میزبانی‌شدهPOST /api/ai/hub/research/quote
اجرای SpacePOST /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 سفارش‌های خود را بررسی کنید؛ با کلید جدید کورکورانه خرید نکنید.

python
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 دارند هزینهٔ مصرف ندارند. مبلغ دقیق هر درخواست در پاسخ آن برمی‌گردد.

در حال بارگذاری دادهٔ زنده…

تعرفهٔ خدمات و صورت‌حساب

  • پیش از هر درخواست سقف هزینه رزرو و پس از پایان فقط مصرف واقعی کسر می‌شود؛ باقی‌ماندهٔ رزرو آزاد می‌شود.
  • شکست تأییدشده رزرو استفاده‌نشده را آزاد می‌کند. خرید شماره با نتیجه نامشخص تا تعیین تکلیف رزرو را نگه می‌دارد؛ خرید دیگری ارسال نکنید. اگر پس از شروع تولید اتصال قطع شود، کار انجام‌شده می‌تواند هزینه داشته باشد؛ پیش از تکرار دفتر حساب را بررسی کنید.
  • هزینه هرگز از سقف تأییدشده بیشتر نمی‌شود.

در حال بارگذاری دادهٔ زنده…

حساب، موجودی و مصرف

bash
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

در حال بارگذاری دادهٔ زنده…

خطاها و محدودیت نرخ

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کدمعنی
400invalid_request · unsupported_contentدرخواست یا پارامتر نامعتبر
401invalid_api_key · missing_tokenکلید نامعتبر، باطل‌شده یا منقضی
402insufficient_balanceموجودی کافی نیست؛ حساب را شارژ کنید
403api_key_scope_missing · api_key_endpoint_not_allowed · model_disabledکلید این دسترسی را ندارد یا این مسیر با کلید باز نیست
404model_not_foundمدل وجود ندارد یا از این نوع نیست
409generation_quote_required · studio_quote_requiredپیش‌فاکتور لازم است یا با درخواست نمی‌خواند
429rate_limitedبیش از حد مجاز درخواست؛ با تأخیر دوباره بفرستید
502 / 503upstream_error · service_unavailableمدل پاسخی نداد؛ دوباره تلاش کنید یا مدل دیگری بگیرید

محدودیت نرخ پیش‌فرض ۱۲۰ درخواست در دقیقه برای /v1 است (مقدار دقیق در /v1/account). پاسخ 429 را با تأخیر نمایی دوباره بفرستید.

داده و امنیت کلید

  • مدل‌هایی که ارائه‌دهنده‌شان روی درخواست‌ها آموزش می‌بیند ارائه نمی‌شوند، مگر مدل‌هایی که با requires_training_consent مشخص شده‌اند و فقط با رضایت صریح شما در همان درخواست اجرا می‌شوند.
  • کلید را فقط سمت سرور نگه دارید؛ در اپلیکیشن موبایل یا کد مرورگر قرار ندهید.
  • برای هر برنامه کلید جدا با کمترین دسترسی لازم بسازید و کلید لو رفته را فوراً باطل کنید.