BazaarLinkBazaarLink
साइन इन
दस्तावेज़API संदर्भSDK संदर्भएजेंटिक उपयोगAI स्किल्स

API संदर्भ

BazaarLink API का अवलोकन

BazaarLink मॉडल और प्रदाताओं के बीच एक समान, OpenAI-संगत अनुरोध और प्रतिक्रिया प्रारूप देता है। एक बार एकीकरण करके आप ऐप को दोबारा लिखे बिना मॉडल बदल सकते हैं।

ग्राहक के रूटिंग फ़ील्ड अनदेखे किए जाते हैं
provider (पूरा ऑब्जेक्ट), transforms, route, शीर्ष-स्तर का service_tier और preset अपस्ट्रीम अनुरोध से पहले हटा दिए जाते हैं और अपस्ट्रीम या मूल्य स्तर नहीं चुन सकते। Chat Completions और Responses endpoints पर models array स्थानीय फ़ॉलबैक सूची के रूप में समर्थित है: BazaarLink हर मॉडल को अपनी रूटिंग से हल करता है और उस मॉडल का ग्राहक मूल्य लागू करता है; सूची अपस्ट्रीम को नहीं भेजी जाती। ग्राहक के :nitro, :floor और :exacto प्रत्यय अनदेखे होते हैं। :eco BazaarLink का इकोनॉमी टियर बना रहता है और आंतरिक रूप से BazaarLink :floor पर मैप होता है। :free अलग कैटलॉग मॉडल वैरिएंट है।
वेब खोज की अतिरिक्त लागत
plugins, :online या web_search_options से अनुरोधित वेब खोज का मौजूदा व्यवहार बना रहता है, लेकिन अपस्ट्रीम अतिरिक्त शुल्क लग सकता है। यह शुल्क अनुरोध में उपयोग की गई कुंजी पर लगता है: BazaarLink की प्लेटफ़ॉर्म कुंजी या आपकी BYOK कुंजी।

OpenAPI विनिर्देश

पूरा BazaarLink API OpenAPI विनिर्देश में दर्ज है और YAML तथा JSON प्रारूप में उपलब्ध है:

API देखने या क्लाइंट लाइब्रेरी बनाने के लिए इन विनिर्देशों को Swagger UI, Postman या किसी OpenAPI-संगत कोड जनरेटर के साथ उपयोग करें।

अनुरोध

चैट कम्प्लीशन अनुरोध प्रारूप

चैट कम्प्लीशन का अनुरोध बॉडी इस एंडपॉइंट पर भेजा जाता है:

POST/v1/chat/completions

समर्थित फ़ील्ड की पूरी सूची के लिए देखें पैरामीटर。

अनुरोध स्कीमा
// Definitions of subtypes are below
type Request = {
  // Required by BazaarLink Chat Completions
  model: string;                    // Use an id or alias from GET /v1/models
  messages: Message[];             // Must contain at least one message

  // Generation
  stream?: boolean;
  temperature?: number;
  max_tokens?: number;             // Positive integer
  max_completion_tokens?: number;  // Alias mapped to max_tokens upstream
  n?: number;
  seed?: number;
  stop?: string | string[];

  // Sampling
  top_p?: number;
  top_k?: number;
  frequency_penalty?: number;
  presence_penalty?: number;
  repetition_penalty?: number;
  min_p?: number;
  top_a?: number;
  // Sampling values are forwarded without range validation; models may clamp or ignore them.

  // Token probabilities
  logit_bias?: Record<number, number>;
  logprobs?: boolean;
  top_logprobs?: number;

  // Stable end-user identifier for abuse prevention
  user?: string;

  // Tool calling
  tools?: Tool[];
  tool_choice?: ToolChoice;
  parallel_tool_calls?: boolean;

  // Structured output
  response_format?: ResponseFormat;
  structured_outputs?: boolean;

  // Plugin configuration — forwarded to upstreams that support plugins.
  plugins?: Plugin[];

  // Multimodal and image-generation options
  modalities?: Array<"text" | "image">;
  image_config?: Record<string, unknown>;
  input_audio?: InputAudio;

  // Provider-specific reasoning controls
  reasoning_effort?: "low" | "medium" | "high";
  include_reasoning?: boolean;
  reasoning?: ReasoningConfig;
  thinking?: ThinkingConfig;
  enable_thinking?: boolean;

};

// Message types
type Message =
  | SystemMessage
  | UserMessage
  | AssistantMessage
  | ToolMessage;

type SystemMessage = {
  role: "system";
  content: string | ContentPart[];
  name?: string;
};

type UserMessage = {
  role: "user";
  content: string | ContentPart[];
  name?: string;
};

type AssistantMessage = {
  role: "assistant";
  content?: string | ContentPart[] | null;
  name?: string;
  tool_calls?: ToolCall[];
};

type ToolMessage = {
  role: "tool";
  content: string;
  tool_call_id: string;
  name?: string;
};

// Multimodal content parts
type ContentPart =
  | TextContentPart
  | ImageContentPart
  | FileContentPart
  | AudioContentPart
  | VideoContentPart;

type TextContentPart = {
  type: "text";
  text: string;
};

type ImageContentPart = {
  type: "image_url";
  image_url: {
    url: string;                    // Remote URL or base64 data URI
    detail?: string;
  };
};

type FileContentPart = {
  type: "file";
  file: {
    filename?: string;
    file_data: string;              // Base64 data URI
  };
};

type AudioContentPart = {
  type: "input_audio";
  input_audio: InputAudio;
};

type InputAudio = {
  data: string;                     // Raw base64 without a data URI prefix
  format: string;                   // For example "wav" or "mp3"
};

type VideoContentPart = {
  type: "video_url";
  video_url: {
    url: string;                    // Remote URL or base64 data URI
  };
};

// Tool calling subtypes
type FunctionDescription = {
  name: string;
  description?: string;
  parameters: object;               // JSON Schema object
};

type Tool = {
  type: "function";
  function: FunctionDescription;
};

type ToolChoice =
  | "none"
  | "auto"
  | "required"
  | {
      type: "function";
      function: {
        name: string;
      };
    };

type ToolCall = {
  id: string;
  type: "function";
  function: {
    name: string;
    arguments: string;
  };
};

// Structured output
type ResponseFormat =
  | {
      type: "json_object";
    }
  | {
      type: "json_schema";
      json_schema: {
        name: string;
        strict?: boolean;
        schema: object;
      };
    };

// Upstream plugin configuration
type Plugin = {
  id: string;
  enabled?: boolean;
  [key: string]: unknown;
};

// Reasoning controls vary by model family
type ReasoningConfig = {
  effort?: "low" | "medium" | "high";
  max_tokens?: number;
  exclude?: boolean;
};

type ThinkingConfig = {
  type?: "enabled" | "disabled";
  budget_tokens?: number;
};

संरचित आउटपुट

मॉडल को स्कीमा से मेल खाते हुए वैध JSON वापस करने के लिए बाध्य करें। विश्वसनीय अनुप्रयोगों के निर्माण के लिए यह आवश्यक है जो मॉडल आउटपुट को प्रोग्रामेटिक रूप से पार्स करता है।

  • json_object — मूल JSON मोड; मॉडल वैध JSON लौटाता है।
  • json_schema — सख्त स्कीमा मोड; आउटपुट दिए गए JSON Schema से मेल खाना चाहिए।

प्लगइन्स

BazaarLink plugins ऐरे को चुने गए अपस्ट्रीम रूट पर भेजता है। उपलब्धता मॉडल और प्रदाता पर निर्भर करती है; :online मॉडल वेरिएंट web प्लगइन भी सक्षम करता है।

JSON
{
  "model": "openai/gpt-4o",
  "messages": [
    { "role": "user", "content": "What happened today?" }
  ],
  "plugins": [
    { "id": "web" }
  ]
}

वैकल्पिक शीर्षलेख

उपयोग ट्रैकिंग, डैशबोर्ड दृश्यता और सूक्ष्म विश्लेषण सक्षम करने के लिए अनुरोध हेडर में अपने एप्लिकेशन की पहचान करें।

TypeScript
await fetch("https://api.bazaarlink.ai/v1/chat/completions", {
  method: "POST",
  headers: {
    "Authorization": "Bearer <BAZAARLINK_API_KEY>",
    "Content-Type": "application/json",
    "HTTP-Referer": "https://your-app.example",
    "X-Title": "Your App"
  },
  body: JSON.stringify({
    model: "openai/gpt-4o",
    messages: [{ role: "user", content: "Hello!" }]
  })
});

असिस्टेंट प्रीफ़िल

संगत मॉडल रूट पर आगे का उत्तर माँगने के लिए messages ऐरे के अंत में एक अधूरा assistant संदेश जोड़ें।

यह कैसे काम करता है
BazaarLink अंतिम assistant संदेश को सुरक्षित रखकर आगे भेजता है। उत्तर जारी रखने का व्यवहार चुने गए अपस्ट्रीम मॉडल और प्रदाता द्वारा लागू होता है, इसलिए हर रूट पर इसकी गारंटी नहीं है।
TypeScript
const response = await client.chat.completions.create({
  model: "anthropic/claude-sonnet-4.6",
  messages: [
    { role: "user", content: "What is the meaning of life?" },
    // Intentional partial response; compatible routes continue from here.
    { role: "assistant", content: "My best answer is" }
  ]
});

प्रतिक्रियाएँ

BazaarLink अलग-अलग मॉडल और प्रदाताओं की कम्प्लीशन प्रतिक्रियाओं को एक समान OpenAI-संगत प्रारूप में सामान्यीकृत करता है।

कम्प्लीशन प्रतिक्रिया प्रारूप

choices हमेशा एक ऐरे होता है। स्ट्रीमिंग में delta और गैर-स्ट्रीमिंग में message मिलता है; उपलब्ध होने पर उपयोग और लागत का विवरण भी लौटता है।

प्रतिक्रिया स्कीमा
type Response = {
  id: string;
  object: "chat.completion" | "chat.completion.chunk";
  created: number;
  model: string;
  choices: Array<NonStreamingChoice | StreamingChoice>;
  usage?: {
    prompt_tokens: number;
    completion_tokens: number;
    total_tokens: number;
    cost?: number;
    prompt_tokens_details?: {
      cached_tokens: number;
      cache_write_tokens?: number;
      audio_tokens?: number;
    };
    completion_tokens_details?: {
      reasoning_tokens?: number;
      image_tokens?: number;
    };
  };
};

type NonStreamingChoice = {
  index: number;
  finish_reason: string | null;
  message: {
    role: "assistant";
    content: string | null;
    tool_calls?: ToolCall[];
    reasoning?: string;                                      // thinking text: when the request asked for it, or by default for the models listed in the reasoning docs section
    reasoning_details?: Array<{ type: string; text?: string }>;
  };
};

type StreamingChoice = {
  index: number;
  finish_reason: string | null;
  delta: {
    role?: string;
    content?: string | null;
    tool_calls?: ToolCall[];
    reasoning?: string;
    reasoning_details?: Array<{ type: string; text?: string }>;
  };
};

समाप्ति कारण

finish_reason में BazaarLink के मानकीकृत मान होते हैं, जैसे stop, length, tool_calls, content_filter और error।

JSON
{
  "finish_reason": "stop"
}

लागत और आँकड़े पूछना

response id या x-request-id header के अपारदर्शी BazaarLink request ID से GET /v1/generation लें; non-streaming response में यही ID x-generation-id में भी आता है। आँकड़े कुछ सेकंड बाद मिल सकते हैं; 404 पर थोड़ी देर retry करें।

TypeScript
const generation = await fetch(
  "https://api.bazaarlink.ai/v1/generation?id=<GENERATION_ID>",
  {
    headers: {
      Authorization: "Bearer <BAZAARLINK_API_KEY>"
    }
  }
).then((response) => response.json());

एजेंट पंजीकरण

सक्षम होने पर एजेंट बिना भुगतान या x402 भुगतान वाले पंजीकरण द्वार से खाता बना सकते हैं।

पंजीकरण के लिए एक छोटा प्रूफ़ ऑफ़ वर्क ज़रूरी है। GET https://bazaarlink.ai/api/v1/agents/register/challenge लें, ऐसी solution स्ट्रिंग खोजें जिससे challenge:solution का SHA-256 बताई गई संख्या में शुरुआती शून्य बिट वाला हो (कुछ सेकंड), फिर pow_challenge और pow_solution अनुरोध के साथ भेजें। एक चुनौती केवल एक बार, उसे लेने वाले IP से, 120 सेकंड तक मान्य है। जो एजेंट कुंजी कभी उपयोग नहीं होती, वह सात दिन बाद अक्षम कर दी जाती है।

GEThttps://bazaarlink.ai/api/v1/agents/register/challenge
POSThttps://api.bazaarlink.ai/api/v1/agents/register

बिना भुगतान वाला पंजीकरण name, वैकल्पिक description और referral_code स्वीकार करता है। 201 उत्तर में API कुंजी, क्रेडिट, सात दिनों का claim token और समाप्ति समय, अपग्रेड URL, रेफ़रल कोड, free_model auto:free, आधार URL और दस्तावेज़ लिंक शामिल हैं। यह मौजूदा मुफ़्त मॉडल तंत्र का उपयोग करता है; मुफ़्त वेब खोज के लिए सत्यापित ईमेल चाहिए, इसलिए यह बिना भुगतान वाले एजेंटों के लिए उपलब्ध नहीं है।

POSThttps://api.bazaarlink.ai/api/v1/agents/register/x402

भुगतान वाला पंजीकरण HTTP 402 आवश्यकताओं से शुरू होता है: scheme exact, network eip155:196, asset USD-T0 और payTo। X-PAYMENT हेडर के साथ फिर भेजने पर वही पंजीकरण फ़ील्ड और payment { txHash, network, amountUsd } मिलते हैं। भुगतान वाले एजेंट सामान्य भुगतान खाता नियमों का पालन करते हैं; मौजूदा खाते /api/x402/topup से टॉप-अप कर सकते हैं।

कोई मानव सात दिनों के token जीवनकाल में /claim पर बिना भुगतान वाले एजेंट का स्वामित्व ले सकता है। सीमा प्रति IP 24 घंटे में एक पंजीकरण और कॉन्फ़िगर किए गए क्लाउड प्रदाता कैप हैं; अस्वीकृत अनुरोध Retry-After सहित 429 लौटाते हैं।

POSThttps://api.bazaarlink.ai/api/x402/topup

चैट कम्प्लीशन

प्राथमिक समापन बिंदु। OpenAI Chat Completions API के साथ संगत।

POST/v1/chat/completions

अनुरोध बॉडी

modelआवश्यक
string
GET /v1/models में सूचीबद्ध id या alias इस्तेमाल करें, जैसे "claude-sonnet-4.6" या "anthropic/claude-sonnet-4.6"।
messagesआवश्यक
Message[]
भूमिका और सामग्री के साथ संदेश वस्तुओं की सरणी
stream
boolean
यदि सत्य है, तो सर्वर-भेजे गए इवेंट स्ट्रीम लौटाता है। डिफ़ॉल्ट: ग़लत
temperature
number
Sampling मान बिना range validation के भेजे जाते हैं। Model समर्थित सीमा से बाहर के मानों को सीमित या अनदेखा कर सकता है।
max_tokens
integer
उत्पन्न करने के लिए टोकन की अधिकतम संख्या max_tokens के लिए
max_completion_tokens
integer
Alias (OpenAI ओ-सीरीज़ संगत)। दोनों स्वीकृत हैं; जो भी प्रदान किया जाता है वह प्रभावी होता है
top_p
number
न्यूक्लियस नमूना संभाव्यता द्रव्यमान। डिफ़ॉल्ट: 1
top_k
integer
Sampling मान बिना range validation के भेजे जाते हैं। Model समर्थित सीमा से बाहर के मानों को सीमित या अनदेखा कर सकता है।
frequency_penalty
number
बार-बार टोकन को दंडित करें। रेंज: [-2, 2]। डिफ़ॉल्ट: 0
presence_penalty
number
उपस्थिति के आधार पर टोकन को दंडित करें। रेंज: [-2, 2]। डिफ़ॉल्ट: 0
repetition_penalty
number
इनपुट से टोकन पुनरावृत्ति को कम करें। रेंज: (0, 2]। डिफ़ॉल्ट: 1
min_p
number
शीर्ष टोकन के सापेक्ष न्यूनतम संभावना। रेंज: [0, 1]। डिफ़ॉल्ट: 0
top_a
number
डायनामिक टॉप-पी उच्चतम-संभावना टोकन पर आधारित है। रेंज: [0, 1]। डिफ़ॉल्ट: 0
seed
integer
पूर्णांक बीज। सभी मॉडलों के लिए गारंटी नहीं है
n
integer
उत्पन्न होने वाली पूर्णताओं की संख्या। डिफ़ॉल्ट: 1 नियतात्मक नमूने के लिए
user
string
निगरानी और दुरुपयोग का पता लगाने के लिए अंतिम-उपयोगकर्ता पहचानकर्ता। बिलिंग पर कोई प्रभाव नहीं पड़ता. केवल OpenAI-पारिवारिक मॉडल - नीचे नोट देखें।
stop
string | string[]
स्टॉप अनुक्रम - सामना होने पर पीढ़ी रुक जाती है
logit_bias
object
मैप टोकन आईडी को पूर्वाग्रह मानों के लिए [-100, 100] नमूनाकरण से पहले जोड़ा गया। केवल OpenAI-पारिवारिक मॉडल - नीचे नोट देखें।
logprobs
boolean
प्रत्येक आउटपुट टोकन की लॉग संभावनाएँ लौटाएँ। केवल OpenAI-पारिवारिक मॉडल - नीचे नोट देखें।
top_logprobs
integer
प्रति स्थिति पर लौटने के लिए सबसे संभावित टोकन की संख्या (लॉगप्रॉब्स की आवश्यकता है: सत्य)। रेंज: 0-20. केवल OpenAI-पारिवारिक मॉडल - नीचे नोट देखें।
tools
Tool[]
उन टूल (फ़ंक्शन) की सूची जिन्हें मॉडल कॉल कर सकता है
tool_choice
string | object
कंट्रोल्स टूल का उपयोग: "ऑटो", "कोई नहीं", या विशिष्ट टूल
parallel_tool_calls
boolean
उपकरण उपलब्ध कराए जाने पर समानांतर फ़ंक्शन कॉलिंग सक्षम करें। डिफ़ॉल्ट: सत्य. केवल OpenAI-पारिवारिक मॉडल - नीचे नोट देखें।
response_format
object
Force संरचित JSON आउटपुट। संरचित आउटपुट अनुभाग देखें
structured_outputs
boolean
इसका समर्थन करने वाले प्रदाताओं पर सख्त JSON-स्कीमा-अनुरूप आउटपुट का अनुरोध करें। ज्यों का त्यों पार कर लिया
reasoning
object
प्रदाता-विशिष्ट reasoning/thinking कॉन्फ़िगरेशन। ज्यों का त्यों पार कर लिया
reasoning_effort
string
OpenAI ओ-सीरीज़ शैली तर्क प्रयास: "कम", "मध्यम", या "उच्च"। ज्यों का त्यों पार कर लिया
include_reasoning
boolean
true होने पर सोच की सामग्री message.reasoning (स्ट्रीमिंग में delta.reasoning) में लौटती है; false उन मॉडलों की सोच बंद करता है जो डिफ़ॉल्ट रूप से सोचते हैं (रीज़निंग अनुभाग देखें), इसलिए सोच का बिल नहीं बनता। reasoning_effort, reasoning या thinking न भेजने पर केवल वही मॉडल डिफ़ॉल्ट रूप से सोचते और लौटाते हैं; बाकी मॉडल माँगने पर ही लौटाते हैं
उपयोगकर्ता, लॉगप्रोब्स, टॉप_लॉगप्रोब्स, लॉगिट_बियास और पैरेलल_टूल_कॉल केवल OpenAI-फ़ैमिली मॉडल तक पहुंचते हैं
जब भी हल किए गए मॉडल को OpenAI के स्वयं के रूप में पहचाना नहीं जाता है, तो ये पांच पैरामीटर अपस्ट्रीम अनुरोध से हटा दिए जाते हैं - उन्हें anthropic/claude-*, google/gemini-*, या किसी अन्य गैर-OpenAI लक्ष्य पर भेजकर पैरामीटर के साथ 200 लौटाता है चुपचाप अनदेखा कर दिया गया, कोई त्रुटि नहीं। यदि आप इनमें से कोई एक सेट कर रहे हैं और प्रभाव दिखाई नहीं दे रहा है, तो जांचें कि लक्ष्य मॉडल OpenAI है या नहीं।

