API v3

เอกสาร AksonOCR API

API สำหรับสกัดข้อความจากเอกสาร รองรับทั้งลายมือและตัวอักษรพิมพ์ทั้งภาษาไทยและอังกฤษ พร้อมดึงข้อมูลแบบมีโครงสร้าง (Structured Data) รองรับไฟล์ PDF, JPG, PNG, WEBP ประมวลผลแบบอะซิงค์ผ่านระบบ Job

🖊️

อ่านลายมือ

รองรับลายมือและตัวอักษรพิมพ์ทั้งไทยและอังกฤษ

📋

ดึงข้อมูลแบบมีโครงสร้าง

กำหนด field เอง หรือใช้ Extraction Template ที่สร้างไว้แล้ว

📄

รองรับหลายรูปแบบ

PDF, JPG, PNG, WEBP ขนาดไม่เกิน 200MB

ประมวลผลแบบอะซิงค์

ระบบ Job-based รองรับทั้ง polling และ webhook

📊

คะแนนความมั่นใจ

ระดับ token-level

🔄

Batch Processing

ประมวลผลจำนวนมาก

ขั้นตอนการใช้งาน

1

อัพโหลดงาน

อัปโหลดเอกสาร (ไฟล์หรือ URL) พร้อมระบุ action: transcribe หรือ extractor

2

ตรวจสอบสถานะ

เช็กสถานะผ่าน jobId ที่ได้รับกลับมาว่าสถานะประมวลผลไปถึงไหนแล้ว หรือตั้ง webhookUrl ให้ระบบแจ้งอัตโนมัติ

3

ดึงผลลัพธ์

เมื่อประมวลผลเสร็จ ดึงผลลัพธ์เป็น JSON พร้อมคะแนนความมั่นใจรายหน้า

เริ่มต้นใช้งาน

  1. 1สมัครสมาชิกที่ dashboard.aksonocr.com
  2. 2สร้าง API Key ในหน้า Dashboard
  3. 3ถ้าต้องการใช้ Extractor (action: extractor) ให้สร้างและทดสอบ Extraction Template ก่อน
  4. 4ทดลองเรียกใช้ API กับเอกสารตัวอย่าง
  5. 5ติดตามผลลัพธ์และการใช้งานได้ที่ Dashboard

การยืนยันตัวตน

API ใช้การยืนยันตัวตนด้วย API Key ทุก request ต้องแนบ X-API-Key ไว้ใน header ทุกครั้ง

  • สร้าง Key ได้ผ่านหน้า Dashboard
  • สามารถยกเลิกหรือสร้างใหม่ได้ตลอดเวลา
http
X-API-Key: your-api-key

โมเดลที่ใช้ได้

Modelรายละเอียดเครดิต/หน้า
AksonOCR-previewเร็วและคุ้มค่า เหมาะกับเอกสารตัวอักษรพิมพ์0.5
AksonOCR-handwritingแม่นยำสูง เหมาะกับลายมือหรือเอกสารที่ซับซ้อน2
AksonOCR-1.0โมเดลอเนกประสงค์1

Rate Limits

Rate Limits จะคำนวณตาม API Key และแตกต่างกันตามโมเดล:

ModelRPM (มี Key)ต่อวัน (มี Key)RPM (Demo)ต่อวัน (Demo)
AksonOCR-preview1,000100,0005100
AksonOCR-handwriting1,000100,0005100
AksonOCR-1.01,000100,0005100

ข้อจำกัดของไฟล์

รายการค่าEnvironment Variable
ขนาดไฟล์สูงสุด200 MBMAX_FILE_SIZE
จำนวนหน้าสูงสุดต่องาน1,000 หน้าMAX_PAGES

เมื่อโดน Rate Limit

เมื่อเกินลิมิต API จะตอบกลับ 429 Too Many Requests

แนวทางที่แนะนำ

  • ใช้ webhook แทนการ polling เพื่อลดการเรียก API ซ้ำๆ
  • ใช้ exponential backoff เมื่อได้รับ 429 กลับมา
  • ดึงผลเมื่อเสร็จเท่านั้น — รอให้ status เป็น completed ก่อนค่อยดึงผลลัพธ์
  • Cache response เพื่อไม่ต้องเรียกซ้ำ

เครดิต

ค่าเครดิตขึ้นอยู่กับโมเดลและจำนวนหน้าที่ประมวลผล:

ModelNormal (เครดิต/หน้า)Batch (เครดิต/หน้า)
AksonOCR-preview0.5ถูกกว่า (ส่วนลด)
AksonOCR-handwriting2ถูกกว่า (ส่วนลด)
AksonOCR-1.01ถูกกว่า (ส่วนลด)

ตัวอย่าง: AksonOCR-preview กับ PDF 5 หน้า = 2.5 เครดิต AksonOCR-handwriting กับ PDF 5 หน้า = 10 เครดิตรูปภาพเดี่ยว = คิดตามราคาต่อหน้าของโมเดลนั้นๆ

เครดิตจะถูกประเมินตอนสร้างงานและตรวจสอบอีกครั้งเมื่อเสร็จ ถ้าเครดิตไม่พอจะได้รับ error 402

โหมด Batch: ใช้ mode: "batch" เพื่อประมวลผลในราคาถูกกว่า โดยจะได้รับผลลัพธ์ภายใน 24 ชั่วโมง

1. อัพโหลดงานผ่านอัปโหลดไฟล์

อัปโหลดไฟล์โดยตรง (รูปภาพหรือ PDF) เพื่อประมวลผล OCR แบบ async จะได้รับ job ID กลับมาทันที

