Số liệu và logs
Số liệu cho biết email của bạn hoạt động thế nào theo thời gian: gửi bao nhiêu, tới hộp thư bao nhiêu, bao nhiêu người mở, nhấp, bị trả lại hay báo spam. Logs ghi lại mọi lệnh gọi API bằng key của bạn, kèm nội dung gửi lên và nhận về, để bạn gỡ lỗi tích hợp mà không cần thêm log vào code của mình.
Số liệu trong dashboard
Email → Số liệu hiển thị lượng thư theo ngày (đã gửi, tới hộp thư, mở, nhấp) và tỉ lệ tới hộp thư, mở, nhấp, bị trả lại, bị báo spam. Chọn 7, 14 hoặc 30 ngày gần nhất và một tên miền hoặc tất cả. Ngày tính theo giờ Việt Nam.
- Biểu đồ tỉ lệ bị trả lại có vạch 4%, biểu đồ tỉ lệ báo spam có vạch 0,08%. Vượt các vạch này, Gmail và Yahoo bắt đầu giới hạn hoặc đưa thư của bạn vào spam.
- Tỉ lệ mở và nhấp tính trên thư đã tới hộp thư, mỗi người đếm một lần.
- Lượt mở chỉ là ước lượng: Apple Mail Privacy Protection và các proxy ảnh khác có thể làm con số cao hơn thực tế. Xem Theo dõi mở và nhấp.
API số liệu
GET /emails/metrics trả về cùng các con số, theo cấu trúc endpoint metrics của Resend. Key có email:read (hoặc email:send / email:write) là đủ.
- cURL
- Node.js
- Python
- PHP
curl "https://api.hatang.dev/emails/metrics?start_date=2026-10-01&end_date=2026-10-14&timezone=Asia/Ho_Chi_Minh&dimensions=period,domain&metrics=sent,delivered,bounce_rate" \
-H "Authorization: Bearer $HATANG_API_KEY"
const { data } = await hatang.emails.metrics({
start_date: "2026-10-01",
end_date: "2026-10-14",
timezone: "Asia/Ho_Chi_Minh",
dimensions: ["period", "domain"],
metrics: ["sent", "delivered", "bounce_rate"],
});
res = requests.get(
"https://api.hatang.dev/emails/metrics",
headers={"Authorization": f"Bearer {os.environ['HATANG_API_KEY']}"},
params={"start_date": "2026-10-01", "end_date": "2026-10-14", "timezone": "Asia/Ho_Chi_Minh", "metrics": "sent,delivered,bounce_rate"},
)
$res = $client->get('/emails/metrics', [
'headers' => ['Authorization' => 'Bearer ' . getenv('HATANG_API_KEY')],
'query' => ['start_date' => '2026-10-01', 'end_date' => '2026-10-14', 'timezone' => 'Asia/Ho_Chi_Minh', 'metrics' => 'sent,delivered,bounce_rate'],
]);
| Tham số | Mô tả |
|---|---|
start_date, end_date | Một ngày (2026-10-01, hiểu là nửa đêm UTC) hoặc một thời điểm ISO. end_date chỉ có ngày thì bao gồm cả ngày đó (tới 23:59:59 UTC). Khoảng tối đa 31 ngày. Không truyền thì lấy 7 ngày gần nhất. |
timezone | Múi giờ IANA dùng để chia kỳ, ví dụ Asia/Ho_Chi_Minh. Mặc định UTC. |
granularity | hourly, daily (mặc định), weekly hoặc monthly. |
metrics | Danh sách chỉ số cần lấy, cách nhau bởi dấu phẩy. Mặc định: tất cả. |
dimensions | period (mặc định), hoặc period,domain để tách từng kỳ theo tên miền. |
domain_id | Chỉ các tên miền này, cách nhau bởi dấu phẩy. |
{
"object": "metrics",
"start_date": "2026-10-01T00:00:00.000Z",
"end_date": "2026-10-14T23:59:59.999Z",
"timezone": "Asia/Ho_Chi_Minh",
"granularity": "daily",
"metrics": ["sent", "delivered", "bounce_rate"],
"dimensions": ["period"],
"totals": { "sent": 1840, "delivered": 1812, "bounce_rate": 0.0098 },
"data": [
{ "period": "2026-10-01T00:00:00", "sent": 120, "delivered": 119, "bounce_rate": 0.0083 },
{ "period": "2026-10-02T00:00:00", "sent": 134, "delivered": 131, "bounce_rate": 0.0149 }
]
}
totals tính cho cả khoảng; data có một dòng cho mỗi kỳ (và mỗi tên miền, kèm domain_id và domain_name). Tỉ lệ là số thập phân làm tròn bốn chữ số, nên 0.0098 là 0,98%.
Số đếm
| Chỉ số | Đếm gì |
|---|---|
sent | Số người nhận Hạ Tầng đã gửi tới, không tính người nhận bị chặn và bị huỷ. |
delivered | Sự kiện tới hộp thư. |
delivery_delayed | Sự kiện gửi chậm. |
failed | Sự kiện gửi thất bại. |
suppressed | Người nhận bị bỏ qua vì nằm trong danh sách chặn. |
bounced | Sự kiện bị trả lại, kể cả của người nhận bị chặn. |
opened, unique_opened | Lượt mở, và số người nhận đã mở ít nhất một lần. |
clicked, unique_clicked | Lượt nhấp, và số người nhận đã nhấp ít nhất một lần. |
complained | Lượt báo spam. |
unsubscribed | Số contact huỷ đăng ký mọi email. Không gắn với tên miền nào, nên bị bỏ khi bạn tách hoặc lọc theo tên miền. |
received | Thư nhận được trên các tên miền của bạn. |
Tỉ lệ
| Tỉ lệ | Công thức |
|---|---|
delivery_rate | delivered / sent |
bounce_rate | bounced / sent |
open_rate | unique_opened / delivered |
click_rate | unique_clicked / delivered |
complaint_rate | complained / delivered |
unsubscribe_rate | unsubscribed / delivered |
Lượt gửi được tính vào kỳ email được tạo; sự kiện được tính vào kỳ sự kiện xảy ra.
Logs
Email → Logs ghi lại mọi lệnh gọi API bằng key của doanh nghiệp: endpoint, phương thức, mã trạng thái, thời gian xử lý, API key, user agent (cho biết SDK và phiên bản) cùng nội dung request và response. Lọc theo trạng thái, phương thức, API key hoặc đường dẫn. Lệnh gọi lỗi có nút Chép để hỏi AI: gom request, response và đường dẫn tài liệu thành một đoạn để dán cho trợ lý AI.
- Mật khẩu, secret, token và API key trong nội dung được thay bằng
[redacted]. Nội dung tệp đính kèm được thay bằng kích thước. - Mỗi nội dung giữ tối đa 16 KB. Logs được giữ 30 ngày.
- Thao tác trong chính dashboard không nằm trong log; chỉ lệnh gọi bằng API key mới có.
curl "https://api.hatang.dev/logs?status=error&limit=20" -H "Authorization: Bearer $HATANG_API_KEY"
curl "https://api.hatang.dev/logs/log_0199e6c17a2b7f009c1e3f6a2b1d9e10" -H "Authorization: Bearer $HATANG_API_KEY"
Tham số của GET /logs | Mô tả |
|---|---|
status | 2xx, 4xx, 5xx hoặc error (mọi mã 4xx và 5xx). |
method | GET, POST, PATCH… |
endpoint | Một phần của đường dẫn, ví dụ /emails. |
api_key_id | Chỉ lệnh gọi bằng key này. |
user_agent | Một phần của user agent, ví dụ hatang-sdk-node. |
since, until | Khoảng thời gian. |
limit, after, before | Phân trang, như các danh sách khác. |
Một mục log trông như sau; GET /logs/{id} có thêm request_body, response_body và resource_ids (các id mà response đã tạo hoặc trả về):
{ "object": "log", "id": "log_…", "created_at": "2026-10-14T09:12:03.000Z", "endpoint": "/emails", "method": "POST", "response_status": 422, "duration_ms": 38, "user_agent": "hatang-sdk-node/1.4.0 (node/22.11.0)", "sdk": "hatang-sdk-node 1.4.0", "api_key_id": "key_…" }
Mức sử dụng
GET /usage cho biết doanh nghiệp đã dùng bao nhiêu so với giới hạn: số email hôm nay so với hạn mức ngày (kèm thời điểm đặt lại), số email đã gửi và đã nhận trong tháng, cùng số tên miền, contact, template và số lượt chạy automation trong tháng.
{
"object": "usage",
"emails": {
"daily": { "used": 312, "limit": 10000, "resets_at": "2026-10-15T00:00:00.000Z" },
"monthly": { "sent": 8840, "received": 112, "limit": null, "resets_at": "2026-11-01T00:00:00.000Z" }
},
"domains": { "used": 2, "limit": null },
"contacts": { "used": 5120, "limit": null },
"templates": { "used": 14, "limit": null },
"automation_runs": { "monthly": 640, "limit": null }
}
Xem logs và mức sử dụng cần key có phạm vi ghi ở bất kỳ sản phẩm nào (ví dụ email:write), hoặc toàn quyền.