अनुरोध स्कीमा (TypeScript)

// Definitions of subtypes are below
type Request = {
  // Required by BazaarLink Chat Completions
  model: string;                    // Use an id or alias from GET /v1/models
  messages: Message[];             // Must contain at least one message

  // Generation
  stream?: boolean;
  temperature?: number;
  max_tokens?: number;             // Positive integer
  max_completion_tokens?: number;  // Alias mapped to max_tokens upstream
  n?: number;
  seed?: number;
  stop?: string | string[];

  // Sampling
  top_p?: number;
  top_k?: number;
  frequency_penalty?: number;
  presence_penalty?: number;
  repetition_penalty?: number;
  min_p?: number;
  top_a?: number;
  // Sampling values are forwarded without range validation; models may clamp or ignore them.

  // Token probabilities
  logit_bias?: Record<number, number>;
  logprobs?: boolean;
  top_logprobs?: number;

  // Stable end-user identifier for abuse prevention
  user?: string;

  // Tool calling
  tools?: Tool[];
  tool_choice?: ToolChoice;
  parallel_tool_calls?: boolean;

  // Structured output
  response_format?: ResponseFormat;
  structured_outputs?: boolean;

  // Plugin configuration — forwarded to upstreams that support plugins.
  plugins?: Plugin[];

  // Multimodal and image-generation options
  modalities?: Array<"text" | "image">;
  image_config?: Record<string, unknown>;
  input_audio?: InputAudio;

  // Provider-specific reasoning controls
  reasoning_effort?: "low" | "medium" | "high";
  include_reasoning?: boolean;
  reasoning?: ReasoningConfig;
  thinking?: ThinkingConfig;
  enable_thinking?: boolean;

};

// Message types
type Message =
  | SystemMessage
  | UserMessage
  | AssistantMessage
  | ToolMessage;

type SystemMessage = {
  role: "system";
  content: string | ContentPart[];
  name?: string;
};

type UserMessage = {
  role: "user";
  content: string | ContentPart[];
  name?: string;
};

type AssistantMessage = {
  role: "assistant";
  content?: string | ContentPart[] | null;
  name?: string;
  tool_calls?: ToolCall[];
};

type ToolMessage = {
  role: "tool";
  content: string;
  tool_call_id: string;
  name?: string;
};

// Multimodal content parts
type ContentPart =
  | TextContentPart
  | ImageContentPart
  | FileContentPart
  | AudioContentPart
  | VideoContentPart;

type TextContentPart = {
  type: "text";
  text: string;
};

type ImageContentPart = {
  type: "image_url";
  image_url: {
    url: string;                    // Remote URL or base64 data URI
    detail?: string;
  };
};

type FileContentPart = {
  type: "file";
  file: {
    filename?: string;
    file_data: string;              // Base64 data URI
  };
};

type AudioContentPart = {
  type: "input_audio";
  input_audio: InputAudio;
};

type InputAudio = {
  data: string;                     // Raw base64 without a data URI prefix
  format: string;                   // For example "wav" or "mp3"
};

type VideoContentPart = {
  type: "video_url";
  video_url: {
    url: string;                    // Remote URL or base64 data URI
  };
};

// Tool calling subtypes
type FunctionDescription = {
  name: string;
  description?: string;
  parameters: object;               // JSON Schema object
};

type Tool = {
  type: "function";
  function: FunctionDescription;
};

type ToolChoice =
  | "none"
  | "auto"
  | "required"
  | {
      type: "function";
      function: {
        name: string;
      };
    };

type ToolCall = {
  id: string;
  type: "function";
  function: {
    name: string;
    arguments: string;
  };
};

// Structured output
type ResponseFormat =
  | {
      type: "json_object";
    }
  | {
      type: "json_schema";
      json_schema: {
        name: string;
        strict?: boolean;
        schema: object;
      };
    };

// Upstream plugin configuration
type Plugin = {
  id: string;
  enabled?: boolean;
  [key: string]: unknown;
};

// Reasoning controls vary by model family
type ReasoningConfig = {
  effort?: "low" | "medium" | "high";
  max_tokens?: number;
  exclude?: boolean;
};

type ThinkingConfig = {
  type?: "enabled" | "disabled";
  budget_tokens?: number;
};

उदाहरण अनुरोध

curl https://api.bazaarlink.ai/v1/chat/completions \
  -H "Authorization: Bearer $BAZAARLINK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-4o",
    "messages": [
      {"role": "system", "content": "You are a helpful assistant."},
      {"role": "user", "content": "Explain quantum computing in one paragraph."}
    ],
    "temperature": 0.7,
    "max_tokens": 512
  }'

प्रतिक्रिया

{
  "id": "85e6f35c71a31f19-SJC",
  "object": "chat.completion",
  "created": 1740000000,
  "model": "openai/gpt-4o",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Quantum computing leverages quantum mechanics..."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 28,
    "completion_tokens": 74,
    "total_tokens": 102,
    "cost": 0.0006480,
    "prompt_tokens_details": {
      "cached_tokens": 0
    },
    "completion_tokens_details": {
      "reasoning_tokens": 0
    }
  }
}

प्रतिक्रिया स्कीमा (TypeScript)

BazaarLink मानकीकृत response लौटाता है और upstream-विशिष्ट fields हटाता है। usage.cost इस अनुरोध के लिए ग्राहक से ली गई USD राशि है।

100 सेकंड से अधिक लंबे अनुरोधों के लिए stream:true का उपयोग करने की सलाह दी जाती है। non-streaming अनुरोधों में लगभग 12 सेकंड बाद (यह डिफ़ॉल्ट मान है, जिसे डिप्लॉयमेंट सेटिंग से बदला जा सकता है) पहले 200 लौटाया जाता है और keepalive whitespace भेजना शुरू होता है; बाद में कोई त्रुटि होने पर उसे 200 + error JSON के रूप में लौटाया जाता है। keepalive JSON body से पहले का whitespace है, जिसे मानक JSON पार्सर अनदेखा करते हैं।

type Response = {
  id: string;
  object: "chat.completion" | "chat.completion.chunk";
  created: number;                 // Unix timestamp
  model: string;
  choices: (NonStreamingChoice | StreamingChoice)[];
  usage?: ResponseUsage;
};

type NonStreamingChoice = {
  index: number;
  finish_reason: "stop" | "length" | "tool_calls" | "content_filter" | null;
  message: {
    role: "assistant";
    content: string | null;
    tool_calls?: ToolCall[];
    reasoning?: string;                                      // thinking text: when the request asked for it, or by default for the models listed in the reasoning docs section
    reasoning_details?: Array<{ type: string; text?: string }>;
  };
};

type StreamingChoice = {
  index: number;
  finish_reason: string | null;
  delta: {
    role?: string;
    content?: string | null;
    tool_calls?: ToolCall[];
    reasoning?: string;
    reasoning_details?: Array<{ type: string; text?: string }>;
  };
};

type ResponseUsage = {
  prompt_tokens: number;
  completion_tokens: number;
  total_tokens: number;
  cost: number;                      // USD amount charged to the customer for this request
  prompt_tokens_details?: {
    cached_tokens: number;           // Tokens served from prompt cache (reduced cost)
    cache_write_tokens?: number;     // Tokens written to cache in this request
    audio_tokens?: number;
  };
  completion_tokens_details?: {
    reasoning_tokens?: number;       // Thinking/reasoning tokens (e.g. o3, Qwen3, DeepSeek R1)
    image_tokens?: number;
  };
};

type ToolCall = {
  id: string;
  type: "function";
  function: { name: string; arguments: string };
};

Image जनरेशन

Generate images from text prompts using models like DALL·E and GPT-4o. Use the `modalities` parameter to request image output from the chat completions endpoint. इमेज एडिटिंग (मौजूदा इमेज को संशोधित करना) POST /v1/images/edits का उपयोग करती है —— OpenAI images.edit संगत, आपकी स्रोत इमेज के साथ multipart/form-data। एडिट-सक्षम मॉडल की modality text+image->image होती है (जैसे qwen/qwen-image-3); शुद्ध-जनरेशन मॉडल text->image होते हैं —— प्रत्येक मॉडल की modality GET /v1/models में जाँचें।

Response format

/v1/images/generations डिफ़ॉल्ट रूप से OpenAI-संगत सिंक JSON लौटाता है (2026-07-25 से) — client.images.generate() बिना किसी रैपर के काम करता है। stream: true भेजकर SSE इवेंट स्ट्रीम चुनें, जो लंबे जनरेशन समय वाले मॉडलों की प्रगति देता है।

20 सेकंड से लंबे नॉन-स्ट्रीमिंग अनुरोधों का उत्तर पहले HTTP 200 से दिया जाता है (उसके बाद खाली स्थान भेजकर कनेक्शन जीवित रखा जाता है), इसलिए बाद में आने वाली विफलता "200 + त्रुटि बॉडी" के रूप में लौटती है: सबसे ऊपरी `error` ऑब्जेक्ट जाँचें (हम `"object": "error"` और `"http_status"` भी जोड़ते हैं)। यदि आपके क्लाइंट का रीड टाइमआउट लंबा है (OpenAI SDK का डिफ़ॉल्ट 10 मिनट है), तो `X-BazaarLink-Sync-Wait: 90` (पूर्ण सेकंड, 1–90, डिफ़ॉल्ट 20) भेजें ताकि उस समय तक की विफलताओं का असली स्टेटस कोड मिले; Python SDK में `default_headers={"X-BazaarLink-Sync-Wait": "90"}`, Node SDK में `defaultHeaders: { "X-BazaarLink-Sync-Wait": "90" }` उपयोग करें। Windows पर JSON को UTF-8 फ़ाइल में सहेजकर `curl --data-binary @body.json` से भेजें: कंसोल में `-d` के बाद टाइप किया गया पाठ UTF-8 नहीं होता और तुरंत 400 `invalid_utf8` के साथ अस्वीकार हो जाता है।

A. /v1/chat/completions (नेटिव, अनुशंसित)

POST/v1/chat/completions

The canonical streaming path. Recommended for any new integration.

curl -N https://api.bazaarlink.ai/v1/chat/completions \
  -H "Authorization: Bearer $BL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-5.4-image-2",
    "messages": [{"role":"user","content":"a red cat on a sofa"}],
    "modalities": ["image","text"],
    "stream": true
  }'

इमेज-टू-इमेज: content ऐरे में एक image_url पार्ट शामिल करें। डेटा URI या https इमेज URL सपोर्टेड हैं (http:// अस्वीकृत होता है), अधिकतम 8 इमेज, ~10MB प्रति डेटा URI। इमेज वाले संदेश में एक टेक्स्ट पार्ट (संपादन निर्देश) भी होना चाहिए। कुछ मॉडल अतिरिक्त रूप से image_config सपोर्ट करते हैं (जैसे {"strength": 0.7}, 0–1 — कम मान स्रोत इमेज के करीब रहता है), जो अपस्ट्रीम को ज्यों-का-त्यों भेजा जाता है।

curl -N https://api.bazaarlink.ai/v1/chat/completions \
  -H "Authorization: Bearer $BL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-5.4-image-2",
    "messages": [{"role":"user","content":[
      {"type":"image_url","image_url":{"url":"data:image/png;base64,..."}},
      {"type":"text","text":"change the background to a night city"}
    ]}],
    "modalities": ["image"],
    "stream": true
  }'

इमेज एडिट (OpenAI-संगत)

POST/v1/images/edits

OpenAI SDK का client.images.edit() सीधे काम करता है (multipart अपलोड, सिंक JSON रिस्पॉन्स जो data: [{ url }] लौटाता है)। इमेज-टू-इमेज जैसी ही सीमाएँ: अधिकतम 8 इमेज, 10MB प्रत्येक; mask और response_format=b64_json अभी सपोर्टेड नहीं हैं।

curl https://api.bazaarlink.ai/v1/images/edits \
  -H "Authorization: Bearer $BL_API_KEY" \
  -F model="openai/gpt-5.4-image-2" \
  -F image=@cat.png \
  -F prompt="change the background to a night city"

B. /v1/images/generations (DALL·E-संगत)

POST/v1/images/generations

OpenAI DALL-E request shape. Sync JSON ({ created, data: [{ url }] }) is the default and works with client.images.generate() out of the box; pass stream: true to get the SSE event stream documented below instead.

curl https://api.bazaarlink.ai/v1/images/generations \
  -H "Authorization: Bearer $BL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-image-1",
    "prompt": "a red cat on a sofa",
    "size": "1024x1024"
  }'
modelआवश्यक
string
मॉडल ID, जैसे google/gemini-2.5-flash-image
promptआवश्यक
string
टेक्स्ट प्रॉम्प्ट
size
string
आउटपुट आकार (स्वतः मैप)
n
integer
इमेज की संख्या (डिफ़ॉल्ट 1)
# Streaming variant — progressive delivery for long generations
curl -N https://api.bazaarlink.ai/v1/images/generations \
  -H "Authorization: Bearer $BL_API_KEY" \
  -H "Accept: text/event-stream" \
  -H "Content-Type: application/json" \
  -d '{"model":"openai/gpt-5.4-image-2","prompt":"a red cat on a sofa","stream":true}'

SSE event protocol

SSE comment lines और unknown या ping events अनदेखा करें; दस्तावेज़ित image, usage और done events संभालें।

: keep-alive

event: image
data: {"index": 0, "url": "https://api.bazaarlink.ai/v1/images/proxy/<token>"}

event: image-cached     # bazaarlink Redis-backed proxy URL (1 hr TTL)
data: {"index": 0, "url": "https://api.bazaarlink.ai/v1/images/proxy/<token>"}

event: usage            # final cost / token count
data: {"promptTokens": 12, "completionTokens": 7080, "cost": 0.226, "durationMs": 163400, "imageCount": 1}

event: done
data: {}

समर्थित इमेज मॉडल

Model IDModalityi2i (edits)

वीडियो जनरेशन

असिंक्रोनस तीन-चरणीय प्रक्रिया (submit → poll → content)। वीडियो बनने में 30 सेकंड से 5 मिनट लगते हैं, जो chat-completions के सिंक्रोनस अनुरोध/उत्तर मॉडल में फिट नहीं होता — इसलिए BazaarLink वीडियो को अलग /v1/videos पथ पर job-id पैटर्न से उपलब्ध कराता है: submit से vjob_* ID मिलता है → status poll करें → पूरा होने पर bytes प्राप्त करें। वीडियो मॉडल को /chat/completions या /images/generations से कॉल करने पर 400 (code: wrong_endpoint_for_video) मिलेगा। बिलिंग completed होने पर वास्तविक usage.cost के अनुसार होती है।

वीडियो टास्क प्रकार

एक ही एंडपॉइंट कई टास्क को कवर करता है। कौन-सा टास्क चलेगा यह इस पर निर्भर करता है कि आप कौन-से फ़ील्ड भेजते हैं —— एक ही मॉडल image-to-video, keyframes और continuation कर सकता है। हर मॉडल हर टास्क को सपोर्ट नहीं करता; असमर्थित अनुरोध 400 लौटाता है।

टेक्स्ट-टू-वीडियो
prompt
केवल टेक्स्ट प्रॉम्प्ट से जनरेट करें — कोई इनपुट मीडिया नहीं।
इमेज-टू-वीडियो
frame_images: [ first frame ]
आपकी इमेज ही दृश्य है: यह पहला फ़्रेम बनकर एनिमेट होती है और मूल के प्रति निष्ठावान रहती है। जैसे, एक बिल्ली की फ़ोटो → वही बिल्ली उसी दृश्य में सिर घुमाती है।
कीफ़्रेम (पहला + अंतिम)
frame_images: [ first, last ]
एक शुरुआती और एक अंतिम इमेज दें; मॉडल बीच की गति को इंटरपोलेट करता है।
निरंतरता
input_video
एक मौजूदा क्लिप को बढ़ाएं। अनुरोधित duration स्रोत वीडियो की लंबाई से अधिक होना चाहिए।
रेफ़रेंस-टू-वीडियो
input_references: [ images ]
आपकी इमेज रेफ़रेंस हैं, फ़्रेम नहीं: मॉडल विषय/स्टाइल बनाए रखता है और बिल्कुल नया दृश्य जनरेट करता है। जैसे, एक बिल्ली की फ़ोटो + "जंगल में नाचते हुए" → एक नया वीडियो जिसमें बिल्ली का रूप बरकरार रहता है पर दृश्य और गति नई होती है (1–9 रेफ़रेंस)। इमेज-टू-वीडियो से अंतर: i2v सटीक तस्वीर के प्रति निष्ठावान रहता है; r2v विषय को नए फ़ुटेज में फिर से ढालता है।
वीडियो एडिटिंग
input_video + prompt
एक मौजूदा वीडियो संपादित करें — दृश्य, स्टाइल या गति बदलें। इनपुट-वीडियो सेकंड + आउटपुट सेकंड पर बिलिंग।

1. जॉब सबमिट करें (तुरंत vjob_xxx लौटाता है)

POST/v1/videos
modelआवश्यक
string
मॉडल ID, जैसे bytedance/seedance-2.0
promptआवश्यक
string
टेक्स्ट प्रॉम्प्ट
duration
integer
सेकंड में अवधि (मॉडल पर निर्भर)
resolution
string
रिज़ॉल्यूशन: 480p / 720p / 1080p आदि
generate_audio
boolean
ऑडियो ट्रैक बनाएं (true/false)
frame_images
array
पहला/अंतिम फ़्रेम इमेज (image-to-video, keyframes)। ऑब्जेक्ट { type: "image_url", image_url: { url }, frame_type: "first_frame" | "last_frame" } या सादा URL स्ट्रिंग।
input_references
array
reference-to-video के लिए रेफ़रेंस इमेज —— विषय/स्टाइल मार्गदर्शन, सटीक फ़्रेम नहीं।
input_video
string|object
continuation और वीडियो एडिटिंग के लिए स्रोत वीडियो URL। अपस्ट्रीम द्वारा सार्वजनिक रूप से फ़ेच करने योग्य होना चाहिए।
aspect_ratio
string
आस्पेक्ट रेशियो, जैसे 16:9 या 9:16। जब कोई इनपुट इमेज रेशियो तय करती है तो इसे अनदेखा किया जाता है।
watermark
boolean
वॉटरमार्क जोड़ें। डिफ़ॉल्ट false।
callback_url
string
जॉब के अंतिम स्थिति पर पहुँचने पर कॉल होने वाला webhook URL — केवल HTTPS, SSRF जाँच सहित। v1 में कोई हस्ताक्षर नहीं; इसे संकेत मानें और GET /videos/{id} से पुष्टि करें।
curl https://api.bazaarlink.ai/v1/videos \
  -H "Authorization: Bearer $BL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "bytedance/seedance-2.0",
    "prompt": "a bird flying over mountains",
    "duration": 3,
    "resolution": "720p",
    "generate_audio": false
  }'
# → 202 { "id": "vjob_xxx", "status": "pending" }
Note
सबमिट करते समय worst-case अनुमान से credits आरक्षित होते हैं। job पूरा होने पर usage.cost इस अनुरोध के लिए ग्राहक से ली गई USD राशि है।

2. स्थिति poll करें

GET/v1/videos/{id}
curl -H "Authorization: Bearer $BL_API_KEY" \
  https://api.bazaarlink.ai/v1/videos/vjob_xxx
Note
हर GET के बीच ≥ 8 सेकंड का अंतर होने पर ही अपस्ट्रीम को वास्तविक कॉल जाती है (rate limit से बचाव)।
Note
यदि status=failed हो, तो पूरी reserve राशि उपयोगकर्ता को वापस कर दी जाती है।

3. वीडियो कंटेंट प्राप्त करें (MP4)