POSThttps://backend.aksonocr.com/api/v3/upload

Headers

KeyValueRequired
X-API-Keyyour-api-keyYes
Content-Typemultipart/form-dataYes

Form Fields

NameTypeRequiredDescription
filefileYesไฟล์รูปภาพ (JPG, PNG, WEBP) หรือ PDF ขนาดไม่เกิน 200MB
modelstringYesโมเดล OCR: AksonOCR-preview, AksonOCR-handwriting, AksonOCR-1.0
actionstringYestranscribe (อ่านทั้งหน้า) หรือ extractor (ดึงข้อมูลสำคัญ)
modestringNonormal (ค่าเริ่มต้น) หรือ batch (ถูกกว่า ได้ผลภายใน 24 ชม.)
pagesstringNoหมายเลขหน้าคั่นด้วยจุลภาค (0-indexed) เช่น 0,1,2
webhookUrlstringNoURL ที่จะรับแจ้งเตือนเมื่อเสร็จหรือผิดพลาด
wordConfidencestringNoแนบค่าความเชื่อมั่นระดับคำ (true/false) ค่าเริ่มต้น: false
templateIdstringNoExtraction Template ID จำเป็นถ้าใช้ extractor โดยไม่มี customFields
customFieldsstringNoJSON string ของ custom fields array (สำหรับ extractor)
listConfigstringNoJSON string ของ list config (สำหรับ extractor)
additionalInstructionsstringNoคำสั่งเพิ่มเติมสำหรับการดึงข้อมูล (สำหรับ extractor)

Request

curl -X POST 'https://backend.aksonocr.com/api/v3/upload' \
  -H 'X-API-Key: <YOUR_API_KEY>' \
  -F 'file=@/path/to/document.pdf' \
  -F 'model=AksonOCR-preview' \
  -F 'action=transcribe' \
  -F 'pages=0,1,2' \
  -F 'wordConfidence=true'

Response

json
{
  "jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "status": "pending",
  "action": "transcribe",
  "mode": "normal",
  "model": "AksonOCR-preview",
  "createdAt": "2025-01-15T10:29:00.000Z"
}

Response Codes

Codeรายละเอียด
202Accepted — สร้างงานและเข้าคิวประมวลผลแล้ว
400Bad Request — ไฟล์ไม่ถูกต้อง โมเดลไม่ถูก หรือ parameter ผิด
401Unauthorized — API Key ไม่ถูกต้องหรือไม่ได้ระบุ
402Payment Required — เครดิตไม่พอ
429Too Many Requests — เกิน Rate Limit

2. อัพโหลดงานผ่าน URL

ส่งเอกสารผ่าน URL หรือ base64 data URI เพื่อประมวลผล OCR แบบ async จะได้รับ job ID กลับมาทันที

POSThttps://backend.aksonocr.com/api/v3/ocr

Headers

KeyValueRequired
X-API-Keyyour-api-keyYes
Content-Typeapplication/jsonYes

Request Body

NameTypeRequiredDescription
actionstringYesรูปแบบการประมวลผล: transcribe (อ่านทั้งหน้า) หรือ extractor (ดึงข้อมูลสำคัญ)
documentobjectYesเอกสารที่ต้องการประมวลผล (ดูประเภทด้านล่าง)
modelstringYesโมเดล OCR: AksonOCR-preview, AksonOCR-handwriting, AksonOCR-1.0
modestringNonormal (ค่าเริ่มต้น) หรือ batch (ถูกกว่า ได้ผลภายใน 24 ชม.)
pagesnumber[]Noระบุหน้าที่ต้องการ (0-indexed, PDF เท่านั้น)
webhookUrlstringNoURL ที่จะรับแจ้งเตือนเมื่อเสร็จหรือผิดพลาด
wordConfidencebooleanNoแนบค่าความเชื่อมั่นระดับคำ ค่าเริ่มต้น: false
templateIdstringNoExtraction Template ID จำเป็นถ้าใช้ extractor โดยไม่มี customFields
customFieldsarrayNoฟิลด์ที่ต้องการดึงข้อมูล (สำหรับ extractor) ใช้ร่วมกับ templateId ไม่ได้
listConfigobjectNoการตั้งค่าดึงข้อมูลแบบรายการ (สำหรับ extractor) ใช้ร่วมกับ templateId ไม่ได้
additionalInstructionsstringNoคำสั่งเพิ่มเติมสำหรับการดึงข้อมูล (สำหรับ extractor)

ประเภทเอกสารที่รับ

Image URL

{ "type": "image_url", "image_url": "https://example.com/receipt.png" }

Document URL (PDF หรือรูปภาพ)

{ "type": "document_url", "document_url": "https://example.com/doc.pdf", "document_name": "invoice.pdf" }

Base64 Data URI

{ "type": "document_url", "document_url": "data:application/pdf;base64,JVBERi0xLjQK..." }

รูปแบบ Custom Fields (สำหรับ extractor)

json
[
  {
    "key": "invoice_number",
    "description": "Invoice number",
    "example": "INV-2025-001"
  },
  {
    "key": "total_amount",
    "description": "Total amount due"
  }
]

รูปแบบ List Config (สำหรับ extractor)

json
{
  "listKey": "line_items",
  "listDescription": "List of invoice line items",
  "fields": [
    { "key": "item_name", "description": "Product name" },
    { "key": "quantity", "description": "Quantity ordered" },
    { "key": "unit_price", "description": "Price per unit" }
  ]
}

Request

