Tài liệu API
Mọi thứ làm được trên giao diện đều gọi được bằng API. Mọi ví dụ dưới đây chạy được ngay bằng cách dán vào terminal.
Tổng quan
| Địa chỉ gốc | https://apitoolhub.tiengvang.com/api/v1 |
|---|---|
| Định dạng | JSON cho cả request và response; Content-Type: application/json |
| Mã hoá | UTF-8. Chỉ nhận HTTPS. |
| Múi giờ | Mọi mốc thời gian trả về theo chuẩn RFC 3339 (UTC). |
Một số công cụ chạy được không cần tài khoản. Hãy thử ngay câu lệnh sau trước khi đọc tiếp:
curl -s https://apitoolhub.tiengvang.com/api/v1/tools/dns.checker/exec \
-H 'Content-Type: application/json' \
-d '{"domain":"example.com"}'
Xác thực
Hai cách, dùng cách nào cũng được:
1. Bearer token (dành cho ứng dụng có người đăng nhập)
# Đăng nhập → nhận access_token (hạn 15 phút) và refresh_token
curl -s -X POST https://apitoolhub.tiengvang.com/api/v1/auth/login \
-H 'Content-Type: application/json' \
-d '{"email":"ban@example.com","password":"mat-khau"}'
# Tài khoản bật xác thực hai bước thì gửi kèm mã 6 số:
# {"email":"…","password":"…","code":"123456"}
# Chưa gửi mã sẽ nhận 401 kèm error = "mfa_required".
# Hết hạn thì làm mới, KHÔNG cần đăng nhập lại:
curl -s -X POST https://apitoolhub.tiengvang.com/api/v1/auth/refresh \
-H 'Content-Type: application/json' \
-d '{"refresh_token":"…"}'
Gửi kèm mọi request: Authorization: Bearer <access_token>
2. API key (dành cho máy chủ, script, cron)
Tạo trong ứng dụng tại Gói, tài khoản & API. Cần gói có quyền api_access (từ Plus trở lên).
curl -s https://apitoolhub.tiengvang.com/api/v1/tools/dns.checker/exec \
-H 'X-API-Key: pat_abc123.secret…' \
-H 'Content-Type: application/json' \
-d '{"domain":"example.com"}'
Quyền của key luôn nhỏ hơn hoặc bằng quyền của bạn. Khi cấp key, phạm vi được cắt theo quyền thật của tài khoản tại thời điểm gọi — nâng phạm vi trong yêu cầu tạo key không làm key mạnh hơn chủ của nó. Secret chỉ hiện một lần; hệ thống lưu dạng băm.
Hạn mức theo gói
Hạn mức là dữ liệu động, đọc số hiện hành bằng GET /plans hoặc GET /me/entitlements.
| Gói | Lượt/ngày mỗi công cụ | Lượt/phút | Bulk | Tác vụ nền | API key |
|---|---|---|---|---|---|
| Vãng lai | 10 | 10 | 1 | — | Không |
| Free | 100 | 30 | 10 | 1 | Không |
| Plus | 500 | 120 | 100 | 3 | Có |
| Pro | 5.000 | 600 | 1.000 | 10 | Có |
| Enterprise | Không giới hạn | Không giới hạn | Không giới hạn | Không giới hạn | Có |
Mỗi công cụ có một gói tối thiểu riêng (min_plan). Gọi công cụ ngoài gói trả về 403 plan_required kèm gói cần có.
Danh mục công cụ
GET /tools — danh sách công cụ đang bật, kèm min_plan và mode.
curl -s https://apitoolhub.tiengvang.com/api/v1/tools | head -40
GET /tools/{toolId} — chi tiết một công cụ.
Trường mode quyết định cách chạy: sync dùng /exec, async dùng /run.
Chạy nhanh — công cụ sync
POST /tools/{toolId}/exec — trả kết quả ngay trong response.
curl -s -X POST https://apitoolhub.tiengvang.com/api/v1/tools/ssl.expiry/exec \
-H 'Content-Type: application/json' \
-d '{"host":"example.com"}'
{
"tool": "ssl.expiry",
"output": { "host": "example.com", "con_lai_ngay": 85, "muc_do": "tot", "ket_luan": "Còn 85 ngày, chưa cần lo." },
"elapsed_ms": 96
}
Gửi header Idempotency-Key nếu muốn gọi lại an toàn khi mất mạng giữa chừng — lần gọi lại cùng khoá trả đúng kết quả cũ, không tính thêm lượt.
Chạy nền — công cụ async
Việc nặng (ví dụ tra WHOIS hàng loạt) trả về mã tác vụ, chạy nền, lấy kết quả sau.
# 1. Tạo tác vụ → 202
curl -s -X POST https://apitoolhub.tiengvang.com/api/v1/tools/domain.bulk/run \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"domains":"example.com\nexample.net\nexample.org"}'
# → {"job_id":"a6d7…","status":"queued"}
# 2. Theo dõi trạng thái
curl -s https://apitoolhub.tiengvang.com/api/v1/jobs/a6d7… -H "Authorization: Bearer $TOKEN"
# → {"status":"running","progress":66}
# 3. Lấy kết quả khi status = done
curl -s https://apitoolhub.tiengvang.com/api/v1/jobs/a6d7…/result -H "Authorization: Bearer $TOKEN"
Theo dõi tiến trình thời gian thực (SSE)
Trình duyệt không gửi được header xác thực trên EventSource, nên xin một vé ngắn hạn trước:
curl -s -X POST https://apitoolhub.tiengvang.com/api/v1/jobs/{jobId}/sse-ticket \
-H "Authorization: Bearer $TOKEN"
# → {"ticket":"…","expires_in":120}
const es = new EventSource(BASE + '/jobs/' + jobId + '/events?ticket=' + ticket);
es.onmessage = e => console.log(JSON.parse(e.data).progress);
Vé sống 120 giây và chỉ mở đúng tác vụ đã xin — không dùng được cho tác vụ khác.
Kết quả tác vụ được giữ 30 ngày rồi dọn. Cần lưu lâu hơn thì tải về phía bạn.
Thông tin tài khoản & hạn mức
| Endpoint | Việc |
|---|---|
GET /me | Hồ sơ, gói, vai trò, trạng thái 2FA |
GET /me/quota | Đã dùng bao nhiêu lượt hôm nay |
GET /me/entitlements | Gói mở khoá gì, công cụ nào được phép/bị khoá |
GET /me/activity | Lịch sử lượt chạy |
GET /me/usage-series | Số lượt theo ngày (vẽ biểu đồ) |
POST /me/password | Đổi mật khẩu (đăng xuất mọi thiết bị khác) |
POST /me/mfa/setup · /enable · /disable | Bật/tắt xác thực hai bước |
GET /me/pins · POST /me/pins/{toolId} | Ghim công cụ hay dùng |
Quản lý API key
GET /me/api-keys | Danh sách key (không bao giờ trả lại secret) |
POST /me/api-keys | Cấp key mới — secret hiện một lần duy nhất |
DELETE /me/api-keys/{keyId} | Thu hồi ngay lập tức |
Mã lỗi
| HTTP | error | Ý nghĩa và cách xử lý |
|---|---|---|
| 400 | invalid_input | Dữ liệu nhập sai — trường detail nói rõ sai chỗ nào |
| 401 | invalid_token | Token sai/hết hạn → gọi /auth/refresh |
| 401 | mfa_required | Tài khoản bật 2FA → gửi lại kèm code |
| 403 | plan_required | Công cụ ngoài gói; xem min_plan trong response |
| 403 | tool_disabled | Quản trị viên đang tắt công cụ này |
| 404 | tool_not_found | Sai mã công cụ — đối chiếu với GET /tools |
| 429 | rate_limited | Vượt số lượt mỗi phút của gói — chờ rồi thử lại |
| 429 | quota_exceeded | Hết lượt trong ngày; daily_limit cho biết mức của gói |
| 502 | tool_error | Lỗi khi công cụ gọi ra ngoài (máy chủ đích không phản hồi…) |
Lỗi luôn có dạng {"error":"…","detail":"…"}; detail viết bằng tiếng Việt, đưa thẳng cho người dùng cuối được.
Giới hạn kỹ thuật
- Kích thước body tối đa 64 KB cho hầu hết endpoint; công cụ nhận tệp nhận tối đa 8 MB dạng Base64.
- WHOIS hàng loạt: tối đa 200 tên miền mỗi lần chạy; vượt thì phần dư được báo rõ trong kết quả chứ không âm thầm cắt.
- Công cụ gọi ra Internet đều đi qua bộ chặn SSRF: không truy cập được địa chỉ nội bộ, loopback, link-local hay dải CGNAT — kể cả khi tên miền cố tình trỏ vào đó.
- Tra cứu có bộ nhớ đệm ngắn theo từng công cụ; kết quả tra cứu trùng trong thời gian đệm không tính thêm lượt.