เอกสารอ้างอิง API
ภาพรวม API ของ BazaarLink
BazaarLink มีรูปแบบคำขอและการตอบกลับที่เป็นหนึ่งเดียวและเข้ากันได้กับ OpenAI สำหรับหลายโมเดลและผู้ให้บริการ เชื่อมต่อเพียงครั้งเดียวแล้วสลับโมเดลได้โดยไม่ต้องเขียนแอปใหม่
ข้อกำหนด OpenAPI
API ของ BazaarLink ทั้งหมดจัดทำเป็นข้อกำหนด OpenAPI และเข้าถึงได้ในรูปแบบ YAML และ JSON:
ใช้ข้อกำหนดเหล่านี้กับ Swagger UI, Postman หรือเครื่องมือสร้างโค้ดที่รองรับ OpenAPI เพื่อสำรวจ API หรือสร้างไลบรารีไคลเอนต์
คำขอ
รูปแบบคำขอ Chat Completions
เนื้อหาคำขอสำหรับ Chat Completions จะส่งไปยัง endpoint ต่อไปนี้:
/api/v1/chat/completionsดูรายการฟิลด์ที่รองรับทั้งหมดได้ที่ พารามิเตอร์。
เอาต์พุตที่มีโครงสร้าง
บังคับให้โมเดลส่งคืน JSON ที่ถูกต้องตาม schema จำเป็นสำหรับการสร้างแอปพลิเคชันที่เชื่อถือได้ที่แยกวิเคราะห์เอาต์พุตโมเดลด้วยโปรแกรม
json_object— โหมด JSON พื้นฐาน โดยโมเดลจะส่งคืน JSON ที่ถูกต้องjson_schema— โหมด schema แบบเข้มงวด โดยผลลัพธ์ต้องตรงกับ JSON Schema ที่กำหนด
Plugins
BazaarLink จะส่งต่ออาร์เรย์ plugins ไปยังเส้นทาง upstream ที่เลือก ความพร้อมใช้งานขึ้นอยู่กับโมเดลและผู้ให้บริการ และโมเดลแบบ :online จะเปิดใช้ปลั๊กอิน web ด้วย
Header เสริม
ระบุแอปพลิเคชันของคุณในส่วนหัวของคำขอเพื่อเปิดใช้งานการติดตามการใช้งาน การเปิดเผยแดชบอร์ด และการวิเคราะห์แบบละเอียด
เครื่องช่วยเติมล่วงหน้า
เพิ่มข้อความ assistant ที่ยังไม่สมบูรณ์เป็นรายการสุดท้าย เพื่อขอให้สร้างต่อบนเส้นทางโมเดลที่รองรับ
การตอบกลับ
BazaarLink ปรับรูปแบบการตอบกลับ completion จากหลายโมเดลและผู้ให้บริการให้เป็นรูปแบบเดียวที่เข้ากันได้กับ OpenAI
รูปแบบการตอบกลับ Completion
choices เป็นอาร์เรย์เสมอ การตอบกลับแบบสตรีมใช้ delta ส่วนแบบไม่สตรีมใช้ message และจะส่งคืนรายละเอียดการใช้งานกับค่าใช้จ่ายเมื่อมีข้อมูล
เหตุผลการสิ้นสุด
finish_reason ใช้ค่ามาตรฐาน เช่น stop, length, tool_calls, content_filter และ error ส่วน native_finish_reason จะเก็บค่าดั้งเดิมจากผู้ให้บริการ
การสอบถามค่าใช้จ่ายและสถิติ
ดึงข้อมูลสถิติโดยละเอียดสำหรับการเสร็จสมบูรณ์ครั้งเดียวด้วย ID รุ่น (จาก id การตอบกลับ chat/completions หรือการสตรีมส่วนหัว x-bz-gen-id)
Chat Completions
Endpoint หลัก รองรับ OpenAI Chat Completions API
/api/v1/chat/completionsเนื้อความคำขอ
Request Schema (TypeScript)
ตัวอย่างคำขอ
การตอบสนอง
แบบแผนการตอบสนอง (TypeScript)
BazaarLink ทำการ normalize เพียงสองฟิลด์เท่านั้น — model และการลบฟิลด์ provider — แล้วส่งต่อส่วนที่เหลือของการตอบกลับจาก upstream ตามเดิม ฟิลด์อย่าง native_finish_reason, system_fingerprint และ reasoning จะปรากฏก็ต่อเมื่อผู้ให้บริการ upstream รายนั้นกำหนดค่าไว้เท่านั้น — อย่าคาดหวังว่าจะมีอยู่ในทุกโมเดล usage.cost เป็นข้อยกเว้น — เป็นจำนวนที่ BazaarLink คำนวณและเรียกเก็บเองเสมอ ไม่ใช่ค่าที่ส่งต่อมาจาก upstream
การสร้างภาพ
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-edit); โมเดลสร้างภาพล้วนเป็น text->image —— ตรวจสอบ modality ของแต่ละโมเดลได้ที่ GET /v1/models
Response format
/api/v1/images/generations คืนค่า JSON ซิงโครนัสที่เข้ากันได้กับ OpenAI เป็นค่าเริ่มต้น (ตั้งแต่ 2026-07-25) — client.images.generate() ใช้ได้โดยไม่ต้องมี wrapper ส่ง stream: true เพื่อเปลี่ยนไปใช้สตรีมเหตุการณ์ SSE ซึ่งให้ความคืบหน้าสำหรับโมเดลที่ใช้เวลาสร้างนาน
A. /v1/chat/completions (native, แนะนำ)
/api/v1/chat/completionsThe canonical streaming path. Recommended for any new integration.
Image-to-image: ใส่ส่วน image_url ในอาร์เรย์ content รองรับ data URI หรือ URL รูปภาพแบบ https (http:// จะถูกปฏิเสธ) สูงสุด 8 รูป ~10MB ต่อ data URI ข้อความที่แนบรูปต้องมีส่วนข้อความด้วย (คำสั่งแก้ไข) บางโมเดลยังรองรับ image_config (เช่น {"strength": 0.7}, 0–1 — ค่าต่ำกว่าจะใกล้เคียงรูปต้นฉบับมากกว่า) ซึ่งส่งต่อไปยัง upstream ตามเดิม
แก้ไขรูปภาพ (เข้ากันได้กับ OpenAI)
/api/v1/images/editsclient.images.edit() ของ OpenAI SDK ใช้งานได้ทันที (อัปโหลด multipart, ตอบกลับ JSON แบบซิงโครนัสคืนค่า data: [{ url }]) ข้อจำกัดเหมือน image-to-image: สูงสุด 8 รูป รูปละ 10MB ยังไม่รองรับ mask และ response_format=b64_json
curl https://bazaarlink.ai/api/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)
/api/v1/images/generationsOpenAI 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.
# Streaming variant — progressive delivery for long generations
curl -N https://bazaarlink.ai/api/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
Both endpoints emit the same event types:
โมเดลรูปภาพที่รองรับ
| Model ID | Modality | i2i (edits) |
|---|
การสร้างวิดีโอ
กระบวนการแบบอะซิงโครนัสสามขั้นตอน (submit → poll → content) การสร้างวิดีโอใช้เวลา 30 วินาที–5 นาที ซึ่งไม่เข้ากับความหมายของคำขอ/การตอบแบบซิงโครนัสของ chat-completions — ดังนั้น BazaarLink จึงแยกวิดีโอไปที่ endpoint เฉพาะ /api/v1/videos โดยใช้รูปแบบ job-id: submit จะได้ ID vjob_* → poll สถานะ → fetch bytes เมื่อเสร็จ การเรียกโมเดลวิดีโอผ่าน /chat/completions หรือ /images/generations จะได้ 400 (code: wrong_endpoint_for_video) ค่าใช้จ่ายจะชำระตาม usage.cost จริงเมื่อ completed
ประเภทงานวิดีโอ
เอนด์พอยต์เดียวครอบคลุมหลายงาน งานใดจะทำงานขึ้นอยู่กับฟิลด์ที่คุณส่ง —— โมเดลเดียวสามารถทำ image-to-video, keyframes และการต่อวิดีโอได้ ไม่ใช่ทุกโมเดลจะรองรับทุกงาน คำขอที่ไม่รองรับจะคืนค่า 400
1. ส่งงาน (คืน vjob_xxx ทันที)
/api/v1/videos2. Poll สถานะ
/api/v1/videos/{id}curl -H "Authorization: Bearer $BL_API_KEY" \
https://bazaarlink.ai/api/v1/videos/vjob_xxx3. ดึงเนื้อหาวิดีโอ (MP4)
/api/v1/videos/{id}/contentcurl -H "Authorization: Bearer $BL_API_KEY" \
-o output.mp4 \
https://bazaarlink.ai/api/v1/videos/vjob_xxx/contentสิ่งที่ควรรู้
- ความละเอียดที่อนุญาตต่างกันในแต่ละโมเดล —— ค่าที่ไม่รองรับจะคืนค่า 400 พร้อมรายการที่รองรับ
- ภาพ/วิดีโออินพุตต้องเข้าถึงได้จาก URL สาธารณะ โฮสต์ที่ป้องกัน hotlink (เช่น wiki บางแห่ง) จะล้มเหลว
- สื่ออินพุตจะผ่านการตรวจสอบเนื้อหาของ upstream และบางครั้งอาจถูกปฏิเสธ
- สำหรับการต่อวิดีโอ duration ที่ขอต้องมากกว่าความยาววิดีโอต้นฉบับ
- อัตราส่วนภาพเอาต์พุตจะเป็นไปตามภาพอินพุต —— ภาพสี่เหลี่ยมจัตุรัสให้วิดีโอสี่เหลี่ยมจัตุรัส
- การแก้ไขวิดีโอคิดเงินตามวินาทีของวิดีโออินพุตบวกวินาทีของเอาต์พุตที่สร้างขึ้น
- input_video (การแก้ไข / การต่อวิดีโอ) ต้องเป็น URL สาธารณะ วิดีโอที่คุณสร้างที่นี่ถูกให้บริการหลัง API key ของคุณ upstream จึงดึงไม่ได้ —— โฮสต์วิดีโอต้นฉบับของคุณไว้บน URL ที่เข้าถึงได้สาธารณะ
- Payload ของ webhook ไม่มีลายเซ็น — ยืนยันสถานะ/จำนวนเงินผ่าน GET /videos/{id} ก่อนดำเนินการ และสังเกตว่า unsigned_urls ที่นั่นเป็นแบบสัมบูรณ์ (ต่างจาก path แบบสัมพัทธ์ในการตอบกลับ poll)
โมเดลวิดีโอที่รองรับ
| Model ID | Modality | Tasks |
|---|---|---|
| bytedance/seedance-2.0 | text+image+audio+video->video | t2v, i2v |
| bytedance/seedance-2.0-fast | text+image+audio+video->video | t2v, i2v |
| google/veo-3.1 | text+image->video | t2v, i2v |
| openai/sora-2-pro | text+image->video | t2v, i2v |
| bytedance/seedance-1-5-pro | text+image->video | t2v, i2v |
| alibaba/happyhorse-1.0 | text->video | t2v |
| alibaba/wan2.6-r2v-flash | text+image+video->video | r2v |
| alibaba/wan2.5-i2v-preview | text+image->video | i2v |
| alibaba/happyhorse-1.1 | text->video | t2v |
| alibaba/wan2.7-t2v | text->video | t2v |
| alibaba/wan2.7-i2v | text+image+video->video | i2v, kf2v, continuation |
| alibaba/wan2.6-t2v | text->video | t2v |
| alibaba/wan2.5-t2v-preview | text->video | t2v |
| alibaba/wan2.2-t2v-plus | text->video | t2v |
| alibaba/wan2.7-r2v | text+image+video->video | r2v |
| alibaba/wan2.1-t2v-plus | text->video | t2v |
| alibaba/wan2.1-t2v-turbo | text->video | t2v |
| alibaba/wan2.6-i2v-flash | text+image->video | i2v |
| alibaba/wan2.2-i2v-flash | text+image->video | i2v |
| alibaba/wan2.7-videoedit | text+image+video->video | videoedit |
| alibaba/wan2.6-i2v | text+image->video | i2v |
| alibaba/wan2.2-i2v-plus | text+image->video | i2v |
| alibaba/wan2.6-r2v | text+image+video->video | r2v |
อินพุตวิดีโอ
ส่งไฟล์วิดีโอไปยังโมเดลที่รองรับอินพุตวิดีโอเพื่อวิเคราะห์ สร้างคำบรรยาย หรือตอบคำถามเกี่ยวกับฉากและเหตุการณ์ ใช้ได้ทั้ง URL โดยตรงหรือ base64 data URI — URL มีประสิทธิภาพกว่าสำหรับวิดีโอที่เข้าถึงได้สาธารณะ ส่วน base64 ใช้สำหรับไฟล์ในเครื่องหรือวิดีโอส่วนตัว
รูปแบบที่รองรับ
MP4 (H.264)MPEGMOVWebMPDF อินพุต
ส่งเอกสาร PDF โดยตรงในข้อความไปยังโมเดลที่รองรับ PDF แบบเนทีฟ (เช่น Claude, Gemini) BazaarLink จะส่งไฟล์ตรงไปยังโมเดล — คิดเป็น input tokens ปกติ ไม่มีค่าใช้จ่ายหรือขั้นตอนประมวลผลเพิ่มเติม
รูปแบบที่รองรับ
- PDF เอกสาร (ข้อความ รูปภาพ ตาราง สแกนแล้ว) ข้อมูลที่เข้ารหัส
- Base64 URL (`data:application/pdf;base64,...`)
- เอกสารหลายหน้า
- เฉพาะ PDF ที่ไม่มีรหัสผ่าน
Responses API
Endpoint ที่รองรับ OpenAI Responses API สำหรับการสนทนาหลายรอบแบบ stateless, tool calling และอินพุต multimodal เหมาะสำหรับ agent และเฟรมเวิร์กที่ใช้ OpenAI Python SDK ≥ 1.x กับ client.responses.create()
/api/v1/responsesเนื้อความคำขอ
Request Schema (TypeScript)
ตัวอย่างคำขอ
รูปแบบการตอบกลับ
ย้ายจาก Chat Completions
แทนที่ messages ด้วย input (สตริงหรืออาร์เรย์) ใช้ instructions แทนข้อความบทบาทระบบ และอ่าน output[0].content[0].text แทน choices[0].message.content
ข้อจำกัด
- previous_response_id หรือ store: true จะถูกปฏิเสธด้วย 400 (รหัสข้อผิดพลาด invalid_prompt) — ไม่ใช่ถูกยอมรับแล้วละเว้น ให้ใช้โหมด stateless เสมอ: ส่งประวัติการสนทนาเต็มในอาร์เรย์ input
- เครื่องมือโฮสต์ในตัวของ OpenAI เอง (web_search_preview, file_search, computer_use_preview) ไม่รองรับ การค้นหาเว็บใช้ได้ผ่าน plugins: [{id:"web"}] — รองรับเฉพาะบางเส้นทางโมเดล
- background: true ได้รับการยอมรับแต่ถูกละเว้น — ทุกคำขอทำงานแบบซิงโครนัสจนเสร็จสมบูรณ์เสมอ
Messages (Anthropic)
Anthropic-เข้ากันได้กับข้อความ API สำหรับ Claude SDK ใช้ทุกประการตามที่คุณต้องการกับ API ของ Anthropic — เพียงเปลี่ยนฐาน URL และส่วนหัวการตรวจสอบสิทธิ์
/api/v1/messagesเนื้อความคำขอ
ตัวอย่างคำขอ
การตอบสนอง
Errors: 400 (การตรวจสอบความถูกต้อง), 402 (เครดิตไม่เพียงพอ), 429 (ขีดจำกัดอัตรา), 502 (ข้อผิดพลาดอัปสตรีม / คีย์หายไป), 503 (รีสตาร์ทเซิร์ฟเวอร์)
โมเดล
แสดงรายการโมเดลทั้งหมดที่พร้อมใช้งานพร้อมข้อมูลราคาและความสามารถ ไม่ต้องยืนยันตัวตนสำหรับ endpoint นี้
/api/v1/models# Text models (default)
curl https://bazaarlink.ai/api/v1/models
# Complete catalog
curl "https://bazaarlink.ai/api/v1/models?output_modalities=all"การตอบสนอง
ราคาแบบขั้นบันไดตามความยาวอินพุต
บางโมเดลจะเปลี่ยนไปใช้ตารางราคาอื่นเมื่อพรอมต์เกินเกณฑ์ token — ตารางทั้งหมดเปลี่ยน ไม่ใช่แค่ส่วนที่เกินเกณฑ์ เกณฑ์เป็นอสมการแบบเข้ม: พรอมต์ที่มี token เท่ากับ N พอดียังคงคิดราคาที่ขั้นต่ำกว่า N; ขั้นที่สูงกว่าจะใช้ก็ต่อเมื่อ token อินพุตมากกว่า N เท่านั้น
pricing_tiers เป็นฟิลด์ระดับเดียวกับ pricing จะปรากฏเฉพาะเมื่อโมเดลมีขั้นราคาที่ override เกินกว่าราคาฐาน รายการเรียงตาม above_prompt_tokens จากน้อยไปมาก; prompt/completion คือราคา USD ต่อ token (หน่วยเดียวกับ pricing.prompt/pricing.completion) pricing.prompt และ pricing.completion จะเป็นขั้นฐาน (ต่ำสุด) เสมอ
โมเดลส่วนใหญ่ไม่มีขั้นราคา — สำหรับโมเดลเหล่านั้น จะไม่มีคีย์ pricing_tiers ในการตอบกลับเลย
โมเดลที่พร้อมใช้งาน (257)
เหล่านี้คือโมเดลที่พร้อมใช้งานบน BazaarLink โหลดแบบไดนามิกจากฐานข้อมูลของเรา:
เรียกดูโมเดลทั้งหมดบน หน้าโมเดล
Streaming
ตั้ง stream: true เพื่อรับ Server-Sent Events (SSE) stream แต่ละเหตุการณ์มีส่วนหนึ่งของการตอบกลับ
รูปแบบ SSE
data: {"id":"chatcmpl-abc","choices":[{"delta":{"content":"Hello"},"index":0}]}
data: {"id":"chatcmpl-abc","choices":[{"delta":{"content":" world"},"index":0}]}
data: {"id":"chatcmpl-abc","choices":[{"delta":{},"finish_reason":"stop","index":0}],"usage":{"prompt_tokens":10,"completion_tokens":4,"total_tokens":14}}
data: [DONE]Keep-alive และ chunk สุดท้าย
สตรีมอาจมีบรรทัดคอมเมนต์ SSE (ขึ้นต้นด้วยเครื่องหมายโคลอน) หรือ event heartbeat เป็น keep-alive — ให้ข้ามบรรทัดที่ไม่ใช่ data: แทนการ JSON.parse สตรีมดิบ chunk ข้อมูลสุดท้ายจะมี usage (จำนวนโทเค็นและค่าใช้จ่าย) ก่อน data: [DONE] การตอบสนองที่สำเร็จจะมี header X-Request-Id — แนบมาด้วยเมื่อรายงานปัญหา
: keepalive <- SSE comment line — ignore, do NOT JSON.parse
data: {"id":"chatcmpl-abc","choices":[{"delta":{"content":"Hi"},"index":0}]}
data: {"id":"chatcmpl-abc","choices":[{"delta":{},"finish_reason":"stop","index":0}],"usage":{...}}
data: [DONE]การยกเลิกสตรีม
คำขอ streaming สามารถยกเลิกได้ด้วยการปิดการเชื่อมต่อฝั่งไคลเอนต์ — เช่น เรียก AbortController.abort() หรือปิดออบเจ็กต์ stream ทันทีที่ BazaarLink ได้รับสัญญาณยกเลิก จะหยุดส่งต่อ chunk ถัดไปและยกเลิกคำขอที่ส่งไปยังผู้ให้บริการ
ข้อผิดพลาดกลางสตรีม
data: {"id":"chatcmpl-abc","choices":[{"delta":{"content":"The capital of "},"index":0}]}
data: {"error":{"message":"Upstream connection lost.","type":"upstream_error","code":502}}
data: [DONE]Embeddings
Embeddings คือการแทนค่าตัวเลขของข้อความที่จับความหมายเชิงความหมาย (semantic) — แปลงข้อความเป็นเวกเตอร์ (ชุดตัวเลข) ที่นำไปใช้กับงาน machine learning ได้หลากหลาย BazaarLink มี endpoint แบบรวมศูนย์ที่รองรับ OpenAI Embeddings API ให้คุณเรียกใช้โมเดล embedding จากหลายผู้ให้บริการผ่านอินเทอร์เฟซเดียว
Embeddings คืออะไร?
Embeddings แปลงข้อความเป็นเวกเตอร์มิติสูง โดยข้อความที่มีความหมายใกล้เคียงกันจะอยู่ใกล้กันในปริภูมิเวกเตอร์ — เช่น "cat" กับ "kitten" จะมี embedding ที่คล้ายกัน แต่ "cat" กับ "airplane" จะอยู่ห่างกันมาก การแทนค่าแบบเวกเตอร์นี้ทำให้เครื่องจักรเข้าใจความสัมพันธ์ระหว่างข้อความ ซึ่งเป็นรากฐานของแอปพลิเคชัน AI จำนวนมาก
กรณีการใช้งานทั่วไป
/api/v1/embeddingsพารามิเตอร์
คำขอพื้นฐาน
การประมวลผลแบบ Batch
ส่งอาร์เรย์ของสตริงเพื่อแปลงข้อความหลายรายการเป็น embedding ในคำขอเดียว — ถูกกว่าและเร็วกว่าการเรียกทีละข้อความ
อินพุตหลายรูปแบบ (รูปภาพ + ข้อความ)
โมเดลที่รองรับอินพุตรูปภาพ (output_modalities มี "embeddings" และ inputModalities มี "image") รับรายการอินพุตรูปแบบ {content:[{type:"text",...}, {type:"image_url",...}]} ทำให้คุณแปลงรูปภาพเดี่ยว ๆ หรือร่วมกับข้อความเป็น embedding ได้
การเลือกเส้นทางผู้ให้บริการ
ควบคุมว่า upstream ใดจะให้บริการคำขอ embedding เช่นเดียวกับ chat completions — ดูรายละเอียดฟิลด์ทั้งหมดได้ที่ Provider Selection
การค้นหาโมเดล Embedding
ไม่มี endpoint สำหรับแสดงรายการโมเดล embedding โดยเฉพาะ — เรียก GET /api/v1/models แล้วกรองฝั่งไคลเอนต์หารายการที่ output_modalities มี "embeddings" หรือดูที่หน้า Models
ข้อจำกัด
- ไม่รองรับ streaming — embeddings จะถูกส่งกลับเป็นการตอบสนองแบบสมบูรณ์เสมอ ต่างจาก chat completions
- แต่ละโมเดลมีความยาวอินพุตสูงสุด ข้อความที่เกินขีดจำกัดจะถูกตัดหรือปฏิเสธที่ upstream
- embeddings สำหรับอินพุตเดียวกันมีความแน่นอน (deterministic) — ไม่มี temperature หรือความสุ่มเข้ามาเกี่ยวข้อง
แนวทางปฏิบัติที่ดี
- เลือกโมเดลตามความสมดุลระหว่างความเร็ว/คุณภาพ/ต้นทุน — โมเดลขนาดเล็ก (เช่น qwen/qwen3-embedding-4b) ถูกกว่าและเร็วกว่า ส่วนโมเดลขนาดใหญ่ (เช่น openai/text-embedding-3-large) มักให้ผลลัพธ์แม่นยำกว่า
- รวมข้อความหลายรายการไว้ในคำขอเดียวแทนการเรียกทีละข้อความ — ลดจำนวนรอบการเรียกและ overhead
- แคชผลลัพธ์ไว้ — embedding ของอินพุตเดียวกันจะไม่เปลี่ยนแปลง ควรเก็บไว้แทนการสร้างใหม่
- เปรียบเทียบด้วย cosine similarity แทน Euclidean distance — ไม่ขึ้นกับสเกลและเหมาะกับเวกเตอร์มิติสูงกว่า
- ระวังความยาว context ของแต่ละโมเดล — เอกสารยาวอาจต้องแบ่งเป็นส่วน (chunking) ก่อนแปลงเป็น embedding
พารามิเตอร์
พารามิเตอร์การสุ่มตัวอย่างกำหนดกระบวนการสร้างโทเค็น BazaarLink ส่งพารามิเตอร์ที่รองรับไปยังผู้ให้บริการ upstream; พารามิเตอร์ที่ไม่รองรับจะถูกเพิกเฉย
พารามิเตอร์การสุ่มตัวอย่าง
พารามิเตอร์เฉพาะ BazaarLink
เครดิต
สอบถามยอดเครดิตปัจจุบันและการใช้งาน API ตลอดอายุการใช้งาน
/api/v1/creditsตัวอย่างคำขอ
curl https://bazaarlink.ai/api/v1/credits \
-H "Authorization: Bearer sk-bl-YOUR_KEY"การตอบสนอง
{
"data": {
"total_credits": 100.00,
"total_usage": 12.34
}
}Errors: 401 (คีย์ missing/invalid), 403 (ผู้ใช้ที่ถูกระงับ)
รายละเอียดรุ่น
ดึงข้อมูลสถิติโดยละเอียดสำหรับการเสร็จสมบูรณ์ครั้งเดียวด้วย ID รุ่น (จาก id การตอบกลับ chat/completions หรือการสตรีมส่วนหัว x-bz-gen-id)
/api/v1/generation?id=<generation-id>ตัวอย่างคำขอ
curl "https://bazaarlink.ai/api/v1/generation?id=gen_abc123" \
-H "Authorization: Bearer sk-bl-YOUR_KEY"การตอบสนอง
ข้อผิดพลาด: 400 (ไม่มี ID), 401 (รับรองความถูกต้อง), 404 (ไม่พบรุ่น)
API ข้อมูลสำคัญ
Query ระดับขีดจำกัดอัตราของคีย์ API ปัจจุบันและตัวนับการใช้งานแบบรวม (รูปแบบการตอบกลับเป็นไปตามแบบแผน API คีย์ข้อมูลอุตสาหกรรมทั่วไป)
/api/v1/keyการตอบสนอง
Errors: 401 (auth), 404 (ผู้ใช้หายไป — หายาก)
Agent ลงทะเบียน
การลงทะเบียนบริการตนเองสำหรับตัวแทน AI (บอท ระบบอัตโนมัติ) ส่งคืนคีย์ API พร้อมเครดิตทดลองใช้และโทเค็นการอ้างสิทธิ์สำหรับการอัปเกรดบัญชี
/api/v1/agents/registerเนื้อความคำขอ
ตัวอย่างคำขอ
curl -X POST https://bazaarlink.ai/api/v1/agents/register \
-H "content-type: application/json" \
-d '{
"name": "My Agent",
"description": "Autonomous research bot"
}'การตอบสนอง
Errors: 400 (เนื้อหาไม่ถูกต้อง / ชื่อหายไป), 429 (ขีดจำกัดอัตรา — 1/IP/24h), 500 (ภายใน)
รหัสข้อผิดพลาด
Error รูปแบบการตอบสนอง
ปลายทางการอนุมานโมเดลจะส่งคืนซองข้อผิดพลาดที่เข้ากันได้กับ OpenAI โดยฟิลด์ type อาจแตกต่างหรือถูกละไว้ได้ โปรดใช้สถานะ HTTP และ error.code ในตรรกะโปรแกรมแทนการแยกวิเคราะห์ข้อความ
{
"error": {
"message": "Insufficient credits. Please top up to continue.",
"type": "invalid_request_error",
"code": "insufficient_credits"
}
}HTTP สถานะและข้อผิดพลาดรหัส
Before streaming, the HTTP status identifies the broad failure class. error.code is either that number or a stable string for a specific remedy. Prefer the string code when present, otherwise use the HTTP status.
รหัสการเรียกเก็บเงินที่เครื่องอ่านได้
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.
อัตราจำกัด งบประมาณ และเบรกฉุกเฉิน
These controls can reject an otherwise valid request and require different recovery actions.
Compatibility note: rate-limit and emergency-brake paths currently emit numeric error.code values. Use HTTP status, Retry-After, and the documented response 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
After a stream starts, the HTTP response is already 200. Parse each SSE data frame and treat a top-level error or choices[0].finish_reason === "error" as a failed, incomplete response.
หากสตรีมล้มเหลวกลางทาง BazaarLink จะส่ง event SSE สุดท้ายที่มีอ็อบเจ็กต์ error ระดับบนสุด ตามด้วย data: [DONE] ส่วน chunk ที่ถูกส่งต่อจาก upstream บางรายแบบไม่แก้ไข อาจใส่ข้อผิดพลาดไว้ที่ choice แทน (choices[0].finish_reason === "error") — ให้รองรับทั้งสองแบบ
การจัดการเวอร์ชัน
BazaarLink เปิดให้ใช้ API path ที่เสถียรเพียงเส้นทางเดียวคือ /api/v1 — ไม่มีเวอร์ชันที่ผูกกับวันที่หรือ header เวอร์ชันให้ต้องจัดการ API มีการพัฒนาอย่างต่อเนื่องแทนที่จะออกเป็นรุ่นที่มีหมายเลข
การเปลี่ยนแปลงที่ไม่กระทบการทำงานเดิม
สิ่งเหล่านี้จะถูกปล่อยออกมาโดยไม่แจ้งล่วงหน้า:
- endpoint ใหม่
- โมเดลใหม่ที่เพิ่มเข้าแคตตาล็อก
- พารามิเตอร์คำขอที่เป็นตัวเลือกใหม่
- ฟิลด์การตอบกลับใหม่
- schema ใหม่ที่มีคุณสมบัติเป็นตัวเลือก
- รหัสสถานะ/ข้อผิดพลาดของการตอบกลับเพิ่มเติม
การเปลี่ยนแปลงที่กระทบการทำงานเดิม
สิ่งเหล่านี้เกิดขึ้นได้ยาก และครอบคลุม:
- การลบหรือเปลี่ยนชื่อ endpoint พารามิเตอร์ หรือฟิลด์การตอบกลับ
- การเปลี่ยนชนิดของฟิลด์
- การทำให้พารามิเตอร์ที่เป็นตัวเลือกกลายเป็นบังคับ
เมื่อเกิดขึ้นจริง การเปลี่ยนแปลงที่กระทบการทำงานเดิมจะใช้กับ endpoint เฉพาะเจาะจง ไม่ใช่ทั้งหมดของ /api/v1 — ไม่มีการเลื่อนเวอร์ชันครั้งเดียวที่จะทำให้ทุกการเชื่อมต่อพังพร้อมกัน เรายังไม่ได้เผยแพร่ changelog อย่างเป็นทางการที่มีแท็ก Breaking (ดู "ติดตามความเคลื่อนไหว" ด้านล่าง) — สำหรับสิ่งที่สำคัญต่อการเชื่อมต่อของคุณ กรุณาติดต่อ Support ก่อนที่จะพึ่งพาพฤติกรรมที่ไม่มีเอกสารรองรับ
นโยบายการเลิกใช้งาน
เหตุการณ์ "กระทบการทำงานเดิม" ตามปกติเพียงอย่างเดียวที่คุณควรคาดการณ์ไว้คือ โมเดลแต่ละตัวจะถูกเลิกใช้เมื่อผู้ให้บริการ upstream เลิกสนับสนุน ตรวจสอบสถานะปัจจุบันของโมเดลได้ผ่าน GET /api/v1/models
GET https://bazaarlink.ai/api/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 changelog หรือ RSS feed โดยเฉพาะ ในตอนนี้ให้ตรวจสอบหน้านี้โดยตรง ติดตามสถานะของโมเดลผ่าน GET /api/v1/models หรือติดต่อ Support หากคุณต้องการแจ้งเตือนล่วงหน้าสำหรับการเชื่อมต่อที่สำคัญ