GET/v1/videos/{id}/content
curl -H "Authorization: Bearer $BL_API_KEY" \
  -o output.mp4 \
  https://api.bazaarlink.ai/v1/videos/vjob_xxx/content

जानने योग्य बातें

  • अनुमत रिज़ॉल्यूशन प्रत्येक मॉडल के लिए अलग होते हैं —— असमर्थित मान 400 लौटाता है और समर्थित मानों की सूची देता है।
  • इनपुट इमेज/वीडियो सार्वजनिक URL से पहुँच योग्य होने चाहिए। हॉटलिंक-सुरक्षित होस्ट (जैसे कुछ wikis) विफल हो जाते हैं।
  • इनपुट मीडिया अपस्ट्रीम कंटेंट मॉडरेशन से गुज़रता है और कभी-कभी अस्वीकृत हो सकता है।
  • continuation के लिए, अनुरोधित duration स्रोत वीडियो लंबाई से अधिक होना चाहिए।
  • आउटपुट आस्पेक्ट रेशियो इनपुट इमेज का अनुसरण करता है —— वर्गाकार इमेज वर्गाकार वीडियो देती है।
  • वीडियो एडिटिंग की बिलिंग इनपुट वीडियो के सेकंड और जनरेट किए गए आउटपुट के सेकंड पर होती है।
  • input_video (एडिटिंग / continuation) एक सार्वजनिक URL होना चाहिए। यहाँ जनरेट किए गए वीडियो आपकी API key के पीछे सर्व होते हैं, इसलिए अपस्ट्रीम उन्हें फ़ेच नहीं कर सकता —— अपने स्रोत वीडियो को सार्वजनिक रूप से पहुँच योग्य URL पर होस्ट करें।
  • Webhook payload पर कोई हस्ताक्षर नहीं है — कार्रवाई से पहले GET /videos/{id} से स्थिति/राशि की पुष्टि करें, और ध्यान दें कि वहाँ unsigned_urls निरपेक्ष हैं (poll प्रतिक्रिया के सापेक्ष पथ से भिन्न)।

समर्थित वीडियो मॉडल

Model IDModalityTasks
x-ai/grok-imagine-video-1.5-litetext+image->videot2v, i2v
bytedance/seedance-2.5text+image+audio+video->video—
google/veo-3.1text+image->videot2v, i2v
bytedance/seedance-1-5-protext+image->videot2v, i2v
bytedance/seedance-2.0text+image+audio+video->videot2v, i2v
bytedance/seedance-2.0-fasttext+image+audio+video->videot2v, i2v
minimax/hailuo-3-maxtext+image->videot2v, i2v

वाक् संश्लेषण

/v1/models?output_modalities=speech की मॉडल आईडी से पाठ को ऑडियो में बदलें। मॉडल पृष्ठ पर दी गई प्रति दस लाख अक्षर की दर से बिल बनता है। पूरा ऑडियो बफ़र होने के बाद बाइनरी डेटा लौटाया जाता है; चरणबद्ध स्ट्रीमिंग समर्थित नहीं है। provider, transforms, route, service_tier और preset जैसे रूटिंग नियंत्रण फ़ील्ड अनदेखे किए जाते हैं।

POST/v1/audio/speech
curl https://api.bazaarlink.ai/v1/audio/speech \
  -H "$BAZAARLINK_AUTH_HEADER" \
  -H "Content-Type: application/json" \
  -d '{"model":"<speech-model-id>","input":"Hello","voice":"alloy","response_format":"mp3"}' \
  --output speech.mp3

# Voice settings (elevenlabs/* models; the X-Voice-Settings response header says applied or ignored)
curl -D - https://api.bazaarlink.ai/v1/audio/speech \
  -H "$BAZAARLINK_AUTH_HEADER" \
  -H "Content-Type: application/json" \
  -d '{"model":"elevenlabs/eleven-v4","input":"Hello","voice":"george","stability":0.4,"similarity_boost":0.8,"style":0.2,"use_speaker_boost":true,"language_code":"en","audio_effects":{"distance":0.3}}' \
  --output speech.mp3

ऑडियो प्रतिलेखन

multipart/form-data में model, file या JSON में model, input_audio:{data,format} (कच्चा base64) भेजें। प्रारूप: wav, mp3, mp4, m4a, ogg, flac, webm, aac। ऑडियो सीमा 25 MiB; अनुरोध 50 MiB। audio.transcription_max_seconds_by_model मॉडल की सीमा तय करता है; इसके अभाव में audio.transcription_max_seconds और फिर डिफ़ॉल्ट 60 सेकंड लागू होते हैं। लंबा ऑडियो प्रसंस्करण से पहले 413 audio_too_long के साथ अस्वीकार होता है और शुल्क नहीं लगता। response_format केवल json या verbose_json; timestamp_granularities word/segment के लिए verbose_json आवश्यक। stream समर्थित नहीं (400 unsupported_parameter); बड़ा ऑडियो: 413 audio_too_large। provider अनदेखा होता है। डेटाबेस दरों पर usage.seconds या इनपुट/आउटपुट token शुल्क; मिनट दर = 60 × सेकंड दर। usage.cost ग्राहक का USD शुल्क है।

POST/v1/audio/transcriptions
curl https://api.bazaarlink.ai/v1/audio/transcriptions \
  -H "$BAZAARLINK_AUTH_HEADER" \
  -F model="<transcription-model-id>" \
  -F file=@audio.wav \
  -F response_format=json

curl https://api.bazaarlink.ai/v1/audio/transcriptions \
  -H "$BAZAARLINK_AUTH_HEADER" \
  -H "Content-Type: application/json" \
  -d '{"model":"<transcription-model-id>","input_audio":{"data":"<raw-base64-audio>","format":"wav"},"response_format":"verbose_json","timestamp_granularities":["word","segment"]}'

दस्तावेज़ पुनः रैंकिंग

query और documents से क्रमबद्ध index और relevance_score प्राप्त करें। बिलिंग इकाई search है: मॉडल पृष्ठ की दर को usage.search_units से गुणा किया जाता है, दस्तावेज़ संख्या से नहीं। स्ट्रीमिंग (stream) समर्थित नहीं है।

POST/v1/rerank
curl https://api.bazaarlink.ai/v1/rerank \
  -H "$BAZAARLINK_AUTH_HEADER" \
  -H "Content-Type: application/json" \
  -d '{"model":"your-rerank-model-id","query":"capital of France","documents":["Paris is the capital of France.","Berlin is in Germany."],"top_n":1}'
POST/v1/chat/completions

/v1/chat/completions में audio या input_audio और ऑडियो समर्थित मॉडल चुनें। कॉन्फ़िगर की गई इनपुट और आउटपुट टोकन दरें रिपोर्ट किए गए सभी पाठ तथा ऑडियो टोकन पर समान रूप से लागू होती हैं।

curl https://api.bazaarlink.ai/v1/chat/completions \
  -H "$BAZAARLINK_AUTH_HEADER" \
  -H "Content-Type: application/json" \
  -d '{"model":"<audio-chat-model-id>","messages":[{"role":"user","content":"Say hi."}],"stream":true,"modalities":["text","audio"],"audio":{"voice":"alloy","format":"pcm16"},"max_tokens":32}'

वाक् संश्लेषण (TTS) मार्गदर्शिका

POST /v1/audio/speech OpenAI-compatible है: JSON भेजें और ऑडियो फ़ाइल बाइनरी रूप में पाएँ। ElevenLabs परिवार में elevenlabs/eleven-v4, eleven-v4-turbo, eleven-v3, eleven-v3-conversational, eleven-multilingual-v2, eleven-flash-v2.5, eleven-flash-v2, eleven-turbo-v2.5, eleven-turbo-v2 शामिल हैं। ताज़ा सूची GET /v1/models?output_modalities=speech पर देखें। GET /v1/models डिफ़ॉल्ट रूप से केवल टेक्स्ट मॉडल लौटाता है, इसलिए सूची देखने के लिए ?output_modalities=speech (या all) जोड़ें।

POST/v1/audio/speech

पैरामीटर

