เอกสาร BazaarLink
BazaarLink เป็นเกตเวย์ API AI รวมสำหรับไต้หวัน — ให้เข้าถึงโมเดลหลายร้อยตัวจาก OpenAI, Anthropic, Google, Meta และอื่นๆ ผ่าน API endpoint เดียวที่รองรับ OpenAI
Read https://bazaarlink.ai/skill.md and follow the instructions to integrate BazaarLink into your app.ราคา
BazaarLink การใช้โมเดลราคาที่ส่วนเพิ่มเป็นศูนย์ (เหมือนกับราคาปลีกอย่างเป็นทางการของผู้ให้บริการแต่ละราย) ค่าธรรมเนียมแพลตฟอร์มจะถูกเรียกเก็บจากการเติมเงิน (เงินฝาก): ค่าธรรมเนียมการทำธุรกรรม 10% บวก 5% ไต้หวัน VAT บนช่อง TWD เรียกเก็บเงินเป็น USD พร้อมด้วยใบเสนอราคา TWD และใบแจ้งหนี้แบบอิเล็กทรอนิกส์ การเติมเงินแบบบริการตนเองแบบจ่ายตามการใช้งาน รัฐวิสาหกิจอาจจัดให้มีการเรียกเก็บเงินรายเดือน (Net-30, ต่อรองได้)
วิธีการทำงาน
- ปริมาณการใช้ (เดบิต): การโทร API แต่ละครั้งจะถูกเรียกเก็บเงินตามการใช้โทเค็นจริงตามราคาปลีก USD อย่างเป็นทางการของผู้ให้บริการ โดยหักออกจากยอดคงเหลือของคุณ — เพิ่มเป็นศูนย์ และไม่มีค่าธรรมเนียมเพิ่มเติมสำหรับการบริโภค
- การเติมเงิน (ฝากเงิน): TWD จะถูกแปลงเป็น USD ตามอัตราการขายแบบเรียลไทม์และเพิ่มไปยังยอดคงเหลือของคุณ ค่าธรรมเนียมการทำธุรกรรม 10% จะถูกเรียกเก็บจากการเติมเงิน
- • วิธีชำระเงินและค่าธรรมเนียมของแต่ละช่องทางจะแสดงในหน้าชำระเงินจริง
- • ช่องทาง TWD ที่มีสิทธิ์จะแสดงภาษีและเงื่อนไขใบกำกับอิเล็กทรอนิกส์ไต้หวันก่อนชำระเงิน
- • การโอนเงินผ่านธนาคาร: สำหรับการเติมเงินขนาดใหญ่หรือการเติมเงินระดับองค์กร โปรดติดต่อเราเพื่อจัดเตรียมการโอนเงินและออกใบแจ้งหนี้แบบกำหนดเอง
- ใบกำกับมีเฉพาะช่องทางที่เปิดให้ใช้และระบุว่ามีสิทธิ์ หรือเงื่อนไของค์กรที่ยืนยันแล้ว หากต้องใช้เลขภาษี ใบเสนอราคา หรือวางบิลรายเดือน โปรดติดต่อฝ่ายขายก่อนชำระเงิน
เกี่ยวกับอัตราแลกเปลี่ยน
การแปลงเงินตราต่างประเทศใช้อัตราเรียลไทม์ การเรียกเก็บเงินรายเดือนจะใช้อัตรา ณ เวลาที่เรียกเก็บเงิน (ใบแจ้งยอด) ในขณะที่การเติมเงินแบบเติมเงินจะแปลงเป็นอัตราการเติมเงิน อัตราและการประทับเวลาจะยังคงอยู่กับบันทึกการเรียกเก็บเงิน
การคุ้มครองค่าบริการเมื่อคำขอล้มเหลว
หากคำขอไปยัง upstream ล้มเหลวโดยไม่มีข้อมูล usage ที่นำไปคิดค่าบริการได้ BazaarLink จะคืนยอดที่สำรองไว้ทั้งหมดโดยอัตโนมัติ แม้ stream จะเริ่มแล้วก่อนเกิดข้อผิดพลาด คำขอครั้งนั้นยังมีค่าใช้จ่าย 0 ดอลลาร์สหรัฐ
- เชื่อมต่อ upstream ไม่ได้ คำขอถูกปฏิเสธ หรือไม่มีผลลัพธ์ที่ใช้งานได้
- stream หยุดก่อนรับข้อมูล usage สุดท้าย แม้จะส่งเนื้อหาบางส่วนแล้ว
- response ไม่มี usage หรือมีเพียง usage object ว่างที่ค่าทั้งหมดเป็น 0
0 output tokens ไม่ได้หมายความว่าฟรีเสมอไป
usage.cost คือจำนวน USD ที่เรียกเก็บสำหรับคำขอนี้ แม้ output tokens เป็น 0 ก็อาจมีค่า input tokens โปรดตรวจสอบ usage.cost หรือบันทึก Activity เพื่อดูยอดสุดท้าย
เริ่มต้นอย่างรวดเร็ว
สามวิธีในการเชื่อมต่อ
เริ่มต้นภายใน 5 นาที BazaarLink รองรับ OpenAI SDK อย่างเต็มรูปแบบ — เพียงเปลี่ยน
สำหรับคำขอที่ใช้เวลานานกว่า 100 วินาที แนะนำให้ใช้ stream:true คำขอแบบ non-streaming จะส่งสถานะ 200 ก่อนและเริ่มส่งช่องว่าง keepalive หลังจากประมาณ 12 วินาที (ค่าเริ่มต้น ซึ่งปรับได้ผ่านการตั้งค่า deployment) หากเกิดข้อผิดพลาดภายหลัง ระบบจะส่งกลับเป็น 200 + error JSON keepalive คือช่องว่างก่อน JSON body ซึ่ง JSON parser มาตรฐานจะละเว้น
Base URL
https://api.bazaarlink.ai/v1api.bazaarlink.ai เป็นจุดเข้าใช้งานเฉพาะ API ซึ่งดีพลอยแยกจากเว็บไซต์ Base URL เดิม https://bazaarlink.ai/api/v1 ยังรองรับเต็มรูปแบบ — การเชื่อมต่อที่มีอยู่ไม่ต้องเปลี่ยน
ใช้ OpenAI SDK
BazaarLink รองรับ OpenAI SDK อย่างเต็มรูปแบบ เพียงเปลี่ยน base URL และคีย์ API — โค้ดอื่นทั้งหมดเหมือนเดิม
sk-bl-.ใช้คีย์ของคุณเอง (BYOK)
เชื่อมต่อ API key upstream กับบัญชีส่วนตัวหรือองค์กร คำขอที่เข้าเงื่อนไขจะใช้คีย์ของคุณก่อน เมื่อ upstream เกิดข้อผิดพลาด คำขออาจลองใช้แหล่งอื่นที่พร้อมใช้งานได้ หากไม่มี คำขอจะได้รับข้อผิดพลาด จัดการคีย์ส่วนตัวที่หน้าคีย์ และคีย์องค์กรที่การตั้งค่าองค์กร ไปที่การตั้งค่า BYOK →
การกรองเนื้อหา
การป้องกันเนื้อหาแบบสองทางสำหรับทราฟฟิก API ของคุณ: คำขอที่ตรวจพบ prompt injection จะถูกบล็อก (400) และข้อมูลอ่อนไหวในคำขอหรือการตอบกลับ (คีย์ API หมายเลขบัตร เลขบัตรประชาชน ฯลฯ) จะถูกปิดบังโดยอัตโนมัติ กฎและรายการยกเว้นปรับแต่งได้ พร้อมสถิติการใช้งาน ไปที่การตั้งค่าตัวกรองเนื้อหา →
การค้นหาเว็บ (:online)
ค้นหาเว็บก่อนที่โมเดลจะตอบ และส่งผลการค้นหาให้โมเดลเป็นข้อมูลอ้างอิง เหมาะกับคำถามที่ต้องใช้ข้อมูลล่าสุด เช่น ข่าว ราคา นโยบาย หรือผลิตภัณฑ์ที่เพิ่งเปิดตัว
Endpoint ที่รองรับ
POST /api/v1/chat/completionsPOST /api/v1/messagesPOST /api/v1/responses
รองรับทั้ง Streaming (stream: true) และ non-streaming
วิธีใช้
วิธีที่ 1: เติม :online ต่อท้ายชื่อโมเดล
curl https://bazaarlink.ai/api/v1/chat/completions \
-H "Authorization: Bearer $BAZAARLINK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.4-mini:online",
"messages": [{ "role": "user", "content": "วันนี้มีข่าว AI อะไรในไต้หวันบ้าง?" }]
}'วิธีที่ 2: ใช้พารามิเตอร์ plugins
วิธีที่ 3: ใช้ web_search_options
{
"model": "gpt-5.4-mini",
"messages": [{ "role": "user", "content": "..." }],
"web_search_options": { "search_context_size": "high", "query_source": "conversation" }
}เลือกใช้วิธีใดวิธีหนึ่ง หรือใช้ร่วมกันได้
พารามิเตอร์การค้นหา
พารามิเตอร์ต่อไปนี้ใส่ไว้ในรายการ web ของ plugins หรือใน web_search_options ได้ หากทั้งสองจุดระบุค่าต่างกัน จะยึดค่าจาก plugins
search_promptข้อความใดก็ได้—กำหนดคำค้นหาโดยตรง เมื่อระบุแล้วจะมีลำดับเหนือ query_sourcequery_sourcelast_user, conversationlast_userแหล่งของคำค้นหาเมื่อไม่มี search_prompt โดย last_user ใช้เฉพาะข้อความผู้ใช้ล่าสุด ส่วน conversation ใช้บทสนทนาทั้งหมดโดยไม่รวมข้อความ systemcountryชื่อประเทศภาษาอังกฤษตัวพิมพ์เล็ก (เช่น taiwan, japan, united states)ทุกภูมิภาคให้ความสำคัญกับแหล่งข้อมูลจากประเทศที่ระบุ หากไม่ระบุจะไม่จำกัดภูมิภาค เมื่อกำหนด country ประเภทการค้นหาจะเป็นการค้นหาทั่วไป (general) และการกำหนด topic: "news" พร้อมกันจะคืนค่า 400topicgeneral, newsgeneralประเภทการค้นหา หากไม่ระบุ ระบบจะใช้การค้นหาทั่วไป (general) หากต้องการผลลัพธ์ข่าว ให้ระบุ topic: "news" อย่างชัดเจนsearch_queriesอาร์เรย์สตริง 1–5 รายการ—กำหนดคำค้นหาหลายรายการพร้อมกัน ค้นหาแต่ละรายการหนึ่งครั้งและคิดค่าค้นหาแต่ละรายการ จากนั้นรวมผลและลบ URL ซ้ำก่อนส่งให้โมเดล ใช้พร้อม search_prompt ไม่ได้ หากบางรายการล้มเหลว จะตอบต่อด้วยผลที่สำเร็จและคิดเฉพาะจำนวนที่สำเร็จ หากล้มเหลวทั้งหมดจึงคืนค่า 503 และไม่คิดค่าบริการtime_rangeday, week, month, year (รับ d/w/m/y, past_day, 24h, 7d, 30d, 365d และรูปแบบทั่วไปอื่น ๆ; ชื่อพารามิเตอร์อาจเป็น recency หรือ search_recency_filter)ไม่จำกัดค้นหาเฉพาะเนื้อหาในช่วงเวลาที่กำหนดlanguageรหัสภาษา ISO 639-1 (เช่น zh, en, ja) ค่าเดี่ยวหรืออาร์เรย์ไม่จำกัดให้ความสำคัญกับเนื้อหาในภาษาที่ระบุ หากส่งอาร์เรย์ ปัจจุบันจะใช้เฉพาะภาษาแรกinclude_domainsอาร์เรย์สตริงโดเมน รองรับ wildcard (เช่น *.gov.tw)—ค้นหาเฉพาะโดเมนเหล่านี้ สูงสุด 300 โดเมน และแต่ละโดเมนยาวไม่เกิน 253 อักขระexclude_domainsอาร์เรย์สตริงโดเมน รองรับ wildcard—ไม่ค้นหาโดเมนเหล่านี้ สูงสุด 150 โดเมนmax_results1–10ตามระดับจำนวนแหล่งอ้างอิงที่ส่งกลับ เขียนเป็น num_results ได้เช่นกันenginebasic, fast, ultra-fast, advancedตามระดับกำหนดความลึกของการค้นหาโดยตรงและมีลำดับความสำคัญสูงสุด ค่าอื่นรวมถึงชื่อเครื่องมือค้นหาจากแพลตฟอร์มอื่นจะใช้ความลึกเริ่มต้นและไม่คืนข้อผิดพลาด (เฉพาะ plugins)modeturbo, instant, fast, basic, advanced, deep—อีกวิธีในการกำหนดความลึก: turbo/instant → เร็วที่สุด, fast → เร็ว, basic → มาตรฐาน, advanced/deep → ขั้นสูง ค่าที่ไม่รู้จักจะถูกละเว้นsearch_context_sizelow, medium, high, fastmediumระดับการค้นหา ดูตารางด้านล่าง (เฉพาะ web_search_options)ลำดับความสำคัญของความลึก: engine (สี่ค่าด้านบน) > mode > search_context_size > ค่าเริ่มต้น medium
รูปแบบพารามิเตอร์ของ plugins และ web_search_options เข้ากันได้กับ OpenRouter จึงใช้คำขอเดิมได้โดยตรง
รูปแบบเครื่องมือค้นหาที่เข้ากันได้กับ Vercel AI Gateway
tools ของ Chat Completions รับรูปแบบเครื่องมือค้นหาต่อไปนี้ด้วย โดยจะถือเป็นการค้นหาเว็บหนึ่งครั้ง ประมวลผลโดยการค้นหาเว็บของแพลตฟอร์มนี้ และใช้การคิดค่าบริการกับรูปแบบการอ้างอิงแบบเดียวกัน:
typeที่รับได้:vercel:perplexity_search,vercel:exa_search,vercel:parallel_search,vercel:tako_searchทุกtypeมีพฤติกรรมและค่าใช้จ่ายเหมือนกันconfig.queryถือเป็นsearch_prompt;config.max_results(หรือnum_results),config.countryและพารามิเตอร์ชื่อเดียวกันจะจับคู่กับด้านบน ส่วนฟิลด์ที่ไม่รู้จักจะถูกละเว้น- เครื่องมือค้นหาเหล่านี้จะไม่ถูกส่งต่อให้โมเดล
- หากคำขอเดียวมีเครื่องมือค้นหาหลายรายการ จะใช้เฉพาะรายการแรก
รองรับเครื่องมือ `web_search_preview` ด้วย
เมื่อใส่ { "type": "web_search_preview" } ใน tools ของ Responses หรือ endpoint อื่น จะถือเป็นการค้นหาเว็บหนึ่งครั้งเช่นกัน โดยการค้นหาเว็บของแพลตฟอร์มนี้เป็นผู้ประมวลผล ใช้การคิดค่าบริการและรูปแบบการอ้างอิงเดียวกัน เครื่องมือนี้จะไม่ถูกส่งต่อให้โมเดล
เมื่อใช้หลายรูปแบบพร้อมกัน
สามารถใช้ :online, plugins, web_search_options และเครื่องมือค้นหา (รวม web_search_preview) พร้อมกันได้ แต่แต่ละคำขอจะค้นหาและคิดค่าบริการเพียงครั้งเดียว (ถ้าใช้ search_queries จะคิดตามจำนวนรายการ) ลำดับของคำค้นหาคือ search_queries > config.query ของเครื่องมือค้นหา > search_prompt > query_source พารามิเตอร์อื่นจะรวมตามลำดับด้านบน
จะคืนค่า 400 invalid_web_search_options เฉพาะเมื่อชนิดพารามิเตอร์ผิด เช่น ส่งตัวเลขให้ engine หรือ include_domains ไม่ใช่อาร์เรย์สตริง หรือส่งค่าอยู่นอกช่วงที่กำหนด
ระดับการค้นหา
lowมาตรฐานสูงสุด 5กระชับกว่าmediumมาตรฐานสูงสุด 10ระดับเริ่มต้นhighขั้นสูงสูงสุด 10ค้นหาลึกกว่า ราคาต่อหน่วยสูงกว่าfastเร็วสูงสุด 10ตอบสนองเร็วกว่าหากไม่ระบุระดับ จะใช้ medium
แหล่งอ้างอิงในคำตอบ
แหล่งข้อมูลที่ค้นพบจะส่งกลับใน annotations โดยใช้รูปแบบ url_citation ที่เป็นมาตรฐานทั่วไป:
- แหล่งอ้างอิงแต่ละแห่งจะมีรายการอ้างอิงหนึ่งรายการ
- หากโมเดลทำเครื่องหมายแหล่งที่มาในคำตอบ (เช่น
[source-1])start_indexและend_indexจะระบุตำแหน่งในข้อความคำตอบ หากไม่มีเครื่องหมาย ทั้งสองค่าจะเป็น0
ตำแหน่งตาม endpoint:
- Chat Completions: non-streaming อยู่ที่
choices[].message.annotations; streaming จะส่งบล็อกเพิ่มเติมที่มีเฉพาะdelta.annotationsก่อน[DONE] - Responses: อยู่ใน
annotationsของเนื้อหาoutput_text; streaming จะส่งพร้อม event เสร็จสิ้น เช่นresponse.output_text.done - Messages: แนบอยู่กับบล็อกเนื้อหาข้อความใน
annotations; streaming จะส่งใน eventtext_deltaก่อนจบ
การคิดค่าบริการ
- ค่าใช้จ่ายต่อคำขอ = ค่าโมเดล + ค่าค้นหาเว็บ
- การค้นหาเว็บ คิดค่าบริการต่อการค้นหา ตามราคาของแพลตฟอร์ม ความลึกขั้นสูง (
highหรือกำหนดขั้นสูงด้วยengine/mode) มีราคาต่อหน่วยสูงกว่า - โมเดลฟรีก็มีค่าค้นหาเว็บ แต่ตัวโมเดลยังฟรี
- แต่ละคำขอจะค้นหาหนึ่งครั้งเป็นค่าเริ่มต้น หากใช้
search_queriesจำนวนครั้งเท่ากับจำนวนคำค้นหาและคิดค่าตามจำนวน แม้ backend เปลี่ยนเส้นทางแล้วลองใหม่ ก็จะไม่ค้นหาหรือคิดค่าซ้ำ - กรณีต่อไปนี้ ไม่คิดค่าค้นหาเว็บ:
- การค้นหาเองล้มเหลว (คืนค่า 503 ดูด้านล่าง)
- รายการที่ล้มเหลวเมื่อใช้
search_queries(คิดเฉพาะรายการที่สำเร็จ) - ค้นหาสำเร็จ แต่โมเดลสร้างคำตอบสุดท้ายไม่สำเร็จ
- ค่าค้นหาจะรวมอยู่ในการกันยอดคงเหลือล่วงหน้า ยอดหักจริงจะแสดงใน
usage.costของคำตอบและบันทึกบัญชี
ข้อผิดพลาดและข้อจำกัด
web_search_unavailableบริการค้นหาเว็บหยุดชั่วคราว โปรดลองใหม่ภายหลังไม่คิดค่าใช้จ่ายและไม่เรียกโมเดลinsufficient_creditsยอดคงเหลือไม่พอสำหรับคำขอนี้รวมค่าค้นหา ระบบจะบล็อกก่อนค้นหาไม่คิดค่าใช้จ่ายweb_search_rate_limitedคำขอค้นหาเว็บถี่เกินไป โปรดลองใหม่ภายหลังไม่คิดค่าใช้จ่ายinvalid_web_search_optionsพารามิเตอร์การค้นหาไม่ถูกต้อง เช่น country ไม่อยู่ในรายการรองรับ include_domains ไม่ใช่อาร์เรย์สตริง หรือระบุ search_queries กับ search_prompt พร้อมกันไม่คิดค่าใช้จ่าย- การจำกัดอัตรา สิทธิ์โมเดล การตรวจเนื้อหา และการตรวจสอบคำขอทั่วไปจะเสร็จก่อนการค้นหา คำขอที่ถูกบล็อกด้วยการตรวจเหล่านี้จะไม่ค้นหา
- พารามิเตอร์และเครื่องมือค้นหา (
:onlinesuffix, รายการ web ในplugins,web_search_options, เครื่องมือด้านบน และweb_search_preview) ประมวลผลโดยแพลตฟอร์มนี้เท่านั้นและไม่ส่งต่อให้โมเดล
ย้ายจาก OpenRouter
API ของ BazaarLink เข้ากันได้กับ OpenRouter — การเชื่อมต่อส่วนใหญ่เปลี่ยนแค่สองค่า: base URL เป็น https://api.bazaarlink.ai/v1 และคีย์ API เป็นคีย์ BazaarLink ที่ขึ้นต้นด้วย sk-bl-
- ฐาน URL: https://openrouter.ai/api/v1 → https://api.bazaarlink.ai/v1
- คีย์ API: sk-or-... → sk-bl-... (สร้างได้ที่ /keys)
- Model ID: ใช้รูปแบบ provider/model เดียวกัน (เช่น anthropic/claude-sonnet-4.6) ดูแคตตาล็อกทั้งหมดที่ GET /v1/models
- fallback ผ่าน models[], streaming, tool calling และ structured outputs ใช้รูปแบบคำขอเดียวกัน
การยืนยันตัวตน
คำขอ API ทั้งหมดต้องมี Authorization header พร้อมคีย์ API ของคุณ
Authorization: Bearer sk-bl-YOUR_API_KEYรับคีย์ API จาก แดชบอร์ด เก็บคีย์ให้ปลอดภัย — อย่าเปิดเผยในโค้ดฝั่งไคลเอนต์
Header เสริม
หลักการ
BazaarLink ออกแบบตามหลักการหลักสามข้อ:
1. อินเทอร์เฟซรวม
API เดียว SDK เดียว โมเดลหลายร้อยตัว สลับระหว่าง OpenAI, Anthropic, Google Gemini, Meta Llama และอื่นๆ โดยไม่ต้องเปลี่ยนโค้ด — เพียงเปลี่ยน model ID
2. การปรับราคาให้เหมาะสม
BazaarLink กำหนดเส้นทางไปยังผู้ให้บริการที่คุ้มค่าที่สุดสำหรับโมเดลที่คุณเลือกโดยอัตโนมัติ คุณจ่ายเฉพาะที่ใช้ เรียกเก็บเป็น USD พร้อมการออกใบกำกับภาษีเต็มรูปแบบ
3. การจัดการคำขอ
เมื่อแหล่ง upstream มีปัญหา คำขออาจลองใช้แหล่งอื่นที่พร้อมใช้งานได้ หากไม่มีแหล่งใดใช้ได้ คำขอจะได้รับข้อผิดพลาด
มัลติโมดัล
BazaarLink รองรับอินพุตหลายรูปแบบ — ส่งรูปภาพ เสียง และไฟล์ข้างข้อความไปยังโมเดลที่รองรับ เนื้อหาจะถูกส่งผ่านไปยังผู้ให้บริการอัปสตรีม
รูปแบบที่รองรับ
ตัวอย่าง:
กำลังส่งภาพ
ใช้รูปแบบอาร์เรย์เนื้อหาที่มีส่วน image_url รูปแบบที่รองรับ: PNG, JPEG, WebP และ GIF (รวมถึงภาพเคลื่อนไหว) คุณสามารถรวมรูปภาพหลายรูปไว้ในข้อความเดียว โดยแต่ละภาพเป็นส่วน image_url แยกกัน:
ขีดจำกัด
BazaarLink มีขีดจำกัดสองแบบที่แยกจากกัน: ขีดจำกัดอัตราสำหรับจำนวนคำขอต่อนาที และขีดจำกัดเครดิตสำหรับค่าใช้จ่ายของบัญชี หากเกินขีดจำกัดอัตราจะได้รับ HTTP 429 หากเครดิตหมดจะได้รับ HTTP 402
ขีดจำกัดอัตรา
Rate ขีดจำกัดต่อผู้ใช้ (ไม่ใช่ต่อคีย์) วัดเป็นคำขอต่อนาที (RPM) ไม่มีขีดจำกัดรายวัน ระดับจะถูกกำหนดโดยอัตโนมัติตามยอดเครดิตในบัญชีของคุณ
เมื่อเกินขีดจำกัดอัตรา คุณจะได้รับการตอบกลับ 429 พร้อมส่วนหัว Retry-After ใช้ Exponential Backoff เมื่อลองส่งคำขออีกครั้ง
ส่วนหัวการตอบสนอง
Response อาจมี x-request-id; x-generation-id สำหรับ response non-streaming; x-ratelimit-*; retry-after เมื่อเกี่ยวข้อง; และ x-auto-resolved-model สำหรับเส้นทาง auto หรือ auto:free
x-request-id: 85e6f35c71a31f19-SJC
x-generation-id: 85e6f35c71a31f19-SJC
x-ratelimit-limit: 200
x-ratelimit-remaining: 198
x-ratelimit-reset: 1740000060
retry-after: 5
x-auto-resolved-model: openai/gpt-4oขีดจำกัดเครดิต
การตอบกลับ 402 หมายความว่ายอดคงเหลือในบัญชีหรือเพดานการใช้จ่ายของคีย์ลดลงเหลือศูนย์ ไม่ใช่เพราะคุณส่งคำขอเร็วเกินไป การตอบกลับนี้จะไม่มี rate limit headers และหากถึงขีดจำกัดระหว่างการ stream คุณจะได้รับ SSE error event แทนการเปลี่ยนสถานะ HTTP
รายการอนุญาต IP
คุณสามารถตั้งค่ารายการอนุญาต IP แยกสำหรับคีย์ API แต่ละรายการ เพื่อให้เฉพาะคำขอจาก IP ต้นทางที่กำหนดเท่านั้นที่ใช้คีย์นั้นได้
เหมาะใช้เมื่อใด
เหมาะสำหรับการใช้งานบนเซิร์ฟเวอร์ production ที่มี IP ขาออกแบบคงที่ หากแอปส่งคำขอจากเครือข่ายบ้าน เครือข่ายมือถือ หรือที่อยู่ที่เปลี่ยนแปลงได้ โปรดตรวจสอบว่า IP ขาออกคงที่ก่อน มิฉะนั้นคุณอาจล็อกตัวเองออก
วิธีตั้งค่า
เปิด /keys จากนั้นเปิดเมนู "⋯" ของคีย์ที่ต้องการ เลือก "รายการอนุญาต IP" ใส่รายการ แล้วบันทึก
หรือใช้ PATCH /api/v1/keys/:id ด้วย session ที่เข้าสู่ระบบแล้วหรือ Management API key:
รูปแบบรายการ
ใน UI ให้ใส่หนึ่งค่าต่อบรรทัด ส่วน API ให้ส่งค่าเดียวกันในอาร์เรย์ `allowedCidrs` รองรับ IPv4 แบบไม่ระบุ CIDR, IPv4 CIDR หรือ IPv6 literal (เทียบข้อความแบบตรงกันเท่านั้น)
203.0.113.7
198.51.100.0/24
2001:db8::1การทำงาน
เว้นว่าง (ส่งอาร์เรย์ [] ที่ว่างเปล่า) หมายถึงไม่จำกัด IP ต้นทาง นี่คือค่าเริ่มต้น พฤติกรรมของคีย์ที่มีอยู่จึงไม่เปลี่ยนแปลง
ระบบอ่าน IP ต้นทางจาก header `cf-connecting-ip`
หากรายการไม่ว่างแต่ไม่สามารถระบุ IP ต้นทางได้ คำขอจะถูกปฏิเสธ (fail-closed)
เบรกฉุกเฉินส่วนตัว
วงเงินค่าใช้จ่าย USD คงที่ 1 นาทีและ 1 ชั่วโมง ที่ใช้กับ API Key ทั้งหมดของคุณ เมื่อถึงขีดจำกัดของช่วงเวลา คำขอใหม่จะได้รับ HTTP 429 และ window จะรีเซ็ตอัตโนมัติตามรอบเวลา
ความปลอดภัยของบัญชี
นอกจากรหัสผ่านแล้ว BazaarLink ยังรองรับการยืนยันสองขั้นตอนเพื่อเพิ่มการป้องกันตอนเข้าสู่ระบบอีกชั้นหนึ่ง
เปิดใช้การยืนยันสองขั้นตอน (TOTP)
- ไปที่หน้า “ตั้งค่า” หาส่วน “การยืนยันสองขั้นตอน (TOTP)” แล้วคลิก “เปิดใช้การยืนยันสองขั้นตอน”
- สแกน QR code บนหน้าจอด้วยแอป authenticator (เช่น Google Authenticator) หรือป้อน secret ที่แสดงด้านล่างด้วยตนเอง
- ป้อนรหัส 6 หลักที่แอป authenticator สร้างขึ้นแล้วยืนยัน ก็จะเปิดใช้งานเสร็จสมบูรณ์
หลังเปิดใช้งาน ระบบจะแสดงรหัสสำรอง 8 ชุด (แสดงเพียงครั้งเดียว) — แต่ละชุดมี 10 ตัวอักษรและใช้ได้ครั้งเดียว กรุณาจดหรือคัดลอกเก็บไว้ในที่ปลอดภัยนอกเหนือจากโทรศัพท์ทันที ใช้รหัสสำรองเข้าสู่ระบบได้เมื่อทำโทรศัพท์หายหรือเข้าแอป authenticator ไม่ได้
วิธีอื่นในการปกป้องบัญชีของคุณ
ใช้ฟีเจอร์เหล่านี้ร่วมกับการยืนยันสองขั้นตอน เพื่อลดความเสียหายจากคีย์ที่รั่วไหลหรือถูกใช้ในทางที่ผิดได้มากขึ้น:
- รายการอนุญาต IP — จำกัดให้ใช้ API key ได้เฉพาะจาก IP ต้นทางที่กำหนดเท่านั้น
- เบรกฉุกเฉินส่วนตัว — กำหนดวงเงินค่าใช้จ่ายต่อนาทีและต่อชั่วโมง ซึ่งจะหยุดโดยอัตโนมัติเมื่อเกินกำหนด
- วงเงินค่าใช้จ่ายต่อคีย์ — กำหนดวงเงินค่าใช้จ่ายรายวัน รายสัปดาห์ หรือรายเดือน เมื่อสร้างหรืออัปเดต API key
การสร้างภาพ
สร้างภาพผ่าน /v1/chat/completions ด้วย modalities:["image"] หรือ /v1/images/generations ที่เข้ากันได้กับ OpenAI DALL·E
curl -N https://api.bazaarlink.ai/v1/chat/completions \
-H "Authorization: Bearer $BAZAARLINK_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}'โฟลว์แบบเต็ม (สตรีมมิ่ง, แก้ไขภาพ, โปรโตคอล SSE, รายการโมเดล) ดูที่ API Reference →
การสร้างวิดีโอ
โฟลว์ 3 ขั้นตอนแบบ async (submit → poll → content) การสร้างวิดีโอใช้เวลา 30 วินาทีถึง 5 นาที
curl https://api.bazaarlink.ai/v1/videos \
-H "Authorization: Bearer $BAZAARLINK_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"bytedance/seedance-2.0","prompt":"a bird flying over mountains","duration":3}'
# → 202 { "id": "vjob_xxx", "status": "pending" }โฟลว์แบบเต็ม (polling, ดาวน์โหลด, ประเภทงาน, ข้อควรระวัง) ดูที่ API Reference →
PDF อินพุต
ส่งเอกสาร PDF โดยตรงในข้อความไปยังโมเดลที่รองรับ PDF แบบเนทีฟ (เช่น Claude, Gemini) BazaarLink จะส่งไฟล์ตรงไปยังโมเดล — คิดเป็น input tokens ปกติ ไม่มีค่าใช้จ่ายหรือขั้นตอนประมวลผลเพิ่มเติม
รูปแบบที่รองรับ
- PDF เอกสาร (ข้อความ รูปภาพ ตาราง สแกนแล้ว) ข้อมูลที่เข้ารหัส
- Base64 URL (`data:application/pdf;base64,...`)
- เอกสารหลายหน้า
- เฉพาะ PDF ที่ไม่มีรหัสผ่าน
อินพุตวิดีโอ
ส่งไฟล์วิดีโอไปยังโมเดลที่รองรับอินพุตวิดีโอเพื่อวิเคราะห์ สร้างคำบรรยาย หรือตอบคำถามเกี่ยวกับฉากและเหตุการณ์ ใช้ได้ทั้ง URL โดยตรงหรือ base64 data URI — URL มีประสิทธิภาพกว่าสำหรับวิดีโอที่เข้าถึงได้สาธารณะ ส่วน base64 ใช้สำหรับไฟล์ในเครื่องหรือวิดีโอส่วนตัว
รูปแบบที่รองรับ
MP4 (H.264)MPEGMOVWebMOAuth PKCE
OAuth 2.0 PKCE (Proof Key for Code Exchange) ช่วยให้แอปไคลเอ็นต์สาธารณะ (SP ของเบราว์เซอร์ แอปบนอุปกรณ์เคลื่อนที่) ทำการโทร API ในนามของผู้ใช้แต่ละรายโดยไม่ต้องจัดเก็บเซิร์ฟเวอร์ลับฝั่งไคลเอ็นต์ที่มีอายุยาวนาน
เมื่อใดควรใช้ OAuth PKCE
- การสร้างเบราว์เซอร์ SPA หรือแอปมือถือที่ต้องการการเรียกเก็บเงินต่อผู้ใช้
- SaaS ผู้เช่าหลายราย — ผู้ใช้แต่ละรายชำระค่าใช้งาน API ของตนเอง
- You ไม่สามารถจัดเก็บฝั่งไคลเอ็นต์ลับที่แบ่งใช้ (ไคลเอ็นต์สาธารณะ)
- คุณต้องการคีย์แยกต่างหากที่เพิกถอนได้สำหรับผู้ใช้แต่ละราย (ใช้ได้จนกว่าผู้ใช้จะเพิกถอน) แทนที่จะใช้คีย์ API ร่วมกันเพียงคีย์เดียว
สิ่งที่ผู้ใช้ของคุณจะเห็น
อธิบายขั้นตอนเหล่านี้บนหน้าจอลงชื่อเข้าใช้ของคุณเอง:
- ในแอปของคุณ ผู้ใช้เลือก "ลงชื่อเข้าใช้ด้วย BazaarLink" (หรือชื่อปุ่มอื่นที่คุณตั้ง)
- เบราว์เซอร์เปิดหน้าอนุญาตของ BazaarLink หากยังไม่ได้ลงชื่อเข้าใช้ ผู้ใช้จะลงชื่อเข้าใช้ก่อนแล้วกลับมาที่หน้านี้โดยอัตโนมัติ
- หน้าจะแสดงที่อยู่แอปของคุณและสิ่งที่จะเกิดขึ้นหากอนุญาต: ระบบสร้างคีย์ API ใหม่สำหรับแอป การใช้งานถูกเรียกเก็บจากยอดคงเหลือ BazaarLink ของผู้ใช้ และผู้ใช้เพิกถอนคีย์ได้ทุกเมื่อ ผู้ใช้ตั้งชื่อคีย์และกำหนดวงเงินใช้จ่ายรายเดือนได้ (ไม่บังคับทั้งสองอย่าง)
- ผู้ใช้คลิก “อนุญาต” แล้วถูกส่งกลับไปที่แอปของคุณ หากคลิก “ปฏิเสธ” ระบบจะไม่สร้างคีย์ แอปของคุณจะไม่ได้รับแจ้ง และผู้ใช้จะเห็นหน้า “ปฏิเสธการเข้าถึงแล้ว”
- หากต้องการเพิกถอนการเข้าถึงภายหลัง ผู้ใช้เปิดหน้า “คีย์ API” (https://bazaarlink.ai/keys) แล้วปิดใช้งานหรือลบคีย์ที่ตั้งชื่อตามแอปของคุณ
วิธีการทำงาน
ขั้นตอนที่ 1 — เริ่มต้นการตรวจสอบสิทธิ์ — สร้าง code_verifier แบบสุ่ม (สตริงสุ่มแบบยาว) และแฮช SHA-256 เป็น code_challenge จากนั้นเปลี่ยนเส้นทางผู้ใช้ไปยังหน้าการรับรองความถูกต้อง BazaarLink
https://bazaarlink.ai/auth?callback_url=https://yourapp.com/callback&code_challenge=CODE_CHALLENGE&code_challenge_method=S256พารามิเตอร์ของ URL การอนุญาต
- callback_url (จำเป็น) — ที่ที่ผู้ใช้จะกลับมาหลังอนุญาต ดูกฎด้านล่าง
- code_challenge (จำเป็น) — SHA-256 ของ code_verifier ที่เข้ารหัสแบบ base64url (43 อักขระ ไม่มี padding)
- code_challenge_method (จำเป็น) — ต้องเป็น S256
- state (ไม่บังคับ) — ค่า CSRF แบบทึบแสงของคุณเอง ความยาว 1 ถึง 256 อักขระ ASCII ที่พิมพ์ได้ BazaarLink จะส่งคืนตามเดิมเป็น &state=… ต่อท้าย code ทันที หาก state มีรูปแบบไม่ถูกต้อง หน้าอนุญาตจะแสดง "คำขออนุญาตไม่ถูกต้อง"
- key_label (ไม่บังคับ) — ไม่เกิน 100 อักขระ ใช้กรอกชื่อคีย์ในหน้าขอความยินยอมไว้ล่วงหน้า (ผู้ใช้ยังแก้ไขได้) ป้ายชื่อที่ยาวเกินไปหรือว่างเปล่าจะถูกละเว้น
- Headless tools (CLI / desktop, no callback_url) — omit callback_url. After the user allows, the page shows a one-time code (valid 5 minutes, single use) for them to enter into your tool; exchange it exactly like a redirected code. The page cannot show which app is asking, so tell users to enter the code only in a tool they started themselves.
ไม่รองรับ
- workspace_id และ required_workspace_id — ไม่รองรับ คีย์เป็นของบัญชีผู้ใช้เองเสมอ
- code_challenge_method=plain — ไม่รองรับ (เฉพาะ S256)
กฎของ callback_url
- ต้องเป็น https:// ส่วน http:// รับเฉพาะ localhost, 127.0.0.1 และ [::1] (พอร์ตใดก็ได้) โดยหน้าขอความยินยอมจะแสดงคำเตือนการพัฒนาในเครื่อง
- ห้ามมี fragment (#) ห้ามมีชื่อผู้ใช้หรือรหัสผ่านใน URL และยาวไม่เกิน 2048 อักขระ
- หน้าขอความยินยอมจะแสดงชื่อโฮสต์ callback ของคุณ เพื่อให้ผู้ใช้เห็นว่าแอปใดเป็นผู้ขอ
- หลังผู้ใช้อนุญาต เบราว์เซอร์จะถูกส่งไปยัง callback_url ของคุณพร้อมต่อท้าย code=… (และ state=… หากคุณส่งมา โดยสตริงคิวรีเดิมจะถูกคงไว้) code ใช้ได้ 10 นาทีและใช้ได้เพียงครั้งเดียว
ขั้นตอนที่ 2 — แลกรหัสสำหรับคีย์ API — หลังจากที่ผู้ใช้อนุญาตคำขอแล้ว BazaarLink จะเปลี่ยนเส้นทางไปยัง callback_url ของคุณพร้อม code แบบใช้ครั้งเดียว code ใช้ได้ 10 นาทีและใช้ได้เพียงครั้งเดียว หาก code_verifier ผิด code จะถูกทำลาย POST code, code_verifier และ code_challenge_method (ต้องมีทั้งสามค่า) เพื่อรับคีย์ API ของผู้ใช้
ขั้นตอนที่ 3 — ใช้คีย์กำหนดขอบเขตผู้ใช้ — คีย์ที่ส่งคืนคือคีย์ BazaarLink API ปกติที่เป็นของผู้ใช้ที่อนุญาต — การใช้งานจะถูกเรียกเก็บจากยอดคงเหลือของผู้ใช้รายนั้น ไม่ใช่ของคุณ
curl https://bazaarlink.ai/api/v1/chat/completions \
-H "Authorization: Bearer sk-bl-..." \
-H "Content-Type: application/json" \
-d '{"model": "google/gemini-3.5-flash", "messages": [{"role": "user", "content": "Hello"}]}'ตัวอย่าง JavaScript (เบราว์เซอร์)
หน้า /auth และ POST /api/v1/auth/keys ให้บริการจาก https://bazaarlink.ai (ไม่ใช่ api.bazaarlink.ai) คีย์ที่คุณได้รับใช้ได้กับ base URL ทั้งสอง: https://bazaarlink.ai/api/v1 และ https://api.bazaarlink.ai/v1
หากผู้ใช้ตั้งวงเงินใช้จ่ายตอนอนุญาต วงเงินนั้นเป็นวงเงินรายเดือนและจะรีเซ็ตตามรอบเดือนของบัญชี
ข้อผิดพลาด
ข้อผิดพลาดใช้รูปแบบแบบ OpenAI {"error":{"message","type","code"}} POST /api/v1/auth/keys อาจส่งคืน:
- 400 invalid_code_challenge_method — ไม่มี code_challenge_method เป็น plain หรือเป็นค่าอื่นที่ไม่ใช่ S256
- 400 — JSON body ไม่ถูกต้อง หรือไม่มี code / code_verifier
- 403 invalid_code — ไม่รู้จัก code, code หมดอายุหรือถูกใช้แล้ว, code_verifier ผิด หรือบัญชีไม่ได้รับอนุญาตอีกต่อไป ทุกกรณีนี้ตั้งใจส่งข้อความเดียวกัน เพื่อไม่ให้ผู้เรียกแยกแยะได้ code_verifier ที่ผิดจะทำให้ code ถูกทำลายด้วย: ให้ผู้ใช้อนุญาตใหม่อีกครั้ง
- 429 rate_limited — พยายามแลกเปลี่ยนเกิน 30 ครั้งใน 10 นาทีจาก IP เดียว (ดูเฮดเดอร์ Retry-After)
- 429 key_total_cap — บัญชีมีคีย์ API ครบจำนวนสูงสุด 200 คีย์แล้ว
- 405 — รับเฉพาะ POST
สร้างโค้ดจากเซิร์ฟเวอร์ของคุณ (คีย์การจัดการ)
เจ้าของคีย์การจัดการ (Management Key) ส่วนบุคคลสามารถสร้างโค้ดการอนุญาตได้โดยตรงด้วย POST /api/v1/auth/keys/code โดยไม่ต้องพาผู้ใช้ผ่านหน้าเบราว์เซอร์ (เข้ากันได้กับ OpenRouter) โค้ดจะผูกกับเจ้าของคีย์การจัดการ ดังนั้นคีย์ที่แลกได้จึงเป็นคีย์มาตรฐานในบัญชีของเจ้าของรายนั้น โดยวงเงิน รอบเวลา วันหมดอายุ และชื่อจะเป็นไปตามที่กำหนดไว้ที่นี่ ใช้เมื่อเครื่องมือของคุณเองมีคีย์การจัดการอยู่แล้วและต้องการมอบคีย์ที่จำกัดสิทธิ์ให้แอป ขั้นตอนการแลก (POST /api/v1/auth/keys) เหมือนด้านบน
- callback_url (จำเป็น) และ code_challenge + code_challenge_method=S256 (จำเป็น) — กฎเดียวกับ URL การอนุญาต
- key_label (ไม่บังคับ) — ยาวได้ไม่เกิน 100 ตัวอักษร เป็นชื่อของคีย์ ค่าเริ่มต้น: "App: <โฮสต์ callback ของคุณ>"
- limit (ไม่บังคับ) — วงเงินการใช้จ่ายเป็น USD ตั้งแต่ 0 ขึ้นไป ถ้าเป็น 0 หรือไม่ระบุ หมายถึงไม่จำกัด
- usage_limit_type (ไม่บังคับ) — daily, weekly หรือ monthly: วงเงินรีเซ็ตบ่อยแค่ไหน ใช้ร่วมกับ limit เท่านั้น ค่าเริ่มต้นคือ monthly
- expires_at (ไม่บังคับ) — เวลาที่คีย์หมดอายุ: เวลา ISO 8601 UTC ในอนาคตที่มีวินาที เช่น 2026-12-31T23:59:59Z ค่าที่ละเอียดแค่ระดับนาทีจะถูกปฏิเสธ หากไม่ระบุ คีย์จะยังใช้งานได้จนกว่าจะถูกเพิกถอน
- workspace_id — ไม่รองรับ (400) spawn_agent และ spawn_cloud จะถูกรับแต่ไม่นำมาใช้
การตอบกลับ: { "data": { "id", "app_id", "created_at" } } id คือโค้ดใช้ครั้งเดียวสำหรับนำไปแลก (ใช้ได้ 10 นาที และใช้ได้ครั้งเดียว) BazaarLink ไม่มีระบบลงทะเบียนแอป ดังนั้น app_id จึงเป็นจำนวนเต็มคงที่ที่คำนวณจากที่อยู่ callback ของคุณ: ที่อยู่เดิมจะได้ app_id เดิมเสมอ
- 401 unauthorized — ไม่มีคีย์ Bearer หรือไม่รู้จักคีย์นั้น
- 403 management_key_required — คีย์ไม่ใช่คีย์การจัดการส่วนบุคคล (คีย์มาตรฐานและคีย์การจัดการขององค์กรจะถูกปฏิเสธ)
- 403 account_not_allowed — เจ้าของคีย์ถูกระงับหรือถูกลบ
- 400 — invalid_callback_url, invalid_code_challenge_method, invalid_code_challenge, invalid_expires_at, workspace_not_supported หรือเนื้อหาคำขอผิดรูปแบบ
- 429 rate_limited — สร้างโค้ดเกิน 30 ครั้งต่อชั่วโมงสำหรับเจ้าของรายเดียว หรือเกิน 120 ครั้งต่อชั่วโมงจาก IP เดียว (ดู Retry-After)
คีย์ที่คุณจะได้รับ
- คีย์ BazaarLink API มาตรฐาน (sk-bl-…) ชนิดเดียวกับคีย์ที่สร้างในหน้า “คีย์ API” และใช้ได้จนกว่าผู้ใช้จะเพิกถอน
- การใช้งานถูกเรียกเก็บจากยอดคงเหลือ BazaarLink ของผู้ใช้ หากผู้ใช้ตั้งวงเงินใช้จ่ายในหน้าขอความยินยอม วงเงินนั้นเป็นวงเงินรายเดือน
- ใช้ได้กับ base URL ทั้งสอง: https://bazaarlink.ai/api/v1 และ https://api.bazaarlink.ai/v1
- นับรวมในขีดจำกัด 200 คีย์ของบัญชี และแสดงในรายการ “คีย์ API” ของผู้ใช้ ซึ่งผู้ใช้ปิดใช้งานหรือลบได้ทุกเมื่อ
- บัญชีที่ถูกระงับหรือถูกลบไม่สามารถอนุญาตแอปได้ และ code ที่ออกก่อนการระงับจะถูกปฏิเสธเมื่อแลกเปลี่ยน (403 invalid_code)
สิ่งที่คุณจะได้รับ
- Authorization Code + PKCE flow สำหรับแอปพลิเคชันไคลเอ็นต์สาธารณะ
- การเรียกเก็บเงินต่อผู้ใช้: ผู้ใช้แต่ละรายจ่ายค่าใช้งานของตนเองจากยอดคงเหลือของตนเอง
- คีย์แยกต่างหากสำหรับผู้ใช้แต่ละราย แสดงในหน้า “คีย์ API” ของผู้ใช้ ซึ่งผู้ใช้เพิกถอนได้
การจัดการคีย์ API
Management คีย์ได้รับการออกแบบมาเพื่อการจัดการคีย์แบบเป็นโปรแกรม พวกเขาสามารถสร้าง แสดงรายการ อัปเดต ปิดใช้งาน และลบคีย์ API มาตรฐานได้ แต่ไม่สามารถทำการเรียกโมเดล AI ได้
การสร้างคีย์การจัดการ
ไปที่Management API หน้าคีย์แล้วคลิก "สร้าง" — เป็นหน้าแยกต่างหากจากคีย์ API มาตรฐานของคุณ ไม่ใช่ตัวเลือกประเภทในหน้าเดียวกัน
List คีย์
สร้างคีย์ย่อย
Update Key
เพิกถอนคีย์
DELETE https://api.bazaarlink.ai/v1/keys/:id
Authorization: Bearer sk-bl-YOUR_MGMT_KEY
# Returns 204 No Content on successQuery ยอดคงเหลือ
การใช้งานแบบสอบถาม
GET https://api.bazaarlink.ai/v1/usage?period=month
Authorization: Bearer sk-bl-YOUR_MGMT_KEY
# period: day | week | month | yearการระบุแหล่งที่มาของแอป
ระบุแอปพลิเคชันของคุณในส่วนหัวของคำขอเพื่อเปิดใช้งานการติดตามการใช้งาน การเปิดเผยแดชบอร์ด และการวิเคราะห์แบบละเอียด
ส่วนหัวที่มีอยู่
| Header | Description |
|---|---|
| HTTP-Referer | URL เว็บไซต์ของคุณ สำหรับการติดตามการใช้งานและการวิเคราะห์ (ไม่บังคับ) |
| X-Title | ชื่อแอปของคุณ แสดงในแดชบอร์ด (ไม่บังคับ) |
รหัสข้อผิดพลาด
Error รูปแบบการตอบสนอง
รูปแบบ error envelope แตกต่างตาม endpoint ใช้ HTTP status และ error.type เมื่อมี error.code อาจเป็น string หรือ numeric status และอาจไม่มี; 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 status และอาจไม่มี; error.message ใช้แสดงผลเท่านั้น
รหัสการเรียกเก็บเงินที่เครื่องอ่านได้
A 402 can represent different controls. Use these stable codes to choose the correct action.
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.
การตรวจสอบเนื้อหา
คำขอทั้งหมดจะถูกตรวจสอบโดยอัตโนมัติก่อนส่งไปยังโมเดล คำขอที่ละเมิดนโยบายการใช้งานของเราจะถูกปฏิเสธก่อนถึงโมเดล และจะได้รับข้อผิดพลาด 403
หมวดหมู่เนื้อหาที่จะถูกบล็อก
การตรวจสอบเป็นไปตามนโยบายการใช้งานที่ยอมรับได้ (Acceptable Use Policy) ของเรา และจะบล็อกเนื้อหาในหมวดหมู่ต่อไปนี้เป็นหลัก:
- เนื้อหาการแสวงหาประโยชน์ทางเพศ
- การขู่ใช้ความรุนแรง
- คำแนะนำในการดำเนินการที่ผิดกฎหมาย
- เนื้อหาที่เกี่ยวข้องกับอันตรายทางชีวภาพ
รูปแบบการตอบกลับ 403
คำขอที่ถูกบล็อกโดยการตรวจสอบจะได้รับข้อผิดพลาดในรูปแบบนี้:
{
"error": {
"message": "Your prompt was blocked by content moderation.",
"type": "invalid_request_error",
"code": "content_filter"
}
}คำขอที่ถูกบล็อกจะไม่ถูกเรียกเก็บเงิน — คุณจะไม่ถูกเรียกเก็บเงินสำหรับคำขอที่ถูกปฏิเสธ
การอุทธรณ์กรณีตรวจจับผิดพลาด
หากคุณเชื่อว่าคำขอถูกบล็อกอย่างไม่ถูกต้อง โปรดติดต่อฝ่ายสนับสนุนพร้อมระบุเวลาของคำขอ และ (หากสะดวก) request id เราจะตรวจสอบให้
ความเป็นส่วนตัว
คำขอทุกรายการจะถูกตรวจสอบเนื้อหาโดยอัตโนมัติ
คำขอที่พบว่าละเมิดนโยบายจะถูกเก็บเนื้อหาไว้เป็นหลักฐานการปฏิบัติตามข้อกำหนด
คำขออื่น ๆ จะไม่มีการเก็บเนื้อหาพรอมต์แบบเต็ม
อัตราจำกัด งบประมาณ และเบรกฉุกเฉิน
These controls can reject an otherwise valid request and require different recovery actions.
รูปแบบ error envelope แตกต่างตาม endpoint ใช้ HTTP status และ error.type เมื่อมี error.code อาจเป็น string หรือ numeric status และอาจไม่มี; 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.
การจัดการข้อผิดพลาด
รูปแบบข้อผิดพลาด Streaming
Errors ที่เกิดขึ้นก่อนที่จะสตรีมโทเค็นใดๆ จะส่งกลับการตอบสนองข้อผิดพลาด HTTP มาตรฐานพร้อมเนื้อหา JSON
หลังจาก stream เริ่มแล้ว HTTP response จะเป็น 200 อยู่แล้ว ให้ parse SSE data frame ทุกเฟรม และถือว่า error ระดับบนสุด หรือ choices[0].finish_reason === "error" คือ response ที่ล้มเหลวและไม่สมบูรณ์
หาก stream ล้มเหลวหลังจากเริ่มแล้ว BazaarLink อาจส่ง SSE event สุดท้ายที่มี error object ระดับบนสุด ตามด้วย 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.เครื่องมือเรียก
Tool calling (หรือที่เรียกว่า function calling) ช่วยให้โมเดลเรียกใช้ฟังก์ชันภายนอกที่คุณกำหนด โมเดลจะตัดสินใจเมื่อจะเรียกเครื่องมือและสร้างอาร์กิวเมนต์ที่มีโครงสร้าง — โค้ดของคุณเรียกใช้ฟังก์ชันและส่งผลลัพธ์กลับเพื่อดำเนินการสนทนาต่อ
โมเดลที่รองรับ
โมเดลแนวหน้าส่วนใหญ่รองรับ tool calling ต่อไปนี้เป็นตัวเลือกยอดนิยม:
การกำหนดเครื่องมือ
แต่ละเครื่องมือเป็นออบเจ็กต์ JSON ที่อธิบายฟังก์ชันที่โมเดลสามารถเรียกใช้ ฟิลด์ parameters ใช้ JSON Schema
ตัวเลือก tool_choice
ขั้นตอนเต็ม
Tool calling เป็นกระบวนการหลายรอบ: (1) ส่งคำขอพร้อมเครื่องมือ → (2) โมเดลส่งคืน tool_calls → (3) เรียกใช้ฟังก์ชัน → (4) ส่งผลลัพธ์กลับ → (5) โมเดลสร้างการตอบกลับสุดท้าย
การเรียกเครื่องมือแบบขนาน
โมเดลบางตัวสามารถเรียกเครื่องมือหลายตัวในการตอบกลับเดียว จัดการแต่ละ tool call และส่งคืนผลลัพธ์ทั้งหมด:
Tool Calls ระหว่างสตรีมมิง
เมื่อสตรีมมิง tool calls จะมาเป็น delta บางส่วนที่จัดทำดัชนีตามตำแหน่ง — สะสมสตริงอาร์กิวเมนต์ของแต่ละ delta ตามดัชนีจนกว่า finish_reason จะกลายเป็น "tool_calls" ซึ่งบ่งบอกว่าการเรียกเสร็จสมบูรณ์แล้ว
ลูป Agent แบบง่าย
รูปแบบทั่วไปที่เรียกโมเดลต่อไปตราบใดที่โมเดลยังคงร้องขอเครื่องมือ และหยุดเมื่อโมเดลส่งคืนคำตอบสุดท้าย — ใช้ max_iterations เพื่อป้องกันการวนซ้ำไม่สิ้นสุด
แนวทางปฏิบัติที่ดีที่สุดในการกำหนดฟังก์ชัน
- ใช้ชื่อที่เจาะจงและสื่อความหมาย — get_weather_forecast แทนที่จะเป็นแค่ weather
- เขียนคำอธิบายให้ชัดเจนว่าฟังก์ชันทำอะไรและควรใช้เมื่อไร — โมเดลอาศัยข้อความนี้เพียงอย่างเดียวในการตัดสินใจว่าจะเรียกหรือไม่
- จำกัดค่าด้วย enum เท่าที่ทำได้ และใส่ตัวอย่างในคำอธิบายเพื่อลดโอกาสที่อาร์กิวเมนต์จะผิดรูปแบบ
- ทำเครื่องหมาย required เฉพาะฟิลด์ที่จำเป็นจริง ๆ เท่านั้น ฟิลด์ที่เป็นทางเลือกควรละเว้นได้จริง
เอาต์พุตที่มีโครงสร้าง
บังคับให้โมเดลส่งคืน JSON ที่ถูกต้องตาม schema จำเป็นสำหรับการสร้างแอปพลิเคชันที่เชื่อถือได้ที่แยกวิเคราะห์เอาต์พุตโมเดลด้วยโปรแกรม
วิธีที่ 1: response_format (JSON Schema)
เพื่อบังคับให้เป็นไปตาม JSON Schema อย่างเคร่งครัด:
เคล็ดลับ
- ใช้ชื่อ property ที่ชัดเจนและอธิบายได้ — โมเดลใช้เป็นบริบท
- เพิ่ม descriptions ให้กับ schema properties เพื่อแนะนำโมเดล
- ตั้ง strict: true เพื่อรับประกันการเป็นไปตาม schema (อาจเพิ่มเวลาแฝงเล็กน้อย)
- ทำ schema ให้เรียบง่าย — schema ที่ซ้อนกันลึกอาจลดคุณภาพเอาต์พุต
- ทดสอบกับโมเดลต่างๆ — บางตัวจัดการ schema ที่ซับซ้อนได้ดีกว่าตัวอื่น
เครื่องช่วยเติมล่วงหน้า
เพิ่มข้อความ assistant ที่ยังไม่สมบูรณ์เป็นรายการสุดท้าย เพื่อขอให้สร้างต่อบนเส้นทางโมเดลที่รองรับ
การแปลงข้อความ
The client-supplied transforms field is ignored and removed before an upstream request. It cannot enable or disable message transformations. BazaarLink may apply context handling under its own server-side rules; shorten the input or select a model with a larger context window when needed.
transforms values such as middle-out; they do not change how this request is routed or processed.Zero การเก็บรักษาข้อมูล
BazaarLink จะไม่จัดเก็บเนื้อหาข้อความของคุณตามค่าเริ่มต้น หน้านี้อธิบายวิธีจัดการข้อมูลของคุณ เหมาะสำหรับแอปพลิเคชันที่ประมวลผลข้อมูลที่ละเอียดอ่อน
การจัดการข้อมูลปัจจุบัน
- เนื้อหาข้อความ: ไม่ได้จัดเก็บตามค่าเริ่มต้น จะถูกละทิ้งจากหน่วยความจำหลังการประมวลผล
- ข้อมูลเมตาการเรียกเก็บเงิน: จำนวนโทเค็น การประทับเวลา รหัสโมเดล
- Usage บันทึก: ขอสถิติเท่านั้น ไม่มีเนื้อหาข้อความ
- การส่งต่ออัปสตรีม: ข้อความที่ส่งต่อไปยังผู้ให้บริการอัปสตรีม — ขึ้นอยู่กับนโยบายความเป็นส่วนตัว
การแคชพร้อมท์
Prompt caching จะนำโทเค็นพร้อมต์ที่คำนวณไว้ก่อนหน้านี้กลับมาใช้ใหม่ ซึ่งช่วยลดต้นทุนและเวลาในการตอบสนองได้อย่างมาก โดยเฉพาะอย่างยิ่งสำหรับแอปพลิเคชันที่มีพร้อมต์ของระบบขนาดใหญ่และซ้ำกัน
วิธีการทำงาน
การต้องตั้งค่าหรือไม่ขึ้นอยู่กับผู้ให้บริการ โมเดลตระกูล OpenAI จะแคช prefix ของ prompt ที่ยาวและซ้ำโดยอัตโนมัติ — ไม่ต้องแก้ไข request โมเดล Claude (Anthropic) จะแคชก็ต่อเมื่อ request มี cache_control breakpoint อย่างชัดเจนเท่านั้น BazaarLink ไม่ได้เพิ่มสิ่งนี้ให้คุณ ดังนั้น request ของ Claude ที่ไม่มี marker จะไม่ถูกแคชเลย BazaarLink ส่งต่อ cache marker ที่คุณส่งมาโดยไม่เปลี่ยนแปลง และรายงานจำนวนโทเค็นที่อ่าน/เขียนแคชจริงในการตอบกลับ usage
โทเค็นเหตุผล
แบบจำลองเหตุผล (เช่น DeepSeek R1, ซีรีส์ o1) คิดแบบภายในก่อนที่จะสร้างคำตอบสุดท้าย โทเค็นภายในเหล่านี้เรียกว่าโทเค็นการให้เหตุผล และจะเรียกเก็บเงินแยกต่างหาก
การอ่านโทเค็นการใช้เหตุผลจากการตอบกลับ
การควบคุมโหมดการคิด
บางรุ่นรองรับการสลับโหมด "การคิด" โหมดการคิดจะสร้างโทเค็นการให้เหตุผลภายในก่อนที่จะสร้างคำตอบสุดท้าย ซึ่งจะช่วยปรับปรุงคุณภาพโดยเสียโทเค็นมากขึ้น
| โมเดลครอบครัว | พารามิเตอร์ | ค่าเริ่มต้น |
|---|---|---|
| qwen3-* | enable_thinking: boolean | false (ค่าเริ่มต้นของแพลตฟอร์ม) |
| openai/gpt-5.5, gpt-5.6-sol, gpt-5.4 | reasoning_effort: "low" | "medium" | "high" | medium |
| deepseek/deepseek-r1 | — | เปิดใช้งานเสมอ (ไม่สามารถปิดใช้งานได้) |
ออบเจ็กต์การให้เหตุผลแบบรวม (รูปแบบใหม่)
BazaarLink ยังสนับสนุนอ็อบเจ็กต์การให้เหตุผลแบบรวม ซึ่งใช้ได้กับตระกูลโมเดลทั้งหมดด้วย API เดียวที่สอดคล้องกัน:
| ฟิลด์ | ค่า | ใช้กับ |
|---|---|---|
| reasoning.effort | "xhigh" | "high" | "medium" | "low" | "none" | OpenAI o-series, Grok |
| reasoning.max_tokens | integer | Anthropic Claude, Gemini |
| reasoning.exclude | boolean | ซ่อนการคิดจากการตอบรับ (แบบจำลองยังคงให้เหตุผล) |
การอ่านเนื้อหาความคิด
โมเดล reasoning สามารถส่งเนื้อหาความคิดกลับมาพร้อมคำตอบได้ โมเดลที่แสดงด้านล่างเปิดการคิดโดยค่าเริ่มต้น: คำขอที่ไม่ส่งพารามิเตอร์ reasoning ใดๆ จะทำงานโดยเปิดการคิด ส่งเนื้อหาความคิดกลับ และคิดเงินตามโทเค็นการคิดที่ใช้จริง ส่ง reasoning: { exclude: true } หรือ include_reasoning: false เพื่อปิด โมเดลอื่นทั้งหมดจะส่งเนื้อหาความคิดกลับเฉพาะเมื่อคุณร้องขอ: ส่ง reasoning_effort, ออบเจกต์ reasoning, include_reasoning: true, thinking หรือ enable_thinking
โมเดลที่คิดโดยค่าเริ่มต้น: gemini-4-argon, deepseek-v4.1-flash, deepseek-v4.1-flash-1017
วิธีร้องขอ
ใส่อย่างใดอย่างหนึ่งต่อไปนี้ในคำขอ: reasoning_effort (low, medium หรือ high), ออบเจกต์ reasoning (effort, max_tokens), include_reasoning: true, thinking: { type: "enabled" } หรือ enable_thinking: true ส่ง reasoning.exclude: true หรือ include_reasoning: false เพื่อปิดเนื้อหาความคิด (โมเดลยังคงใช้เหตุผลอยู่)
| ฟิลด์ | ตำแหน่ง | ความหมาย |
|---|---|---|
| reasoning | choices[].message.reasoning | เนื้อหาความคิด (สตริง) |
| reasoning_details | choices[].message.reasoning_details | เนื้อหาความคิดเป็นรายการของรายการย่อย แต่ละรายการมีเพียง type และ text |
| reasoning | choices[].delta.reasoning | สตรีมมิง: เนื้อหาความคิดมาเป็นช่วงๆ (delta.reasoning และ delta.reasoning_details) ก่อนข้อความคำตอบใน delta.content |
ตรวจสอบระดับที่แต่ละโมเดลรองรับด้วย GET /v1/models: โมเดล reasoning แต่ละตัวจะแสดง reasoning.supported_efforts, reasoning.default_effort และ reasoning.mandatory (เช่น gemini-4-argon รองรับ high, medium และ low)
ตัวอย่าง: gemini-4-argon
ที่ /v1/responses ให้ร้องขอด้วย reasoning: { effort, summary: "auto" } เนื้อหาความคิดจะอยู่ในรายการ reasoning ของอาร์เรย์ output ส่วนที่ /v1/messages ให้ส่ง thinking: { type: "enabled", budget_tokens } เพื่อรับบล็อก thinking
เวลาแฝงและประสิทธิภาพ
การเพิ่มประสิทธิภาพ AI API เวลาตอบสนองเป็นสิ่งสำคัญสำหรับประสบการณ์ของผู้ใช้ ด้านล่างนี้คือปัจจัยสำคัญที่ส่งผลต่อเวลาแฝงในสถาปัตยกรรม BazaarLink และแนวทางปฏิบัติที่ดีที่สุดในการปรับให้เหมาะสม
ปัจจัยที่ส่งผลต่อเวลาในการตอบสนอง
- ขนาดโมเดล: โมเดลขนาดใหญ่ (70B+) โดยทั่วไปจะสร้างช้ากว่า
- โหลดของผู้ให้บริการ: แตกต่างกันไปตามผู้ให้บริการและเวลาของวัน
- Token จำนวน: max_tokens ที่สูงขึ้นหมายถึงเวลาดำเนินการเสร็จสิ้นนานขึ้น
- การสตรีมกับการไม่สตรีม: สตรีม: true มอบโทเค็นแรกเร็วขึ้น
- ความยาวของบริบท: บริบทที่ยาวมากจะทำให้เวลาก่อนการประมวลผลเพิ่มขึ้น
เคล็ดลับการเพิ่มประสิทธิภาพ
- ต้องการสตรีมมิง (สตรีม: จริง) เพื่อปรับปรุงการรับรู้เวลาแฝง
- เลือกรุ่นที่เล็กกว่า (flash/mini/haiku) สำหรับสถานการณ์ที่ไวต่อความหน่วง
- เปิดใช้งานการแคชพร้อมท์เพื่อลดเวลาแฝงสำหรับคำขอซ้ำ
การเพิ่มประสิทธิภาพเวลาทำงาน
หลังเกิดข้อผิดพลาดจาก upstream คำขออาจลองใช้แหล่งอื่นที่พร้อมใช้งานได้ หากไม่มีแหล่งที่ประมวลผลคำขอได้ คำขอจะได้รับข้อผิดพลาด Circuit breaker จำกัดการลองซ้ำ และมีการตรวจสอบสถานะผู้ให้บริการ
กลไกความพร้อมใช้งาน
- Circuit breaker: ตรวจจับอัตโนมัติและแยกผู้ให้บริการที่ล้มเหลว
- เมื่อแหล่ง upstream มีปัญหา คำขออาจลองใช้แหล่งอื่นที่พร้อมใช้งานได้ หากไม่มีแหล่งใดใช้ได้ คำขอจะได้รับข้อผิดพลาด
- การตรวจสอบสภาพของผู้ให้บริการ: ติดตามอัตราข้อผิดพลาดและเวลาแฝงต่อผู้ให้บริการอย่างต่อเนื่อง
- ตรรกะการลองใหม่: ข้อผิดพลาดชั่วคราว (5xx) จะถูกลองใหม่โดยอัตโนมัติ
เซอร์กิตเบรกเกอร์
ราวกันตก
เพิ่มกลไกความปลอดภัยของเนื้อหาให้กับคำขอ API ของคุณ เพื่อกรองเนื้อหาที่เป็นอันตรายและบังคับใช้นโยบายการปฏิบัติตามข้อกำหนด BazaarLink มี guardrail กรองเนื้อหาที่ปรับแต่งได้เฉพาะระดับองค์กร (Organization) เท่านั้นในขณะนี้ คีย์ API ส่วนบุคคล (ที่ไม่ใช่ขององค์กร) ไม่มีการตั้งค่าที่เทียบเท่า — ความปลอดภัยของเนื้อหาขึ้นอยู่กับระบบความปลอดภัยในตัวของผู้ให้บริการโมเดลต้นทางแต่ละรายทั้งหมด
ฟีเจอร์ที่วางแผนไว้ (ยังไม่มีทั้งคีย์ส่วนบุคคลและองค์กร)
พฤติกรรมปัจจุบัน
คีย์ API ส่วนบุคคล: ผู้ให้บริการต้นทางทุกรายมีระบบความปลอดภัยเนื้อหาของตนเอง การตอบกลับของโมเดลที่กระตุ้นตัวกรองเนื้อหาจะส่งคืนพร้อม finish_reason: "content_filter" และ BazaarLink จะไม่กรองเพิ่มเติม คีย์ API องค์กร: org_admin สามารถตั้งค่ากฎที่กำหนดเอง (บล็อก/ปกปิด/บันทึก) ได้ที่ "Content Filter Guardrails" ซึ่งจะถูกใช้ก่อนที่ข้อความจะไปถึงโมเดล
เคอร์เซอร์ IDE บูรณาการ
ตั้ง BazaarLink เป็น Override URL ของ OpenAI ใน Cursor. ตั้งค่าพร้อมแปลง Responses API อัตโนมัติ, normalize รูปแบบ tool, และ prefix bz- สำหรับโมเดล Claude.
ตั้งค่าด่วน
ใน Cursor เปิด Settings → Models แล้ว:
- ตั้ง Override OpenAI Base URL เป็น https://api.bazaarlink.ai/v1
- ตั้ง Override OpenAI API Key เป็นคีย์ BazaarLink sk-bl-... ของคุณ
- เพิ่มชื่อโมเดลที่ต้องการ — ดูด้านล่างสำหรับ Claude (prefix bz-).
Prefix bz- (สำหรับโมเดล Claude)
การตรวจสอบฝั่งไคลเอนต์ของ Cursor จะเปลี่ยนเส้นทางชื่อโมเดลที่ขึ้นต้นด้วย claude- ผ่านการเชื่อมต่อ Anthropic ของ Cursor เอง โดยข้าม Override URL ของคุณ หากต้องการให้ Cursor ส่งคำขอไปยัง BazaarLink ให้เพิ่ม prefix bz- ที่ชื่อโมเดล เซิร์ฟเวอร์จะลบ prefix และ resolve ส่วนที่เหลือผ่าน alias map
ตัวแปรจุดและขีดกลางถูก normalize: bz-claude-sonnet-4.6 และ bz-claude-sonnet-4-6 ทั้งคู่แปลงเป็นโมเดลเดียวกัน
CURSOR_MODEL_MAP env var (override โดยผู้ดูแล)
สำหรับการติดตั้ง BazaarLink แบบโฮสต์เอง ตั้งค่า env var นี้เพื่อแมปชื่อโมเดลฝั่ง Cursor ใหม่ไปยัง canonical id ของแคตตาล็อก:
CURSOR_MODEL_MAP=gpt-claude-sonnet:anthropic/claude-sonnet-4.6,gpt-opus:anthropic/claude-opus-4.7ตอนนี้ gpt-claude-sonnet ที่พิมพ์ใน Cursor จะถูก map เป็น anthropic/claude-sonnet-4.6 ฝั่งเซิร์ฟเวอร์ มีประโยชน์เมื่อคุณต้องการให้ Cursor คิดว่าโมเดลเป็นตระกูล GPT (เพื่อ route ผ่าน Override URL) ในขณะที่จริงๆ คุณให้บริการ Claude
สิ่งที่เกิดขึ้นโดยอัตโนมัติ
เมื่อคำขอมาถึง /v1/chat/completions, BazaarLink จะใช้การแปลงความเข้ากันได้เหล่านี้อย่างโปร่งใส — คุณไม่ต้องทำอะไรในฝั่ง client:
- ตรวจจับ Responses API body อัตโนมัติ — ถ้า body มี input แทน messages จะแปลงเป็นรูปแบบ Chat Completions (Cursor ส่งรูปแบบ Responses API สำหรับโมเดลตระกูล GPT)
- ครอบ flat tool definitions — Cursor Agent ส่ง { name, description, parameters } โดยไม่มี function wrapper เราครอบให้เพื่อไม่ให้ Anthropic ปฏิเสธว่า Tool '' not found in provided tools
- บังคับให้ tool_choice ที่ไม่ถูกต้องเป็นรูปแบบที่ถูกต้อง — Cursor ส่ง { type: "auto" } (รูปแบบอ็อบเจกต์ ไม่มี function) ข้อกำหนด OpenAI ต้องการรูปแบบสตริงสำหรับ auto/none/required เราจึงบังคับแปลง
- ตัดฟิลด์เฉพาะ OpenAI เมื่อ route ไปยังผู้ให้บริการที่ไม่ใช่ OpenAI — parallel_tool_calls, logprobs, top_logprobs, logit_bias, service_tier, user ถูกลบก่อนส่งต่อ (มิฉะนั้น Anthropic จะคืน 400)
- Map max_output_tokens → max_tokens และตัดฟิลด์เฉพาะ Responses-API (previous_response_id, truncation, background, store) ฟิลด์ reasoning ถูกเก็บไว้สำหรับ body Chat-Completions ดั้งเดิม
โหมด Cursor Agent
การเรียกใช้ทูลทำงานผ่านโฟลว์ tool-call ของ Chat Completions มาตรฐาน Cursor ส่ง tools (Shell, Read, Write, Grep ฯลฯ) พร้อม tool_choice: "auto"; BazaarLink ส่งต่อไปยังผู้ให้บริการที่คุณเลือก ซึ่งตัดสินใจว่าจะเรียกใช้ทูลหรือไม่ การเรียกใช้ทูลส่งกลับเป็น tool_calls deltas มาตรฐานของ OpenAI; Cursor ดำเนินการในเครื่องและสนทนาต่อ ทำงานเหมือนกันไม่ว่าคุณจะเลือก gpt-4o (OpenAI ดั้งเดิม) หรือ bz-claude-sonnet-4.6
การกำหนดเส้นทางโมเดล
BazaarLink ใช้รูปแบบ provider/model-name เพื่อกำหนดเส้นทางคำขอไปยังผู้ให้บริการ upstream ที่ถูกต้อง ให้คุณเข้าถึงโมเดลหลักผ่าน API endpoint เดียว
รูปแบบ Model ID
{provider}/{model-name}
# Examples
openai/gpt-5.4-mini
anthropic/claude-sonnet-4.6
google/gemini-3-flash-preview
deepseek/deepseek-v4.1-flashลำดับความสำคัญการกำหนดเส้นทาง
เมื่อคุณส่งคำขอ BazaarLink จะแก้ไขผู้ให้บริการ upstream ตามลำดับนี้:
- จับคู่แน่นอน — ค้นหาเส้นทางโมเดลที่ตรงกับ model ID เต็ม
- Wildcard ผู้ให้บริการ — สำรองไปยังเส้นทาง provider/* (เช่น openai/*)
- Wildcard ทั่วไป — สำรองไปยังเส้นทาง * wildcard
- คีย์ผู้ให้บริการเริ่มต้น — ใช้เฉพาะโมเดลที่อยู่ในแค็ตตาล็อก โดยเลือกคีย์ที่เปิดใช้งานและกำหนดเป็นค่าเริ่มต้น
เรียกดูโมเดลที่พร้อมใช้งานทั้งหมดบน หน้าโมเดล
เราเตอร์อัตโนมัติ
Auto Router v3 scores the request into one of 14 task tiers, then uses the current primary and fallback chain configured for that tier. Paid and free tables are managed separately in the admin console.
- auto — ตารางเส้นทางแบบชำระเงิน แบบจำลองที่แก้ไขสำเร็จจะถูกเรียกเก็บเงินตามราคาที่เผยแพร่
- auto:free — ตารางเส้นทางฟรี การโทรภายในโควต้าฟรีมีค่าใช้จ่าย $0; หลังจากโควต้า บัญชีที่ได้รับทุนอาจเปลี่ยนไปใช้การกำหนดเส้นทางอัตโนมัติแบบชำระเงิน เว้นแต่จะปิดใช้ทางเลือกแบบชำระเงิน
วิธีใช้
ตั้งค่าโมเดลเป็น "auto" (ชำระเงิน) หรือ "auto:free" (ฟรี) เพื่อเปิดใช้งานการกำหนดเส้นทางอัตโนมัติ:
curl https://api.bazaarlink.ai/v1/chat/completions \
-H "Authorization: Bearer $BAZAARLINK_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"auto","messages":[{"role":"user","content":"Review this TypeScript function"}]}'วิธีที่ v3 เลือกระดับ
General tiers are simple, standard, complex and reasoning. Specialized tiers are coding, vision, image, video, data, search, social, email, calendar and trading. Low-confidence boundary results are promoted one level.
- Tier การให้คะแนน: ข้อความ เครื่องมือ ความยาว คำสำคัญ และสัญญาณโครงสร้าง เลือกหนึ่งใน 14 ระดับ
- การแทนที่แบบยาก: วิสัยทัศน์ การใช้เหตุผลอย่างเป็นทางการ และงานเฉพาะทาง สามารถเลือกระดับได้โดยตรง
- Route lookup: reads the current primary and up to five fallbacks; a disabled tier returns 503
- Execution: tries the primary, then the configured fallback chain in order
- การติดตามการตอบสนอง: โมเดลที่ได้รับการแก้ไขแล้วจะถูกส่งกลับในส่วนเนื้อหาการตอบสนองและส่วนหัว X-Auto-Resolved-Model
ตารางรุ่นปัจจุบัน
These tables use the same live configuration as inference and admin. Primary models, fallback order and enabled state can change without a deployment.
auto
auto:free
บางโมเดลมีระดับใช้งานฟรีแบบจำกัดอัตรา สิทธิ์ใช้ฟรีถูกกำหนดต่อโมเดลโดยแพลตฟอร์ม — เรียกใช้ด้วย ID โมเดลปกติได้เลย ส่วนต่อท้าย :free เป็นเพียงชื่อแทนเสริม (เติมให้โมเดลเสียเงินไม่ทำให้ฟรี)
รุ่นต่างๆ
รหัสรุ่นอิสระ
รูปแบบในแค็ตตาล็อก เช่น :free, :extended และ :thinking อาจระบุรายการที่มีความสามารถหรือราคาในแค็ตตาล็อกแตกต่างกัน เส้นทาง upstream และราคาสำหรับลูกค้ากำหนดตามแค็ตตาล็อกและกฎฝั่งเซิร์ฟเวอร์ของ BazaarLink
:free
:extended
:thinking:nitro
:floor
:exacto:onlineโมเดลฟรี
บางโมเดลมีระดับใช้งานฟรีแบบจำกัดอัตรา สิทธิ์ใช้ฟรีถูกกำหนดต่อโมเดลโดยแพลตฟอร์ม — เรียกใช้ด้วย ID โมเดลปกติได้เลย ส่วนต่อท้าย :free เป็นเพียงชื่อแทนเสริม (เติมให้โมเดลเสียเงินไม่ทำให้ฟรี)
- เรียกใช้ ID โมเดลปกติ (เช่น deepseek/deepseek-v4-flash) คำขอภายในโควตาฟรีจะได้รับบริการฟรีโดยอัตโนมัติ
- การใช้งานฟรีถูกจำกัดต่อผู้ใช้ด้วยจำนวนคำขอต่อนาทีและเพดานรายวัน ขีดจำกัดปรับตามระดับบัญชี (ไม่มีเครดิต / มีเครดิต)
- เมื่อเกินโควตาฟรีและมีเครดิต คำขอจะดำเนินต่อในระดับเสียเงินตามราคาที่แสดงโดยอัตโนมัติ ส่ง X-Free-Fallback: false เพื่อปิดการสลับอัตโนมัติและรับ 429 แทน หากไม่มีเครดิต คำขอที่เกินโควตาจะได้ 429
- GET /v1/models แสดงรายการ :free สำหรับทุกโมเดลที่มีระดับฟรี ส่วน auto:free จะกำหนดเส้นทางไปยังโมเดลฟรีเสมอ
โมเดลที่มีโควตาฟรีตอนนี้
เรียกใช้ ID โมเดลเหล่านี้ได้โดยตรงเพื่อใช้โควตาฟรี รายการอาจเปลี่ยนแปลง แนะนำให้ดึงรายการล่าสุดผ่าน API
qwen/qwen3.7-flash
reflection/beam-free
nvidia/nemotron-3.5-lightning-free
reflection/beam
stealth/glyph-cluster
deepseek/deepseek-v4-flash-0731freeขีดจำกัดโควตาฟรี
งบต่อวันของคุณ = งบคำขอต่อวันด้านบน × ตัวคูณระดับบัญชี โดยนับแยกแต่ละโมเดลฟรี ส่วน auto:free ยังมีเพดานคู่ขนานต่อ IP อีกชั้น โมเดลแต่ละตัวอาจถูกตั้งขีดจำกัดเข้มหรือผ่อนกว่านี้ ค่าที่ใช้จริงแสดงในบล็อก "โควตาฟรี" บนหน้าโมเดล โควตาฟรีคิดเป็น "หน่วย" ไม่ใช่จำนวนคำขอเพียงอย่างเดียว: หน่วยที่ใช้ต่อคำขอจะเพิ่มขึ้นตามความยาว context ของ prompt ดังนั้นภายใต้โควตารายวันเท่ากัน คำขอที่มี context ยาวจะใช้งานได้จริงน้อยกว่า prompt สั้นอย่างชัดเจน
หลังใช้โควตาฟรีหมด
เมื่อใช้โควตาฟรีหมดแล้ว คำขอส่วนเกินจะคิดตามราคาแบบชำระเงินของโมเดลหากบัญชียังมียอดเงิน หากต้องการรับ 429 แทน ให้ส่ง `X-Free-Fallback: false` หรือปิดการเปลี่ยนไปใช้ระดับชำระเงินในการตั้งค่าคีย์ หากไม่มียอดเงิน คำขอที่เกินโควตาจะส่งคืน 429
เมื่อคำขอถูกลดระดับแบบนี้จริง การตอบกลับจะมีเฮดเดอร์ x-bl-free-fallback: daily หรือ x-bl-free-fallback: rpm ระบุว่าโควตาใดถูกกระตุ้น ทำให้คุณตรวจพบการสลับได้ตั้งแต่ตอนที่ส่งคำขอ ไม่ต้องรอดูจากบิล คำขอที่ไม่ได้ถูกลดระดับจะไม่มีเฮดเดอร์นี้
# Return 429 instead of switching to paid routing
-H "X-Free-Fallback: false"การจัดการองค์กร
BazaarLink organizations use a three-tier architecture: Organization → Team → Member. Credits are stored at the org level; each Team and member can have a monthly spend cap. API requests check member → team → org credits in sequence.
ระบบงบประมาณสามชั้น
On every API request, three budget layers are checked in order. Exceeding any layer returns HTTP 429:
- Member งบประมาณรายเดือน (OrgMember.monthlyBudget)
- งบประมาณรายเดือนของทีม (Team.monthlyBudget)
- ยอดเครดิตองค์กร (Organization.credits)
รายงานการใช้งาน
The Reports page in the org portal provides monthly spend analytics across four dimensions:
- ภาพรวม: การใช้จ่ายทั้งหมด อัตรามาร์จิ้น แผนภูมิแนวโน้มรายวัน
- ตามทีม: การใช้จ่ายต่อทีม, ส่วนแบ่ง %, การแยกย่อยแบบจำลอง, การใช้งบประมาณ
- By Model: การใช้จ่ายต่อโมเดล, ราคาเฉลี่ย ($/1M tokens)
- By Member: การใช้จ่ายต่อสมาชิก — org_admin เท่านั้น
มุมมองทั้งหมดรองรับการส่งออก CSV ด้วยคำนำหน้า BOM สำหรับความเข้ากันได้ของ Excel โดยตรง
สร้างและจัดการองค์กร
- Go to Settings → Organizations → Create New Organization
- Create Teams in the org portal (optional: cost center code and monthly budget)
- Invite members by email, assign a role and Team
- Issue API keys for members — usage is automatically tagged to the correct Team / member
- View the Reports page for monthly spend broken down by Team, Model, or Member
- ดูหน้ารายงานการใช้จ่ายรายเดือนโดยแยกตามทีม รุ่น หรือสมาชิก
บทบาทสมาชิก
องค์กรสามารถจัดการอะไรได้อีก?
นอกเหนือจากสมาชิกและทีมงานแล้ว พื้นที่การจัดการองค์กรยังจัดให้มี:
- API keys and model restrictions
- Content filtering before text reaches a model
- Allowed Models by organization, team, member, or key
- Monthly budgets and spend emergency brakes
- Reports and billing
- Change logs and security logs
การกรองเนื้อหา
Organization-owned rules inspect text before it reaches a model. An org_admin can enable, edit, and test them in Settings.
- block: reject with HTTP 403
- redact: replace matches with [REDACTED]
- flag: send unchanged and record an audit event
- Built-in sensitive-data and prompt-injection templates plus custom keyword or regex rules
- Up to 100 safety-checked rules with a test preview
การจัดการ API (v1)
The /v1/orgs/ endpoints accept both Bearer management key (sk-bl-...) and session cookie, enabling server-to-server org management without a browser session.
องค์กร
/v1/orgsแสดงรายการ organization ทั้งหมดที่ผู้เรียกเป็นสมาชิก พร้อม role และ joinedAt
/v1/orgs/:orgIdดูรายละเอียด org รวมถึงจำนวน team และจำนวน member
curl https://api.bazaarlink.ai/v1/orgs \
-H "Authorization: Bearer sk-bl-YOUR_MANAGEMENT_KEY"ทีม
/v1/orgs/:orgId/teamsแสดงรายการ team พร้อมจำนวนสมาชิก เรียงตามชื่อ
/v1/orgs/:orgId/teams/v1/orgs/:orgId/teams/:teamIdอัปเดตบางส่วน — ส่งเฉพาะ field ที่ต้องการเปลี่ยน
/v1/orgs/:orgId/teams/:teamId# Create a team
curl https://api.bazaarlink.ai/v1/orgs/{orgId}/teams \
-X POST \
-H "Authorization: Bearer sk-bl-YOUR_MANAGEMENT_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "Engineering", "costCenterCode": "ENG-001", "monthlyBudget": 500}'สมาชิก
/v1/orgs/:orgId/membersแสดงรายการสมาชิกทั้งหมดพร้อมข้อมูล user (id/name/email) และ team แบบ nested
/v1/orgs/:orgId/members404 หากที่อยู่อีเมลไม่มีบัญชี BazaarLink 409 ถ้าเป็นสมาชิกอยู่แล้ว. บทบาทเริ่มต้น: สมาชิก
/v1/orgs/:orgId/members/:memberIdอัปเดตบางส่วนของ role, teamId หรือ monthlyBudget
/v1/orgs/:orgId/members/:memberIdส่งคืน 400 หากเป้าหมายคือ org_admin สุดท้าย
Reports API
Query monthly spend data programmatically. Accessible to org_admin and billing_viewer. Accepts both web session and Bearer management key.
Query params: year (default current), month (default current, 1–12).
ตารางอ้างอิง Error Response
โมเดลที่อนุญาต (Whitelist)
จำกัดว่าองค์กร ทีม หรือสมาชิกแต่ละคนสามารถเรียกโมเดลใดได้บ้าง เหมาะสำหรับบล็อกโมเดลที่มีค่าใช้จ่ายสูงหรือยังไม่ผ่านการตรวจสอบ บังคับใช้มาตรฐานโมเดล หรือจำกัดทีมให้ใช้เฉพาะ provider เดียว
หลักการทำงาน
- สามชั้นที่เป็นอิสระจากกัน — Organization, Team, Member — แต่ละชั้นมี list ของตัวเอง (String[] ใน database)
- เมื่อทั้งสามชั้นว่างหมด ทุกโมเดลจะถูกอนุญาต (พฤติกรรมเริ่มต้น)
- เมื่อมีอย่างน้อยหนึ่งชั้นที่ไม่ว่าง list ที่มีผลคือ intersection ของชั้นที่ไม่ว่าง — โมเดลต้องผ่านทุกชั้นที่ถูกจำกัดจึงจะใช้ได้
- การเปลี่ยนแปลงมีผลภายในไม่กี่วินาที (cache 60 วินาทีใน memory + 5 นาทีใน Redis ทั้งคู่ถูกล้างเมื่อมีการอัปเดต)
รูปแบบ pattern
- Exact match — เช่น openai/gpt-4o (ตรงกับโมเดลนี้เท่านั้น)
- Provider wildcard — เช่น openai/* (ทุกโมเดลภายใต้ prefix openai/)
- ตัวพิมพ์เล็กเท่านั้น สูงสุด 200 entry ต่อ list, 100 ตัวอักษรต่อ entry
ที่จัดการ
Org Portal → Allowed Models org_admin แก้ list ของ org / team / member ได้ทั้งหมด team_admin แก้ทีมของตนเองและสมาชิกในทีมนั้นได้
Error response เมื่อถูกบล็อก
การเรียกโมเดลที่ไม่อนุญาตจะได้ HTTP 403 พร้อม body แบบนี้:
การจัดการ API
ทุก endpoint รองรับ Web Session หรือ Bearer Management Key (sk-bl-...) PATCH จะแทนที่ list ทั้งหมด ส่ง [] เพื่อล้างค่า
Circuit Breaker (สวิตช์ฆ่าการใช้จ่าย)
ระบบ spend cap แบบ dual-window ที่จะบล็อก request ถัดไปเมื่อค่าใช้จ่าย upstream พุ่งสูงผิดปกติ ออกแบบมาเพื่อจำกัด script ที่ run หลุด, infinite loop, หรือ key ที่ถูกขโมยไปใช้ ก่อนที่จะเสียเงินจริง
หลักการทำงาน
- มี window คงที่สองช่วงที่ track ใน Redis ต่อ scope: ค่าใช้จ่าย upstream (USD) ใน 1 นาที และ 1 ชั่วโมง
- ถ้าช่วงใดช่วงหนึ่งถึง threshold, request ถัดไปทั้งหมดใน scope นั้นจะถูกปฏิเสธจนกว่า window จะรีเซ็ต
- ค่า default: $5 / นาที, $20 / ชั่วโมง ปิดใช้งานโดย default — ต้องเปิดใช้งานเอง
- Counter อยู่ใน Redis พร้อม TTL — recovery เป็นแบบอัตโนมัติ ไม่ต้อง reset เองสำหรับ trip ระดับ org/team/member
Scopes (member override team override org)
แต่ละชั้นตั้ง threshold ของตนเองได้ ลำดับการ resolve คือ member → team → org → platform default — ค่าแรกที่ไม่ใช่ null ชนะในแต่ละ field (cbEnabled, cbMinuteUsd, cbHourlyUsd)
- ระดับ Org — มีผลกับทุก key ภายใต้ organization ตั้งค่าใน Org Portal → Circuit Breaker
- ระดับ Team — มีผลกับทุก key ที่ tag กับทีมนั้น Override org สำหรับ key เหล่านั้น
- ระดับ Member — มีผลเฉพาะ key ที่ tag กับ member นั้น Override ทั้ง team และ org
พฤติกรรมเมื่อ trip
เมื่อ trip request จะ fail ทันที (ไม่มีการเรียก upstream) Response เป็น HTTP 429 พร้อม body แบบนี้:
บันทึกการตรวจสอบ
ทุก trip event และทุกการเปลี่ยน config จะถูกบันทึก:
- Trip events — action org.cb.tripped / team.cb.tripped / org_member.cb.tripped Dedup เป็น 1 entry ต่อ scope+window ต่อชั่วโมง เพื่อไม่ให้ trip ที่ค้างนาน flood log
- Config changes — action org.cb.update / team.cb.update / org_member.cb.update บันทึกค่าก่อน/หลัง พร้อม actor
การจัดการ API
Org admin อ่านและอัปเดต settings ผ่าน API ได้ ทุก endpoint รองรับ Web Session หรือ Bearer Management Key (sk-bl-...) ส่ง field กลุ่มใดก็ได้ใน PATCH body; null จะล้าง field และ fallback ไปยังชั้นแม่
API การหมุนปุ่ม
การเปลี่ยน API key เป็นประจำเป็นแนวทางด้านความปลอดภัย สร้างคีย์ใหม่ อัปเดตและตรวจสอบการเชื่อมต่อ แล้วจึงเพิกถอนคีย์เดิม ขั้นตอนนี้ไม่รับประกันว่าจะไม่มี downtime
ขั้นตอนการหมุน
- สร้างคีย์ API ใหม่
- อัปเดตแอปพลิเคชันหรือตัวแปรสภาพแวดล้อมของคุณให้ใช้คีย์ใหม่
- ตรวจสอบว่าคีย์ใหม่ทำงานอย่างถูกต้อง
- ปิดการใช้งานหรือลบคีย์เก่า
ส่งออกกิจกรรม
ดาวน์โหลดประวัติการใช้งาน API ทั้งหมดของคุณเป็น CSV สำหรับการตรวจสอบทางการเงิน การวิเคราะห์ต้นทุน หรือการรายงานการปฏิบัติตามข้อกำหนด
CSV ส่งออก
เข้าสู่ระบบและไปที่หน้าบันทึก คลิกปุ่มส่งออก CSV ที่มุมขวาบนเพื่อดาวน์โหลดประวัติทั้งหมดของคุณเป็นไฟล์ CSV ไม่จำเป็นต้องโทร API
CSV คอลัมน์
JSON การใช้งาน API
สำหรับการเข้าถึงแบบเป็นโปรแกรม ให้ค้นหาสถิติรวมที่จัดกลุ่มตามช่วงเวลา รุ่น หรือคีย์:
การบัญชีการใช้งาน
สืบค้นสถิติการใช้งานโดยละเอียดผ่าน API รวมถึงการใช้โทเค็น การวิเคราะห์ต้นทุน และประวัติคำขอ
การอ้างอิงฟิลด์การตอบสนอง
| Field | Type | Description |
|---|---|---|
| model | string | Model ID used (e.g., openai/gpt-4o) |
| provider | string | ค่าคงที่ BazaarLink: bazaarlink |
| prompt_tokens | number | Input tokens consumed |
| completion_tokens | number | Output tokens generated |
| total_tokens | number | Total tokens (prompt + completion) |
| reasoning_tokens | number | Reasoning tokens (for thinking models) |
| cached_tokens | number | Prompt tokens served from cache |
| cost | number | จำนวน USD ที่เรียกเก็บจากลูกค้าสำหรับคำขอนี้ |
| duration_ms | number | End-to-end latency in milliseconds |
| throughput | number | Generation speed in tokens/sec |
| finish_reason | string | stop | length | content_filter | error |
| status | number | รหัสสถานะ response ของ BazaarLink |
| app_name | string | null | Application name (X-Title header) |
| key_name | string | API key name used for the request |
รายงานคำติชม
ช่วยเราปรับปรุง BazaarLink โดยการรายงานปัญหา ข้อบกพร่อง หรือข้อเสนอแนะ เราติดตามทุกช่องทางข้อเสนอแนะอย่างกระตือรือร้น
วิธีการรายงาน
สิ่งที่ต้องรวม
- Request ID (จากฟิลด์รหัสการตอบกลับ)
- รุ่นที่ใช้และส่งพารามิเตอร์แล้ว
- Expected เทียบกับพฤติกรรมจริง
- การประทับเวลาและความถี่ของปัญหา
- Error ข้อความหรือรหัสสถานะ HTTP
ข้อมูลโซเชียล (
:social)เติม
:socialท้ายชื่อโมเดลเมื่อคำถามเกี่ยวกับแพลตฟอร์มโซเชียล ก่อนที่โมเดลจะตอบ BazaarLink จะดึงโพสต์ โปรไฟล์ หรือความคิดเห็นที่ตรงกันจากแพลตฟอร์มนั้นมาเป็นข้อมูลอ้างอิง หากดึงข้อมูลจากแพลตฟอร์มไม่ทันเวลา คำขอจะสำรองไปใช้การค้นเว็บปกติ คุณจึงยังได้คำตอบเสมอตัวอย่าง
curl https://bazaarlink.ai/api/v1/chat/completions \ -H "Authorization: Bearer $BAZAARLINK_API_KEY" \ -H "Content-Type: application/json" \ --max-time 60 \ -d '{ "model": "gpt-5.4-mini:social", "messages": [{ "role": "user", "content": "โพสต์ล่าสุดบน X เกี่ยวกับ GPT-6" }] }'สิ่งที่ควรรู้
:socialอาจใช้เวลา 20 ถึง 40 วินาทีก่อนที่คำตอบจะเริ่มแสดง เมื่อครบ 40 วินาทีจะสำรองไปใช้การค้นเว็บ ควรตั้ง timeout ของไคลเอนต์ไม่ต่ำกว่า 60 วินาที ส่วน:onlineยังเร็วเหมือนเดิมเพราะเป็นการค้นเว็บปกติ:online(5 ครั้งต่อวันสำหรับบัญชีที่ไม่มียอดคงเหลือ และ 10 ครั้งสำหรับบัญชีที่มียอดคงเหลือหรือมีการสมัครสมาชิก รีเซ็ตเวลา 00:00 UTC) เมื่อเกินโควตา แต่ละคำค้นจะคิดค่าบริการตามตารางราคา Data API (ดูGET /v1/data/catalog) เพิ่มจากค่าโทเค็นของโมเดล คำค้นที่สำรองไปใช้การค้นเว็บจะคิดราคาเท่ากับ:online:socialอ่านเพียงบางแพลตฟอร์มโซเชียล และรายการขึ้นอยู่กับการตั้งค่าที่เปิดใช้อยู่ รายการล่าสุดอยู่ที่/solutions/data-api#social-suffixแพลตฟอร์มที่อยู่ในแค็ตตาล็อก Data API แต่ไม่อยู่ในรายการนั้นจะไม่ถูกอ่านโดย:socialคำค้นเกี่ยวกับแพลตฟอร์มนั้นหรือที่ไม่ระบุแพลตฟอร์มจึงตอบด้วยการค้นเว็บPOST /api/v1/chat/completions,/api/v1/messagesและ/api/v1/responsesทั้งแบบ streaming และไม่ streaming พร้อมการอ้างอิงแหล่งที่มาแบบเดียวกับ:onlineไม่สามารถใช้:onlineและ:socialพร้อมกันในชื่อโมเดลเดียวได้ (400invalid_web_search_options)