curl -X POST 'https://backend.aksonocr.com/api/v3/ocr' \
  -H 'X-API-Key: <YOUR_API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
    "action": "transcribe",
    "document": {
      "type": "document_url",
      "document_url": "https://arxiv.org/pdf/2201.04234.pdf"
    },
    "model": "AksonOCR-preview",
    "pages": [0, 1, 2],
    "webhookUrl": "https://your-server.com/webhook"
  }'

Response

json
{
  "jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "status": "pending",
  "action": "transcribe",
  "mode": "normal",
  "model": "AksonOCR-preview",
  "createdAt": "2025-01-15T10:29:00.000Z"
}

Response Codes

Codeรายละเอียด
202Accepted — สร้างงานและเข้าคิวประมวลผลแล้ว
400Bad Request — โมเดลไม่ถูกต้อง ขาดฟิลด์ หรือ parameter ไม่ถูกต้อง
401Unauthorized — API Key ไม่ถูกต้องหรือไม่ได้ระบุ
402Payment Required — เครดิตไม่พอ
429Too Many Requests — เกิน Rate Limit

3. ตรวจสอบสถานะงาน

ดึงสถานะและความคืบหน้าของงานที่กำลังประมวลผล

GEThttps://backend.aksonocr.com/api/v3/ocr/status/{jobId}

Headers

KeyValueRequired
X-API-Keyyour-api-keyYes

Path Parameters

NameTypeRequiredDescription
jobIdstringYesID ของงานที่ได้รับจากตอนอัพโหลดงาน

สถานะของงาน

Statusรายละเอียด
pendingงานอยู่ในคิว รอประมวลผล
processingกำลังประมวลผลอยู่
completedเสร็จแล้ว สามารถดึงผลลัพธ์ได้ผ่าน result endpoint
failedงานผิดพลาด ดูรายละเอียดได้ที่ฟิลด์ error
cancelledถูกยกเลิกโดยผู้ใช้
expiredผลลัพธ์หมดอายุแล้ว (หลัง 72 ชั่วโมง)

Request

curl -X GET 'https://backend.aksonocr.com/api/v3/ocr/status/a1b2c3d4-e5f6-7890-abcd-ef1234567890' \
  -H 'X-API-Key: <YOUR_API_KEY>'

Response (Completed)

json
{
  "jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "action": "transcribe",
  "status": "completed",
  "mode": "normal",
  "model": "AksonOCR-preview",
  "totalPages": 5,
  "processedPages": 5,
  "progress": 100,
  "isChunked": false,
  "createdAt": "2025-01-15T10:29:00.000Z",
  "startedAt": "2025-01-15T10:29:01.000Z",
  "completedAt": "2025-01-15T10:30:00.000Z",
  "result": {
    "url": "https://storage.googleapis.com/...",
    "expiresAt": "2025-01-15T11:30:00.000Z"
  }
}

Response Codes

Codeรายละเอียด
200Success — ส่งคืนสถานะงานสำเร็จ
401Unauthorized — API Key ไม่ถูกต้องหรือไม่ได้ระบุ
403Forbidden — ไม่มีสิทธิ์เข้าถึงงานนี้
404Not Found — ไม่พบงาน

4. ดึงผลลัพธ์

ดึงผลลัพธ์ของงานที่เสร็จแล้ว รองรับ pagination สำหรับเอกสารขนาดใหญ่

GEThttps://backend.aksonocr.com/api/v3/ocr/result/{jobId}

Headers

KeyValueRequired
X-API-Keyyour-api-keyYes

Path Parameters

NameTypeRequiredDescription
jobIdstringYesID ของงาน

Query Parameters

NameTypeRequiredDescription
pagenumberNoPage offset (0-based) สำหรับ pagination
limitnumberNoจำนวนหน้าที่ส่งคืนต่อครั้ง

Request

curl -X GET 'https://backend.aksonocr.com/api/v3/ocr/result/a1b2c3d4-e5f6-7890-abcd-ef1234567890?page=0&limit=10' \
  -H 'X-API-Key: <YOUR_API_KEY>'

Response (Transcribe)

json
{
  "jobId": "a1b2c3d4-e5f6-...",
  "action": "transcribe",
  "model": "AksonOCR-preview",
  "pages": [
    {
      "index": 0,
      "markdown": "# Invoice\n\n**Invoice Number:** INV-2025-001...",
      "confidence": 95,
      "status": "completed",
      "words": [
        { "word": "Invoice", "confidence": 0.98 },
        { "word": "Number:", "confidence": 0.96 }
      ]
    }
  ],
  "confidence": 94,
  "resultUrl": "https://storage.googleapis.com/...",
  "resultUrlExpiresAt": "2025-01-15T11:30:00.000Z",
  "usage": {
    "pages_processed": 2,
    "credits_used": 2
  },
  "totalPages": 2,
  "hasMore": false,
  "pageOffset": 0,
  "pageLimit": 10
}

Response (Extractor)

json
{
  "jobId": "a1b2c3d4-e5f6-...",
  "action": "extractor",
  "model": "AksonOCR-preview",
  "pages": [
    {
      "index": 0,
      "markdown": "# Invoice INV-2025-001...",
      "confidence": 95,
      "status": "completed",
      "structuredData": {
        "invoice_number": "INV-2025-001",
        "total_amount": "$70.00",
        "date": "2025-01-15",
        "line_items": [
          { "item_name": "Widget A", "quantity": "3", "unit_price": "$15.00" },
          { "item_name": "Widget B", "quantity": "1", "unit_price": "$25.00" }
        ]
      },
      "fieldConfidences": [
        { "key": "invoice_number", "confidence": 0.98 },
        { "key": "total_amount", "confidence": 0.95 }
      ]
    }
  ],
  "confidence": 95,
  "usage": { "pages_processed": 1, "credits_used": 1 },
  "totalPages": 1,
  "hasMore": false
}

