ข้อมูลอ้างอิง API
ConvertFly REST API ช่วยให้คุณแปลง ปรับให้เหมาะสม และแปลงรูปไฟล์ผ่านโปรแกรมได้ สร้างไปป์ไลน์การแปลงด้วยงานและงานย่อย ได้แก่ นำเข้าไฟล์ ประมวลผล และส่งออกผลลัพธ์ภายในคำขอเดียว
https://convertfly.io/api/v1endpoint ทั้งหมดอ้างอิงจาก URL หลักนี้ คำขอและการตอบกลับใช้ JSON เวลาประทับทั้งหมดเป็น UTC ในรูปแบบ ISO 8601
การยืนยันตัวตน
ทุกคำขอต้องมีคีย์ API ในส่วนหัว Authorization คีย์จะขึ้นต้นด้วย cvfly_sk_ และสร้างได้ในแดชบอร์ดของคุณ
Authorization: Bearer cvfly_sk_live_abc123def456...คำแนะนำด้านความปลอดภัย: อย่าเปิดเผยคีย์ API ในโค้ดฝั่งไคลเอนต์ ให้จัดเก็บไว้ในตัวแปรสภาพแวดล้อมและเรียก API จากเซิร์ฟเวอร์ของคุณ
ขอบเขตสิทธิ์ของคีย์
คีย์ API สามารถจำกัดให้ใช้ได้เฉพาะบางการดำเนินการ คีย์ที่สร้างโดยไม่ระบุรายการขอบเขตสิทธิ์จะได้รับขอบเขตสิทธิ์เริ่มต้น
| ขอบเขตสิทธิ์ | สิทธิ์การเข้าถึง |
|---|---|
| job:read | อ่านงาน(ค่าเริ่มต้น) |
| job:write | สร้าง ยกเลิก ลองใหม่ และลบงานรวมถึงงานย่อยของงาน(ค่าเริ่มต้น) |
| task:read | อ่านงานย่อย(ค่าเริ่มต้น) |
| convert | เรียกใช้การแปลง(ค่าเริ่มต้น) |
| api-key:read | แสดงรายการคีย์ API |
| api-key:write | สร้างและเพิกถอนคีย์ API |
| webhook:read | แสดงรายการ webhook |
| webhook:write | สร้างและลบ webhook |
เริ่มต้นอย่างรวดเร็ว
แปลง PDF เป็น DOCX ใน 3 ขั้นตอน: สร้างงาน รอให้งานเสร็จ แล้วดาวน์โหลดผลลัพธ์
สร้างงานแปลงไฟล์
curl -X POST https://convertfly.io/api/v1/jobs \
-H "Authorization: Bearer cvfly_sk_live_abc123..." \
-H "Content-Type: application/json" \
-d '{
"tasks": {
"import-file": {
"operation": "import/url",
"url": "https://example.com/report.pdf"
},
"convert": {
"operation": "convert",
"input": ["import-file"],
"output_format": "docx"
},
"export": {
"operation": "export/url",
"input": ["convert"]
}
}
}'const res = await fetch("https://convertfly.io/api/v1/jobs", {
method: "POST",
headers: {
"Authorization": "Bearer cvfly_sk_live_abc123...",
"Content-Type": "application/json",
},
body: JSON.stringify({
tasks: {
"import-file": {
operation: "import/url",
url: "https://example.com/report.pdf",
},
convert: {
operation: "convert",
input: ["import-file"],
output_format: "docx",
},
export: {
operation: "export/url",
input: ["convert"],
},
},
}),
});
const job = await res.json();
console.log(job.id); // "cmxr9k2p0..."
console.log(job.status); // "processing"import requests
resp = requests.post(
"https://convertfly.io/api/v1/jobs",
headers={"Authorization": "Bearer cvfly_sk_live_abc123..."},
json={
"tasks": {
"import-file": {
"operation": "import/url",
"url": "https://example.com/report.pdf",
},
"convert": {
"operation": "convert",
"input": ["import-file"],
"output_format": "docx",
},
"export": {
"operation": "export/url",
"input": ["convert"],
},
}
},
)
job = resp.json()
print(job["id"]) # "cmxr9k2p0..."
print(job["status"]) # "processing"รอให้เสร็จสิ้น
ตรวจสอบสถานะงานเป็นระยะ หรือใช้ webhook เพื่อรับการแจ้งเตือนแบบเรียลไทม์
curl https://convertfly.io/api/v1/jobs/job_7kX9mP2qR \
-H "Authorization: Bearer cvfly_sk_live_abc123..."{
"id": "cmxr9k2p0",
"status": "finished",
"created_at": "2026-04-03T10:30:00Z",
"tasks": [
{
"name": "export",
"operation": "export/url",
"status": "finished",
"result": {
"files": [
{ "url": "https://files.convertfly.io/d/cmv.../result.docx?e=...&s=..." }
]
}
}
]
}ดาวน์โหลดผลลัพธ์
ใช้ URL จากผลลัพธ์ของงานย่อยส่งออก ลิงก์ดาวน์โหลดใช้ได้ 1 ชั่วโมง และไฟล์จะถูกลบ 24 ชั่วโมงหลังอัปโหลด
curl -o result.docx "https://files.convertfly.io/d/..."งาน (Jobs)
งาน (Job) คือคอนเทนเนอร์สำหรับงานย่อย (Task) หนึ่งรายการหรือมากกว่าที่ประกอบกันเป็นไปป์ไลน์การแปลง งานย่อยภายในงานจะดำเนินการตามลำดับการพึ่งพา โดยแต่ละงานย่อยสามารถอ้างอิงผลลัพธ์ของงานย่อยก่อนหน้าผ่านฟิลด์ input
แนวคิดไปป์ไลน์
ไปป์ไลน์ทั่วไปมีลักษณะดังนี้: import/url -> convert -> export/url คุณยังสามารถต่อการดำเนินการหลายรายการเข้าด้วยกันได้ เช่น import -> convert -> optimize -> watermark -> export
สถานะของงาน
| สถานะ | คำอธิบาย |
|---|---|
| waiting | สร้างงานแล้ว อยู่ในคิวรอประมวลผล |
| processing | มีงานย่อยอย่างน้อยหนึ่งรายการกำลังทำงาน |
| finished | งานย่อยทั้งหมดเสร็จสมบูรณ์ |
| error | งานย่อยหนึ่งรายการหรือมากกว่าล้มเหลว |
สร้างงาน
/api/v1/jobstagstringป้ายกำกับเสริมสำหรับจัดระเบียบงาน (เช่น batch-2026-04)
tasksobjectจำเป็นแมปของชื่องานย่อยกับคำจำกัดความของงานย่อย ชื่องานย่อยต้องไม่ซ้ำกันภายในงาน
webhook_urlstringURL สำหรับรับเหตุการณ์ job.finished หรือ job.failed เมื่องานเสร็จสิ้น
curl -X POST https://convertfly.io/api/v1/jobs \
-H "Authorization: Bearer cvfly_sk_..." \
-H "Content-Type: application/json" \
-d '{
"tag": "invoice-batch",
"tasks": {
"import-file": {
"operation": "import/url",
"url": "https://example.com/invoice.pdf"
},
"to-png": {
"operation": "convert",
"input": ["import-file"],
"output_format": "png",
"options": { "density": 300 }
},
"export": {
"operation": "export/url",
"input": ["to-png"]
}
}
}'{
"id": "cmxr9k2p0",
"tag": "invoice-batch",
"status": "processing",
"created_at": "2026-04-03T10:30:00Z",
"tasks": [
{ "name": "import-file", "operation": "import/url", "status": "finished" },
{ "name": "to-png", "operation": "convert", "status": "processing" },
{ "name": "export", "operation": "export/url", "status": "waiting" }
]
}ตัวอย่าง: รวมไฟล์เป็น PDF เดียว
การดำเนินการ merge รวมอินพุตตั้งแต่สองรายการขึ้นไป (PDF และ/หรือรูปภาพ) เป็น PDF เดียว ระบุชื่องานย่อยอินพุตตามลำดับในอาร์เรย์ input
curl -X POST https://convertfly.io/api/v1/jobs \
-H "Authorization: Bearer cvfly_sk_..." \
-H "Content-Type: application/json" \
-d '{
"tasks": {
"cover": {
"operation": "import/url",
"url": "https://example.com/cover.png"
},
"report": {
"operation": "import/url",
"url": "https://example.com/report.pdf"
},
"merge-all": {
"operation": "merge",
"input": ["cover", "report"]
},
"export": {
"operation": "export/url",
"input": ["merge-all"]
}
}
}'ตัวอย่าง: จับภาพเว็บไซต์
การดำเนินการ capture-website ไม่ต้องใช้งานย่อยอินพุต โดยจะเรนเดอร์ URL สาธารณะเป็น PDF, PNG หรือ JPG
curl -X POST https://convertfly.io/api/v1/jobs \
-H "Authorization: Bearer cvfly_sk_..." \
-H "Content-Type: application/json" \
-d '{
"tasks": {
"capture": {
"operation": "capture-website",
"url": "https://example.com",
"output_format": "pdf",
"width": 1280
},
"export": {
"operation": "export/url",
"input": ["capture"]
}
}
}'เรียกดูงาน
/api/v1/jobs/:idเรียกดูรายละเอียดของงานและสถานะของงานย่อยทั้งหมด
curl https://convertfly.io/api/v1/jobs/job_7kX9mP2qR \
-H "Authorization: Bearer cvfly_sk_..."แสดงรายการงาน
/api/v1/jobspageintegerหมายเลขหน้า เริ่มที่ 1 ค่าเริ่มต้น: 1
limitintegerจำนวนผลลัพธ์ต่อหน้า 1-100 ค่าเริ่มต้น: 20
statusstringกรองตามสถานะ: WAITING, PROCESSING, FINISHED, ERROR
tagstringกรองตามแท็ก
curl "https://convertfly.io/api/v1/jobs?status=finished&per_page=5" \
-H "Authorization: Bearer cvfly_sk_..."{
"data": [ ... ],
"links": { "first": "?page=1&per_page=5", "last": "?page=9&per_page=5", "prev": null, "next": "?page=2&per_page=5" },
"meta": {
"page": 1,
"per_page": 5,
"total": 42
}
}ลบงาน
/api/v1/jobs/:idลบงานและไฟล์ที่เกี่ยวข้องทั้งหมด งานย่อยที่กำลังทำงานจะถูกยกเลิก การดำเนินการนี้ไม่สามารถย้อนกลับได้
curl -X DELETE https://convertfly.io/api/v1/jobs/job_7kX9mP2qR \
-H "Authorization: Bearer cvfly_sk_..."รอให้เสร็จสิ้น
/api/v1/jobs/:id/waitendpoint แบบ long-poll ที่จะรอจนกว่างานเข้าสู่สถานะสิ้นสุด (FINISHED หรือ ERROR) หมดเวลาหลัง 300 วินาทีพร้อม 202 Accepted หากงานยังประมวลผลอยู่
curl "https://convertfly.io/api/v1/jobs/job_7kX9mP2qR/wait?timeout=120" \
-H "Authorization: Bearer cvfly_sk_..."งานย่อย (Tasks)
งานย่อยคือขั้นตอนแต่ละขั้นภายในงาน งานย่อยแต่ละรายการมีชื่อ (คีย์ในออบเจกต์ tasks) operation และอาจมีอาร์เรย์ input ที่อ้างอิงชื่องานย่อยก่อนหน้า
ฟิลด์ของงานย่อย
| ฟิลด์ | ประเภท | คำอธิบาย |
|---|---|---|
| operation | string | การดำเนินการที่ต้องการ (ดูการดำเนินการ) |
| input | string[] | ชื่อของงานย่อยที่จะใช้ผลลัพธ์เป็นอินพุต |
| output_format | string | รูปแบบเป้าหมายสำหรับการดำเนินการแปลง |
| options | object | การตั้งค่าเฉพาะของการดำเนินการ (คุณภาพ ความละเอียด ฯลฯ) |
แสดงรายการงานย่อยของงาน
/api/v1/jobs/:id/tasks{
"data": [
{
"name": "import-file",
"operation": "import/url",
"status": "finished",
"result": { "file_id": "file_Xk9m..." }
},
{
"name": "convert",
"operation": "convert",
"status": "finished",
"result": { "file_id": "file_Pm3n..." }
}
]
}เรียกดูงานย่อย
/api/v1/jobs/:job_id/tasks/:task_nameยกเลิกงานย่อย
/api/v1/jobs/:job_id/tasks/:task_name/cancelยกเลิกงานย่อยที่กำลังทำงานหรือรออยู่ งานย่อยปลายทางที่พึ่งพางานย่อยนี้จะถูกยกเลิกด้วย
ลองงานย่อยที่ล้มเหลวอีกครั้ง
/api/v1/jobs/:job_id/tasks/:task_name/retryลองงานย่อยที่มีสถานะ ERROR อีกครั้ง การดำเนินการนี้จะใช้เครดิตอีกครั้งหากงานย่อยมีค่าใช้จ่าย
การอัปโหลดไฟล์
การนำไฟล์เข้าสู่ ConvertFly ทำได้ 3 วิธี เลือกวิธีที่เหมาะกับกรณีการใช้งานของคุณมากที่สุด
นำเข้าจาก URL
วิธีที่ง่ายที่สุด ConvertFly จะดาวน์โหลดไฟล์จาก URL ที่เข้าถึงได้แบบสาธารณะ
{
"import-file": {
"operation": "import/url",
"url": "https://example.com/document.pdf",
"filename": "document.pdf",
"headers": {
"Authorization": "Bearer your-external-token"
}
}
}อัปโหลดโดยตรง (presigned URL)
สำหรับไฟล์ในเครื่องของคุณ กระบวนการมี 2 ขั้นตอน: ขั้นแรกสร้างงานย่อยเพื่อรับ URL อัปโหลดแบบ presigned จากนั้นส่งไฟล์ของคุณด้วยคำสั่ง PUT ไปยัง URL นั้น
{
"upload-file": {
"operation": "import/upload",
"filename": "photo.jpg"
}
}# The task result will contain the presigned URL
curl -X PUT "https://files.convertfly.io/convertfly-files/..." \
-H "Content-Type: image/jpeg" \
--data-binary @photo.jpgนำเข้าจาก Base64
สำหรับไฟล์ขนาดเล็ก (ต่ำกว่า 10 MB) ฝังเนื้อหาไฟล์ลงในคำขอโดยตรง
{
"import-file": {
"operation": "import/base64",
"file": "JVBERi0xLjQKJcOkw7zD...",
"filename": "document.pdf"
}
}| วิธีการ | ขนาดสูงสุด | เหมาะสำหรับ |
|---|---|---|
| import/url | 5 GB | ไฟล์ที่โฮสต์อยู่ออนไลน์แล้ว |
| import/upload | 5 GB | ไฟล์ในเครื่อง ไฟล์ขนาดใหญ่ |
| import/base64 | 10 MB | ไฟล์ขนาดเล็ก ฝังในคำขอ |
ตัวเลือกการแปลง
การดำเนินการแต่ละรายการรองรับตัวเลือกเฉพาะ ด้านล่างนี้คือการดำเนินการทั้งหมดที่มีและคู่รูปแบบไฟล์สำหรับการแปลง
การดำเนินการที่มีให้ใช้
| การดำเนินการ | คำอธิบาย | เครดิต |
|---|---|---|
| import/upload | อัปโหลดไฟล์ผ่าน presigned URL | 0 |
| import/url | นำเข้าไฟล์จาก URL | 0 |
| import/base64 | นำเข้าไฟล์จากข้อมูล base64 | 0 |
| convert | แปลงระหว่างรูปแบบไฟล์ | 1-4 |
| optimize | บีบอัด/ปรับขนาดไฟล์ให้เหมาะสม | 1 |
| thumbnail | สร้างภาพตัวอย่างขนาดย่อ | 1 |
| merge | รวม PDF และ/หรือรูปภาพหลายไฟล์เป็น PDF เดียว | 1 |
| watermark | เพิ่มลายน้ำแบบข้อความหรือรูปภาพลงในรูปภาพ วิดีโอ หรือ PDF | 1 |
| split | ดึงบางหน้าออกจาก PDF หรือแยกเป็นหนึ่ง PDF ต่อหนึ่งหน้า (ZIP) | 1 |
| rotate | หมุนหน้าของ PDF ทีละ 90, 180 หรือ 270 องศา | 1 |
| resize | ปรับขนาดรูปภาพตามความกว้าง ความสูง หรือเปอร์เซ็นต์ โดยคงสัดส่วน | 1 |
| gif | เปลี่ยนคลิปวิดีโอเป็น GIF เคลื่อนไหว (จุดเริ่ม ความยาว fps ความกว้าง) | 2 |
| ocr | รู้จำข้อความใน PDF หรือรูปภาพ (14 ภาษา เช่นเดียวกับหน้า OCR) | 3 |
| capture-website | จับภาพเว็บไซต์สาธารณะเป็น PDF, PNG หรือ JPG | 1 |
| metadata | ดึงเมทาดาทาของไฟล์ | 1 |
| export/url | รับ URL ดาวน์โหลดที่มีลายเซ็น | 0 |
| export/s3 | ส่งออกไปยัง S3 bucket ของคุณโดยตรง | 0 |
คู่รูปแบบไฟล์ที่รองรับ
การแปลงยอดนิยม ระบบตรวจจับรูปแบบจากไฟล์โดยอัตโนมัติ แต่คุณสามารถระบุ input_format อย่างชัดเจนได้เช่นกัน
| หมวดหมู่ | รูปแบบต้นทาง | รูปแบบผลลัพธ์ |
|---|---|---|
| เอกสาร | pdf, docx, doc, odt, rtf, txt, html | pdf, docx, odt, rtf, txt, html |
| สเปรดชีต | xlsx, xls, ods, csv | xlsx, ods, csv, pdf |
| งานนำเสนอ | pptx, ppt, odp | pptx, odp, pdf |
| รูปภาพ | jpg, png, gif, bmp, tiff, webp, svg, heic | jpg, png, gif, bmp, tiff, webp |
| วิดีโอ | mp4, avi, mov, mkv, webm | mp4, avi, mov, mkv, webm, gif |
| เสียง | mp3, wav, ogg, flac, aac, m4a | mp3, wav, ogg, flac, aac |
ตัวเลือกคุณภาพและการประมวลผล
ส่งค่าเหล่านี้ในออบเจกต์ options ของงานย่อยแปลงไฟล์
qualityintegerคุณภาพผลลัพธ์สำหรับรูปแบบที่บีบอัดแบบสูญเสียข้อมูล (1-100) ค่าเริ่มต้น: 85
densityintegerDPI สำหรับการแปลงเอกสารเป็นรูปภาพ ค่าเริ่มต้น: 150
widthintegerปรับขนาดเป็นความกว้างนี้ในหน่วยพิกเซล คงอัตราส่วนภาพไว้หากไม่ระบุ height
heightintegerปรับขนาดเป็นความสูงนี้ในหน่วยพิกเซล คงอัตราส่วนภาพไว้หากไม่ระบุ width
pagesstringช่วงหน้าสำหรับการดำเนินการกับเอกสาร เช่น 1-5, 1,3,5, all
{
"convert-hq": {
"operation": "convert",
"input": ["import-file"],
"output_format": "png",
"options": {
"density": 300,
"quality": 95
}
}
}Webhook
ลงทะเบียน URL ของ webhook เพื่อรับการแจ้งเตือนแบบเรียลไทม์เมื่องานหรืองานย่อยเปลี่ยนสถานะ เพย์โหลดทั้งหมดลงนามด้วย HMAC-SHA256 เพื่อให้คุณตรวจสอบได้ว่ามาจาก ConvertFly
สร้าง webhook
/api/v1/webhooksurlstringจำเป็นURL แบบ HTTPS สำหรับรับเหตุการณ์ webhook
eventsstring[]จำเป็นประเภทเหตุการณ์ที่ต้องการติดตาม
curl -X POST https://convertfly.io/api/v1/webhooks \
-H "Authorization: Bearer cvfly_sk_..." \
-H "Content-Type: application/json" \
-d '{
"url": "https://your-app.com/webhooks/convertfly",
"events": ["job.finished", "job.failed"]
}'{
"data": {
"id": "wh_Abc123...",
"url": "https://your-app.com/webhooks/convertfly",
"events": ["job.finished", "job.failed"],
"signing_secret": "whsec_9f8e7d6c5b4a...",
"created_at": "2026-04-03T10:30:00Z"
}
}แสดงรายการ webhook
/api/v1/webhooksลบ webhook
/api/v1/webhooks/:idประเภทเหตุการณ์
| เหตุการณ์ | เงื่อนไขที่ทำให้เกิด |
|---|---|
| job.finished | งานย่อยทั้งหมดในงานเสร็จสมบูรณ์ |
| job.failed | งานย่อยหนึ่งรายการหรือมากกว่าล้มเหลว งานอยู่ในสถานะ ERROR |
| task.finished | งานย่อยรายการหนึ่งเสร็จสิ้น |
| task.failed | งานย่อยรายการหนึ่งล้มเหลว |
เพย์โหลดของ webhook
{
"event": "job.finished",
"timestamp": "2026-04-03T10:31:15Z",
"data": {
"id": "job_7kX9mP2qR",
"status": "finished",
"tasks": { ... }
}
}การตรวจสอบลายเซ็น
คำขอ webhook แต่ละรายการมีส่วนหัว 2 รายการ ได้แก่ X-Webhook-Signature และ X-Webhook-Timestamp ตรวจสอบส่วนหัวเหล่านี้เพื่อให้แน่ใจว่าเพย์โหลดส่งมาจาก ConvertFly และไม่ถูกแก้ไข
import crypto from "crypto";
function verifyWebhook(rawBody, signature, timestamp, secret) {
const signedContent = timestamp + "." + rawBody;
const expected = "v1=" + crypto
.createHmac("sha256", secret)
.update(signedContent)
.digest("hex");
return crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(signature)
);
}import hmac, hashlib
def verify_webhook(raw_body: bytes, signature: str, timestamp: str, secret: str) -> bool:
signed_content = f"{timestamp}.{raw_body.decode()}"
expected = "v1=" + hmac.new(
secret.encode(), signed_content.encode(), hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature)คีย์ API
จัดการคีย์ API ผ่านโปรแกรม คุณยังสามารถจัดการคีย์ได้จากแดชบอร์ด
สร้างคีย์ API
/api/v1/api-keysnamestringจำเป็นชื่อที่อธิบายคีย์
scopesstring[]สิทธิ์ที่จะให้ ค่าเริ่มต้น: ["*"] (เข้าถึงได้ทั้งหมด)
{
"data": {
"id": "key_Xk9m...",
"name": "production-server",
"key": "cvfly_sk_live_abc123def456...",
"scopes": ["*"],
"created_at": "2026-04-03T10:30:00Z"
}
}สำคัญ: คีย์ API ฉบับเต็มจะแสดงเพียงครั้งเดียวขณะสร้าง โปรดจัดเก็บไว้อย่างปลอดภัย คุณจะไม่สามารถเรียกดูได้อีก
แสดงรายการคีย์ API
/api/v1/api-keysเพิกถอนคีย์ API
/api/v1/api-keys/:idทำให้คีย์ใช้งานไม่ได้ทันที คำขอใด ๆ ที่ใช้คีย์นี้จะได้รับ 401
การจำกัดอัตราการเรียกใช้
คำขอ API ถูกจำกัดอัตราต่อคีย์ API เพื่อให้การใช้งานเป็นธรรม เมื่อคุณเกินขีดจำกัด คำขอจะได้รับ 429 Too Many Requests
ขีดจำกัดเริ่มต้น
คีย์ API แต่ละคีย์อนุญาต 100 คำขอต่อชั่วโมง ขีดจำกัดและช่วงเวลาปัจจุบันของคีย์จะแสดงเป็น rate_limit และ rate_limit_window (วินาที) เมื่อคุณแสดงรายการคีย์ โปรดติดต่อเราหากการเชื่อมต่อของคุณต้องการขีดจำกัดที่สูงขึ้น
ส่วนหัวของการตอบกลับ
ทุกการตอบกลับของคำขอที่ใช้คีย์ API จะมีส่วนหัวเหล่านี้:
X-RateLimit-Limitส่วนหัวจำนวนคำขอสูงสุดที่อนุญาตในช่วงเวลาปัจจุบัน
X-RateLimit-Remainingส่วนหัวจำนวนคำขอที่เหลือในช่วงเวลาปัจจุบัน
X-RateLimit-Resetส่วนหัวเวลาประทับ Unix เมื่อช่วงเวลารีเซ็ต
Retry-Afterส่วนหัวจำนวนวินาทีที่ต้องรอก่อนลองอีกครั้ง (เฉพาะการตอบกลับ 429)
HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1743681600
Retry-After: 3600
{
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded. 100 requests per 3600s allowed."
}ข้อผิดพลาด
ConvertFly ใช้รหัสสถานะ HTTP แบบมาตรฐาน การตอบกลับข้อผิดพลาดทั้งหมดใช้รูปแบบเดียวกัน โดยมี code ที่เครื่องอ่านได้และ message ที่มนุษย์อ่านได้
รูปแบบการตอบกลับข้อผิดพลาด
{
"code": "INVALID_DATA",
"message": "Missing required field: output_format",
"details": {
"field": "output_format",
"reason": "required"
}
}รหัสข้อผิดพลาด
| รหัส | HTTP | คำอธิบาย |
|---|---|---|
| INVALID_DATA | 400 | เนื้อหาคำขอหรือพารามิเตอร์ไม่ถูกต้อง |
| UNAUTHENTICATED | 401 | ไม่มีคีย์ API หรือคีย์ API ไม่ถูกต้อง |
| FORBIDDEN | 403 | คีย์ API ไม่มีขอบเขตสิทธิ์ที่จำเป็นสำหรับการดำเนินการนี้ |
| NOT_FOUND | 404 | ไม่มีทรัพยากรนี้หรือทรัพยากรถูกลบไปแล้ว |
| CONFLICT | 409 | มีทรัพยากรนี้อยู่แล้ว หรือการดำเนินการขัดแย้งกับสถานะปัจจุบัน |
| PAYLOAD_TOO_LARGE | 413 | เนื้อหาคำขอมีขนาดเกินขีดจำกัดสูงสุดที่อนุญาต |
| UNSUPPORTED_FORMAT | 422 | ไม่รองรับการแปลงที่ร้องขอ |
| RATE_LIMIT_EXCEEDED | 429 | เกินขีดจำกัดอัตราการเรียกใช้ ดูการจำกัดอัตราการเรียกใช้ |
| INSUFFICIENT_CREDITS | 402 | เครดิตไม่เพียงพอสำหรับการดำเนินการนี้ |
| SERVER_ERROR | 500 | ข้อผิดพลาดภายในเซิร์ฟเวอร์ โปรดลองอีกครั้งหรือติดต่อฝ่ายสนับสนุน |
| UNAVAILABLE | 503 | บริการไม่พร้อมใช้งานชั่วคราว โปรดลองอีกครั้งในอีกสักครู่ |
การจัดการข้อผิดพลาด
const res = await fetch("https://convertfly.io/api/v1/jobs", {
method: "POST",
headers: {
"Authorization": "Bearer cvfly_sk_...",
"Content-Type": "application/json",
},
body: JSON.stringify({ tasks: { /* ... */ } }),
});
if (!res.ok) {
const error = await res.json();
console.error(`[${error.code}] ${error.message}`);
// "[INVALID_DATA] Missing required field: output_format"
return;
}
const { data: job } = await res.json();เครดิต
การดำเนินการแต่ละรายการมีค่าใช้จ่ายเป็นจำนวนเครดิตที่กำหนด การนำเข้าและส่งออกไม่มีค่าใช้จ่าย ยอดคงเหลือของคุณจะแสดงในทุกการตอบกลับของ API ผ่านส่วนหัว X-Credits-Remaining
ค่าเครดิตตามประเภทการแปลง
| การดำเนินการ | ค่าใช้จ่าย | ตัวอย่าง |
|---|---|---|
| นำเข้า / ส่งออก | ฟรี | import/url, import/upload, export/url, export/s3 |
| การแปลงรูปภาพ | 1 เครดิต | jpg เป็น png, webp เป็น gif, heic เป็น jpg |
| การแปลงเสียง | 1 เครดิต | mp3 เป็น wav, flac เป็น aac |
| เอกสารเป็น PDF | 1 เครดิต | txt เป็น pdf, html เป็น pdf, md เป็น pdf |
| ไฟล์ Office เป็น PDF | 2 เครดิต | docx เป็น pdf, pptx เป็น pdf, xlsx เป็น pdf |
| การแปลงวิดีโอ | 2 เครดิต | mp4 เป็น webm, mov เป็น mp4 |
| PDF เป็นไฟล์ Office | 4 เครดิต | pdf เป็น docx, pdf เป็น pptx |
| ปรับให้เหมาะสม | 1 เครดิต | บีบอัดรูปภาพและ PDF |
| ภาพขนาดย่อ | 1 เครดิต | สร้างภาพตัวอย่าง |
| รวมไฟล์ | 1 เครดิต | รวม PDF หลายไฟล์ |
| ลายน้ำ | 1 เครดิต | เพิ่มข้อความ/รูปภาพซ้อนทับ |
| แยกหน้า PDF | 1 เครดิต | ดึงหน้า 1-3, 7 หรือหนึ่งไฟล์ต่อหนึ่งหน้า |
| หมุน PDF | 1 เครดิต | หมุนทุกหน้าหรือเฉพาะบางหน้า |
| ปรับขนาดรูปภาพ | 1 เครดิต | กว้าง 1200 px, 50 เปอร์เซ็นต์ |
| สร้าง GIF | 2 เครดิต | คลิป mp4 เป็น gif ราคาเท่ากับการแปลงวิดีโอหนึ่งครั้ง |
| จับภาพเว็บไซต์ | 1 เครดิต | เรนเดอร์ URL เป็น PDF หรือรูปภาพ |
| OCR | 3 เครดิต | ทำให้ PDF ที่สแกนค้นหาข้อความได้ |
| เมทาดาทา | 1 เครดิต | ดึงข้อมูลไฟล์ |
การตรวจสอบยอดคงเหลือ
ทุกการตอบกลับของ API มีส่วนหัว X-Credits-Remaining ซึ่งแสดงยอดคงเหลือปัจจุบันของคุณ
HTTP/1.1 201 Created
Content-Type: application/json
X-Credits-Remaining: 9847
X-Credits-Used: 2เมื่อยอดคงเหลือของคุณไม่เพียงพอที่จะทำงานให้เสร็จ API จะส่งคืน 402 พร้อมรหัสข้อผิดพลาด INSUFFICIENT_CREDITS เติมเครดิตได้ในแดชบอร์ดการเรียกเก็บเงินของคุณ
แซนด์บ็อกซ์
คีย์แซนด์บ็อกซ์ช่วยให้คุณสร้างและทดสอบการเชื่อมต่อได้ตั้งแต่ต้นจนจบโดยไม่ใช้เครดิต สร้างคีย์ด้วย "sandbox": true คีย์จะขึ้นต้นด้วย cf_test_ แทน cvfly_sk_ ทุกอย่างทำงานเหมือนสภาพแวดล้อมจริง โดยมีความแตกต่าง 3 ข้อ
| เครดิต | ไม่มีการหักเครดิต ยอดคงเหลือของคุณไม่เปลี่ยนแปลง |
| ขนาดไฟล์ | ไฟล์อินพุตจำกัดขนาดที่ 5 MB |
| ผลลัพธ์ | รูปภาพ วิดีโอ และ PDF จะมีลายน้ำ "ConvertFly SANDBOX" |
curl -X POST https://convertfly.io/api/v1/api-keys \
-H "Authorization: Bearer YOUR_LIVE_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "Sandbox", "sandbox": true}'
# Response includes: "key": "cf_test_...", "is_sandbox": trueพร้อมเริ่มพัฒนาแล้วหรือยัง
สร้างบัญชีฟรีและทดสอบ API ด้วยคีย์แซนด์บ็อกซ์โดยไม่มีค่าใช้จ่าย