Retec OCR

API Retec OCR

Gọi Retec OCR từ phần mềm của bạn: gửi ảnh hoặc PDF, nhận lại toàn bộ văn bản, kèm các thông tin bạn cần lấy ra.

1. Nhận key

  • Mỗi email một key, 5 lượt mỗi ngày (đặt lại lúc 0 giờ, giờ Việt Nam), tính riêng với lượt dùng trên trang web. Mỗi mạng (IP) còn có trần chung cho mọi key và lượt dùng trên web.
  • Key được gửi tới email bạn nhập, không hiện trên trang này.
  • Mất hoặc lộ key: đăng ký lại bằng chính email đó để nhận key mới, key cũ hết hiệu lực ngay. Hạn mức vẫn tính theo email.

2. Gọi API

POST https://ocr.retec.vn/api/v1/ocr, body multipart/form-data, key trong header Authorization: Bearer <key>.

TrườngBắt buộcMô tả
fileCóPDF hoặc ảnh JPG, PNG, WEBP, TIFF, BMP; tối đa 10 MB, PDF tối đa 10 trang.
fieldsKhôngCác thông tin cần trích xuất, cách nhau bằng dấu phẩy hoặc xuống dòng, ví dụ Số văn bản, Ngày ban hành, Người ký. Tối đa 20 thông tin, 500 ký tự. Bỏ trống để chỉ lấy văn bản.
langKhôngNgôn ngữ của tài liệu: vi tiếng Việt (mặc định), en tiếng Anh, auto tự động khi tài liệu có cả tiếng Việt và tiếng Anh (chậm hơn một chút).

curl

curl -X POST https://ocr.retec.vn/api/v1/ocr \
  -H "Authorization: Bearer $RETEC_API_KEY" \
  -F "[email protected]" \
  -F "fields=Số văn bản, Ngày ban hành, Người ký"

Python

import os, requests

with open("cong-van.pdf", "rb") as f:
    r = requests.post(
        "https://ocr.retec.vn/api/v1/ocr",
        headers={"Authorization": f"Bearer {os.environ['RETEC_API_KEY']}"},
        files={"file": f},
        data={"fields": "Số văn bản, Ngày ban hành, Người ký"},
        timeout=120,
    )
data = r.json()
print(data["text"] if data["ok"] else data["message"])

3. Kết quả

Luôn là JSON. Thành công (HTTP 200):

{
  "ok": true,
  "text": "ỦY BAN NHÂN DÂN ...",
  "pages": 2,
  "fields": {"Số văn bản": "12/QĐ-UBND", "Ngày ban hành": "05/01/2026", "Người ký": "Nguyễn Văn A"},
  "remaining": 4
}
  • fields là null khi không gửi fields; thông tin không tìm thấy có giá trị rỗng hoặc không có trong kết quả. Ngày tháng ở dạng DD/MM/YYYY.
  • Có fieldsError khi không trích xuất được thông tin: lượt vẫn tính, text vẫn đầy đủ.
  • remaining: số lượt còn lại hôm nay của key.

Lỗi (HTTP 4xx, 5xx): {"ok": false, "code": "quota", "message": "…"}. message là câu có thể hiện cho người dùng, tiếng Việt hoặc tiếng Anh theo header Accept-Language (en → tiếng Anh); phần mềm nên xử lý theo code.

4. Mã lỗi

codeHTTPÝ nghĩa
api_key401Thiếu key, key sai hoặc đã được thay bằng key mới.
banned403Key hoặc mạng bị tạm khoá do sử dụng bất thường.
country403Yêu cầu không đến từ Việt Nam.
ipcheck503Chưa xác minh được mạng gửi yêu cầu, thử lại sau ít phút.
quota429Key đã dùng hết lượt hôm nay.
net_quota429Mạng của bạn đã dùng hết lượt hôm nay (tính chung mọi key và lượt dùng trên web).
global429Hệ thống đã đạt giới hạn xử lý hôm nay.
rate, inflight429Gọi quá nhanh, hoặc mạng của bạn đang có một file chưa xử lý xong.
busy503Hệ thống đang bận, thử lại sau ít phút.
type, empty, bad_file400Định dạng không hỗ trợ, file rỗng, hỏng, có mật khẩu hoặc quá số trang.
too_large413File vượt quá dung lượng cho phép.
fields400Danh sách thông tin quá dài hoặc quá nhiều mục.
slow408Tải file lên quá chậm.
error500Lỗi khi xử lý; lượt thường không bị tính.

5. Giới hạn và lưu ý

  • Chỉ nhận yêu cầu từ mạng tại Việt Nam: máy chủ gọi API cần đặt ở Việt Nam.
  • Mỗi mạng (IP) chỉ một yêu cầu đang xử lý tại một thời điểm, tối đa 6 yêu cầu mỗi phút: gửi file lần lượt, chờ kết quả rồi gửi tiếp.
  • Mỗi file thường mất vài giây; đặt thời gian chờ phía bạn khoảng 120 giây.
  • Giữ key bí mật, chỉ gọi API từ máy chủ của bạn, không đặt key trong mã chạy trên trình duyệt hay ứng dụng phát hành.
  • File và nội dung chỉ được xử lý trong bộ nhớ, không lưu lại, như trên trang web (xem Chính sách & Điều khoản).
  • Kết quả được tạo tự động và có thể sai sót; hãy kiểm tra lại trước khi dùng cho việc quan trọng.