Response Codes

Codeรายละเอียด
200Success — ส่งคืนผลลัพธ์สำเร็จ
401Unauthorized — API Key ไม่ถูกต้องหรือไม่ได้ระบุ
403Forbidden — ไม่มีสิทธิ์เข้าถึงงานนี้
404Not Found — ไม่พบงานหรือยังไม่เสร็จ

5. ยกเลิกงาน

ยกเลิกงานที่อยู่ในสถานะ pending หรือ processing หน้าที่ยังไม่ได้ประมวลผลจะไม่ถูกคิดเครดิต

POSThttps://backend.aksonocr.com/api/v3/ocr/{jobId}/cancel

Headers

KeyValueRequired
X-API-Keyyour-api-keyYes

Path Parameters

NameTypeRequiredDescription
jobIdstringYesID ของงาน

Request

curl -X POST 'https://backend.aksonocr.com/api/v3/ocr/a1b2c3d4-e5f6-7890-abcd-ef1234567890/cancel' \
  -H 'X-API-Key: <YOUR_API_KEY>'

Response

json
{
  "jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "status": "cancelled",
  "message": "Job cancelled successfully"
}

Response Codes

Codeรายละเอียด
200Success — ยกเลิกงานแล้ว
401Unauthorized — API Key ไม่ถูกต้องหรือไม่ได้ระบุ
403Forbidden — ไม่มีสิทธิ์ยกเลิกงานนี้
404Not Found — ไม่พบงาน

6. ลบงาน

ลบงานและผลลัพธ์ที่เกี่ยวข้องอย่างถาวร การดำเนินการนี้ไม่สามารถย้อนกลับได้

DELETEhttps://backend.aksonocr.com/api/v3/ocr/{jobId}

Headers

KeyValueRequired
X-API-Keyyour-api-keyYes

Path Parameters

NameTypeRequiredDescription
jobIdstringYesID ของงาน

Request

curl -X DELETE 'https://backend.aksonocr.com/api/v3/ocr/a1b2c3d4-e5f6-7890-abcd-ef1234567890' \
  -H 'X-API-Key: <YOUR_API_KEY>'

Response

json
{
  "jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "deleted": true,
  "message": "Job soft-deleted successfully"
}

Response Codes

Codeรายละเอียด
200Success — ลบงานแล้ว
401Unauthorized — API Key ไม่ถูกต้องหรือไม่ได้ระบุ
403Forbidden — ไม่มีสิทธิ์ลบงานนี้
404Not Found — ไม่พบงาน

Key Extraction Guide (Extractor)

action: extractor ใช้สำหรับดึงข้อมูลเฉพาะฟิลด์จากเอกสาร เช่น เลขที่ใบแจ้งหนี้ ยอดรวม รายการสินค้า แทนที่จะได้ตัวอักษรทั้งหน้า ผลลัพธ์จะเป็น JSON ใน structuredData

ภาพรวมการทำงาน

เอกสาร (PDF/ภาพ)ส่ง request + customFields หรือ templateIdAPI ดึงเฉพาะฟิลด์ที่กำหนดได้ structuredData เป็น JSON

customFields

กำหนดฟิลด์เองใน request โดยตรง เหมาะสำหรับทดสอบ prototype หรือเอกสารรูปแบบใหม่

templateId

ใช้ Extraction Template ที่สร้างไว้บน Dashboard เหมาะกับเอกสารรูปแบบเดิมที่ใช้ซ้ำบ่อย

1

บัตรประชาชนไทย (Thai National ID Card)

สกัดข้อมูลจากรูปถ่ายหรือสแกนบัตรประชาชน — ระบบ KYC / เปิดบัญชี / ลงทะเบียน

Model แนะนำ: AksonOCR-1.0 สำหรับบัตรพิมพ์ชัด หรือ AksonOCR-handwriting ถ้ามีลายมือกรอกเพิ่ม
บัตรไทยมีทั้งข้อความภาษาไทยและภาษาอังกฤษ ใส่ additionalInstructions เพื่อความแม่นยำ

Custom Fields สำหรับบัตรประชาชน

json
[
  { "key": "เลขบัตรประชาชน",
    "description": "เลขประจำตัวประชาชน 13 หลัก",
    "example": "1-1001-00123-45-6" },
  { "key": "ชื่อ-นามสกุล (ไทย)",
    "description": "ชื่อและนามสกุลภาษาไทย" },
  { "key": "Name (EN)",
    "description": "First and last name in English" },
  { "key": "วันเกิด",
    "description": "วันเดือนปีเกิด (พ.ศ.)",
    "example": "1 ม.ค. 2540" },
  { "key": "วันหมดอายุ",
    "description": "วันที่บัตรหมดอายุ" },
  { "key": "วันออกบัตร",
    "description": "วันที่ออกบัตร" },
  { "key": "ที่อยู่",
    "description": "ที่อยู่ตามทะเบียนบ้านบนบัตร" },
  { "key": "ศาสนา",
    "description": "ศาสนาของผู้ถือบัตร" }
]

Request

