Captioning API · v1
Picute Captioning API
ส่ง URL วิดีโอเข้ามา รับ MP4 ที่มีคำบรรยายฝังตัว, SRT ที่เซ็นชื่อ และทรานสคริปต์ JSON เอกสาร v1 ทั้งหมดอยู่ด้านล่าง — Quick Start, การอ้างอิงแบบโต้ตอบ และการตรวจสอบเว็บฮุก
เริ่มต้นใช้งาน
เลือกภาษาที่คุณใช้ ตัวอย่างโค้ดด้านล่างจะส่งงานคำบรรยายโดยใช้ API key ของคุณ — โปรดแทนที่ค่าตัวอย่างก่อนรัน
curl -X POST https://picute.net/api/v1/captions \
-H "Authorization: Bearer pk_live_<your_key>" \
-H "Content-Type: application/json" \
-d '{
"video_url": "https://cdn.example.com/clip.mp4",
"language": "auto",
"preset": "default",
"callback_url": "https://api.your-app.com/webhooks/picute"
}'การอ้างอิง API
เอนด์พอยต์, สคีมาคำขอ และรหัสข้อผิดพลาดทั้งหมดของ v1 คลิกที่การดำเนินการใดก็ได้เพื่อขยายสคีมาของคำขอและการตอบกลับ
เว็บฮุก
เมื่องานคำบรรยายเข้าสู่สถานะสุดท้าย Picute จะ POST เว็บฮุกที่เซ็นชื่อไปยัง callback URL ของคุณ ตรวจสอบเฮดเดอร์ X-Picute-Signature ก่อนเชื่อถือ payload เสมอ
อีเวนต์
caption.completed— งานคำบรรยายสำเร็จ data คือทรัพยากร Caption ทั้งหมดพร้อม URL ผลลัพธ์ที่ถูกเติมcaption.failed— งานคำบรรยายล้มเหลว data.error มีรหัสและข้อความข้อผิดพลาด
ตรวจสอบลายเซ็น
คำนวณ HMAC-SHA256 บนสตริง 'timestamp.body' แบบ raw ด้วย webhook secret ของคุณ แล้วเปรียบเทียบแบบ constant-time กับ hex digest ที่อยู่ในฟิลด์ v1= ของเฮดเดอร์
import hmac, hashlib, time
from flask import Flask, request, abort
app = Flask(__name__)
SECRET = "<your_webhook_secret_from_dashboard>"
TOLERANCE_SECONDS = 5 * 60
def verify(req):
header = req.headers.get("X-Picute-Signature", "")
parts = dict(p.split("=", 1) for p in header.split(",") if "=" in p)
timestamp = int(parts.get("t", "0"))
received = parts.get("v1", "")
if abs(time.time() - timestamp) > TOLERANCE_SECONDS:
return False
signed = f"{timestamp}.{req.get_data(as_text=True)}".encode("utf-8")
expected = hmac.new(SECRET.encode("utf-8"), signed, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, received)
@app.post("/webhooks/picute")
def hook():
if not verify(request):
abort(401)
payload = request.get_json()
print(payload["event"], payload["data"]["id"])
return "", 204