GET /apiv2/screening/history
ประวัติการตรวจสอบของคุณ เรียงจากใหม่สุดไปเก่าสุด พร้อมระบบแบ่งหน้าแบบเคอร์เซอร์ (cursor pagination)
นี่คือสัญญาข้อกำหนดเวอร์ชัน 2 ซึ่งเข้ามาแทนที่ GET /apiv2/aml/history โดยที่เอนด์พอยต์เดิมยังคงใช้งานได้อยู่
URL ของ Endpoint
GET https://netts.io/apiv2/screening/historyHeaders ของคำขอ
| Header | Required | Description |
|---|---|---|
| X-API-KEY | ใช่ | คีย์ API ของคุณจากแดชบอร์ด Netts |
Query พารามิเตอร์
ตัวกรองทั้งหมดเป็นแบบระบุหรือไม่ก็ได้ หากไม่ระบุตัวกรองใดเลย คุณจะได้รับประวัติทั้งหมดของคุณ
| Parameter | Type | Default | Description |
|---|---|---|---|
| address | string | — | ที่อยู่อย่างแน่นอน ความยาว 10–128 ตัวอักษร |
| network | string | — | ทิกเกอร์ของเครือข่าย |
| provider | string | — | elliptic หรือ bitok |
| status | string | — | pending, processing, completed, skipped, failed |
| from | string | — | เฉพาะรายการตรวจสอบที่สร้างขึ้น ณ หรือหลังช่วงเวลานี้ ตามมาตรฐาน RFC 3339 |
| to | string | — | เฉพาะรายการตรวจสอบที่สร้างขึ้น ณ หรือก่อนช่วงเวลานี้ ตามมาตรฐาน RFC 3339 |
| cursor | string | — | จุดที่ต้องการเริ่มดึงข้อมูลต่อ ให้นำมาจาก next_cursor |
| limit | integer | 50 | จำนวนรายการต่อหน้า ระหว่าง 1 ถึง 200 |
ในเวอร์ชัน 1 พารามิเตอร์ address และ network จำเป็นต้องระบุทั้งคู่ จึงไม่มีวิธีที่จะ สอบถามว่า "ช่วงนี้ฉันได้ตรวจสอบอะไรไปบ้าง"
รายการตรวจสอบที่มีสถานะ skipped จะรวมอยู่ด้วย เวอร์ชัน 1 จะซ่อนรายการเหล่านี้ไว้ รายการที่ถูกข้าม (skipped) ถือเป็นคำสั่งจริง — ที่อยู่ดังกล่าวไม่มีกิจกรรมบนบล็อกเชน จึงไม่เคยถูกส่ง ไปยังผู้ให้บริการและไม่มีการคิดค่าบริการ — และถือเป็นส่วนหนึ่งของประวัติ
ตัวอย่าง
cURL
curl "https://netts.io/apiv2/screening/history?limit=50" \
-H "X-API-KEY: your_api_key"Python — ดึงประวัติทั้งหมดแบบต่อเนื่อง
import requests
headers = {"X-API-KEY": "your_api_key"}
params = {"limit": 200, "provider": "elliptic"}
while True:
page = requests.get("https://netts.io/apiv2/screening/history",
headers=headers, params=params).json()
for item in page["items"]:
print(item["order"]["client_order_id"],
item["order"]["status"],
item["risk"]["level"],
item["sanctions"]["verdict"])
if not page["next_cursor"]:
break
params = {"limit": 200, "provider": "elliptic", "cursor": page["next_cursor"]}คงตัวกรองให้เหมือนเดิมทุกประการขณะเลื่อนหน้า การเปลี่ยนตัวกรองในขณะที่ใช้เคอร์เซอร์เดิม จะถือเป็นข้อผิดพลาด ไม่ใช่การเปลี่ยนชุดข้อมูลโดยอัตโนมัติ
การตอบกลับ
{
"schema_version": 2,
"items": [
{
"order": {
"client_order_id": "A6F3221BAAE093A",
"status": "completed",
"api_version": "v2",
"cache_hit": false,
"created_at": "2026-09-13T08:24:19.838584Z",
"started_at": "2026-09-13T08:24:20.998619Z",
"completed_at": "2026-09-13T08:24:25.179967Z"
},
"request": {
"address": "YOUR_ADDRESS_HERE",
"network": "trx",
"provider": "elliptic"
},
"check": {
"provider": "elliptic",
"provider_check_id": "1cc2fd64-1483-4ce3-946f-23a614f41a12",
"checked_at": "2026-09-13T08:24:22.372000Z",
"status": "completed",
"provider_status": "complete"
},
"risk": {
"score": "0.12428176721891304",
"scale": { "min": 0, "max": 10 },
"level": "low",
"level_source": "computed",
"provider_level": null,
"policy": "netts-risk-v1",
"by_direction": { "source": "0.12428176721891304", "destination": null }
},
"sanctions": { "verdict": "linked" }
}
],
"next_cursor": "eyJmIjp7InN0YXR1cyI6ImNvbXBsZXRlZCJ9LCJpIjoxMzQyNywidCI6...",
"limit": 1
}| Field | Type | Description |
|---|---|---|
| items | array | ข้อมูลในหน้านี้ เรียงจากใหม่สุดไปเก่าสุด |
| next_cursor | string | null | ส่งค่านี้กลับมาเพื่อดึงหน้าถัดไป ค่า null หมายความว่าคุณมาถึงจุดสิ้นสุดแล้ว |
| limit | integer | ขีดจำกัดจำนวนรายการที่ถูกนำมาใช้ |
รูปแบบย่อของแต่ละรายการ
บล็อก order, request, check และ risk มีความเหมือนกันกับบล็อกที่อยู่ในคำตอบแบบเต็ม ของ GET /apiv2/screening/{client_order_id} ฟิลด์ต่อฟิลด์ ดังนั้นตัวแยกวิเคราะห์ (parser) ชุดเดียวกันจึงสามารถประมวลผลได้ทั้งสองแบบ
สิ่งที่ตัดออกไปได้แก่: provider_data, exposure[], rules[], entities[], wallet, billing, precheck และบล็อก sanctions แบบเต็ม ผลลัพธ์ของ Elliptic เพียงรายการเดียว มีขนาดประมาณ 150 KB และหนึ่งหน้าที่มี 50 รายการจะมีขนาดถึง 7 เมกะไบต์ ให้ดึงข้อมูลรายการตรวจสอบเดี่ยวเมื่อคุณต้องการดูรายละเอียด
sanctions.verdict
ผลการวิเคราะห์การคว่ำบาตรที่สรุปให้เหลือคำเดียว
| Value | Meaning |
|---|---|
listed | ที่อยู่นี้อยู่ในรายชื่อการคว่ำบาตรโดยตรง |
linked | พบความเชื่อมโยงกับการคว่ำบาตร แต่ตัวที่อยู่ไม่ได้อยู่ในรายชื่อคว่ำบาตรโดยตรง |
none | การวิเคราะห์ทำงานแล้วและไม่พบสิ่งใด |
null | ยังไม่มีผลลัพธ์ที่จะนำมาวิเคราะห์ |
ความแตกต่างระหว่าง listed และ linked คือประเด็นสำคัญของฟิลด์นี้ — ดูที่ การคว่ำบาตรในผลลัพธ์ AML
การแบ่งหน้า
เวอร์ชัน 1 แบ่งหน้าด้วยหมายเลขหน้า: ?page=2, 100 รายการต่อหน้า โดยเรียงตามเวลา ที่สร้าง จากใหม่สุดไปเก่าสุด ดังนั้นในขณะที่คุณกำลังเลื่อนจากหน้า 1 ไปยังหน้า 2 รายการตรวจสอบใหม่ๆ จะเข้ามาและดันข้อมูลทั้งหมดลงไป รายการที่คุณเคยเห็นแล้วจะปรากฏขึ้นมาใหม่อีกครั้ง และรายการที่คุณ ยังไม่เคยเห็นก็จะเลื่อนผ่านคุณไป สำหรับบัญชีที่มีการใช้งานสูง นี่ไม่ใช่กรณีที่เกิดขึ้นได้ยากเลย
เคอร์เซอร์จะชี้ไปที่ตำแหน่งของข้อมูลในชุดข้อมูลนั้นแทนที่จะชี้ไปที่หมายเลขลำดับของมัน ดังนั้น รายการตรวจสอบใหม่ที่เข้ามาในระหว่างที่คุณกำลังไล่ดูข้อมูลจึงไม่กระทบต่อการทำงาน
- การจัดเรียงคือ
created_at DESC, id DESCทั้งสองฟิลด์จะรวมอยู่ในเคอร์เซอร์ เนื่องจากcreated_atไม่ได้มีค่าที่ไม่ซ้ำกันเสมอไป — หากมีสองรายการตรวจสอบที่สร้างขึ้นในไมโครวินาที เดียวกัน อาจทำให้เกิดการวนซ้ำหรือข้ามข้อมูลได้; - เคอร์เซอร์เป็นแบบ ทึบแสง (opaque) เนื้อหาภายในเป็นรายละเอียดเชิงการใช้งานภายใน โปรดส่งค่ากลับมาตามที่ได้รับไปทุกประการ;
- ตัวกรองจะรวมอยู่ในเคอร์เซอร์ด้วย การเปลี่ยนตัวกรองในขณะที่นำเคอร์เซอร์กลับมาใช้ใหม่ จะส่งกลับรหัส
400ไม่ใช่การสลับไปยังชุดข้อมูลอื่นโดยไม่มีการแจ้งเตือน — มิฉะนั้นคุณอาจเข้าใจผิด ว่าตนเองได้อ่านชุดข้อมูลที่คุณไม่เคยอ่านจริงๆ; next_cursor: nullหมายถึงสิ้นสุดข้อมูลแล้ว ไม่มีการบอกจำนวนรวมทั้งหมด: การนับข้อมูล ทั้งชุดในทุกๆ หน้าต้องใช้ทรัพยากรสูงเกินกว่าประโยชน์ที่ได้รับ
การตอบกลับข้อผิดพลาด
RFC 9457, application/problem+json รายการรหัสทั้งหมดอยู่ที่ หน้า POST
| Code | HTTP | When |
|---|---|---|
4001 | 400 | ค่า limit อยู่นอกช่วง 1…200, network, provider หรือ status ไม่ถูกต้อง, ค่า from/to ไม่เป็นไปตาม RFC 3339, รูปแบบเคอร์เซอร์ไม่ถูกต้อง หรือเคอร์เซอร์ถูกออกให้สำหรับตัวกรองชุดอื่น |
4010 / 4011 | 401 | ไม่มีคีย์ API หรือคีย์หรือ IP ไม่ได้รับการยอมรับ |
{
"type": "https://doc.netts.io/api/v2/errors/validation-failed",
"title": "Request validation failed",
"status": 400,
"detail": "Cursor was issued for a different set of filters",
"instance": "/apiv2/screening/history",
"code": 4001
}การจำกัดอัตราการส่งคำขอ
ใช้งานร่วมกับทุกเส้นทาง AML อื่นๆ: 5 คำขอต่อวินาที, 150 คำขอต่อนาที หากใช้ limit=200 ประวัติทั้งหมดจำนวน 10,000 รายการจะใช้เพียง 50 คำขอ