curl -X POST 'https://backend.aksonocr.com/api/v3/ocr' \
  -H 'X-API-Key: <YOUR_API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
    "action": "extractor",
    "document": {
      "type": "image_url",
      "image_url": "https://example.com/national-id.jpg"
    },
    "model": "AksonOCR-1.0",
    "customFields": [
      { "key": "เลขบัตรประชาชน", "description": "เลขประจำตัวประชาชน 13 หลัก", "example": "1-1001-00123-45-6" },
      { "key": "ชื่อ-นามสกุล (ไทย)", "description": "ชื่อและนามสกุลภาษาไทย" },
      { "key": "Name (EN)", "description": "First and last name in English" },
      { "key": "วันเกิด", "description": "วันเดือนปีเกิด (พ.ศ.)" },
      { "key": "วันหมดอายุ", "description": "วันที่บัตรหมดอายุ" },
      { "key": "วันออกบัตร", "description": "วันที่ออกบัตร" },
      { "key": "ที่อยู่", "description": "ที่อยู่ตามทะเบียนบ้านบนบัตร" },
      { "key": "ศาสนา", "description": "ศาสนาของผู้ถือบัตร" }
    ],
    "additionalInstructions": "บัตรมีทั้งข้อความไทยและอังกฤษ ดึงทั้งสองภาษา เลขบัตรประชาชนมี 13 หลัก อาจมีขีดคั่น"
  }'

Response (ผลลัพธ์หลัง completed)

json
{
  "jobId": "id-card-job-uuid",
  "action": "extractor",
  "model": "AksonOCR-1.0",
  "pages": [
    {
      "index": 0,
      "status": "completed",
      "confidence": 97,
      "structuredData": {
        "เลขบัตรประชาชน": "1-1001-00123-45-6",
        "ชื่อ-นามสกุล (ไทย)": "นายสมชาย ใจดี",
        "Name (EN)": "Mr. Somchai Jaidee",
        "วันเกิด": "1 มกราคม 2540",
        "วันหมดอายุ": "12 มี.ค. 2572",
        "วันออกบัตร": "12 มี.ค. 2562",
        "ที่อยู่": "45/12 ซ.ลาดพร้าว 80 แขวงวังทองหลาง กรุงเทพฯ 10310",
        "ศาสนา": "พุทธ"
      },
      "fieldConfidences": [
        { "key": "เลขบัตรประชาชน", "confidence": 0.99 },
        { "key": "ชื่อ-นามสกุล (ไทย)", "confidence": 0.98 },
        { "key": "Name (EN)", "confidence": 0.97 },
        { "key": "วันเกิด", "confidence": 0.98 },
        { "key": "วันหมดอายุ", "confidence": 0.99 },
        { "key": "ที่อยู่", "confidence": 0.95 }
      ]
    }
  ],
  "confidence": 97,
  "usage": { "pages_processed": 1, "credits_used": 1 },
  "totalPages": 1,
  "hasMore": false
}
2

ใบแจ้งหนี้ / ใบกำกับภาษี (Invoice / Tax Invoice)

ระบบบัญชีดึงข้อมูลใบแจ้งหนี้ PDF อัตโนมัติ ไม่ต้องพิมพ์ด้วยมือ — Model แนะนำ: AksonOCR-preview (0.5 credits/page)

curl -X POST 'https://backend.aksonocr.com/api/v3/ocr' \
  -H 'X-API-Key: <YOUR_API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
    "action": "extractor",
    "document": {
      "type": "document_url",
      "document_url": "https://example.com/invoice-thai.pdf",
      "document_name": "invoice.pdf"
    },
    "model": "AksonOCR-preview",
    "customFields": [
      { "key": "เลขที่ใบแจ้งหนี้", "description": "เลขที่หรือรหัสของใบแจ้งหนี้", "example": "INV-2025-001" },
      { "key": "วันที่", "description": "วันที่ออกเอกสาร", "example": "15/01/2568" },
      { "key": "ชื่อลูกค้า", "description": "ชื่อบริษัทหรือชื่อผู้ซื้อ" },
      { "key": "เลขประจำตัวผู้เสียภาษี", "description": "Tax ID 13 หลัก" },
      { "key": "ยอดก่อนภาษี", "description": "ยอดรวมก่อนหักภาษีมูลค่าเพิ่ม" },
      { "key": "ภาษีมูลค่าเพิ่ม", "description": "จำนวนเงิน VAT 7%" },
      { "key": "ยอดรวมทั้งสิ้น", "description": "ยอดเงินรวมสุทธิที่ต้องชำระ" }
    ],
    "listConfig": {
      "listKey": "รายการสินค้า",
      "listDescription": "รายการสินค้าหรือบริการในใบแจ้งหนี้",
      "fields": [
        { "key": "ลำดับ", "description": "ลำดับรายการ" },
        { "key": "ชื่อสินค้า", "description": "ชื่อสินค้าหรือบริการ" },
        { "key": "จำนวน", "description": "จำนวนหน่วย" },
        { "key": "ราคาต่อหน่วย", "description": "ราคาต่อหน่วยสินค้า" },
        { "key": "จำนวนเงิน", "description": "ราคารวมของรายการนั้น" }
      ]
    }
  }'

Response (ผลลัพธ์หลัง completed)

