ใช้งาน Clevera REST API
เรียกใช้ Clevera จากสคริปต์ของคุณเอง: URL พื้นฐาน, การยืนยันตัวตนด้วย bearer-token, เอนด์พอยต์และสิทธิ์ที่จำเป็นสำหรับแต่ละรายการ, ขั้นตอนการขอใบเสนอราคาก่อนเริ่มงานสำหรับงานที่ต้องชำระเงิน, ความเป็นเอกภาพ (idempotency), รูปแบบข้อผิดพลาด และขีดจำกัดของอัตราการเรียกใช้งาน
REST API ของ Clevera ช่วยให้สคริปต์และบริการของคุณทำสิ่งที่เอเจนต์สามารถทำได้ผ่าน MCP: อ่านไลบรารีของคุณ, ขอวิดีโอและบทความ, ส่งออกวิดีโอ, ทำงานบนเว็บไซต์เอกสาร และติดตามงานต่างๆ บทความนี้ครอบคลุมถึง URL พื้นฐาน, การยืนยันตัวตน, ขั้นตอนการขอสำหรับงานที่ต้องชำระเงิน, ข้อผิดพลาด และขีดจำกัดของอัตราการเรียกใช้งาน
ข้อมูลพื้นฐาน
| Base URL | https://app.clevera.ai/api/v1 |
| การยืนยันตัวตน | Authorization: Bearer <token> ด้วย API token (ขึ้นต้นด้วย clv_agent_) |
| รูปแบบ | JSON ทั้งขาเข้าและขาออก ส่ง Accept: application/json และหากมีเนื้อหา (body) ให้ส่ง Content-Type: application/json |
| Ids | ไอดีสาธารณะ เช่น job_… สำหรับงานต่างๆ ให้ใช้ไอดีที่ API ส่งกลับมา |
ตรวจสอบโทเค็นด้วย GET /docs/me:
curl -H "Authorization: Bearer $CLEVERA_TOKEN" \
-H "Accept: application/json" \
https://app.clevera.ai/api/v1/docs/me
คำตอบจะระบุว่าโทเค็นนั้นทำหน้าที่แทนใคร: ชื่อและวันหมดอายุของโทเค็น, บุคคลและบทบาทปัจจุบันของพวกเขา, เวิร์กสเปซ, เว็บไซต์ที่อยู่ในขอบเขต และสิทธิ์ที่ใช้งานได้ในขณะนี้ (สิทธิ์ของโทเค็นที่ถูกจำกัดตามบทบาทปัจจุบันของบุคคลนั้น) ให้เรียกใช้คำสั่งนี้ก่อนเมื่อการเรียกใช้งานถูกปฏิเสธ
เอนด์พอยต์
แต่ละเอนด์พอยต์ต้องการสิทธิ์ที่แสดงไว้ การเรียกใช้งานโดยไม่มีสิทธิ์ดังกล่าวจะส่งคืนค่า 403 forbidden_ability ดู สิทธิ์ของเอเจนต์
ไลบรารีและสื่อ
| วิธีการและพาธ | สิทธิ์ | การทำงาน |
|---|---|---|
GET /create/types |
any | ประเภทวิดีโอและคลิปโซเชียลที่คุณสามารถขอได้ |
GET /library |
library:read |
วิดีโอ, การบันทึก และบทความที่เจ้าของโทเค็นสามารถมองเห็นได้ |
GET /recordings |
library:read |
เฉพาะการบันทึกเท่านั้น |
GET /library/{item} |
library:read |
รายการเดียว |
GET /library/{item}/transcript |
library:read |
ถอดความของรายการนั้น |
GET /library/{item}/article |
library:read |
บทความของรายการนั้น |
GET /library/{item}/embed |
library:read |
โค้ดสำหรับฝัง (embed code) ของรายการนั้น |
GET /materials |
library:read |
รูปภาพ, วิดีโอ และ PDF ที่อัปโหลดไว้ |
POST /materials, POST /materials/import, POST /materials/uploads, POST /materials/uploads/{upload_id}/complete |
materials:write |
เพิ่มรูปภาพ, วิดีโอ หรือ PDF (โดยตรง, จาก URL, หรือเป็นการอัปโหลดขนาดใหญ่) |
วิดีโอและบทความ
| วิธีการและพาธ | สิทธิ์ | การทำงาน |
|---|---|---|
POST /videos/quotes |
videos:create |
ขอใบเสนอราคาวิดีโอจากการบันทึก (type: how_to, product_demo, cleanup, styled_video), บทความจากการบันทึก (article) หรือการแปล (translation) |
POST /videos |
videos:create + credits:spend |
สร้างวิดีโอที่เสนอราคาไว้ (quote_id) |
POST /articles/from-recording |
videos:create + credits:spend |
สร้างบทความที่เสนอราคาไว้ |
POST /videos/translations |
videos:create + credits:spend |
สร้างการแปลที่เสนอราคาไว้ |
POST /clips/quotes |
videos:create |
ขอใบเสนอราคาคลิปโซเชียล (ประเภทจาก GET /create/types) |
POST /clips |
videos:create + credits:spend |
สร้างคลิปโซเชียลที่เสนอราคาไว้ |
POST /videos/{video_id}/exports |
videos:export |
เรนเดอร์ MP4: resolution 1080p (ค่าเริ่มต้น), 2k หรือ 4k; ที่ 60 fps เสมอ ฟรี |
งานและเครดิต
| วิธีการและพาธ | สิทธิ์ | การทำงาน |
|---|---|---|
POST /quotes |
สิทธิ์ของงานนั้น | ใบเสนอราคาสำหรับงานทุกประเภท |
POST /jobs |
สิทธิ์ของงานนั้น (+ credits:spend เมื่อชำระเงิน) |
เริ่มงานที่เสนอราคาไว้ |
GET /jobs |
jobs:read |
รายการงาน |
GET /jobs/{job} |
jobs:read |
สถานะและผลลัพธ์ของงานหนึ่งรายการ |
GET /jobs/{job}/wait |
jobs:read |
รอการเปลี่ยนแปลงแทนการ polling |
GET /jobs/{job}/events |
jobs:read |
เหตุการณ์ความคืบหน้าของงาน |
POST /jobs/{job}/cancel |
jobs:read |
ยกเลิกงาน หากสายเกินไปจะขึ้นว่า "This job can no longer be canceled." |
GET /credits |
credits:spend หรือ jobs:read |
ยอดเครดิตของเวิร์กสเปซ |
เว็บไซต์เอกสาร
| วิธีการและพาธ | สิทธิ์ | การทำงาน |
|---|---|---|
GET /docs/sites, GET /docs/sites/{site}, GET /docs/sites/{site}/tree, GET /docs/sites/{site}/pages |
content:read |
เว็บไซต์ในขอบเขตของโทเค็นและหน้าต่างๆ |
GET /docs/sites/{site}/search, GET /docs/pages/{page}, GET /docs/pages/{page}/revisions |
content:read |
ค้นหาและอ่านหน้าต่างๆ รวมถึงฉบับร่าง |
POST /docs/sites/{site}/articles, PATCH /docs/pages/{page}/article, POST /docs/pages/{page}/review |
articles:write |
สร้างและแก้ไขบทความฉบับร่าง, ส่งเพื่อตรวจสอบ บทความที่เผยแพร่แล้วต้องใช้ site:publish ด้วย |
PATCH /docs/pages/{page}, DELETE /docs/pages/{page}, POST /docs/sites/{site}/sections, PATCH /docs/sections/{section} |
structure:write |
ย้าย, เปลี่ยนชื่อ, ซ่อน และลบหน้าต่างๆ; ส่วนต่างๆ |
GET/POST /docs/sites/{site}/site-pages, PUT /docs/site-pages/{page}/body |
content:read / site-pages:write |
หน้าหลัก, หน้าติดต่อ และหน้ากฎหมาย |
GET/POST /docs/sites/{site}/changelog, PATCH /docs/changelog/{entry} |
content:read / changelog:write |
รายการบันทึกการเปลี่ยนแปลง (changelog) ในรูปแบบฉบับร่าง |
POST /docs/media, POST /docs/media/uploads |
media:write |
อัปโหลดรูปภาพ |
POST /docs/sites/{site}/publish, POST /docs/pages/{page}/ready, POST /docs/changelog/{entry}/publish |
site:publish |
เผยแพร่สิ่งที่ผู้อ่านเห็น |
GET /insights/sites/{site}, …/gaps, …/feedback |
insights:read |
ค้นหาช่องว่างของเนื้อหา, คำถามที่ยังไม่ได้ตอบ, ผลตอบรับของหน้าเว็บ |
PATCH /docs/sites/{site}/settings, …/appearance, PUT …/navigation, POST …/redirects |
site:configure |
การตั้งค่าเว็บไซต์ |
POST /docs/sites |
sites:create |
สร้างเว็บไซต์เอกสาร |
ข้อมูลเพิ่มเติมเกี่ยวกับเอเจนต์และเว็บไซต์เอกสาร: เชื่อมต่อ AI เอเจนต์เข้ากับเว็บไซต์เอกสารของคุณ
ขอรับงานที่ต้องชำระเงิน
งานที่มีค่าใช้จ่ายเครดิตจะต้องขอใบเสนอราคาก่อนเสมอ แล้วจึงเริ่มงาน:
- ขอใบเสนอราคา
POST /videos/quotes(หรือ/clips/quotes) พร้อมสิ่งที่คุณต้องการ คำตอบจะมีquote_idและช่วงของเครดิต ใบเสนอราคามีอายุ 15 นาทีและใช้ได้ครั้งเดียว - ทดสอบการทำงาน (ทางเลือก) ส่งคำสั่งเริ่มงานพร้อม
"dry_run": trueเพื่อดูว่าจะเริ่มงานได้หรือไม่, ต้องมีการอนุมัติ หรือถูกบล็อก โดยจะไม่มีการเขียนข้อมูลใดๆ - เริ่มงาน
POST /videosพร้อมquote_idและส่วนหัวIdempotency-Keyคำตอบจะเป็น202พร้อมกับงานที่สร้างขึ้น - ติดตามงาน
GET /jobs/{job}/waitจนกว่าstatusของงานจะเปลี่ยน หรือรอรับการแจ้งเตือนผ่าน webhooks
curl -X POST https://app.clevera.ai/api/v1/videos/quotes \
-H "Authorization: Bearer $CLEVERA_TOKEN" -H "Content-Type: application/json" \
-d '{"type": "how_to", "recording_id": "<recording id>", "language": "en-US"}'
curl -X POST https://app.clevera.ai/api/v1/videos \
-H "Authorization: Bearer $CLEVERA_TOKEN" -H "Content-Type: application/json" \
-H "Idempotency-Key: 3f6c1a2e-8d4b-4f7a-9c1e-2b5d7e9f0a13" \
-d '{"quote_id": "<quote id>"}'
สถานะของงาน:
| สถานะ | ความหมาย |
|---|---|
queued |
ยอมรับแล้ว, กำลังจะเริ่มทำงาน |
running |
กำลังดำเนินการ |
needs_input |
รอการดำเนินการจากบุคคล, โดยปกติคือการอนุมัติใน คำขอจากเอเจนต์ งานจะมีลิงก์และวันหมดอายุ |
succeeded |
เสร็จสิ้น งานจะเชื่อมโยงไปยังวิดีโอหรือบทความใหม่ |
failed |
ไม่สำเร็จ; งานมี error_code |
canceled |
ยกเลิกแล้ว หรือการอนุมัติถูกปฏิเสธ |
expired |
ไม่มีใครอนุมัติภายใน 24 ชั่วโมง |
การที่งานจะเริ่มทันทีหรือต้องรอการอนุมัติจากบุคคลนั้น ขึ้นอยู่กับขีดจำกัดการใช้จ่ายของโทเค็นและการตั้งค่า อนุมัติโดยอัตโนมัติด้านล่าง ดู ควบคุมการใช้จ่ายและการอนุมัติของเอเจนต์
การลองใหม่และความเป็นเอกภาพ (Idempotency)
ส่งส่วนหัว Idempotency-Key (UUID ใหม่ในแต่ละการกระทำ) ในทุกการสร้างและเริ่มงาน หากเครือข่ายหลุดและคุณลองใหม่ด้วยคีย์และเนื้อหาเดิม คุณจะได้รับคำตอบเดิมกลับมาแทนที่จะได้วิดีโอที่สอง คีย์จะถูกจดจำไว้เป็นเวลา 24 ชั่วโมง
| รหัส | ความหมาย |
|---|---|
idempotency_key_reused |
คีย์เดิมแต่เนื้อหาต่างกัน ให้ใช้คีย์ใหม่สำหรับคำขอใหม่ |
idempotency_in_progress |
คำขอแรกด้วยคีย์นี้ยังคงทำงานอยู่ ให้รอและลองใหม่ |
idempotency_conflict |
"คีย์ความเป็นเอกภาพนี้ถูกใช้สำหรับคำขออื่นไปแล้ว" |
ข้อผิดพลาด
ข้อผิดพลาดทุกรายการมีรูปแบบเดียวกัน พร้อมข้อความที่ระบุว่าต้องทำอย่างไรต่อไป:
{
"error": {
"code": "forbidden_ability",
"message": "This token lacks the videos:create ability. Ask the workspace member who owns it for a token that has it.",
"details": { "ability": "videos:create" }
},
"request_id": "req_example"
}
โปรดระบุ request_id เมื่อคุณติดต่อฝ่ายสนับสนุน
| HTTP | รหัส | สาเหตุทั่วไป |
|---|---|---|
| 401 | unauthenticated, token_expired, token_revoked |
ไม่มีโทเค็น, โทเค็นผิด, หรือโทเค็นหมดอายุหรือถูกเพิกถอน |
| 402 | insufficient_credits |
เวิร์กสเปซไม่มีเครดิตเพียงพอสำหรับใบเสนอราคานี้ |
| 403 | forbidden_ability, forbidden_role, forbidden_item, ip_not_allowed, live_content_needs_publish, site_paused, forbidden |
ขาดสิทธิ์, บทบาทของเจ้าของ, การเข้าถึงคอลเลกชัน หรือ IP ไม่อยู่ในรายการอนุญาต |
| 403 | plan_locked |
"Agent API ไม่รวมอยู่ในแผนของเวิร์กสเปซนี้ ต้องเป็นแผน Pro ขึ้นไป" |
| 404 | not_found, unknown_kind |
"ไม่มี … ที่มีไอดีนี้ในขอบเขตของโทเค็นนี้ ให้รายการหรือค้นหาก่อนแล้วใช้ไอดีที่ส่งกลับมา" |
| 409 | revision_conflict, quote_used, not_cancelable, idempotency_* |
เนื้อหาเปลี่ยนไป, ใบเสนอราคาถูกใช้ไปแล้ว, หรือเกิดการชนกันของการลองใหม่ |
| 410 | quote_expired |
"ใบเสนอราคานี้หมดอายุแล้ว โปรดขอใบเสนอราคาใหม่" |
| 413 | unsupported_media |
ไฟล์มีขนาดใหญ่เกินไปหรือไม่ใช่ประเภทที่รองรับ |
| 422 | validation_failed, invalid_input, quote_mismatch, limit_reached |
ฟิลด์ไม่ถูกต้อง; details ระบุชื่อฟิลด์นั้น |
| 429 | rate_limited, cap_exceeded, busy |
คำขอมากเกินไป, ถึงขีดจำกัดการใช้จ่าย, หรือเริ่มงานสองงานพร้อมกัน |
ข้อความทุกรายการพร้อมวิธีแก้ไข: แก้ไขข้อผิดพลาดของเอเจนต์และ API
ขีดจำกัดของอัตราการเรียกใช้งาน
| ขีดจำกัด | ค่า | ข้อความ |
|---|---|---|
| คำขอต่อโทเค็น | 300 ต่อนาที | "โทเค็นนี้เกินอัตราคำขอที่กำหนด ให้รอและลองใหม่" |
| คำขอต่อเวิร์กสเปซ | 1,200 ต่อนาที, รวมทุกโทเค็น | "เวิร์กสเปซนี้เกินอัตราคำขอเอเจนต์ที่กำหนด ให้รอและลองใหม่" |
| การเขียนต่อโทเค็น | 60 ต่อนาที | "มีการเขียนจากโทเค็นนี้มากเกินไป ให้รอและลองใหม่" |
| การเขียนต่อโทเค็นต่อวัน | 2,000 | "โทเค็นนี้ถึงขีดจำกัดการเขียนรายวันแล้ว ลองใหม่พรุ่งนี้" |
| การเผยแพร่ต่อโทเค็น | 10 ต่อชั่วโมง | "โทเค็นนี้ถึงขีดจำกัดการเผยแพร่รายชั่วโมงแล้ว ลองใหม่ภายหลัง" |
| การเริ่มงานที่ต้องชำระเงิน | 20 ต่อชั่วโมงต่อโทเค็น, 100 ต่อวันต่อเวิร์กสเปซ | rate_limited พร้อม retry_after |
| การอัปโหลด | 30 ต่อนาที; 500 MB ต่อวันต่อโทเค็น; 25 MB ต่อไฟล์ | "มีการอัปโหลดจากโทเค็นนี้มากเกินไป ให้รอและลองใหม่" / "โทเค็นนี้ถึงขีดจำกัดปริมาณการอัปโหลดรายวันแล้ว ลองใหม่พรุ่งนี้" |
| การเรียกใช้งานโดยไม่มีโทเค็นที่ถูกต้อง | 60 ต่อนาทีต่อ IP address | "คำขอมากเกินไป ให้รอและลองใหม่" |
คำตอบ 429 จะมีส่วนหัว Retry-After และ retry_after (วินาที) ในเนื้อหา ให้รอตามเวลานั้นก่อนลองใหม่ การอ่าน, การขอใบเสนอราคา และการตรวจสอบสถานะไม่มีค่าใช้จ่ายเครดิต