पैरामीटरप्रकारआवश्यकविवरण
modelstringहाँवाक् मॉडल ID, जैसे elevenlabs/eleven-flash-v2.5।
inputstringहाँसंश्लेषण के लिए पाठ: प्रति अनुरोध अधिकतम 4,096 वर्ण (elevenlabs/eleven-v4 और eleven-v4-turbo के लिए 10,000)। लंबे पाठ को कई अनुरोधों में बाँटें।
voicestringहाँइस्तेमाल की जाने वाली आवाज़; उसका प्रारूप मॉडल पर निर्भर है। नीचे आवाज़ नियम देखें।
response_formatstringनहींmp3 (डिफ़ॉल्ट) या pcm। opus, aac, flac और wav को API स्वीकार करता है, पर ElevenLabs मॉडल अभी इन्हें 400 से अस्वीकार करते हैं।
speednumberनहींबोलने की गति 0.25 से 4.0 तक। हर मॉडल इसे लागू नहीं करता।
instructionsstringनहींआवाज़ की शैली के निर्देश। हर मॉडल इन्हें लागू नहीं करता।
stabilitynumberनहींआवाज़ की स्थिरता, 0–1 (डिफ़ॉल्ट 0.5)। कम मान अधिक भावपूर्ण, अधिक मान अधिक समतल। यह तब लागू होता है जब elevenlabs/* मॉडल का अनुरोध हमारे सीधे वॉइस रूट से पूरा हो; प्रतिक्रिया हेडर X-Voice-Settings applied या ignored बताता है।
similarity_boostnumberनहींमूल आवाज़ से समानता, 0–1 (डिफ़ॉल्ट 0.75)। Eleven v3 में उपयोग नहीं होता।
stylenumberनहींशैली पर ज़ोर, 0–1 (डिफ़ॉल्ट 0)। 0 से ऊपर होने पर विलंब बढ़ता है। Eleven v4 में उपयोग नहीं होता।
use_speaker_boostbooleanनहींमूल वक्ता से समानता बढ़ाता है (डिफ़ॉल्ट true); थोड़ा विलंब बढ़ता है।
clone_strengthnumberनहींक्लोन की तीव्रता, 0–1 (अधिकांश आवाज़ों के लिए 0 अनुशंसित)। केवल Eleven v4 के लिए प्रशिक्षित आपकी अपनी प्रोफ़ेशनल क्लोन आवाज़ों (voice_…) के लिए।
language_codestringनहींबोली जाने वाली भाषा तय करने के लिए दो अक्षरों का छोटे अक्षरों वाला भाषा कोड (ISO 639-1), जैसे ar, ja, en। multilingual-v2 मॉडल में उपयोग नहीं होता।
audio_effectsobjectनहींवैकल्पिक ऑडियो-इफ़ेक्ट ऑब्जेक्ट: filter_preset_id (जैसे phone, old_radio), environment_id (रीवर्ब स्थान, जैसे small_room, hall), background_noise_id (जैसे cafe), distance (0–1), send_level (रीवर्ब मात्रा, 0–1) और pan (−1…1)। ID में छोटे अक्षर, अंक और अंडरस्कोर होते हैं; कोई अतिरिक्त शुल्क नहीं। रीवर्ब या शून्य से भिन्न pan स्टीरियो आउटपुट देता है और pcm आउटपुट के साथ नहीं चलता।

ऊपर की सातों आवाज़ सेटिंग वैकल्पिक हैं; न भेजने पर कुछ नहीं बदलता। सीमा से बाहर का मान 400 लौटाता है और न भेजा जाता है, न उसका शुल्क लगता है। प्रतिक्रिया हेडर X-Voice-Settings बताता है कि आपकी सेटिंग उपयोग हुई या नहीं: applied = उपयोग हुई; ignored = बैकअप रूट ने उत्तर दिया, इसलिए सेटिंग उपयोग नहीं हुई (ऑडियो फिर भी बनता है); हेडर नहीं = आपने कोई आवाज़ सेटिंग नहीं भेजी। उदाहरण: stability 0 अधिक भावपूर्ण पढ़ता है, 1 अधिक समतल।

आवाज़ के नियम

ElevenLabs मॉडल (elevenlabs/…) इन आवाज़ नामों में से एक लेते हैं (अक्षर-भेद नहीं): george, sarah, adam, alice, bella, bill, brian, callum, charlie, chris, daniel, eric, harry, jessica, laura, liam, lily, matilda, river, roger, will। ElevenLabs मॉडल के लिए voice छोड़ा जा सकता है (डिफ़ॉल्ट george)। अन्य मान पर 400 invalid_voice मिलता है। आपकी अपनी कस्टम आवाज़ (voice_…) का वर्णन नीचे «कस्टम आवाज़ें» अनुभाग में है।

alloy, echo या nova जैसे OpenAI-style आवाज़ नाम केवल उन मॉडलों पर काम करते हैं जो उन्हें सूचीबद्ध करते हैं। मॉडल पृष्ठ देखें।

कस्टम आवाज़ें (क्लोनिंग) चरणबद्ध रूप से खोली जा रही हैं: नीचे «कस्टम आवाज़ें» अनुभाग (POST /v1/voices) देखें। आपके खाते में चालू होने तक ऊपर के 21 प्रीसेट नामों या किसी सार्वजनिक voice ID का उपयोग करें।

ElevenLabs मॉडल को alloy भेजने पर त्रुटि आती है
ElevenLabs मॉडल को ऐसी आवाज़ मिलने पर जो न voice ID है न समर्थित नामों में से (जैसे alloy या Rachel), 400 invalid_voice लौटता है और संदेश में स्वीकार्य नाम दिए जाते हैं। विफल अनुरोधों पर शुल्क नहीं लगता।

अंतर्निहित आवाज़ें

voice में नीचे दिए गए नामों में से एक (छोटे अक्षरों में) दें। हर आवाज़ का हमारा अपना छोटा पूर्वावलोकन क्लिप है, और GET /api/v1/audio/voices पूरी सूची (लिंग, आयु वर्ग, उच्चारण, शैली और पूर्वावलोकन URL) देता है।

?lang= (en, zh-TW, zh-CN; डिफ़ॉल्ट Accept-Language) केवल description की भाषा तय करता है। पूर्वावलोकन URL नहीं बदलते: preview_urls.en (preview_url के समान) अंग्रेज़ी क्लिप है और preview_urls.zh (preview_url_zh के समान) चीनी क्लिप।

आवाज़विवरणपूर्वावलोकन
georgeMale, middle-aged, British accent. Mature and steady, suited to narration and storytelling.
sarahFemale, young adult, American accent. Professional and clear, suited to broadcast-style reading.
adamMale, middle-aged, American accent. Everyday and approachable, suited to short social videos.
aliceFemale, middle-aged, British accent. Professional and informative, suited to explainers and teaching.
bellaFemale, middle-aged, American accent. Professional and informative, suited to explainers and teaching.
billMale, senior, American accent. Crisp and direct, suited to advertising voice-overs.
brianMale, middle-aged, American accent. Polished and refined, suited to social and brand content.
callumMale, middle-aged, American accent. Expressive, suited to characters and animation.
charlieMale, young adult, Australian accent. Energetic and lively, suited to conversation.
chrisMale, middle-aged, American accent. Relaxed and casual, suited to conversation.
danielMale, middle-aged, British accent. Formal and measured, suited to news-style and educational reading.
ericMale, middle-aged, American accent. Polished and warm, suited to conversation.
harryMale, young adult, American accent. Rough and gritty, suited to character voices.
jessicaFemale, young adult, American accent. Bright and cute, suited to conversation.
lauraFemale, young adult, American accent. Playful with attitude, suited to social content.
liamMale, young adult, American accent. Confident and upbeat, suited to social content.
lilyFemale, middle-aged, British accent. Confident and clear, suited to explainers and teaching.
matildaFemale, middle-aged, American accent. Upbeat and friendly, suited to explainers and teaching.
riverNeutral voice, middle-aged, American accent. Calm and even, suited to conversation.
rogerMale, middle-aged, American accent. Polished and confident, suited to conversation.
willMale, young adult, American accent. Laid-back and easygoing, suited to conversation.

भावना और क्रिया टैग (audio tags)

टैग को input के अंदर सीधे चौकोर कोष्ठक में लिखें, जैसे [laughs], [whispers], [excited], [sighs], [crying], [curious] या [softly]। टैग जैसे लिखे हैं वैसे ही मॉडल को भेजे जाते हैं और आगे के शब्दों को बोलने का ढंग तय करते हैं। पाठ किसी भी भाषा में हो, टैग अंग्रेज़ी में ही रखें।

curl https://api.bazaarlink.ai/v1/audio/speech \
  -H "Authorization: Bearer $BAZAARLINK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"elevenlabs/eleven-v3","input":"[laughs] That was actually funny. [whispers] Do not tell anyone.","voice":"george","response_format":"mp3"}' \
  --output audio-tags.mp3

elevenlabs/eleven-v3 और elevenlabs/eleven-v4 परिवार इन्हें समर्थन देते हैं। अन्य स्पीच मॉडल टैग नहीं समझते और कोष्ठक के भीतर का पाठ पढ़ सकते हैं, इसलिए पहले एक छोटा वाक्य आज़माएँ।

टैग भी input के अक्षरों में गिने जाते हैं और बाकी पाठ की तरह ही बिल होते हैं।

आउटपुट प्रारूप

response_format छोड़ने पर डिफ़ॉल्ट mp3 (Content-Type audio/mpeg) है; pcm (audio/pcm, कच्चा 16-bit PCM) भी काम करता है। API opus, aac, flac और wav स्वीकार करता है, पर ElevenLabs मॉडल अभी इन्हें 400 से अस्वीकार करते हैं। फ़ाइल को प्रतिक्रिया के Content-Type हेडर के अनुसार सहेजें।

मूल्य निर्धारण

वाक् संश्लेषण का शुल्क इनपुट वर्णों के आधार पर लगता है। प्रति वर्ण दर /models के मॉडल पृष्ठ और GET /v1/models में pricing.character पर मिलती है। मॉडल पृष्ठ इसे दस लाख वर्णों के आधार पर दिखाता है।

उदाहरण

curl https://api.bazaarlink.ai/v1/audio/speech \
  -H "Authorization: Bearer $BAZAARLINK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"elevenlabs/eleven-flash-v2.5","input":"Hello from BazaarLink.","voice":"george","response_format":"mp3"}' \
  --output speech.mp3

सामान्य त्रुटियाँ

स्थितिकारण और समाधान
400अमान्य अनुरोध: model, input या voice नहीं है; input 4,096 वर्णों से अधिक; speed 0.25–4.0 से बाहर; असमर्थित response_format; Unknown voice; unknown_model (/models पर ID जाँचें)।
401API कुंजी नहीं है या अमान्य है। अपनी BazaarLink कुंजी Authorization: Bearer के साथ भेजें।
402शेष राशि पर्याप्त नहीं है। रिचार्ज करके फिर प्रयास करें।
403प्रबंधन कुंजी मॉडल नहीं चला सकती या खाता निलंबित है। सामान्य API कुंजी उपयोग करें।
429दर सीमा पूरी हो गई है। Retry-After के अनुसार प्रतीक्षा करके फिर प्रयास करें।
502मॉडल सेवा अस्थायी रूप से अनुपलब्ध है या ऑडियो स्थानांतरण बाधित हुआ। फिर प्रयास करें; विफल अनुरोध का शुल्क नहीं लगता।

पूरा पैरामीटर संदर्भ: वाक् संश्लेषण

ऑडियो प्रतिलेखन मार्गदर्शिका

POST /v1/audio/transcriptions OpenAI-compatible है: multipart/form-data में ऑडियो अपलोड करें या JSON में base64 input_audio भेजें और पाठ पाएँ। मॉडलों में elevenlabs/scribe-v2 और elevenlabs/scribe-v2-medical शामिल हैं। ताज़ा सूची GET /v1/models?output_modalities=transcription पर देखें। GET /v1/models डिफ़ॉल्ट रूप से केवल टेक्स्ट मॉडल लौटाता है, इसलिए सूची देखने के लिए ?output_modalities=transcription (या all) जोड़ें।

POST/v1/audio/transcriptions

पैरामीटर

पैरामीटरप्रकारआवश्यकविवरण
modelstringहाँप्रतिलेखन मॉडल ID, जैसे elevenlabs/scribe-v2।
filefileहाँऑडियो फ़ाइल (multipart)। wav, mp3, mp4, m4a, ogg, flac, webm, aac समर्थित हैं। अधिकतम 25 MiB। JSON क्लाइंट इसके बदले input_audio: {data: base64, format} भेज सकते हैं।
response_formatstringनहींjson (डिफ़ॉल्ट) {text} लौटाता है; verbose_json भाषा, अवधि और segments/words भी देता है।
languagestringनहींen या zh जैसा वैकल्पिक भाषा संकेत। खाली छोड़ने पर स्वतः पहचान होती है।
promptstringनहींनाम और शब्द पहचानने में मदद के लिए वैकल्पिक संदर्भ पाठ। हर मॉडल इसे लागू नहीं करता।
timestamp_granularities[]string[]नहींword और/या segment। केवल response_format=verbose_json पर लागू; अन्यथा अनदेखा। शब्द-स्तर के टाइमस्टैम्प अभी नहीं लौटाए जाते; segments लौटाए जाते हैं।

आउटपुट प्रारूप

response_format केवल json या verbose_json स्वीकार करता है (text, srt, vtt समर्थित नहीं हैं)। stream समर्थित नहीं है। ऑडियो अवधि की सीमा मॉडल के अनुसार है, डिफ़ॉल्ट 60 सेकंड। लंबा ऑडियो प्रसंस्करण से पहले 413 audio_too_long के साथ अस्वीकार होता है और कोई शुल्क नहीं लगता। लंबी रिकॉर्डिंग को भागों में बाँटें।

मूल्य निर्धारण

प्रतिलेखन का शुल्क ऑडियो के सेकंड के अनुसार लगता है। प्रति सेकंड दर /models के मॉडल पृष्ठ और GET /v1/models में pricing.second पर मिलती है; प्रति मिनट दर उसका 60 गुना है। उत्तर का usage बिल किए गए सेकंड और usage.cost शुल्क दिखाता है।

उदाहरण

curl https://api.bazaarlink.ai/v1/audio/transcriptions \
  -H "Authorization: Bearer $BAZAARLINK_API_KEY" \
  -F model="elevenlabs/scribe-v2" \
  -F file=@audio.mp3 \
  -F response_format=verbose_json \
  -F "timestamp_granularities[]=word"

सामान्य त्रुटियाँ

स्थितिकारण और समाधान
400अमान्य अनुरोध: model या file नहीं है, ऑडियो खाली है, response_format json/verbose_json नहीं है, stream=true (unsupported_parameter), या timestamp_granularities word/segment नहीं है।
401API कुंजी नहीं है या अमान्य है।
402शेष राशि पर्याप्त नहीं है। रिचार्ज करके फिर प्रयास करें।
413audio_too_large: डिकोड किया गया ऑडियो 25 MiB से बड़ा है। audio_too_long: मॉडल की अवधि सीमा (डिफ़ॉल्ट 60 सेकंड) पार होने पर ऑडियो प्रसंस्करण से पहले अस्वीकार होता है और शुल्क नहीं लगता। ऑडियो संपीड़ित करें या बाँटें।
429दर सीमा पूरी हो गई है। Retry-After के अनुसार फिर प्रयास करें।
502मॉडल सेवा अस्थायी रूप से अनुपलब्ध है या ऑडियो भेजना बाधित हुआ। फिर प्रयास करें; विफल अनुरोधों पर शुल्क नहीं लगता।

पूरा पैरामीटर संदर्भ: ऑडियो प्रतिलेखन

कस्टम आवाज़ें (वॉइस क्लोनिंग)

कस्टम आवाज़ें (वॉइस क्लोनिंग)
केवल आवेदन पर उपलब्ध। कस्टम आवाज़ें खाते-दर-खाते खोली जाती हैं: आवेदन के लिए ग्राहक सहायता से संपर्क करें। आपके खाते में चालू होने तक हर /v1/voices अनुरोध 403 voice_cloning_not_enabled लौटाता है (और जब सुविधा सबके लिए बंद हो तब 404 not_found)। इस पृष्ठ की सीमाएँ और कीमत डिफ़ॉल्ट मान हैं और बदल सकते हैं।

जिस आवाज़ का उपयोग करने का आपको अधिकार है, उसकी छोटी रिकॉर्डिंग अपलोड करें और हमारी अपनी voice id (voice_…) पाएँ। इस id को POST /v1/audio/speech के voice के रूप में दें। आवाज़ केवल उसे बनाने वाला व्यक्ति ही उपयोग कर सकता है।

एंडपॉइंट

POST/v1/voices

आवाज़ बनाएँ (multipart/form-data)

GET/v1/voices

अपनी आवाज़ों की सूची (limit 1–100, अगले पृष्ठ के लिए after में voice id)

GET/v1/voices/{id}

अपनी एक आवाज़ पाएँ

DELETE/v1/voices/{id}

आवाज़ हटाएँ (तुरंत लागू)

POST/v1/voices/report

आवाज़ की रिपोर्ट करें (API कुंजी की ज़रूरत नहीं)

आवाज़ बनाना: फ़ील्ड

फ़ील्डप्रकारअनिवार्यविवरण
namestringहाँआवाज़ का नाम, 1–60 अक्षर।
filesfile[]हाँउस आवाज़ की 1 से 5 रिकॉर्डिंग फ़ाइलें (mp3, wav, m4a, ogg, flac, webm)।
consentbooleanहाँtrue होना ज़रूरी है: आप पुष्टि करते हैं कि आपको इस आवाज़ को क्लोन करने और उपयोग करने का अधिकार है ("सहमति" देखें)।
consent_statement_versionstringहाँआपके द्वारा पुष्टि किए गए सहमति कथन का संस्करण। फ़िलहाल "v1"।
descriptionstringनहींवैकल्पिक, अधिकतम 200 अक्षर।
remove_background_noisebooleanनहींवैकल्पिक बूलियन, डिफ़ॉल्ट false। क्लोनिंग से पहले नमूनों का बैकग्राउंड शोर हटाता है।

अनुरोध सिंक्रोनस है: 201 का मतलब आवाज़ तुरंत उपयोग के लिए तैयार है। Idempotency-Key हेडर (कोई भी अद्वितीय स्ट्रिंग) भेजें और पुनः प्रयास में वही दोबारा इस्तेमाल करें, ताकि पुनः प्रयास से दूसरी आवाज़ न बने और न ही उसका शुल्क लगे।

उत्तर

201, जिसमें id (voice_…), object ("voice"), name, description, status ("ready"), created_at (Unix सेकंड) और usage.cost_usd (लिया गया निर्माण शुल्क) शामिल हैं। आवाज़ कैसे बनती है इसकी कोई और जानकारी हमारे सिस्टम से बाहर नहीं जाती।

GET /v1/voices केवल आपकी अपनी आवाज़ें लौटाता है: { "object": "list", "data": [ … ], "has_more": false }। किसी और की voice id पर, न होने वाली id की तरह ही, 404 voice_not_found मिलता है।

GET /v1/voices/{id} एक आवाज़ लौटाता है (ऊपर जैसे ही फ़ील्ड, usage के बिना)।

DELETE /v1/voices/{id} { "id": "voice_…", "object": "voice", "deleted": true } लौटाता है और तुरंत लागू होता है: उस आवाज़ वाले स्पीच अनुरोध तुरंत विफल हो जाते हैं। हटाना मुफ़्त है; निर्माण शुल्क वापस नहीं होता।

सीमाएँ (डिफ़ॉल्ट)

  • प्रति व्यक्ति अधिकतम 3 आवाज़ें।
  • प्रति आवाज़ 1 से 5 ऑडियो फ़ाइलें, प्रत्येक अधिकतम 10 MB और कुल 25 MB; फ़ॉर्मैट: mp3, wav, m4a, ogg, flac, webm। कुल लगभग 30 सेकंड से 5 मिनट की साफ़ आवाज़ सबसे अच्छी रहती है।
  • प्रतिदिन (UTC दिन) अधिकतम 3 निर्माण।
  • आपके खाते में सत्यापित ईमेल और कम से कम US$5 का बैलेंस होना चाहिए।
  • सार्वजनिक हस्तियों की नकल करने वाले, या आधिकारिक/स्टाफ़ आवाज़ जैसे लगने वाले नाम और विवरण अस्वीकार किए जाते हैं (invalid_voice_name)।
  • रिकॉर्डिंग केवल आवाज़ बनाने के लिए इस्तेमाल होती हैं और हम उन्हें संग्रहीत नहीं करते। हम केवल आवाज़ का नाम, मालिक, सहमति रिकॉर्ड और टाइमस्टैम्प रखते हैं।

कीमत

आवाज़ बनाने का एकमुश्त शुल्क है (डिफ़ॉल्ट US$1.00); वास्तव में लिया गया राशि usage.cost_usd में लौटती है, और शुल्क तभी लगता है जब आवाज़ सफलतापूर्वक बन जाए। स्पीच में कस्टम आवाज़ का प्रति अक्षर शुल्क उस मॉडल की अन्य आवाज़ों जितना ही है। हटाना मुफ़्त है।

सहमति

हर निर्माण में consent=true और consent_statement_version="v1" भेजना ज़रूरी है। कथन अपडेट होने पर निर्माण 400 consent_version_mismatch लौटाता है, और आप नए संस्करण से फिर पुष्टि करते हैं।

आप जिस कथन की पुष्टि करते हैं उसका मसौदा (अंतिम शब्दावली की समीक्षा चल रही है और बदल सकती है):

I confirm that I own the voice in these recordings or have the written permission of the person whose voice it is, that this person is an adult and has agreed to have their voice cloned and synthesized, and that I will not use the voice to impersonate a real person, to deceive, to harass, or for political persuasion, fraud or any unlawful purpose. I understand the voice can be removed and my account suspended if I break these rules.

कस्टम आवाज़ का उपयोग

voice id को POST /v1/audio/speech (voice=voice_…) के voice के रूप में दें, साथ में elevenlabs/* परिवार का स्पीच मॉडल। इनपुट सीमा, फ़ॉर्मैट और प्रति अक्षर कीमत मॉडल की अपनी हैं। जो voice id मौजूद नहीं है, हटाई या ब्लॉक की गई है, या किसी और की है, उस पर 400 invalid_voice मिलता है; कस्टम आवाज़ दूसरे मॉडलों के साथ उपयोग नहीं हो सकती।

उदाहरण

curl https://api.bazaarlink.ai/v1/voices \
  -H "Authorization: Bearer $BAZAARLINK_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -F name="My narrator" \
  -F description="Warm and calm" \
  -F consent=true \
  -F consent_statement_version=v1 \
  -F files=@sample-1.mp3 \
  -F files=@sample-2.wav

curl "https://api.bazaarlink.ai/v1/voices?limit=20" \
  -H "Authorization: Bearer $BAZAARLINK_API_KEY"

curl -X DELETE https://api.bazaarlink.ai/v1/voices/voice_0123456789abcdef01234567 \
  -H "Authorization: Bearer $BAZAARLINK_API_KEY"

curl https://api.bazaarlink.ai/v1/audio/speech \
  -H "Authorization: Bearer $BAZAARLINK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"elevenlabs/eleven-flash-v2.5","input":"Hello, this is my own voice.","voice":"voice_0123456789abcdef01234567","response_format":"mp3"}' \
  --output my-voice.mp3

आवाज़ की रिपोर्ट

अगर कोई आवाज़ बिना अनुमति आपकी या किसी और की नकल करती है, तो रिपोर्ट करें: POST /v1/voices/report (API कुंजी की ज़रूरत नहीं), JSON बॉडी में voice_id (voice_…) या sample_url, reason (impersonation, fraud, harassment, minor, political या other), और वैकल्पिक details व contact (ईमेल पता)। हमेशा 202 लौटता है। हम रिपोर्ट की समीक्षा करते हैं और नियम तोड़ने वाली आवाज़ें हटा देते हैं; खाते निलंबित किए जा सकते हैं।

curl https://api.bazaarlink.ai/v1/voices/report \
  -H "Content-Type: application/json" \
  -d '{"voice_id":"voice_0123456789abcdef01234567","reason":"impersonation","details":"...","contact":"me@example.com"}'

ज़िम्मेदार उपयोग

सार्वजनिक हस्तियों, मशहूर लोगों, नेताओं या किसी भी ऐसे व्यक्ति की आवाज़ क्लोन न करें जिसने सहमति नहीं दी। क्लोन की गई आवाज़ से लोगों को यह न मानने दें कि वे असली व्यक्ति से बात कर रहे हैं, और उसे धोखे, उत्पीड़न, राजनीतिक प्रभाव या धोखाधड़ी के लिए इस्तेमाल न करें।

त्रुटियाँ

स्टेटसकोडअर्थ
400bad_requestअनुरोध का प्रारूप गलत है: multipart/form-data नहीं, कोई ऑडियो फ़ाइल नहीं, description बहुत लंबा, या limit 1–100 से बाहर।
400consent_requiredconsent=true गायब है।
400consent_version_mismatchसहमति कथन का संस्करण पुराना है; वर्तमान संस्करण से फिर पुष्टि करें।
400invalid_voice_nameनाम खाली है, 60 अक्षर से लंबा है, या अनुमत नहीं है।
400too_many_files5 से अधिक ऑडियो फ़ाइलें।
401invalid_api_keyAPI कुंजी गायब या अमान्य है।
402insufficient_balanceबैलेंस कम है (निर्माण शुल्क या न्यूनतम बैलेंस)।
403email_unverifiedपहले अपना ईमेल सत्यापित करें।
403voice_cloning_not_enabledआपके खाते में कस्टम आवाज़ें अभी चालू नहीं हैं; आवेदन के लिए ग्राहक सहायता से संपर्क करें।
403voice_cloning_disabledइस सेवा में अभी कस्टम आवाज़ें चालू नहीं हैं।
404voice_not_foundऐसी कोई आवाज़ नहीं है (या वह आपकी नहीं है)।
404not_foundनहीं मिला, जिसमें आपके खाते में सुविधा चालू होने तक हर /v1/voices अनुरोध शामिल है।
405method_not_allowedइस पाथ पर वह मेथड उपलब्ध नहीं है।
409duplicate_requestवही Idempotency-Key अभी प्रोसेस हो रही है; थोड़ी देर बाद पुनः प्रयास करें।
413file_too_largeकोई फ़ाइल 10 MB से बड़ी है या सभी फ़ाइलें मिलाकर 25 MB से बड़ी हैं।
415unsupported_file_typeऑडियो प्रकार समर्थित नहीं है; mp3, wav, m4a, ogg, flac, webm का उपयोग करें।
422voice_rejectedआवाज़ प्रदाता की जाँच ने नमूना स्वीकार नहीं किया (उदाहरण: कोई प्रसिद्ध या बिल्ट-इन आवाज़, या ज्ञात AI-निर्मित आवाज़)। आवाज़ सहेजी नहीं जाती और शुल्क नहीं लिया गया। अपनी आवाज़ की साफ़ रिकॉर्डिंग, या ऐसी आवाज़ का उपयोग करें जिसका उपयोग करने की आपको अनुमति है।
429voice_create_rate_limitedदैनिक निर्माण सीमा पूरी हो गई; कल (UTC) फिर प्रयास करें।
429voice_limit_reachedआप कस्टम आवाज़ों की अधिकतम संख्या तक पहुँच गए हैं।
502upstream_failedआवाज़ नहीं बन सकी; आपसे शुल्क नहीं लिया गया। नई Idempotency-Key के साथ पुनः प्रयास करें।
503voice_capacity_fullकस्टम आवाज़ों की क्षमता फ़िलहाल भरी हुई है; आपसे शुल्क नहीं लिया गया। बाद में पुनः प्रयास करें।
504upstream_timeoutआवाज़ सेवा समय पर जवाब नहीं दे सकी; आपसे शुल्क नहीं लिया गया। वही Idempotency-Key इस्तेमाल करके पुनः प्रयास करें।

डेटा API

जल्द आ रहा है — तीन BazaarLink एंडपॉइंट के ज़रिए सार्वजनिक सोशल और कॉमर्स डेटा। यह सेवा डिफ़ॉल्ट रूप से बंद है और सक्षम होने तक रिक्वेस्ट service_paused लौटाएंगी।

सोशल डेटा रिक्वेस्ट भेजें

POST/v1/data/social

रिक्वेस्ट पैरामीटर

कोडप्रकारज़रूरीअर्थ
platformstringहाँकैटलॉग का प्लेटफ़ॉर्म ID, जैसे twitter या instagram।
actionstringहाँउस प्लेटफ़ॉर्म का समर्थित एक्शन; उपलब्ध संयोजनों के लिए कैटलॉग देखें।
paramsobjectनहींएक्शन-विशिष्ट इनपुट। कैटलॉग में required_params और optional_params का उपयोग करें।
modesync | asyncनहींवैकल्पिक। async पोल करने के लिए जॉब लौटाता है; केवल-असिंक्रोनस एक्शन को छोड़ने पर भी जॉब मिलता है।

रिस्पॉन्स फ़ॉर्मैट

HTTP 200 · data.social · id · object · platform · action · count · results · usage.cost

{
  "id": "req_example",
  "object": "data.social",
  "platform": "twitter",
  "action": "search",
  "count": 1,
  "results": [
    {
      "id": "post_example",
      "url": "https://x.com/someone/status/post_example",
      "text": "Example post",
      "like_count": 120,
      "reply_count": 8,
      "retweet_count": 14,
      "view_count": 5400,
      "posted_at": "2026-10-07T00:48:38+00:00",
      "author_username": "someone",
      "author_name": "Someone",
      "platform": "twitter"
    }
  ],
  "usage": {
    "cost": 0.0048
  }
}

असिंक्रोनस जॉब

केवल असिंक्रोनस एक्शन या mode async पर अपारदर्शी जॉब ID के साथ HTTP 202 मिलता है। GET /v1/data/jobs/{id} को पोल करें: HTTP 202 का अर्थ लंबित है और HTTP 200 पूरा हुआ data.social रिस्पॉन्स लौटाता है। जॉब 15 मिनट बाद समाप्त हो जाता है (HTTP 410 job_expired)। अज्ञात जॉब और दूसरे अकाउंट के जॉब HTTP 404 not_found लौटाते हैं। पूरा जॉब पहली सफल फ़ेच पर केवल एक बार चार्ज होता है।

{
  "platform": "instagram",
  "action": "discover",
  "params": {
    "keyword": "coffee"
  },
  "mode": "async"
}

HTTP 202

{
  "id": "job_example",
  "object": "data.job",
  "status": "pending",
  "platform": "instagram",
  "action": "discover"
}

असिंक्रोनस जॉब पोल करें

GET/v1/data/jobs/{id}

HTTP 202 pending → HTTP 200 data.social · HTTP 410 job_expired · HTTP 404 not_found

{
  "id": "job_example",
  "object": "data.social",
  "platform": "instagram",
  "action": "discover",
  "count": 1,
  "results": [
    {
      "id": "post_example",
      "url": "https://www.instagram.com/p/example/",
      "text": "Example result",
      "platform": "instagram"
    }
  ],
  "usage": {
    "cost": 0.0096
  }
}

उपलब्ध एक्शन और कीमतें सूचीबद्ध करें

GET/v1/data/catalog

object · product · platforms · actions · required_params · optional_params · max_limit · async · price_usd

{
  "object": "data.catalog",
  "product": "BazaarLink Data API",
  "platforms": [
    {
      "platform": "twitter",
      "actions": [
        {
          "action": "search",
          "label": "Keyword search",
          "required_params": [
            "keyword"
          ],
          "optional_params": [
            "sort"
          ],
          "max_limit": 200,
          "async": false,
          "price_usd": 0.0048
        }
      ]
    },
    {
      "platform": "instagram",
      "actions": [
        {
          "action": "discover",
          "label": "Discover",
          "required_params": [
            "keyword"
          ],
          "optional_params": [],
          "max_limit": null,
          "async": true,
          "price_usd": 0.0096
        }
      ]
    }
  ]
}

बिलिंग

कीमतें प्लेटफ़ॉर्म और एक्शन के आधार पर स्तरित हैं। GET /v1/data/catalog हर सक्षम एक्शन की ग्राहक कीमत दिखाता है। सफल कॉल पर एक बार शुल्क लगता है; विफल कॉल और शून्य-परिणाम कॉल मुफ़्त हैं। Data API और वेब सर्च एक दैनिक मुफ़्त भत्ता साझा करते हैं।

एरर कोड

{"error":{"code":"<code>","message":"<fixed message>"}}

कोडHTTPअर्थ
unauthorized401API key मौजूद नहीं है या अमान्य है।
forbidden403रिक्वेस्ट की अनुमति नहीं है।
invalid_request400रिक्वेस्ट बॉडी अमान्य है।
invalid_params400एक्शन पैरामीटर अस्वीकार किए गए।
unsupported_capability400प्लेटफ़ॉर्म या एक्शन उपलब्ध नहीं है।
insufficient_credits402क्रेडिट अपर्याप्त हैं।
budget_cap_reached402 or policy statusअकाउंट की खर्च सीमा पूरी हो गई है।
body_too_large413रिक्वेस्ट बॉडी आकार सीमा से बड़ी है।
free_quota_exhausted432दैनिक मुफ़्त भत्ता समाप्त हो गया है।
rate_limited429रेट सीमा पूरी हो गई है; Retry-After का पालन करें।
data_unavailable503डेटा सेवा अस्थायी रूप से उपलब्ध नहीं है।
timeout504रिक्वेस्ट का समय समाप्त हो गया।
bad_upstream_response502डेटा सेवा ने अमान्य रिस्पॉन्स लौटाया।
job_expired410जॉब 15 मिनट बाद समाप्त हो गया।
not_found404जॉब अज्ञात है या किसी दूसरे अकाउंट का है।
job_failed503असिंक्रोनस जॉब विफल हुआ।
service_paused503सेवा अभी सक्षम नहीं है या रुकी हुई है।

उदाहरण

curl

curl https://api.bazaarlink.ai/v1/data/social \
  -H "Authorization: Bearer $BAZAARLINK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"platform":"twitter","action":"search","params":{"keyword":"BazaarLink","limit":5}}'

Python (requests)

import os
import requests

response = requests.post(
    "https://api.bazaarlink.ai/v1/data/social",
    headers={"Authorization": f"Bearer {os.environ['BAZAARLINK_API_KEY']}"},
    json={"platform": "twitter", "action": "search", "params": {"keyword": "BazaarLink", "limit": 5}},
    timeout=30,
)
response.raise_for_status()
print(response.json())

JavaScript (fetch)

const response = await fetch("https://api.bazaarlink.ai/v1/data/social", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.BAZAARLINK_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ platform: "twitter", action: "search", params: { keyword: "BazaarLink", limit: 5 } }),
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
console.log(await response.json());

Submit a decisions request

Evaluate a state against named questions with a decisions-output model. This alpha endpoint returns non-streaming JSON. Find available model ids with GET /v1/models?output_modalities=decisions; use this endpoint for Clef instead of chat/completions. Input tokens are billed at the selected model's customer price. Sufficient credits are required. Set BAZAARLINK_API_KEY to your API key; the sample builds its complete Authorization header in BAZAARLINK_AUTH_HEADER.

View the decisions API reference

export BAZAARLINK_AUTH_HEADER="Authorization: $(printf '%s %s' 'Bearer' "$BAZAARLINK_API_KEY")"

curl https://api.bazaarlink.ai/v1/alpha/decisions \
  -H "$BAZAARLINK_AUTH_HEADER" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "cloudflare/clef-flash",
    "state": "The support agent issued a full refund.",
    "questions": {
      "refunded": {
        "type": "noul",
        "instructions": "Was a refund issued?"
      }
    }
  }'

वीडियो इनपुट

वीडियो इनपुट सपोर्ट करने वाले मॉडल को वीडियो फ़ाइलें भेजें ताकि विश्लेषण, कैप्शन या दृश्यों और घटनाओं से जुड़े सवालों के जवाब पाए जा सकें। सीधे URL या base64 data URI से काम करता है — सार्वजनिक रूप से उपलब्ध वीडियो के लिए URL अधिक कुशल है; स्थानीय फ़ाइलों या निजी वीडियो के लिए base64।

समर्थित प्रारूप

MP4 (H.264)MPEGMOVWebM
response = client.chat.completions.create(
    model="google/gemini-3.5-flash",
    messages=[{
        "role": "user",
        "content": [
            {
                "type": "video_url",
                "video_url": {"url": "https://example.com/video.mp4"},
            },
            {"type": "text", "text": "What is happening in this video?"},
        ],
    }],
)

पूरा API संदर्भ →

PDF इनपुट

PDF को नेटिव रूप से सपोर्ट करने वाले मॉडल (जैसे Claude, Gemini) को संदेशों में सीधे PDF दस्तावेज़ भेजें। BazaarLink फ़ाइल को सीधे मॉडल को भेजता है — सामान्य input tokens की तरह बिल होता है, कोई अतिरिक्त शुल्क या प्रोसेसिंग चरण नहीं।

समर्थित प्रारूप

  • PDF दस्तावेज़ (पाठ, चित्र, तालिकाएँ, स्कैन किए गए)
  • Base64-एन्कोडेड डेटा URL (`data:application/pdf;base64,...`)
  • बहु-पृष्ठ दस्तावेज़ केवल
  • पासवर्ड-मुक्त पीडीएफ
import base64

with open("document.pdf", "rb") as f:
    pdf_data = base64.b64encode(f.read()).decode()

response = client.chat.completions.create(
    model="anthropic/claude-sonnet-4.6",
    messages=[{
        "role": "user",
        "content": [
            {
                "type": "file",
                "file": {
                    "filename": "document.pdf",
                    "file_data": f"data:application/pdf;base64,{pdf_data}",
                },
            },
            {"type": "text", "text": "Summarize this document."},
        ],
    }],
)

Responses API

An OpenAI प्रतिक्रियाएँ API-स्टेटलेस मल्टी-टर्न वार्तालाप, टूल कॉलिंग और मल्टीमॉडल इनपुट के लिए संगत समापन बिंदु। एजेंटों और फ्रेमवर्क के लिए आदर्श जो client.responses.create() के साथ OpenAI Python SDK ≥ 1.x का उपयोग करते हैं।

POST/v1/responses
Note
Chat Completions के समान प्रमाणीकरण और मॉडल रूटिंग को स्वीकार करता है।

अनुरोध बॉडी

modelआवश्यक
string
GET /v1/models में सूचीबद्ध id या alias इस्तेमाल करें, जैसे "claude-sonnet-4.6" या "anthropic/claude-sonnet-4.6"।
inputआवश्यक
string | Item[]
User इनपुट - एक सादा स्ट्रिंग (एकल संदेश) या मल्टी-टर्न / मल्टीमॉडल वार्तालापों के लिए इनपुट आइटम की एक सरणी।
instructions
string
सिस्टम-स्तरीय निर्देश, सिस्टम संदेश के समतुल्य। प्रत्येक अनुरोध पर पुनः भेजा जाना चाहिए।
stream
boolean
यदि सत्य है, तो प्रतिक्रियाएँ API SSE स्ट्रीम इवेंट लौटाता है। इवेंट प्रकार: प्रतिक्रिया.निर्मित, प्रतिक्रिया.आउटपुट_टेक्स्ट.डेल्टा, प्रतिक्रिया.पूर्ण।
max_output_tokens
integer
उत्पन्न करने के लिए आउटपुट टोकन की अधिकतम संख्या (ओ-श्रृंखला मॉडल के लिए तर्क टोकन शामिल हैं)।
temperature
number
Sampling मान बिना range validation के भेजे जाते हैं। Model समर्थित सीमा से बाहर के मानों को सीमित या अनदेखा कर सकता है।
top_p
number
न्यूक्लियस नमूना संभाव्यता द्रव्यमान। डिफ़ॉल्ट: 1
tools
Tool[]
टूल (फ़ंक्शन) परिभाषाएँ — Chat Completions जैसा ही JSON Schema प्रारूप (फ़्लैट Responses रूप और नेस्टेड रूप दोनों स्वीकार्य)। OpenAI के अपने अंतर्निहित होस्टेड टूल (web_search_preview, file_search, computer_use_preview) समर्थित नहीं हैं; वेब सर्च plugins: [{id:"web"}] से उपलब्ध है — केवल कुछ मॉडल रूट पर समर्थित।
tool_choice
string | object
कंट्रोल्स टूल का उपयोग: "ऑटो", "कोई नहीं", या विशिष्ट टूल
parallel_tool_calls
boolean
उपकरण उपलब्ध कराए जाने पर समानांतर फ़ंक्शन कॉलिंग सक्षम करें। डिफ़ॉल्ट: सत्य. केवल OpenAI-पारिवारिक मॉडल - नीचे नोट देखें।
response_format
object
Force संरचित JSON आउटपुट। संरचित आउटपुट अनुभाग देखें
previous_response_id
string
यह एंडपॉइंट स्टेटलेस है — गैर-null मान भेजने पर तुरंत 400 (invalid_prompt) लौटता है, यह कभी स्वीकार होकर अनदेखा नहीं होता। इसके बजाय स्टेटलेस मोड का उपयोग करें: input सरणी में पूरा बातचीत इतिहास भेजें।

अनुरोध स्कीमा (TypeScript)

type ResponsesRequest = {
  model: string;                    // Listed id or alias from GET /v1/models
  input: string | InputItem[];      // string or multi-turn array

  // Optional
  instructions?: string;            // System-level message
  stream?: boolean;                 // Default: false
  max_output_tokens?: number;
  temperature?: number;
  top_p?: number;
  tools?: Tool[];
  tool_choice?: "auto" | "none" | "required" | object;
  parallel_tool_calls?: boolean;    // Default: true
  previous_response_id?: string;    // Not supported — use full input array
};

type InputItem =
  | { type?: "message"; role: "user" | "assistant" | "system" | "developer"; content: string | ContentBlock[] }
  | { type: "function_call_output"; call_id: string; output: string }   // tool result
  | { type: "function_call"; call_id: string; name: string; arguments: string };

type ContentBlock =
  | { type: "input_text"; text: string }
  | { type: "input_image"; image_url: string; detail?: "auto" | "low" | "high" };

उदाहरण अनुरोध

curl https://api.bazaarlink.ai/v1/responses \
  -H "Authorization: Bearer $BAZAARLINK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-5.4-mini",
    "instructions": "You are a helpful assistant.",
    "input": "What is the capital of Taiwan?"
  }'

प्रतिक्रिया प्रारूप

BazaarLink मानकीकृत response लौटाता है और upstream-विशिष्ट फ़ील्ड हटा देता है। response में अपारदर्शी BazaarLink request ID x-request-id के समान होता है; इसे GET /v1/generation के साथ उपयोग करें। non-streaming response में वही ID x-generation-id में भी आता है। usage.cost ग्राहक से वसूली गई USD राशि है। आँकड़े पूरा होने के कुछ सेकंड बाद मिल सकते हैं; 404 पर थोड़ी देर retry करें।

// Non-streaming response object
type ResponsesResponse = {
  id: string;             // Opaque BazaarLink request id; format may change
  object: "response";
  created_at: number;
  completed_at: number;
  status: "completed" | "failed" | "incomplete";
  model: string;
  output: OutputItem[];
  usage: {
    input_tokens: number;   // equivalent to prompt_tokens
    output_tokens: number;  // equivalent to completion_tokens
    total_tokens: number;
    cost?: number;          // USD amount charged to the customer for this request
  } | null;
  error: null | { code: string; message: string };
};

type OutputItem =
  | {
      type: "message";
      id: string;
      role: "assistant";
      status: "completed";
      content: Array<{ type: "output_text"; text: string; annotations: [] }>;
    }
  | { type: "function_call"; id: string; call_id: string; name: string; arguments: string; status: "completed" };

Chat Completions से माइग्रेट हो रहा है

संदेशों को इनपुट (स्ट्रिंग या ऐरे) से बदलें, सिस्टम-रोल संदेश के बजाय निर्देशों का उपयोग करें, और विकल्पों[0].message.content के बजाय आउटपुट[0].content[0].text पढ़ें।

# Chat Completions (before)
response = client.chat.completions.create(
    model="openai/gpt-5.4-mini",
    messages=[
        {"role": "system", "content": "You are helpful."},
        {"role": "user",   "content": "Hello"},
    ]
)
text = response.choices[0].message.content

# Responses API (after)
response = client.responses.create(
    model="openai/gpt-5.4-mini",
    instructions="You are helpful.",
    input="Hello"
)
text = response.output[0].content[0].text

सीमाएँ

  • previous_response_id या store: true को 400 (त्रुटि कोड invalid_prompt) के साथ अस्वीकार किया जाता है — स्वीकार होकर अनदेखा नहीं होता। हमेशा स्टेटलेस मोड का उपयोग करें: input सरणी में पूरा बातचीत इतिहास भेजें।
  • OpenAI के अपने अंतर्निहित होस्टेड टूल (web_search_preview, file_search, computer_use_preview) समर्थित नहीं हैं। वेब सर्च plugins: [{id:"web"}] से उपलब्ध है — केवल कुछ मॉडल रूट पर समर्थित।
  • background: true स्वीकार किया जाता है लेकिन अनदेखा कर दिया जाता है — हर अनुरोध पूरा होने तक सिंक्रोनस रूप से चलता है।

Messages (Anthropic)

Claude SDK के लिए Anthropic-संगत Messages API। SDK को BazaarLink पर पॉइंट करें और BazaarLink API key उपयोग करें; response फ़ील्ड और बिलिंग metadata नीचे दिए BazaarLink अनुबंध के अनुसार हैं।

POST/v1/messages
Note
बियरर टोकन या एक्स-एपीआई-कुंजी हेडर स्वीकार करता है (Anthropic SDK संगतता)। अधिकतम बॉडी आकार: 10 एमबी.

अनुरोध बॉडी

modelआवश्यक
string
GET /v1/models में सूचीबद्ध id या alias इस्तेमाल करें, जैसे "claude-sonnet-4.6" या "anthropic/claude-sonnet-4.6"।
max_tokensआवश्यक
integer
उत्पन्न करने के लिए टोकन की अधिकतम संख्या (सकारात्मक पूर्णांक)।
messagesआवश्यक
Message[]
बातचीत संदेशों की सरणी (गैर-रिक्त)।
system
string
वैकल्पिक सिस्टम प्रॉम्प्ट।
stream
boolean
यदि सत्य है, तो सर्वर-भेजे गए इवेंट स्ट्रीम लौटाता है। डिफ़ॉल्ट: ग़लत
temperature
number
Sampling मान बिना range validation के भेजे जाते हैं। Model समर्थित सीमा से बाहर के मानों को सीमित या अनदेखा कर सकता है।
top_p
number
न्यूक्लियस नमूना संभाव्यता द्रव्यमान। डिफ़ॉल्ट: 1
top_k
integer
Sampling मान बिना range validation के भेजे जाते हैं। Model समर्थित सीमा से बाहर के मानों को सीमित या अनदेखा कर सकता है।
stop_sequences
string[]
कस्टम स्टॉप अनुक्रम स्ट्रिंग।
tools
Tool[]
उन टूल (फ़ंक्शन) की सूची जिन्हें मॉडल कॉल कर सकता है
tool_choice
string | object
कंट्रोल्स टूल का उपयोग: "ऑटो", "कोई नहीं", या विशिष्ट टूल

उदाहरण अनुरोध

from anthropic import Anthropic

client = Anthropic(
    base_url="https://api.bazaarlink.ai/v1",
    api_key="sk-bl-YOUR_KEY"
)

response = client.messages.create(
    model="anthropic/claude-opus-4.6",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello"}]
)
print(response.content[0].text)

प्रतिक्रिया

BazaarLink मानकीकृत response लौटाता है और upstream-विशिष्ट फ़ील्ड हटा देता है। response में अपारदर्शी BazaarLink request ID x-request-id के समान होता है; इसे GET /v1/generation के साथ उपयोग करें। non-streaming response में वही ID x-generation-id में भी आता है। usage.cost और usage.bz_cost में ग्राहक से वसूली गई वही USD राशि होती है। आँकड़े पूरा होने के कुछ सेकंड बाद मिल सकते हैं; 404 पर थोड़ी देर retry करें।

{
  "id": "85e6f35c71a31f19-SJC",
  "type": "message",
  "role": "assistant",
  "model": "anthropic/claude-opus-4.6",
  "content": [
    { "type": "text", "text": "Hello! How can I help you today?" }
  ],
  "stop_reason": "end_turn",
  "usage": {
    "input_tokens": 10,
    "output_tokens": 12,
    "cache_read_input_tokens": 0,
    "cache_creation_input_tokens": 0,
    "cost": 0.00042,
    "bz_cost": 0.00042
  }
}

Error envelope विफलता के अनुसार बदलता है। HTTP status और मौजूद होने पर error.type के आधार पर आगे बढ़ें; error.code string, numeric HTTP status हो सकता है या अनुपस्थित। संभालने के निर्देश के लिए Errors अनुभाग देखें।

मॉडल

मूल्य निर्धारण और क्षमता की जानकारी के साथ सभी उपलब्ध मॉडलों की सूची बनाएं। इस समापन बिंदु के लिए किसी प्रमाणीकरण की आवश्यकता नहीं है।

GET/v1/models
# Text models (default)
curl https://api.bazaarlink.ai/v1/models

# Complete catalog
curl "https://api.bazaarlink.ai/v1/models?output_modalities=all"

प्रतिक्रिया

{
  "data": [
    {
      "id": "openai/gpt-4o",
      "name": "GPT 4.1",
      "context_length": 1047576,
      "modality": "text+image+file->text",
      "pricing": {
        "prompt": "2.00",
        "completion": "8.00"
      }
    }
  ]
}
// /v1/models — Response Schema
type ModelsResponse = {
  data: Model[];
};

type Model = {
  id: string;                    // Model ID (e.g. "openai/gpt-4o")
  name: string;                  // Human-readable name
  context_length: number | null; // Max context window in tokens
  modality: string | null;       // e.g. "text->text", "text+image->text"
  architecture?: {
    input_modalities?: string[];
    output_modalities?: Array<
      "text" | "image" | "embeddings" | "audio" |
      "video" | "rerank" | "speech" | "transcription"
    >;
  };
  pricing: {
    prompt: string;              // Input price per 1M tokens (USD)
    completion: string;          // Output price per 1M tokens (USD)
    input_cache_read?: string;   // Cache read price per token (USD); only when the model publishes one
    input_cache_write?: string;  // Cache write price per token (USD); only when the model publishes one
    image_output?: string;       // Image output price per token (USD); only token-billed image models (display only)
  };
  description?: string | null;   // Model description
  top_provider?: {
    max_completion_tokens?: number;
  };
  supported_parameters?: string[]; // e.g. ["tools", "response_format", "reasoning"]
  pricing_tiers?: {               // Present only for models with input-length tiers
    above_prompt_tokens: number;  // Ascending; strict "greater than" threshold
    prompt: string;                // USD per token, override tier
    completion: string;            // USD per token, override tier
    input_cache_read?: string;     // USD per token, only when the tier overrides it
    input_cache_write?: string;    // USD per token, only when the tier overrides it
  }[];
};

इनपुट-लंबाई स्तरित मूल्य निर्धारण

कुछ मॉडल संकेत के टोकन सीमा से अधिक हो जाने पर एक अलग मूल्य तालिका में बदल जाते हैं - पूरी तालिका बदल जाती है, न कि केवल सीमा से ऊपर के टोकन। सीमाएं सख्त हैं: बिल्कुल एन टोकन वाला एक प्रॉम्प्ट अभी भी एन के नीचे के स्तर पर बिल करता है; उच्चतर स्तर तभी लागू होता है जब इनपुट टोकन एन से अधिक हों।

pricing_tiers मूल्य निर्धारण का एक सहोदर है, जो केवल तभी मौजूद होता है जब किसी मॉडल के आधार मूल्य से अधिक स्तर ओवरराइड हो जाते हैं। प्रविष्टियाँ उपरोक्त_प्रोम्प्ट_टोकन के अनुसार आरोही क्रम में क्रमबद्ध की जाती हैं; prompt/completion प्रति टोकन USD हैं (pricing.prompt/pricing.completion के समान इकाई)। मूल्य निर्धारण.प्रॉम्प्ट और मूल्य निर्धारण.समापन हमेशा आधार (निम्नतम) स्तर बने रहते हैं।

अधिकांश मॉडलों में कोई स्तर नहीं है - उनके लिए, मूल्य निर्धारण_स्तर कुंजी प्रतिक्रिया से अनुपस्थित है।

{
  "id": "openai/gpt-4o",
  "name": "GPT 4.1",
  "pricing": {
    "prompt": "2.00",
    "completion": "8.00"
  },
  "pricing_tiers": [
    {
      "above_prompt_tokens": 128000,
      "prompt": "4.00",
      "completion": "16.00"
    }
  ]
}

उपलब्ध मॉडल (171)

ये वे मॉडल हैं जो वर्तमान में BazaarLink पर उपलब्ध हैं, जो हमारे डेटाबेस से गतिशील रूप से लोड किए गए हैं:

Qwen
qwen/qwen3.8-max1000K ctx · $1.32/$3.96text+image+video->text
qwen/qwen3.7-plus1000K ctx · $0.26/$1.02text+image->text
qwen/qwen3.7-max1000K ctx · $1.32/$3.96text->text
qwen/qwen3.7-flash1000K ctx · $0.03/$0.13text+image+video->text
qwen/qwen3-embedding-4b33K ctx · $0.02/$0.00text->embeddings
qwen/qwen3.5-35b-a3b262K ctx · $0.25/$1.00text+image+video->text
qwen/qwen3.5-27b262K ctx · $0.21/$2.08text+image+video->text
qwen/qwen3-next-80b-a3b-instruct262K ctx · $0.12/$0.46text->text
qwen/qwen3.5-397b-a17b262K ctx · $0.44/$2.80text+image+video->text
qwen/qwen3.6-35b-a3b262K ctx · $0.30/$1.80text+image+video->text
qwen/qwen3.6-plus1000K ctx · $0.26/$1.56text+image+video->text
qwen/qwen3-coder-flash1000K ctx · $0.24/$1.20text->text
qwen/qwen3.5-122b-a10b262K ctx · $0.32/$2.56text+image+video->text
qwen/qwen3-vl-235b-a22b-instruct262K ctx · $0.20/$0.88text+image->text
qwen/qwen3.8-27b1000K ctx · $0.40/$2.40text+image+video->text
qwen/qwen3.6-27b262K ctx · $0.48/$2.88text+image+video->text
qwen/qwen3.8-2.4t-a95b1049K ctx · $1.60/$4.80text->text
qwen/qwen3-embedding-8b33K ctx · $0.01/$0.00text->embeddings
qwen/qwen3-embedding-0.6b33K ctx · $0.01/$0.00text->embeddings
qwen/qwen3.5-flash-02-231000K ctx · $0.07/$0.26text+image+video->text
qwen/qwen3-coder-30b-a3b-instruct262K ctx · $0.07/$0.28text->text
qwen/qwen3-coder-next262K ctx · $0.12/$0.80text->text
qwen/qwen3-vl-30b-a3b-instruct262K ctx · $0.15/$0.60text+image->text
qwen/qwen3.5-plus-02-151000K ctx · $0.26/$1.56text+image+video->text
qwen/qwen3.5-plus-202604201000K ctx · $0.30/$1.80text+image+video->text
qwen/qwen3-coder262K ctx · $0.30/$1.00text->text
qwen/qwen-2.5-72b-instruct33K ctx · $0.36/$0.40text->text
qwen/qwen-image-3 · $0.00/$0.00text+image->image
qwen/qwen-image-3-pro · $0.00/$0.00text+image->image
Google
google/gemini-4-argon1049K ctx · $2.00/$10.00text+image+file+audio+video->text
google/gemini-3.1-flash-lite-preview1049K ctx · $0.25/$1.50text+image+file+audio+video->text
google/gemini-3.1-pro-preview1049K ctx · $1.80/$10.80text+image+file+audio+video->text
google/gemma-3-4b-it131K ctx · $0.05/$0.10text+image->text
google/gemini-3.1-flash-lite1049K ctx · $0.25/$1.50text+image+file+audio+video->text
google/gemini-3.5-flash-lite1049K ctx · $0.27/$2.25text+image+file+audio+video->text
google/gemini-3-flash-preview1049K ctx · $0.45/$2.70text+image+file+audio+video->text
google/gemini-3.8-flash1049K ctx · $0.75/$3.75text+image+file+audio+video->text
google/gemini-3.6-flash1049K ctx · $0.68/$3.38text+image+file+audio+video->text
google/gemini-3.7-flash1049K ctx · $0.75/$3.75text+image+file+audio+video->text
google/gemini-3.5-flash1049K ctx · $1.35/$8.10text+image+file+audio+video->text
google/text-multilingual-embedding-0022K ctx · $0.03/$0.00text->embeddings
google/text-embedding-0052K ctx · $0.03/$0.00text->embeddings
google/gemini-embedding-00120K ctx · $0.15/$0.00text->embeddings
google/gemma-4-26b-a4b-it262K ctx · $0.09/$0.34text+image+video->text
google/gemma-4-31b-it262K ctx · $0.09/$0.34text+image+video->text
google/gemini-2.5-flash-image33K ctx · $0.30/$2.50text+image->text+image
google/gemini-3.1-flash-image131K ctx · $0.50/$3.00text+image->text+image
google/gemini-3.1-flash-image-preview66K ctx · $0.50/$3.00text+image->text+image
google/gemini-3-pro-image131K ctx · $2.00/$12.00text+image->text+image
google/veo-3.1 · $0.00/$0.00text+image->video
google/gemini-embedding-2-preview8K ctx · $0.20/$0.00text+image+file+audio+video->embeddings
google/gemini-nano-banana-2.166K ctx · $1.50/$7.50text+image->text+image
OpenAI
openai/gpt-5.3-codex400K ctx · $1.75/$14.00text->text
openai/gpt-oss-120b131K ctx · $0.15/$0.60text->text
openai/gpt-oss-safeguard-20b131K ctx · $0.07/$0.30text->text
openai/gpt-6-luna1050K ctx · $0.09/$0.45text+image+file->text
openai/gpt-5.6-luna1050K ctx · $0.18/$1.08text+image+file->text
openai/gpt-5.4-mini400K ctx · $0.68/$4.05text+image+file->text
openai/gpt-5.6-terra1050K ctx · $1.80/$10.80text+image+file->text
openai/gpt-6.1-sol1050K ctx · $2.00/$10.00text+image+file->text
openai/gpt-6-sol1050K ctx · $1.80/$9.00text+image+file->text
openai/gpt-5.41050K ctx · $2.25/$13.50text+image+file->text
openai/gpt-4o128K ctx · $2.25/$9.00text+image+file->text
openai/gpt-5.6-sol1050K ctx · $4.50/$27.00text+image+file->text
openai/gpt-5.51050K ctx · $5.00/$30.00text+image+file->text
openai/gpt-6-astra1050K ctx · $9.00/$45.00text+image+file->text
openai/text-embedding-3-small8K ctx · $0.02/$0.00text->embeddings
openai/text-embedding-ada-0028K ctx · $0.10/$0.00text->embeddings
openai/text-embedding-3-large · $0.13/$0.00text->embeddings
openai/gpt-oss-20b131K ctx · $0.03/$0.13text->text
openai/gpt-image-1-mini400K ctx · $2.00/$8.00text+image->image
openai/gpt-image-2.5-sunburst400K ctx · $5.00/$30.00text+image->image
openai/gpt-5.4-image-2272K ctx · $8.00/$15.00text+image+file->text+image
openai/gpt-image-2.5-flare400K ctx · $5.00/$30.00text+image->image
openai/gpt-image-1400K ctx · $10.00/$10.00text+image->image
Anthropic
anthropic/claude-sonnet-4.61000K ctx · $3.00/$15.00text+image+file->text
anthropic/claude-opus-4.61000K ctx · $5.00/$25.00text+image+file->text
anthropic/claude-haiku-5.51000K ctx · $0.10/$0.50text+image+file->text
anthropic/claude-haiku-4.5200K ctx · $1.00/$5.00text+image+file->text
anthropic/claude-sonnet-51000K ctx · $2.00/$10.00text+image+file->text
anthropic/claude-sonnet-5.51000K ctx · $2.00/$10.00text+image+file->text
anthropic/claude-sonnet-4.51000K ctx · $3.00/$15.00text+image+file->text
anthropic/claude-opus-5.51000K ctx · $4.00/$20.00text+image+file->text
anthropic/claude-opus-51000K ctx · $5.00/$25.00text+image+file->text
anthropic/claude-opus-4.71000K ctx · $5.00/$25.00text+image+file->text
anthropic/claude-opus-4.5200K ctx · $5.00/$25.00text+image+file->text
anthropic/claude-opus-4.81000K ctx · $5.00/$25.00text+image+file->text
anthropic/claude-fable-51000K ctx · $10.00/$50.00text+image+file->text
anthropic/claude-fable-5.11000K ctx · $10.00/$50.00text+image+file->text
anthropic/claude-opus-4.1200K ctx · $15.00/$75.00text+image+file->text
Elevenlabs
elevenlabs/scribe-v2 · $0.00/$0.00audio->transcription
elevenlabs/eleven-v4 · $0.00/$0.00text->speech
elevenlabs/eleven-v3-conversational · $0.00/$0.00text->speech
elevenlabs/eleven-v3 · $0.00/$0.00text->speech
elevenlabs/eleven-turbo-v2.5 · $0.00/$0.00text->speech
elevenlabs/eleven-flash-v2.5 · $0.00/$0.00text->speech
elevenlabs/eleven-v4-turbo · $0.00/$0.00text->speech
elevenlabs/eleven-multilingual-v2 · $0.00/$0.00text->speech
elevenlabs/eleven-flash-v2 · $0.00/$0.00text->speech
elevenlabs/eleven-turbo-v2 · $0.00/$0.00text->speech
elevenlabs/scribe-v2-medical · $0.00/$0.00audio->transcription
DeepSeek
deepseek/deepseek-v4.1-flash-10171049K ctx · $0.21/$0.85text+image->text
deepseek/deepseek-v4-pro1049K ctx · $1.65/$3.30text->text
deepseek/deepseek-v4-flash1000K ctx · $0.14/$0.28text->text
deepseek/deepseek-v4.1-flash1049K ctx · $0.21/$0.85text+image->text
deepseek/deepseek-v4-flash-07311049K ctx · $0.44/$1.32text->text
deepseek/deepseek-chat-v3.1164K ctx · $0.21/$0.79text->text
deepseek/deepseek-chat164K ctx · $0.26/$0.38text->text
deepseek/deepseek-r164K ctx · $0.50/$2.15text->text
deepseek/deepseek-r1-0528164K ctx · $0.50/$2.15text->text
deepseek/deepseek-v4-pro-08131049K ctx · $0.89/$2.67text->text
deepseek/deepseek-v4-flash-0731free1049K ctx · $0.20/$0.40text->text
Zhipu AI
z-ai/glm-5v-turbo203K ctx · $1.20/$4.00text+image+video->text
z-ai/glm-4.7-flash200K ctx · $0.06/$0.40text->text
z-ai/glm-4.5-air131K ctx · $0.13/$0.85text->text
z-ai/glm-5.3-flash1049K ctx · $0.15/$0.50text+image+video->text
z-ai/glm-4.6205K ctx · $0.60/$2.20text->text
z-ai/glm-4.6v131K ctx · $0.30/$0.90text+image+video->text
z-ai/glm-5.3-flashx1049K ctx · $0.37/$1.25text+image+video->text
z-ai/glm-5.31049K ctx · $1.02/$3.96text->text
z-ai/glm-4.5131K ctx · $0.60/$2.20text->text
z-ai/glm-4.5v66K ctx · $0.60/$1.80text+image->text
Voyage
voyage/voyage-4-lite32K ctx · $0.02/$0.00text->embeddings
voyage/voyage-3.5-lite32K ctx · $0.02/$0.00text->embeddings
voyage/voyage-3.532K ctx · $0.06/$0.00text->embeddings
voyage/voyage-432K ctx · $0.06/$0.00text->embeddings
voyage/voyage-law-216K ctx · $0.12/$0.00text->embeddings
voyage/voyage-4-large32K ctx · $0.12/$0.00text->embeddings
voyage/voyage-finance-232K ctx · $0.12/$0.00text->embeddings
voyage/voyage-code-216K ctx · $0.12/$0.00text->embeddings
voyage/voyage-3-large32K ctx · $0.18/$0.00text->embeddings
voyage/voyage-code-332K ctx · $0.18/$0.00text->embeddings
xAI
x-ai/grok-build-0.1256K ctx · $0.90/$1.80text+image+file->text
x-ai/grok-4.31000K ctx · $1.13/$2.25text+image+file->text
x-ai/grok-4.5500K ctx · $1.80/$5.40text+image+file->text
x-ai/grok-4.6500K ctx · $1.80/$5.40text+image+file->text
x-ai/grok-4.7500K ctx · $2.00/$6.00text+image->text
x-ai/grok-4.202000K ctx · $1.25/$2.50text+image+file->text
x-ai/grok-imagine-video-1.5-lite · $0.00/$0.00text+image->video
x-ai/grok-imagine-image-2.0 · $0.00/$0.00text+image->image
ByteDance Seed
bytedance-seed/seed-1.6-flash262K ctx · $0.07/$0.30text+image+video->text
bytedance-seed/seed-2.0-mini262K ctx · $0.10/$0.40text+image+video->text
bytedance-seed/seed-1.6262K ctx · $0.25/$2.00text+image+video->text
bytedance-seed/seed-2.0-lite262K ctx · $0.25/$2.00text+image+video->text
ByteDance
bytedance/seedance-2.5 · $0.00/$0.00text+image+audio+video->video
bytedance/seedance-1-5-pro · $0.00/$0.00text+image->video
bytedance/seedance-2.0 · $0.00/$0.00text+image+audio+video->video
bytedance/seedance-2.0-fast · $0.00/$0.00text+image+audio+video->video
Moonshot AI
moonshotai/kimi-k31049K ctx · $2.83/$14.13text+image+video->text
moonshotai/kimi-k2-0905262K ctx · $0.60/$2.50text->text
moonshotai/kimi-k3.1-pro1049K ctx · $2.00/$10.00text+image+video->text
Cohere
cohere/rerank-4-fast33K ctx · $0.00/$0.00text->rerank
cohere/rerank-v3.54K ctx · $0.00/$0.00text->rerank
cohere/rerank-4-pro33K ctx · $0.00/$0.00text->rerank
MiniMax
minimax/minimax-m31049K ctx · $0.30/$1.20text+image+video->text
minimax/hailuo-3-max · $0.00/$0.00text+image->video
Xiaomi
xiaomi/mimo-v2.6-flash1049K ctx · $0.14/$0.28text+image+video+audio->text
xiaomi/mimo-v2.6-pro1049K ctx · $0.43/$0.87text+image+video+audio->text
Perplexity
perplexity/pplx-embed-v1-0.6b32K ctx · $0.00/$0.00text->embeddings
perplexity/pplx-embed-v1-4b32K ctx · $0.03/$0.00text->embeddings
Mistral
mistralai/mistral-embed-23128K ctx · $0.10/$0.00text->embeddings
mistralai/codestral-embed-25058K ctx · $0.15/$0.00text->embeddings
Cloudflare
cloudflare/clef-flash25K ctx · $0.09/$0.00text+image->decisions
cloudflare/clef66K ctx · $0.24/$0.00text+image->decisions
Reflection AI
reflection/beam-free1049K ctx · $0.00/$0.00text->text
Stealth
stealth/glyph-cluster256K ctx · $0.00/$0.00text->text
NVIDIA
nvidia/nemotron-3.5-lightning-free1000K ctx · $0.00/$0.00text->text
inclusionAI
inclusionai/ling-3.1-flash-10191000K ctx · $0.00/$0.00text->text
Meta
meta/muse-wonder1049K ctx · $4.00/$20.00text+image+file->text
Amazon
amazon/titan-embed-text-v28K ctx · $0.02/$0.00text->embeddings
Typesafe Ai
typesafe-ai/jev32K ctx · $0.04/$0.00text->decisions

पर सभी मॉडल ब्राउज़ करें मॉडल पेज.

संरचित मूल्यांकन (Jev)

Jev नामित प्रश्नों के आधार पर JSON state का मूल्यांकन करता है और boolean, choice या score प्रकार के उत्तर देता है। जब किसी ऐप को स्पष्ट मानदंडों से प्रोग्राम द्वारा पढ़े जा सकने वाले परिणाम चाहिए, तब इसका उपयोग करें।

केवल मूल्यांकन और निर्णय के लिए
Jev चैट का समर्थन नहीं करता। Jev अनुरोध POST /v1/evaluations पर भेजें; POST /v1/chat/completions पर भेजने से HTTP 400 मिलता है।
POST/v1/evaluations

अपने BazaarLink API key के साथ इस endpoint को कॉल करें। पूरा URL: https://api.bazaarlink.ai/v1/evaluations।

फ़ील्ड विवरण

model
string
वैकल्पिक। छोड़ने पर डिफ़ॉल्ट typesafe-ai/jev है। अन्य model ID पर HTTP 400 और model_not_available कोड मिलता है।
state
string | object | array
ज़रूरी। मूल्यांकन की जाने वाली स्थिति JSON string, object या array के रूप में दें। serialized state और questions का कुल आकार 32,000 tokens से अधिक होने पर context_length_exceeded मिलता है।
questions
record<string, Question>
ज़रूरी; नामित प्रश्नों वाला non-empty object दें। हर प्रश्न का नाम उत्तर के answers object में key बनता है।
type
boolean | choice | score
हर प्रश्न के लिए ज़रूरी; boolean, choice या score में से एक चुनें।
instructions
string | object | array
हर प्रश्न के लिए ज़रूरी। निर्णय का विषय बताने वाला JSON string, object या array दें।
criteria
object | array
type के अनुसार: boolean के लिए वैकल्पिक और दिए जाने पर केवल true या false keys वाला object; choice के लिए non-empty object; score के लिए क्रम में कम-से-कम दो entries वाला array ज़रूरी है।

उत्तर के प्रकार

  • boolean — criteria वैकल्पिक है; देने पर केवल true और false कुंजियाँ स्वीकार की जाती हैं। उत्तर में संख्यात्मक probability होता है।
  • choice — criteria एक non-empty object होना चाहिए, जो option names को JSON criteria से जोड़ता है। उत्तर में string choice होता है; probabilities की keys option names होती हैं।
  • score — criteria कम-से-कम दो प्रविष्टियों वाला क्रमबद्ध array होना चाहिए। score एक संख्या है और criteria array के क्रम में indices 0..N-1 का expected value है; probabilities की keys इन्हीं indices के string रूप होते हैं।

अनुरोध के उदाहरण

curl --fail-with-body https://api.bazaarlink.ai/v1/evaluations \
  -H "Authorization: Bearer $BAZAARLINK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "typesafe-ai/jev",
  "state": "The support agent issued a full refund and apologised for the delay.",
  "questions": {
    "refunded": {
      "type": "boolean",
      "instructions": "Was a refund issued?"
    },
    "tone": {
      "type": "choice",
      "instructions": "Tone of the agent?",
      "criteria": {
        "apologetic": "The agent apologises",
        "neutral": "No emotional language",
        "hostile": "The agent is rude"
      }
    },
    "quality": {
      "type": "score",
      "instructions": "How complete was the resolution?",
      "criteria": [
        "poor",
        "partial",
        "complete"
      ]
    }
  }
}'

सफल उत्तर का उदाहरण

इस उदाहरण के response में id, object, model, answers, usage, rounding और warnings हैं। answers की keys प्रश्नों के नाम हैं। usage में input_tokens, output_tokens और total_tokens हैं; rounding में probabilityDecimals और scoreDecimals दिखते हैं। warnings एक array है और इस उदाहरण में खाली है। answers में choice probabilities की keys option names हैं, जबकि score probabilities की keys criteria indices के string रूप हैं।

{
  "id": "eval-a3d350e5-2705-4a9b-be7c-838fa4e4eb2b",
  "object": "evaluation",
  "model": "typesafe-ai/jev",
  "answers": {
    "refunded": {
      "type": "boolean",
      "probability": 0.99
    },
    "tone": {
      "type": "choice",
      "choice": "apologetic",
      "probabilities": {
        "apologetic": 1,
        "neutral": 0,
        "hostile": 0
      }
    },
    "quality": {
      "type": "score",
      "score": 1.98,
      "probabilities": {
        "0": 0,
        "1": 0.02,
        "2": 0.98
      }
    }
  },
  "usage": {
    "input_tokens": 394,
    "output_tokens": 74,
    "total_tokens": 468
  },
  "rounding": {
    "probabilityDecimals": 2,
    "scoreDecimals": 2
  },
  "warnings": []
}

चैट endpoint की त्रुटि प्रतिक्रिया

Jev को चैट endpoint पर भेजने से HTTP 400 मिलता है। नीचे के field और values handler के अनुरूप हैं; message की जगह placeholder है और वास्तविक पाठ server देता है।

{
  "error": {
    "message": "<server-generated message>",
    "type": "invalid_request_error",
    "code": 400
  }
}

Streaming

सेट stream: true सर्वर-भेजे गए इवेंट (SSE) स्ट्रीम प्राप्त करने के लिए। प्रत्येक घटना में प्रतिक्रिया का एक हिस्सा होता है।

from openai import OpenAI

client = OpenAI(
    base_url="https://api.bazaarlink.ai/v1",
    api_key="sk-bl-YOUR_API_KEY",
)

stream = client.chat.completions.create(
    model="anthropic/claude-sonnet-4.6",
    messages=[{"role": "user", "content": "Count to 10 slowly."}],
    stream=True,
)

for chunk in stream:
    content = chunk.choices[0].delta.content
    if content:
        print(content, end="", flush=True)

SSE प्रारूप स्ट्रीमिंग में

data: {"id":"85e6f35c71a31f19-SJC","choices":[{"delta":{"content":"Hello"},"index":0}]}

data: {"id":"85e6f35c71a31f19-SJC","choices":[{"delta":{"content":" world"},"index":0}]}

data: {"id":"85e6f35c71a31f19-SJC","choices":[{"delta":{},"finish_reason":"stop","index":0}],"usage":{"prompt_tokens":10,"completion_tokens":4,"total_tokens":14}}

data: [DONE]
Usage
स्ट्रीमिंग करते समय, उपयोग डेटा को [DONE] संदेश से पहले अंतिम खंड में, एक खाली डेल्टा और फिनिश_कारण: "स्टॉप" के साथ एक विकल्प सरणी के साथ लौटाया जाता है।

Keep-alive और अंतिम चंक

Stream में SSE comment lines और keep-alive के unknown या ping events हो सकते हैं। इन्हें अनदेखा करें और data frames parse करें; अंतिम data frame में data: [DONE] से पहले usage हो सकता है।

: keepalive          <- SSE comment line — ignore, do NOT JSON.parse

data: {"id":"85e6f35c71a31f19-SJC","choices":[{"delta":{"content":"Hi"},"index":0}]}

data: {"id":"85e6f35c71a31f19-SJC","choices":[{"delta":{},"finish_reason":"stop","index":0}],"usage":{...}}

data: [DONE]

स्ट्रीम रद्दीकरण

क्लाइंट कनेक्शन बंद करके स्ट्रीमिंग रिक्वेस्ट रद्द की जा सकती है — जैसे AbortController.abort() कॉल करना या stream ऑब्जेक्ट बंद करना। रद्दीकरण मिलते ही BazaarLink आगे के चंक भेजना बंद कर देता है और प्रोवाइडर को भेजी जा रही रिक्वेस्ट रद्द कर देता है।

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.bazaarlink.ai/v1",
  apiKey: "sk-bl-YOUR_API_KEY",
});

const controller = new AbortController();

const stream = await client.chat.completions.create(
  {
    model: "anthropic/claude-sonnet-4.6",
    messages: [{ role: "user", content: "Write a long story." }],
    stream: true,
  },
  { signal: controller.signal }
);

for await (const chunk of stream) {
  const content = chunk.choices[0]?.delta?.content;
  if (content) process.stdout.write(content);
}

// e.g. on a "Stop" button click:
controller.abort();
बीच में रुकी स्ट्रीम के लिए कोई शुल्क नहीं
अगर अंतिम usage चंक आने से पहले ही स्ट्रीम खत्म हो जाए — क्लाइंट-साइड रद्दीकरण सहित — तो उस रिक्वेस्ट के लिए कोई भरोसेमंद टोकन-गणना नहीं होती, इसलिए BazaarLink पूरा आरक्षित अमाउंट वापस कर देता है। रद्द करने से पहले आपके क्लाइंट तक पहुँच चुकी सामग्री के लिए कोई शुल्क नहीं लिया जाता।
प्रोवाइडर पर तुरंत रुकने की गारंटी नहीं
कनेक्शन बंद करने से BazaarLink तुरंत आगे के टोकन भेजना और उनका शुल्क लेना बंद कर देता है, लेकिन कनेक्शन टूटते ही अपस्ट्रीम प्रोवाइडर अपने सर्वर पर जनरेशन रोकता है या नहीं, यह उस प्रोवाइडर पर निर्भर करता है — कुछ डिस्कनेक्ट के बाद भी थोड़ी देर तक प्रोसेसिंग जारी रख सकते हैं।

मिड-स्ट्रीम त्रुटियाँ

त्रुटि फ़्रेम पर कोई विकल्प फ़ील्ड नहीं
यदि स्ट्रीमिंग शुरू होने के बाद कोई विफलता होती है (उदाहरण के लिए अपस्ट्रीम कनेक्शन बंद हो जाता है), तो आपको सामान्य {विकल्प:[...]} के बजाय एक SSE डेटा फ्रेम आकार का {त्रुटि: {संदेश, प्रकार, कोड}} मिलता है - बिना HTTP स्थिति परिवर्तन के, क्योंकि हेडर पहले ही भेजे जा चुके हैं। विकल्प[0].डेल्टा पढ़ने से पहले त्रुटि कुंजी की जांच करें, और केवल पहले से स्ट्रीम किए गए टोकन के लिए बिल करें (आंशिक बिलिंग लागू होती है)।
data: {"id":"85e6f35c71a31f19-SJC","choices":[{"delta":{"content":"The capital of "},"index":0}]}

data: {"error":{"message":"The request could not be completed.","type":"upstream_error","code":502}}

data: [DONE]

Embeddings

Embeddings, अर्थ (semantic meaning) capture करने वाला numerical representation है — यह text को vectors (numbers की array) में बदल देता है, जिसे कई machine learning tasks में इस्तेमाल किया जा सकता है। BazaarLink एक unified, OpenAI Embeddings API-compatible endpoint देता है ताकि आप एक ही interface से कई providers के embedding models call कर सकें।

Embedding response में अपारदर्शी BazaarLink request ID होता है जो x-request-id के समान है; इसे GET /v1/generation के साथ उपयोग करें। non-streaming response में वही ID x-generation-id में भी आता है। usage.cost इस request के लिए ग्राहक से वसूली गई USD राशि है। आँकड़े पूरा होने के कुछ सेकंड बाद मिल सकते हैं; 404 पर थोड़ी देर retry करें।

Embeddings क्या हैं?

Embeddings text को high-dimensional vectors में बदल देते हैं, जहाँ semantically similar text vector space में एक-दूसरे के करीब होते हैं — जैसे "cat" और "kitten" के embeddings मिलते-जुलते होंगे, लेकिन "cat" और "airplane" काफी दूर होंगे। इन vector representations से machines text के बीच के संबंध समझ पाती हैं, जो कई AI applications की नींव है।

आम Use Cases

Use केस
विवरण
RAG (पुनर्प्राप्ति-संवर्धित पीढ़ी)ऐसे systems बनाएं जो answer generate करने से पहले knowledge base से relevant context retrieve करें — embeddings LLM के context में शामिल करने के लिए सबसे relevant documents ढूंढते हैं।
सिमेंटिक खोजdocuments और queries को embeddings में बदलें, फिर vector similarity से सबसे relevant documents ढूंढें — यह सिर्फ keyword matching की बजाय meaning समझता है, इसलिए keyword search से बेहतर results देता है।
सिफारिश प्रणालीitems (products, articles, videos) और user preferences के embeddings बनाकर similar items recommend करें — common keywords न होने पर भी vector comparison semantically related items ढूंढ लेता है।
क्लस्टरिंग और वर्गीकरणembedding patterns analyze करके similar documents को group या classify करें — similar embeddings वाले documents आमतौर पर एक ही topic या category के होते हैं।
डुप्लिकेट डिटेक्शनembedding similarity compare करके duplicate या near-duplicate content ढूंढें — content paraphrase किया गया हो तब भी यह काम करता है।
असामान्यता का पता लगानाdataset के typical pattern से काफी अलग embeddings पहचान कर unusual या outlier content detect करें।
POST/v1/embeddings
Note
यदि अपस्ट्रीम स्रोत माँगे गए embeddings मॉडल का समर्थन नहीं करता, तो अनुरोध कोई दूसरा उपलब्ध स्रोत आज़मा सकता है। ऐसा स्रोत न हो तो अनुरोध में त्रुटि लौटती है।

पैरामीटर्स

modelआवश्यक
string
उपयोग करने के लिए एम्बेडिंग मॉडल, उदा. "openai/text-embedding-3-small"। एम्बेड करने के लिए
inputआवश्यक
string | string[] | ContentItem[]
Text - एक एकल स्ट्रिंग, एक बैच कॉल के लिए स्ट्रिंग्स की एक सरणी, या (उन मॉडलों के लिए जो इसका समर्थन करते हैं) टेक्स्ट और इमेज_यूआरएल भागों को मिलाकर {content:[...]} आइटम की एक सरणी।
dimensions
integer
अनुरोधित आउटपुट वेक्टर आकार। केवल उन मॉडलों द्वारा सम्मानित किया जाता है जो परिवर्तनीय आयामों का समर्थन करते हैं (उदाहरण के लिए OpenAI टेक्स्ट-एम्बेडिंग-3 परिवार); अपस्ट्रीम प्रदाता को वैसे ही अग्रेषित किया गया और उन मॉडलों द्वारा अनदेखा कर दिया गया जो इसका समर्थन नहीं करते हैं।
encoding_format
string
अनुरोधित एम्बेडिंग एन्कोडिंग, उदा. "फ्लोट" या "बेस64"। अपस्ट्रीम प्रदाता को वैसे ही अग्रेषित किया जाता है - समर्थन मॉडल पर निर्भर करता है।
provider
object
Unsupported. The entire object is ignored and removed before forwarding; it cannot select an upstream or price tier.

बुनियादी अनुरोध

from openai import OpenAI

client = OpenAI(
    base_url="https://api.bazaarlink.ai/v1",
    api_key="sk-bl-YOUR_API_KEY",
)

response = client.embeddings.create(
    model="openai/text-embedding-3-small",
    input="The quick brown fox jumps over the lazy dog",
)

print(response.data[0].embedding)  # 1536-dimensional vector

बैच प्रोसेसिंग

एक ही अनुरोध में एकाधिक टेक्स्ट को एम्बेड करने के लिए स्ट्रिंग्स की एक सरणी भेजें - प्रति टेक्स्ट एक कॉल की तुलना में सस्ता और तेज़।

response = client.embeddings.create(
    model="openai/text-embedding-3-small",
    input=[
        "Machine learning is a subset of artificial intelligence",
        "Deep learning uses neural networks with multiple layers",
        "Natural language processing enables computers to understand text",
    ],
)

for i, item in enumerate(response.data):
    print(f"Embedding {i}: {len(item.embedding)} dimensions")

मल्टीमॉडल इनपुट (छवि + टेक्स्ट) छवि इनपुट समर्थन के साथ

मॉडल (आउटपुट_मोडालिटी में "एम्बेडिंग" और इनपुटमोडालिटी में "इमेज" शामिल है) {content:[{type:"text",...}, {type:"image_url",...}]} के आकार के इनपुट आइटम स्वीकार करते हैं, जिससे आप अकेले या टेक्स्ट के साथ संयुक्त रूप से एक छवि एम्बेड कर सकते हैं।

मॉडल-निर्भर
केवल कुछ एम्बेडिंग मॉडल छवि इनपुट स्वीकार करते हैं - image_url सामग्री भेजने से पहले मॉडल पृष्ठ पर मॉडल के समर्थित तौर-तरीकों की जांच करें। केवल-पाठ मॉडल इस आकृति को अस्वीकार कर देंगे।
import requests

response = requests.post(
    "https://api.bazaarlink.ai/v1/embeddings",
    headers={
        "Authorization": "Bearer sk-bl-YOUR_API_KEY",
        "Content-Type": "application/json",
    },
    json={
        "model": "google/gemini-embedding-2-preview",
        "input": [{
            "content": [
                {"type": "text", "text": "A scenic boardwalk through a green meadow"},
                {"type": "image_url", "image_url": {"url": "https://example.com/boardwalk.jpg"}},
            ]
        }],
        "encoding_format": "float",
    },
)

embedding = response.json()["data"][0]["embedding"]
print(f"Embedding dimension: {len(embedding)}")

एंबेडिंग मॉडल ढूँढना

कोई समर्पित एम्बेडिंग मॉडल-लिस्टिंग एंडपॉइंट नहीं है - GET /v1/models पर कॉल करें और उन प्रविष्टियों के लिए क्लाइंट-साइड फ़िल्टर करें जिनके आउटपुट_मोडैलिटी में "एम्बेडिंग" शामिल है, या मॉडल पृष्ठ ब्राउज़ करें।

सीमाएँ

  • कोई स्ट्रीमिंग नहीं - चैट पूर्णता के विपरीत, एम्बेडिंग हमेशा पूर्ण प्रतिक्रिया के रूप में लौटाई जाती है।
  • प्रत्येक मॉडल की अधिकतम इनपुट लंबाई होती है; उस सीमा से परे पाठ को काट दिया जाता है या अपस्ट्रीम में अस्वीकृत कर दिया जाता है।
  • Embeddings समान इनपुट के लिए नियतात्मक हैं - इसमें कोई तापमान या यादृच्छिकता शामिल नहीं है।

सर्वोत्तम अभ्यास

  • अपने speed/quality/लागत ट्रेडऑफ़ के लिए एक मॉडल चुनें - छोटे मॉडल (जैसे qwen/qwen3-embedding-4b) सस्ते और तेज़ हैं; बड़े वाले (उदाहरण के लिए openai/text-embedding-3-large) आम तौर पर उच्च निष्ठा के साथ एम्बेड होते हैं।
  • प्रति टेक्स्ट एक कॉल के बजाय एकाधिक टेक्स्ट को एक अनुरोध में बैचें - कम राउंड ट्रिप, कम ओवरहेड।
  • Cache परिणाम - एक ही इनपुट के लिए एम्बेडिंग कभी नहीं बदलती है, इसलिए उन्हें पुन: उत्पन्न करने के बजाय संग्रहीत करें।
  • कोसाइन समानता से तुलना करें, यूक्लिडियन दूरी से नहीं - यह स्केल-अपरिवर्तनीय है और उच्च-आयामी वैक्टर के लिए बेहतर काम करता है।
  • प्रत्येक मॉडल की संदर्भ लंबाई देखें - लंबे दस्तावेज़ों को एम्बेड करने से पहले टुकड़े-टुकड़े करने की आवश्यकता हो सकती है।

पैरामीटर्स

सैंपलिंग पैरामीटर टोकन निर्माण प्रक्रिया को आकार देते हैं। BazaarLink अपस्ट्रीम प्रदाता को समर्थित पैरामीटर पास करता है; असमर्थित मापदंडों को चुपचाप नजरअंदाज कर दिया जाता है।

सैंपलिंग पैरामीटर

प्योर पासथ्रू - कोई स्थानीय डिफ़ॉल्ट नहीं
Sampling मान बिना range validation के भेजे जाते हैं। Model समर्थित सीमा से बाहर के मानों को सीमित या अनदेखा कर सकता है।
temperature
number
Sampling मान बिना range validation के भेजे जाते हैं। Model समर्थित सीमा से बाहर के मानों को सीमित या अनदेखा कर सकता है।
top_p
number
न्यूक्लियस नमूना संभाव्यता द्रव्यमान। डिफ़ॉल्ट: 1
top_k
integer
Sampling मान बिना range validation के भेजे जाते हैं। Model समर्थित सीमा से बाहर के मानों को सीमित या अनदेखा कर सकता है।
frequency_penalty
number
बार-बार टोकन को दंडित करें। रेंज: [-2, 2]। डिफ़ॉल्ट: 0
presence_penalty
number
उपस्थिति के आधार पर टोकन को दंडित करें। रेंज: [-2, 2]। डिफ़ॉल्ट: 0
repetition_penalty
number
इनपुट से टोकन पुनरावृत्ति को कम करें। रेंज: (0, 2]। डिफ़ॉल्ट: 1
min_p
number
शीर्ष टोकन के सापेक्ष न्यूनतम संभावना। रेंज: [0, 1]। डिफ़ॉल्ट: 0
top_a
number
डायनामिक टॉप-पी उच्चतम-संभावना टोकन पर आधारित है। रेंज: [0, 1]। डिफ़ॉल्ट: 0
seed
integer
पूर्णांक बीज। सभी मॉडलों के लिए गारंटी नहीं है
max_tokens
integer
उत्पन्न करने के लिए टोकन की अधिकतम संख्या max_tokens के लिए
n
integer
उत्पन्न होने वाली पूर्णताओं की संख्या। डिफ़ॉल्ट: 1 नियतात्मक नमूने के लिए
logit_bias
object
मैप टोकन आईडी को पूर्वाग्रह मानों के लिए [-100, 100] नमूनाकरण से पहले जोड़ा गया। केवल OpenAI-पारिवारिक मॉडल - नीचे नोट देखें।
logprobs
boolean
प्रत्येक आउटपुट टोकन की लॉग संभावनाएँ लौटाएँ। केवल OpenAI-पारिवारिक मॉडल - नीचे नोट देखें।
top_logprobs
integer
प्रति स्थिति पर लौटने के लिए सबसे संभावित टोकन की संख्या (लॉगप्रॉब्स की आवश्यकता है: सत्य)। रेंज: 0-20. केवल OpenAI-पारिवारिक मॉडल - नीचे नोट देखें।
response_format
object
Force संरचित JSON आउटपुट। संरचित आउटपुट अनुभाग देखें
structured_outputs
boolean
इसका समर्थन करने वाले प्रदाताओं पर सख्त JSON-स्कीमा-अनुरूप आउटपुट का अनुरोध करें। ज्यों का त्यों पार कर लिया
reasoning
object
प्रदाता-विशिष्ट reasoning/thinking कॉन्फ़िगरेशन। ज्यों का त्यों पार कर लिया
reasoning_effort
string
OpenAI ओ-सीरीज़ शैली तर्क प्रयास: "कम", "मध्यम", या "उच्च"। ज्यों का त्यों पार कर लिया
include_reasoning
boolean
true होने पर सोच की सामग्री message.reasoning (स्ट्रीमिंग में delta.reasoning) में लौटती है; false उन मॉडलों की सोच बंद करता है जो डिफ़ॉल्ट रूप से सोचते हैं (रीज़निंग अनुभाग देखें), इसलिए सोच का बिल नहीं बनता। reasoning_effort, reasoning या thinking न भेजने पर केवल वही मॉडल डिफ़ॉल्ट रूप से सोचते और लौटाते हैं; बाकी मॉडल माँगने पर ही लौटाते हैं
stop
string | string[]
स्टॉप अनुक्रम - सामना होने पर पीढ़ी रुक जाती है
tools
Tool[]
उन टूल (फ़ंक्शन) की सूची जिन्हें मॉडल कॉल कर सकता है
tool_choice
string | object
कंट्रोल्स टूल का उपयोग: "ऑटो", "कोई नहीं", या विशिष्ट टूल
parallel_tool_calls
boolean
उपकरण उपलब्ध कराए जाने पर समानांतर फ़ंक्शन कॉलिंग सक्षम करें। डिफ़ॉल्ट: सत्य. केवल OpenAI-पारिवारिक मॉडल - नीचे नोट देखें।

क्रेडिट

Query वर्तमान क्रेडिट शेष और आजीवन API उपयोग।

GET/v1/credits
Auth
को बियरर टोकन (मानक API कुंजी sk-bl-...) की आवश्यकता है।

उदाहरण अनुरोध

curl https://api.bazaarlink.ai/v1/credits \
  -H "Authorization: Bearer sk-bl-YOUR_KEY"

प्रतिक्रिया

{
  "data": {
    "total_credits": 100.00,
    "total_usage": 12.34
  }
}

त्रुटियाँ: 401 (missing/invalid कुंजी), 403 (निलंबित उपयोगकर्ता)।

जनरेशन विवरण

response id या x-request-id header के अपारदर्शी BazaarLink request ID से GET /v1/generation लें; non-streaming response में यही ID x-generation-id में भी आता है। आँकड़े कुछ सेकंड बाद मिल सकते हैं; 404 पर थोड़ी देर retry करें।

GET/v1/generation?id=<generation-id>
Auth
को बियरर टोकन (मानक API कुंजी) की आवश्यकता है। आवश्यक क्वेरी पैरामीटर: आईडी।

उदाहरण अनुरोध

curl "https://api.bazaarlink.ai/v1/generation?id=BAZAARLINK_REQUEST_ID" \
  -H "Authorization: Bearer sk-bl-YOUR_KEY"

प्रतिक्रिया

{
  "data": {
    "id": "85e6f35c71a31f19-SJC",
    "model": "openai/gpt-4o",
    "provider": "bazaarlink",
    "created_at": "2026-04-20T10:00:00.000Z",
    "app_name": "MyApp",
    "finish_reason": "stop",
    "status": 200,
    "duration_ms": 1234,
    "first_token_ms": 234,
    "throughput": 45.6,
    "usage": {
      "prompt_tokens": 100,
      "completion_tokens": 200,
      "total_tokens": 300,
      "prompt_tokens_details": { "cached_tokens": 50 },
      "completion_tokens_details": { "reasoning_tokens": 30 },
      "cost": 0.00123
    },
    "cost_breakdown": {
      "subtotal": 0.00123,
      "cache_discount": 0.00015,
      "total": 0.00108
    }
  }
}

त्रुटियाँ: 400 (गुम आईडी), 401 (auth), 404 (पीढ़ी नहीं मिली)।

API मुख्य जानकारी

Query वर्तमान API कुंजी की दर सीमा स्तर और एकत्रित उपयोग काउंटर (प्रतिक्रिया प्रारूप सामान्य उद्योग कुंजी-जानकारी API सम्मेलनों का पालन करता है)।

GET/v1/key
Auth
को बियरर टोकन (मानक API कुंजी) की आवश्यकता है।

प्रतिक्रिया

{
  "data": {
    "label": "Production Key",
    "limit": null,
    "limit_remaining": 100.00,
    "limit_reset": null,
    "expires_at": null,
    "is_free_tier": false,
    "is_management_key": false,
    "is_provisioning_key": false,
    "usage": 12.34,
    "usage_daily": 0.12,
    "usage_weekly": 0.45,
    "usage_monthly": 1.23,
    "requests": 1234,
    "requests_daily": 10,
    "requests_weekly": 50,
    "requests_monthly": 200,
    "rate_limit": { "requests": 600, "interval": "1m", "note": "Paid-tier rate limit." }
  }
}
Note
is_free_tier = सत्य जब क्रेडिट शेष <$10। विंडोज़ UTC में हैं: दैनिक = वर्तमान दिन, साप्ताहिक = सोम-रविवार, मासिक = 1-EOM। जब कुंजी में प्रति-कुंजी खर्च सीमा निर्धारित होती है (कुंजी creation/update पर सीमा पैरामीटर के माध्यम से), सीमा / सीमा_शेष / सीमा_रीसेट उस सीमा और मिलान अवधि के उपयोग को दर्शाती है; अन्यथा सीमा शून्य है और सीमा_शेष आपके खाते के क्रेडिट शेष में वापस आ जाती है। एक्सपायर_एट कुंजी का समाप्ति समय है (यदि कोई नहीं है तो शून्य)। is_management_key और is_provisioning_key एक ही अवधारणा के लिए उपनाम हैं - दोनों प्रबंधन कुंजी के लिए सही हैं।
BYOK
BazaarLink ब्रिंग-योर-ओन-की (BYOK) प्रोग्राम की पेशकश नहीं करता है, इसलिए यह एंडपॉइंट किसी भी byok_usage फ़ील्ड को वापस नहीं करता है।

त्रुटियाँ: 401 (auth), 404 (उपयोगकर्ता अनुपलब्ध - दुर्लभ)।

त्रुटि कोड

त्रुटि प्रतिक्रिया प्रारूप

Error envelope endpoint के अनुसार बदलता है। HTTP status और मौजूद होने पर error.type उपयोग करें। error.code string या numeric हो सकता है या अनुपस्थित; error.message केवल दिखाने के लिए है।

{
  "error": {
    "message": "Insufficient credits. Please top up to continue.",
    "type": "invalid_request_error",
    "code": "insufficient_credits"
  }
}

HTTP स्थिति और त्रुटि.कोड

Error envelope endpoint के अनुसार बदलता है। HTTP status और मौजूद होने पर error.type उपयोग करें। error.code string या numeric हो सकता है या अनुपस्थित; error.message केवल दिखाने के लिए है।

कोड
नाम
विवरण
424निर्भरता विफलआपकी स्वयं कॉन्फ़िगर की गई BYOK कुंजी को upstream provider ने अस्वीकार कर दिया; BYOK सेटिंग्स में जाँचें या बदलें। यह केवल strict मोड में दिखाई देता है
400खराब अनुरोधविकृत अनुरोध, खाली संदेश सरणी, या आवश्यक फ़ील्ड अनुपलब्ध
401अनधिकृतAPI कुंजी गुम, अमान्य या अक्षम है
402भुगतान आवश्यकअपर्याप्त खाता क्रेडिट, प्रति-कुंजी खर्च सीमा पूरी हो गई, या monthly/weekly बजट सीमा पार हो गई
403निषिद्धखाता निलंबित है या उसके पास अनुमति नहीं है
404नहीं मिलाRequested model, generation, key, or other resource does not exist
409संघर्षResource is not in the required state, such as an incomplete video job
410चला गयाRequested model has been retired and must be replaced
413पेलोड बहुत बड़ा हैअनुरोध का मुख्य भाग 10 एमबी से अधिक है; सामग्री का आकार कम करें या अनुरोध को विभाजित करें
416रेंज संतोषजनक नहीं हैRequested byte range is invalid for generated video content
429बहुत अधिक अनुरोधदर सीमा पार हो गई; पुनः प्रयास करने से पहले पुनः प्रयास-आफ्टर हेडर की जाँच करें
432निःशुल्क कोटा समाप्तTavily-संगत एंडपॉइंट (/v1/search, /v1/extract, /v1/crawl, /v1/map): निःशुल्क खोज कोटा समाप्त हो गया है या शेष राशि शून्य या उससे कम है; जारी रखने के लिए क्रेडिट जोड़ें। रिस्पॉन्स बॉडी Tavily प्रारूप में होती है: {"detail":{"error":"..."}}
500सर्वर त्रुटिआंतरिक BazaarLink त्रुटि
502खराब गेटवेकोई भी अपस्ट्रीम स्रोत अनुरोध नहीं संभाल सका; अनुरोध में त्रुटि लौटती है।
503सेवा अनुपलब्धइस मॉडल के लिए कोई अपस्ट्रीम प्रदाता कॉन्फ़िगर नहीं किया गया है; व्यवस्थापक से संपर्क करें
504गेटवे टाइमआउटUpstream connection or stream stalled and timed out

मशीन-पठनीय बिलिंग कोड

A 402 can represent different controls. Use these stable codes to choose the correct action.

कोड
विवरण
byok_key_invalidआपकी स्वयं कॉन्फ़िगर की गई BYOK कुंजी को upstream provider ने अस्वीकार कर दिया; BYOK सेटिंग्स में जाँचें या बदलें। यह केवल strict मोड में दिखाई देता है।
budget_cap_reachedA weekly or monthly budget cap was reached; raise or reset the cap.
credit_limit_exceededA monthly-billing organization's credit line was exhausted; contact billing.
insufficient_creditsThe prepaid balance is insufficient; add credits.
spend_limit_exceededThe API key reached its daily, weekly, or monthly spend limit.
capacity_unavailableThis model is temporarily at capacity. Retry shortly; the Retry-After header says how long to wait.

Stable error.code catalog

These string codes are emitted by public inference and media paths. Branch on the string code when present; the HTTP status remains the broad failure class.

मॉडल और समापन बिंदु
मॉडल लुकअप, जीवनचक्र, मूल्य निर्धारण, तौर-तरीके और समापन बिंदु संगतता त्रुटियाँ।
कोड
HTTP स्थिति
unknown_model400
invalid_model_id400
model_not_found404
model_retired410
model_endpoint_mismatch400
embedding_on_chat_endpoint400
model_not_priced400
invalid_modality_for_model400
अनुरोध और सुरक्षा
अमान्य पैरामीटर, संदर्भ, उपकरण, स्कीमा, और सामग्री-सुरक्षा अस्वीकरण।
कोड
HTTP स्थिति
missing_required_field400
unsupported_param400
max_tokens_invalid400
context_too_long400
tool_use_unsupported400
malformed_tool_messages400
invalid_response_format_schema400
invalid_tools_definition400
content_moderation403
content_filter403
unknown_4xx400
Image निर्माण और संपादन
Image इनपुट, मल्टीपार्ट संपादन, आउटपुट और छवि-पाइपलाइन त्रुटियाँ।
कोड
HTTP स्थिति
invalid_image_url400
input_images_not_supported400
invalid_content_type400
mask_not_supported400
unsupported_response_format400
missing_prompt400
missing_image400
too_many_images400
invalid_image_type400
image_too_large400
invalid_n400
pipeline_error502
no_images502
अपस्ट्रीम रूटिंग
Sanitized प्रदाता कनेक्टिविटी, प्रमाणीकरण, थ्रॉटलिंग और उपलब्धता त्रुटियाँ।
कोड
HTTP स्थिति
upstream_unreachable502
upstream_auth_failed502
upstream_rate_limited429
capacity_unavailable429
upstream_unavailable502/503
byok_key_invalid424

सामग्री मॉडरेशन

सभी अनुरोधों की मॉडल तक पहुँचने से पहले स्वचालित रूप से समीक्षा की जाती है। हमारी उपयोग नीति का उल्लंघन करने वाले अनुरोध मॉडल तक पहुँचने से पहले अस्वीकार कर दिए जाते हैं और 403 त्रुटि लौटाते हैं।

अवरुद्ध की जाने वाली सामग्री श्रेणियाँ

मॉडरेशन हमारी उपयोग नीति (Acceptable Use Policy) पर आधारित है और मुख्य रूप से निम्नलिखित श्रेणियों की सामग्री को अवरुद्ध करता है:

  • यौन शोषण सामग्री
  • हिंसक धमकियाँ
  • अवैध कृत्यों के लिए संचालन संबंधी मार्गदर्शन
  • जैविक खतरे से संबंधित सामग्री

403 प्रतिक्रिया प्रारूप

मॉडरेशन द्वारा अवरुद्ध किया गया अनुरोध इस प्रारूप में त्रुटि लौटाता है:

{
  "error": {
    "message": "Your prompt was blocked by content moderation.",
    "type": "invalid_request_error",
    "code": "content_filter"
  }
}

अवरुद्ध अनुरोधों के लिए शुल्क नहीं लिया जाता — अस्वीकृत अनुरोध के लिए आपसे कोई शुल्क नहीं लिया जाएगा।

गलत सकारात्मक की अपील

यदि आपको लगता है कि किसी अनुरोध को गलत तरीके से अवरुद्ध किया गया है, तो अनुरोध के समय और (यदि सुविधाजनक हो) request id के साथ सहायता टीम से संपर्क करें — हम इसकी समीक्षा करेंगे।

गोपनीयता

अनुरोधों की स्वचालित रूप से सामग्री-सुरक्षा समीक्षा की जाती है; आपके नवीनतम इनपुट का पाठ और चित्र तृतीय-पक्ष सामग्री-सुरक्षा स्कोरिंग सेवा को भेजे जा सकते हैं।

उल्लंघन, संदिग्ध उल्लंघन, सीमा के निकट या यादृच्छिक नमूने के रूप में आँके गए अनुरोधों का पूरा पाठ या आरंभिक भाग हम अनुपालन साक्ष्य, विवाद निपटान और ऑडिट के लिए सहेज सकते हैं; हटाने की कोई निश्चित अवधि का वादा नहीं किया जाता।

अन्य सामान्य सफल अनुरोधों के प्रॉम्प्ट और उत्तर सुरक्षित नहीं रखे जाते; ZDR कुंजी के अनुरोधों पर पहले दो बिंदु लागू नहीं होते।

दर सीमा, बजट और आपातकालीन ब्रेक

These controls can reject an otherwise valid request and require different recovery actions.

नियंत्रण
HTTP स्थिति
कैसे करें इसकी पहचान
अनुरोध दर सीमा429string code या numeric code 429; Retry-After और X-RateLimit-* headers का उपयोग करें।
दर-सीमा जुर्माना ब्लॉक429न्यूमेरिक कोड 429 और एक अस्थायी प्रतिबंध संदेश; पुन:प्रयास-आफ्टर का उपयोग करें।
वैश्विक व्यय आपातकालीन ब्रेक503न्यूमेरिक कोड 503, वैश्विक खर्च-सीमा संदेश, और 30 या 300 सेकंड का पुनः प्रयास करें।
Scoped spend brake429Numeric code 429 and a spend circuit-breaker message naming the scope.
बिलिंग और बजट नियंत्रण402ऊपर सूचीबद्ध स्थिर बिलिंग स्ट्रिंग कोड का उपयोग करें।

Error envelope endpoint के अनुसार बदलता है। HTTP status और मौजूद होने पर error.type उपयोग करें। error.code string या numeric हो सकता है या अनुपस्थित; error.message केवल दिखाने के लिए है।

वीडियो और मीडिया संसाधन स्थिति

Video validation commonly returns numeric code 400. Missing jobs return 404, retired models 410, unfinished video content 409, and invalid video byte ranges 416.

पुनः प्रयास नीति

Retry only failures that may recover without changing the request. Honor Retry-After or use exponential backoff with jitter. Do not stack SDK and manual retries.

बैकऑफ़ के साथ पुनः प्रयास करें पुनः प्रयास करने से पहले
429, 502, 503, and 504. Check the original generation job before creating another after an ambiguous network failure.
Fix करें
400, 401, 402, 403, 404, 409, 410, 413, and 416. Fix the request, credentials, balance, permissions, resource state, or Range header first.

हैंडलिंग त्रुटियाँ

import random
import time
from openai import OpenAI, APIStatusError

client = OpenAI(
    base_url="https://api.bazaarlink.ai/v1",
    api_key="sk-bl-YOUR_API_KEY",
    max_retries=0,  # Avoid double retries; this example handles them.
)

RETRYABLE = {429, 502, 503, 504}

for attempt in range(5):
    try:
        response = client.chat.completions.create(
            model="openai/gpt-4o",
            messages=[{"role": "user", "content": "Hello!"}],
        )
        break
    except APIStatusError as error:
        if error.status_code not in RETRYABLE or attempt == 4:
            raise
        retry_after = error.response.headers.get("Retry-After")
        delay = (
            float(retry_after)
            if retry_after
            else min(8, 0.5 * (2 ** attempt)) + random.uniform(0, 0.25)
        )
        time.sleep(delay)

स्ट्रीमिंग त्रुटि प्रारूप

त्रुटियां जो किसी भी टोकन को स्ट्रीम करने से पहले होती हैं, JSON बॉडी के साथ एक मानक HTTP त्रुटि प्रतिक्रिया लौटाती हैं।

stream शुरू होने के बाद HTTP response पहले से 200 होता है। हर SSE data frame को parse करें और शीर्ष-स्तर के error या choices[0].finish_reason === "error" को विफल, अधूरे response के रूप में मानें।

यदि stream शुरू होने के बाद विफल होता है, तो BazaarLink शीर्ष-स्तर के error ऑब्जेक्ट वाला अंतिम SSE event भेज सकता है, उसके बाद data: [DONE]। response को अधूरा मानें; आंशिक output को पूर्ण परिणाम के रूप में उपयोग न करें।

data: {"error":{"message":"The request could not be completed.","type":"upstream_error","code":502}}

data: [DONE]

// Branch on error.code; error.type can vary by failure path.

संस्करणीकरण

BazaarLink एकल स्थिर API पथ को उजागर करता है, /v1 - प्रबंधित करने के लिए कोई दिनांक-पिन किए गए संस्करण या संस्करण हेडर नहीं हैं। API क्रमांकित रिलीज़ के बजाय लगातार विकसित होता है।

नॉन-ब्रेकिंग परिवर्तन

ये जहाज बिना किसी पूर्व सूचना के:

  • नए समापनबिंदु
  • कैटलॉग में नए मॉडल जोड़े गए
  • नए वैकल्पिक अनुरोध पैरामीटर
  • नए प्रतिक्रिया फ़ील्ड
  • वैकल्पिक गुणों के साथ नए स्कीमा
  • अतिरिक्त प्रतिक्रिया status/error कोड
ग्राहकों को रक्षात्मक रूप से लिखें
उन प्रतिक्रिया फ़ील्ड को अनदेखा करें जिन्हें आप नहीं पहचानते हैं, और एनम-जैसे फ़ील्ड में अज्ञात मानों पर असफल न हों - कैटलॉग और फीचर सेट बढ़ने पर नए जोड़े जाते हैं।

ब्रेकिंग परिवर्तन

ये दुर्लभ हैं, और कवर करते हैं:

  • किसी समापन बिंदु, पैरामीटर या प्रतिक्रिया फ़ील्ड को हटाना या उसका नाम बदलना
  • फ़ील्ड का प्रकार बदलना
  • एक वैकल्पिक पैरामीटर बनाना आवश्यक है

जब वे घटित होते हैं, तो संपूर्ण /v1 सतह के बजाय एक विशिष्ट समापन बिंदु पर एक ब्रेकिंग परिवर्तन लागू होता है - कोई एकल संस्करण बम्प नहीं है जो एक ही बार में प्रत्येक एकीकरण को तोड़ सकता है। हमने अभी तक ब्रेकिंग-चेंज टैग के साथ कोई औपचारिक चेंजलॉग प्रकाशित नहीं किया है (नीचे वर्तमान में बने रहना देखें); एकीकरण-महत्वपूर्ण किसी भी चीज़ के लिए, अप्रलेखित व्यवहार पर भरोसा करने से पहले समर्थन के माध्यम से संपर्क करें।

अवमूल्यन नीति

एक नियमित "ब्रेकिंग" घटना जिसकी आपको उम्मीद करनी चाहिए: व्यक्तिगत मॉडल सेवानिवृत्त हो जाते हैं क्योंकि अपस्ट्रीम प्रदाता उन्हें पदावनत कर देते हैं। GET /v1/models के माध्यम से मॉडल की वर्तमान स्थिति के बारे में पूछें।

GET https://api.bazaarlink.ai/v1/models
Authorization: Bearer sk-bl-YOUR_API_KEY

# A model within 30 days of its deprecation date shows in the catalog
# with an "EOL" badge on the Models page. After the effective date it's
# dropped from the catalog and calls return:
# 410 { "error": { "type": "model_not_available", "code": "model_retired" } }

वर्तमान में बने रहें

हमने अभी तक एक समर्पित API चेंजलॉग या RSS फ़ीड प्रकाशित नहीं किया है। अभी के लिए, इस पृष्ठ को सीधे जांचें, GET /v1/models के माध्यम से मॉडल की स्थिति देखें, या यदि आपको किसी महत्वपूर्ण एकीकरण के लिए अग्रिम सूचना की आवश्यकता है तो समर्थन से संपर्क करें।

Support
Support
Hi! How can we help you?
Send a message and we'll get back to you soon.