json
{
  "jobId": "b2c3d4e5-...",
  "action": "extractor",
  "pages": [{
    "index": 0,
    "status": "completed",
    "confidence": 96,
    "structuredData": {
      "เลขที่ใบแจ้งหนี้": "INV-2568-00342",
      "วันที่": "20/01/2568",
      "ชื่อลูกค้า": "บริษัท สยามเทรดดิ้ง จำกัด",
      "เลขประจำตัวผู้เสียภาษี": "0105565012345",
      "ยอดก่อนภาษี": "10,000.00",
      "ภาษีมูลค่าเพิ่ม": "700.00",
      "ยอดรวมทั้งสิ้น": "10,700.00",
      "รายการสินค้า": [
        { "ลำดับ": "1", "ชื่อสินค้า": "กระดาษ A4 80 แกรม", "จำนวน": "50", "ราคาต่อหน่วย": "120.00", "จำนวนเงิน": "6,000.00" },
        { "ลำดับ": "2", "ชื่อสินค้า": "ปากกาลูกลื่น (โหล)", "จำนวน": "20", "ราคาต่อหน่วย": "90.00", "จำนวนเงิน": "1,800.00" }
      ]
    },
    "fieldConfidences": [
      { "key": "เลขที่ใบแจ้งหนี้", "confidence": 0.99 },
      { "key": "ยอดรวมทั้งสิ้น", "confidence": 0.98 }
    ]
  }],
  "confidence": 96,
  "usage": { "pages_processed": 1, "credits_used": 0.5 },
  "totalPages": 1,
  "hasMore": false
}
3

ใบสั่งซื้อ / ใบจัดส่ง (Purchase Order / Delivery Note)

อ่านใบสั่งซื้อจากซัพพลายเออร์เข้าระบบ ERP — Model แนะนำ: AksonOCR-preview

bash
curl -X POST 'https://backend.aksonocr.com/api/v3/ocr' \
  -H 'X-API-Key: <YOUR_API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
    "action": "extractor",
    "document": {
      "type": "image_url",
      "image_url": "https://example.com/purchase-order.jpg"
    },
    "model": "AksonOCR-preview",
    "customFields": [
      { "key": "เลขที่ PO", "description": "Purchase Order Number", "example": "PO-2025-0123" },
      { "key": "วันที่สั่งซื้อ", "description": "วันที่ออกใบสั่งซื้อ" },
      { "key": "วันที่ต้องการ", "description": "วันที่ต้องการรับสินค้า" },
      { "key": "ชื่อซัพพลายเออร์", "description": "ชื่อบริษัทผู้ขาย" },
      { "key": "ยอดรวม", "description": "มูลค่าการสั่งซื้อรวมทั้งสิ้น" },
      { "key": "เงื่อนไขการชำระเงิน", "description": "เช่น Net 30" }
    ],
    "listConfig": {
      "listKey": "รายการสั่งซื้อ",
      "listDescription": "รายการสินค้าที่สั่งซื้อ",
      "fields": [
        { "key": "รหัสสินค้า", "description": "รหัส SKU หรือ Barcode" },
        { "key": "ชื่อสินค้า", "description": "ชื่อสินค้าหรือรายละเอียด" },
        { "key": "หน่วย", "description": "หน่วยนับ เช่น ชิ้น แพ็ค" },
        { "key": "จำนวนสั่ง", "description": "จำนวนที่สั่งซื้อ" },
        { "key": "ราคาต่อหน่วย", "description": "ราคาต่อหน่วยสินค้า" }
      ]
    },
    "additionalInstructions": "รหัสสินค้าอาจเป็น Barcode 8-13 หลัก ให้ดึงตัวเลขออกมาทั้งหมด"
  }'

Response

json
{
  "jobId": "c3d4e5f6-...",
  "action": "extractor",
  "pages": [{
    "index": 0,
    "confidence": 94,
    "structuredData": {
      "เลขที่ PO": "PO-2568-0456",
      "วันที่สั่งซื้อ": "18/01/2568",
      "วันที่ต้องการ": "25/01/2568",
      "ชื่อซัพพลายเออร์": "บริษัท ยำยำ อินเตอร์เนชั่นแนล จำกัด",
      "ยอดรวม": "48,750.00",
      "เงื่อนไขการชำระเงิน": "Credit 30 วัน",
      "รายการสั่งซื้อ": [
        { "รหัสสินค้า": "8850250172079", "ชื่อสินค้า": "ยำยำเส้นแบนรสต้มยำ 60กX30", "หน่วย": "แพ็ค", "จำนวนสั่ง": "50", "ราคาต่อหน่วย": "285.00" },
        { "รหัสสินค้า": "8850250170730", "ชื่อสินค้า": "ยำยำผัดขี้เมาสูตรลับ 63กX30", "หน่วย": "แพ็ค", "จำนวนสั่ง": "30", "ราคาต่อหน่วย": "310.00" }
      ]
    },
    "fieldConfidences": [
      { "key": "เลขที่ PO", "confidence": 0.98 },
      { "key": "ยอดรวม", "confidence": 0.97 }
    ]
  }],
  "usage": { "pages_processed": 1, "credits_used": 0.5 }
}
4

ใบเสร็จรับเงิน (Receipt)

ถ่ายรูปใบเสร็จแล้วดึงข้อมูลเข้าฟอร์มเบิกค่าใช้จ่ายอัตโนมัติ — อัปโหลดไฟล์โดยตรงด้วย /upload

curl -X POST 'https://backend.aksonocr.com/api/v3/upload' \
  -H 'X-API-Key: <YOUR_API_KEY>' \
  -F '[email protected]' \
  -F 'model=AksonOCR-preview' \
  -F 'action=extractor' \
  -F 'customFields=[{"key":"ชื่อร้านค้า","description":"ชื่อร้านหรือสถานประกอบการ"},{"key":"วันที่","description":"วันที่ซื้อสินค้า"},{"key":"เวลา","description":"เวลาที่ซื้อสินค้า"},{"key":"ยอดรวม","description":"ยอดชำระทั้งหมด"},{"key":"ประเภทการชำระ","description":"วิธีชำระเงิน เช่น เงินสด บัตรเครดิต พร้อมเพย์"},{"key":"เลขที่ใบเสร็จ","description":"รหัสหรือหมายเลขใบเสร็จ"}]'

Response

json
{
  "jobId": "d4e5f6a7-...",
  "action": "extractor",
  "pages": [{
    "index": 0,
    "confidence": 93,
    "structuredData": {
      "ชื่อร้านค้า": "เซเว่น อีเลฟเว่น สาขารัชดา 42",
      "วันที่": "20/01/2568",
      "เวลา": "14:32",
      "ยอดรวม": "127.00",
      "ประเภทการชำระ": "บัตรเดบิต",
      "เลขที่ใบเสร็จ": "TXN-20250120-00341"
    },
    "fieldConfidences": [
      { "key": "ยอดรวม", "confidence": 0.99 },
      { "key": "วันที่", "confidence": 0.99 },
      { "key": "เลขที่ใบเสร็จ", "confidence": 0.96 }
    ]
  }],
  "usage": { "pages_processed": 1, "credits_used": 0.5 }
}
5

สัญญาเช่า / หนังสือสัญญา (Contract)

ดึงข้อมูลสำคัญจากสัญญาเช่าหลายร้อยฉบับเข้าระบบ CRM — ใช้ AksonOCR-handwriting เมื่อมีลายมือเขียน (2 credits/page)

bash
curl -X POST 'https://backend.aksonocr.com/api/v3/ocr' \
  -H 'X-API-Key: <YOUR_API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
    "action": "extractor",
    "document": {
      "type": "document_url",
      "document_url": "https://example.com/lease-contract.pdf"
    },
    "model": "AksonOCR-handwriting",
    "customFields": [
      { "key": "ชื่อผู้เช่า", "description": "ชื่อ-นามสกุลหรือชื่อบริษัทของผู้เช่า" },
      { "key": "เลขบัตรประชาชน", "description": "เลข 13 หลัก หรือเลขทะเบียนบริษัท" },
      { "key": "ที่อยู่ทรัพย์สิน", "description": "ที่อยู่ของอสังหาริมทรัพย์ที่เช่า" },
      { "key": "ค่าเช่าต่อเดือน", "description": "อัตราค่าเช่ารายเดือน (บาท)" },
      { "key": "เงินประกัน", "description": "จำนวนเงินมัดจำหรือประกัน (บาท)" },
      { "key": "วันที่เริ่มเช่า", "description": "วันเริ่มต้นสัญญาเช่า" },
      { "key": "วันที่สิ้นสุดเช่า", "description": "วันสิ้นสุดสัญญาเช่า" }
    ],
    "additionalInstructions": "เอกสารอาจมีทั้งข้อความพิมพ์และลายมือเขียน โปรดดึงข้อมูลจากทั้งสองส่วน"
  }'

Response

json
{
  "jobId": "e5f6a7b8-...",
  "action": "extractor",
  "model": "AksonOCR-handwriting",
  "pages": [{
    "index": 0,
    "confidence": 91,
    "structuredData": {
      "ชื่อผู้เช่า": "นายสมชาย ใจดี",
      "เลขบัตรประชาชน": "1-1001-00123-45-6",
      "ที่อยู่ทรัพย์สิน": "ห้อง 302 อาคาร A คอนโดมิเนียมซันไรส์ ถ.รัชดาภิเษก",
      "ค่าเช่าต่อเดือน": "12,000",
      "เงินประกัน": "24,000",
      "วันที่เริ่มเช่า": "01/02/2568",
      "วันที่สิ้นสุดเช่า": "31/01/2569"
    },
    "fieldConfidences": [
      { "key": "ชื่อผู้เช่า", "confidence": 0.95 },
      { "key": "ค่าเช่าต่อเดือน", "confidence": 0.97 }
    ]
  }],
  "usage": { "pages_processed": 1, "credits_used": 2 }
}
6

ใบส่งของ / เอกสารขนส่ง (Shipping / Delivery Document)

นำข้อมูลใบส่งของกระดาษเข้าระบบ tracking อัตโนมัติ

bash
curl -X POST 'https://backend.aksonocr.com/api/v3/ocr' \
  -H 'X-API-Key: <YOUR_API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
    "action": "extractor",
    "document": {
      "type": "image_url",
      "image_url": "https://example.com/shipping-doc.png"
    },
    "model": "AksonOCR-preview",
    "customFields": [
      { "key": "เลขที่ใบส่งของ", "description": "AWB หรือหมายเลขใบส่งของ", "example": "TH-2025-123456" },
      { "key": "วันที่จัดส่ง", "description": "วันที่ต้องจัดส่ง" },
      { "key": "ชื่อผู้รับ", "description": "ชื่อ-นามสกุลผู้รับสินค้า" },
      { "key": "ที่อยู่จัดส่ง", "description": "ที่อยู่เต็มของผู้รับสินค้า" },
      { "key": "เบอร์โทรผู้รับ", "description": "เบอร์โทรศัพท์ผู้รับ" },
      { "key": "น้ำหนักรวม", "description": "น้ำหนักรวมของพัสดุ (กิโลกรัม)" },
      { "key": "ค่าขนส่ง", "description": "ค่าบริการขนส่ง" },
      { "key": "ประเภทการชำระ", "description": "ชำระล่วงหน้า หรือ COD" }
    ]
  }'

Response

json
{
  "jobId": "f6a7b8c9-...",
  "action": "extractor",
  "pages": [{
    "index": 0,
    "confidence": 97,
    "structuredData": {
      "เลขที่ใบส่งของ": "TH-2568-887654",
      "วันที่จัดส่ง": "22/01/2568",
      "ชื่อผู้รับ": "นางสาวพิมพ์ใจ สวยงาม",
      "ที่อยู่จัดส่ง": "99 ม.3 ต.บางกรวย อ.บางกรวย จ.นนทบุรี 11130",
      "เบอร์โทรผู้รับ": "089-876-5432",
      "น้ำหนักรวม": "2.5",
      "ค่าขนส่ง": "45.00",
      "ประเภทการชำระ": "COD"
    },
    "fieldConfidences": [
      { "key": "เลขที่ใบส่งของ", "confidence": 0.99 },
      { "key": "ที่อยู่จัดส่ง", "confidence": 0.95 }
    ]
  }],
  "usage": { "pages_processed": 1, "credits_used": 0.5 }
}
7

ใช้ templateId (Extraction Template)

สร้าง Template บน Dashboard แล้วใช้ templateId แทนการส่ง customFields ทุกครั้ง

ขั้นตอนสร้าง Template

  1. เข้า Dashboard → Extraction TemplatesCreate New Template
  2. ใส่ชื่อ Template และกำหนด fields ที่ต้องการ
  3. ทดสอบกับตัวอย่างเอกสาร
  4. คัดลอก templateId มาใช้ใน API
curl -X POST 'https://backend.aksonocr.com/api/v3/ocr' \
  -H 'X-API-Key: <YOUR_API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
    "action": "extractor",
    "document": {
      "type": "document_url",
      "document_url": "https://example.com/supplier-invoice.pdf"
    },
    "model": "AksonOCR-preview",
    "templateId": "tmpl_abc123xyz789"
  }'

หมายเหตุ: templateId และ customFields ใช้ร่วมกันไม่ได้ ให้เลือกอย่างใดอย่างหนึ่ง

เมื่อไหร่ควรใช้อะไร

สถานการณ์วิธีที่แนะนำ
ทดสอบ / prototype ครั้งแรกcustomFields
เอกสารรูปแบบใหม่ที่ยังไม่แน่ใจcustomFields
เอกสารรูปแบบเดิมที่ใช้ซ้ำบ่อยtemplateId
ทีมใช้ร่วมกัน / หลาย API KeytemplateId
ต้องการแก้ fields บ่อยcustomFields
8

PDF หลายหน้า + Batch Mode (ประหยัด Credits)

ดึงข้อมูลจากเอกสารจำนวนมากในราคาประหยัด รับแจ้งผลผ่าน Webhook + pagination

curl -X POST 'https://backend.aksonocr.com/api/v3/upload' \
  -H 'X-API-Key: <YOUR_API_KEY>' \
  -F '[email protected]' \
  -F 'model=AksonOCR-preview' \
  -F 'action=extractor' \
  -F 'mode=batch' \
  -F 'webhookUrl=https://your-server.com/webhook/ocr' \
  -F 'templateId=tmpl_abc123xyz789'

Webhook Payload เมื่อเสร็จ

json
{
  "event": "ocr_job.completed",
  "timestamp": "2025-01-21T08:00:00.000Z",
  "data": {
    "job_id": "g7h8i9j0-...",
    "action": "extractor",
    "status": "completed",
    "mode": "batch",
    "model": "AksonOCR-preview",
    "total_pages": 200,
    "processed_pages": 200,
    "credit_cost": 80,
    "result_url": "https://storage.googleapis.com/...",
    "result_url_expires_at": "2025-01-21T09:00:00.000Z",
    "error": null
  }
}

ดึงผลลัพธ์แบบ Pagination (200 หน้า)

python
import requests

job_id = "g7h8i9j0-..."
all_pages = []
offset = 0
limit = 50

while True:
    response = requests.get(
        f"https://backend.aksonocr.com/api/v3/ocr/result/{job_id}",
        headers={"X-API-Key": "<YOUR_API_KEY>"},
        params={"page": offset, "limit": limit}
    )
    data = response.json()
    all_pages.extend(data["pages"])

    if not data["hasMore"]:
        break
    offset += limit

print(f"ดึงข้อมูลครบ {len(all_pages)} หน้า")
for page in all_pages:
    print(page["structuredData"])

Batch ประหยัดอย่างไร: Batch mode ใช้เครดิตน้อยกว่า normal mode เหมาะกับงานที่ไม่เร่งด่วน ผลลัพธ์ภายใน 24 ชั่วโมง

สรุปการเลือก Model สำหรับ Extractor

เอกสารModel แนะนำCredits/page
บัตรประชาชน / เอกสารทั่วไปAksonOCR-1.01
ใบแจ้งหนี้ / ใบเสร็จ (พิมพ์)AksonOCR-preview0.5
ใบส่งของ / PO (พิมพ์)AksonOCR-preview0.5
สัญญา / ฟอร์มกรอกมือAksonOCR-handwriting2
เอกสารผสม (พิมพ์ + ลายมือ)AksonOCR-handwriting2

การหมดอายุของงาน

  • ผลลัพธ์จะเก็บไว้ให้ 72 ชั่วโมง หลังสร้างงาน
  • งานที่หมดอายุจะถูกลบอัตโนมัติทุกชั่วโมง
  • Signed URL ของผลลัพธ์จะหมดอายุหลัง 1 ชั่วโมง แต่จะต่ออายุใหม่ทุกครั้งที่เรียก status/result

ติดต่อเรา

หากมีคำถามหรือต้องการความช่วยเหลือ ติดต่อทีมงานผ่าน Dashboard หรือดูรายละเอียดเพิ่มเติมได้ที่ Interactive API Documentation