ภาพรวม
API ภายในเครื่องเป็นฟีเจอร์ของ Prism Pro เหมาะสำหรับจัดการโปรไฟล์เป็นชุดด้วยสคริปต์ของคุณเอง: สร้างโปรไฟล์จากข้อมูลงานของคุณ เปิดตามลำดับ ตรวจสอบสถานะ และปิดเมื่อใช้งานเสร็จ API นี้จัดการเฉพาะตัวโปรไฟล์ ไม่อ่านคุกกี้ รหัสผ่าน ข้อมูลรับรองพร็อกซี หรือเนื้อหาหน้าเว็บ และไม่มีเอนด์พอยต์ดีบักสำหรับ Puppeteer / Playwright หากต้องการให้ AI อ่านหน้าเว็บ คลิก และกรอกแบบฟอร์ม ให้ใช้ MCP
| รายการ | คำอธิบาย |
|---|---|
| ที่อยู่ | http://127.0.0.1:<port> โดยพอร์ตจะถูกสุ่มใหม่ทุกครั้งที่เริ่ม API และรับเฉพาะคำขอจากคอมพิวเตอร์เครื่องนี้ |
| การยืนยันตัวตน | ส่วนหัวคำขอ Authorization: Bearer <token> โทเค็นจะแสดงเพียงครั้งเดียวเมื่อเริ่ม API และใช้ไม่ได้อีกเมื่อหยุด API |
| รูปแบบข้อมูล | JSON (UTF-8) ผลลัพธ์ของการตอบกลับที่สำเร็จจะอยู่ในฟิลด์ result |
| เนื้อหาคำขอ | เฉพาะเอนด์พอยต์สำหรับสร้างโปรไฟล์ที่รับเนื้อหาคำขอแบบ JSON ขนาดไม่เกิน 96 KiB |
| ขีดจำกัดอัตรา | สูงสุด 120 คำขอต่อ 60 วินาที (ใช้ร่วมกับ MCP) |
| การหมดเวลา | แต่ละคำขอรอผลได้สูงสุด 60 วินาที |
| รุ่นที่รองรับ | Prism Pro ทำงานเหมือนกันทั้งบน macOS และ Windows ส่วนเอนด์พอยต์สำหรับสร้างโปรไฟล์ต้องใช้เวอร์ชัน 0.3.22 ขึ้นไป |
เริ่มต้นอย่างรวดเร็ว
เริ่ม API ภายในเครื่อง
เปิด “API ระบบอัตโนมัติ” ในแถบด้านซ้ายของ Prism แล้วคลิก “เริ่ม API ในเครื่อง” ฟีเจอร์นี้ต้องใช้ Prism Pro
คัดลอกที่อยู่และโทเค็น
หน้าต่างจะแสดง “ที่อยู่ API” และ “โทเค็นการเข้าถึงเซสชัน” โทเค็นจะแสดงเพียงครั้งเดียวเมื่อเริ่มสำเร็จ จึงควรคัดลอกทันที หากต้องการโทเค็นใหม่ในภายหลัง ให้หยุดแล้วเริ่ม API ใหม่
ส่งคำขอแรก
ตั้งค่าตัวแปรสองตัวในเทอร์มินัล แล้วตรวจสอบสถานะบริการและแสดงรายการโปรไฟล์ หากการตอบกลับมี
"state": "running"แสดงว่าที่อยู่และโทเค็นใช้งานได้
PRISM_API='http://127.0.0.1:43123' # the API address shown in Prism
PRISM_TOKEN='<token>' # the token shown in Prism
curl -H "Authorization: Bearer $PRISM_TOKEN" "$PRISM_API/v1/status"
curl -H "Authorization: Bearer $PRISM_TOKEN" "$PRISM_API/v1/profiles"ใน Windows PowerShell คำสั่ง curl เป็นชื่อแทน (alias) ของคำสั่งอื่น ให้พิมพ์ curl.exe แทน หรือใช้ Invoke-RestMethod ที่มีมาในตัว PowerShell:
$api = 'http://127.0.0.1:43123'
$headers = @{ Authorization = 'Bearer <token>' }
(Invoke-RestMethod -Uri "$api/v1/profiles" -Headers $headers).result | Format-Table serialNumber, name, statusกฎของคำขอ
API รับเฉพาะคำขอที่ส่งจากสคริปต์หรือโปรแกรมบนคอมพิวเตอร์เครื่องนี้ คำขอที่ไม่เป็นไปตามกฎต่อไปนี้จะไม่ถูกดำเนินการ และจะได้รับข้อผิดพลาดตามตารางด้านล่าง:
| กฎ | HTTP | ข้อผิดพลาด |
|---|---|---|
ใช้ 127.0.0.1 ไม่ใช่ localhost: ส่วนหัวคำขอ Host ต้องตรงกับที่อยู่ API ทุกประการ | 403 | invalid_host |
ส่ง Authorization: Bearer <token> ไปกับทุกคำขอ | 401 | unauthorized |
| ไม่มีส่วนหัวคำขอ Origin ของเบราว์เซอร์ ดังนั้น JavaScript ในหน้าเว็บและส่วนขยายเบราว์เซอร์จึงเรียกใช้ API ไม่ได้ | 403 | browser_origin_not_allowed |
URL ไม่มีพารามิเตอร์ query (?…) | 400 | query_not_allowed |
| ใช้เฉพาะพาธและเมธอดที่ระบุไว้ด้านล่าง | 404 | not_found |
เฉพาะเอนด์พอยต์สำหรับสร้างโปรไฟล์ที่รับเนื้อหาคำขอ คำขออื่นอย่างการเปิดหรือปิดโปรไฟล์ห้ามส่งแม้แต่ {} | 400 | body_not_allowed |
เอนด์พอยต์สำหรับสร้างโปรไฟล์ใช้ Content-Type: application/json และเนื้อหาคำขอต้องเป็นออบเจ็กต์ JSON | 400 | json_body_required / invalid_json_body |
| เนื้อหาคำขอมีขนาดไม่เกิน 96 KiB | 413 | request_too_large |
| สูงสุด 120 คำขอต่อ 60 วินาที โดยนับรวมคำขอที่ล้มเหลวและคำขอ MCP ด้วย | 429 | rate_limited |
Prism ประมวลผลคำขอของ API ภายในเครื่องและ MCP ทีละรายการตามลำดับที่ได้รับ การเปิดโปรไฟล์ต้องทดสอบพร็อกซีและเปิดเบราว์เซอร์ ซึ่งมักใช้เวลาไม่กี่วินาที ระหว่างนั้นคำขอที่ตามมาจะต้องรอคิว โปรดรอให้คำขอก่อนหน้าได้รับผลลัพธ์ก่อน แล้วจึงส่งคำขอถัดไป
รายการเอนด์พอยต์
| เมธอด | พาธ | หน้าที่ |
|---|---|---|
| GET | /v1/status | ตรวจสอบว่าบริการพร้อมใช้งานหรือไม่ |
| GET | /v1/profiles | แสดงรายการโปรไฟล์ทั้งหมด (ไม่รวมถังขยะ) |
| GET | /v1/profiles/{id}/status | ดูสถานะของโปรไฟล์หนึ่งรายการ |
| POST | /v1/profiles/{id}/start | เปิดโปรไฟล์ |
| POST | /v1/profiles/{id}/close | ปิดโปรไฟล์ โดยเก็บข้อมูลไว้ |
| POST | /v1/profiles | สร้างโปรไฟล์หนึ่งรายการ (0.3.22 ขึ้นไป) |
| POST | /v1/profiles/batch | สร้างโปรไฟล์ครั้งละ 1–50 รายการ (0.3.22 ขึ้นไป) |
{id} คือ ID ของโปรไฟล์ ซึ่งได้จากผลลัพธ์ของ GET /v1/profiles การตอบกลับที่สำเร็จทั้งหมดจะใช้สถานะ HTTP 200 และนอกจาก GET /v1/status แล้ว ผลลัพธ์จะอยู่ในฟิลด์ result API ไม่มีเอนด์พอยต์สำหรับแก้ไขหรือลบโปรไฟล์
ออบเจ็กต์โปรไฟล์
รายการโปรไฟล์ สถานะโปรไฟล์ การเปิด และการปิด ล้วนส่งคืนออบเจ็กต์โปรไฟล์แบบเดียวกัน:
| ฟิลด์ | ประเภท | คำอธิบาย |
|---|---|---|
id | สตริง | ID ของโปรไฟล์ ใช้กับเอนด์พอยต์อื่น |
serialNumber | จำนวนเต็ม | หมายเลขโปรไฟล์ที่แสดงในแอป ไม่นำกลับมาใช้ซ้ำแม้ลบโปรไฟล์ไปแล้ว |
name | สตริง | ชื่อโปรไฟล์ |
group | สตริง | กลุ่ม เป็นสตริงว่างเมื่อโปรไฟล์ไม่มีกลุ่ม |
tags | อาร์เรย์ของสตริง | แท็ก |
status | สตริง | closed ปิดอยู่, starting กำลังเปิด, running กำลังทำงาน, stopping กำลังปิด, orphaned มีกระบวนการค้าง, error เกิดข้อผิดพลาด |
lastOpenedAt | สตริง | เวลาที่เปิดโปรไฟล์ครั้งล่าสุด (ISO 8601, UTC) โปรไฟล์ที่ไม่เคยเปิดจะไม่มีฟิลด์นี้ |
{
"result": {
"id": "8f0c2b9e-4d6a-4f51-9a7e-2f1c3d5b6a70",
"serialNumber": 12,
"name": "Shop A",
"group": "Project A",
"tags": ["automation"],
"status": "running",
"lastOpenedAt": "2026-10-02T08:30:00.000Z"
}
}API จะไม่ส่งคืนที่อยู่และข้อมูลรับรองของพร็อกซี การตั้งค่าลายนิ้วมือ คุกกี้ รหัสผ่าน ข้อมูลเว็บไซต์ หรือข้อมูลส่วนขยาย
สอบถาม เปิด และปิดโปรไฟล์
GET /v1/status
ส่งคืนสถานะบริการ ใช้เพื่อยืนยันว่าที่อยู่และโทเค็นใช้งานได้ นี่เป็นการตอบกลับเดียวที่ไม่ได้อยู่ใน result:
{
"state": "running",
"transport": "loopback",
"protocolVersion": 1
}GET /v1/profiles
ส่งคืนอาร์เรย์ของออบเจ็กต์โปรไฟล์ โดยโปรไฟล์ที่แก้ไขล่าสุดจะอยู่ก่อน โปรไฟล์ในถังขยะจะไม่รวมอยู่ในผลลัพธ์
GET /v1/profiles/{id}/status
ส่งคืนสถานะปัจจุบันของโปรไฟล์หนึ่งรายการ หากไม่มีโปรไฟล์นั้นหรือโปรไฟล์ถูกย้ายไปที่ถังขยะแล้ว จะส่งคืน 404 PROFILE_NOT_FOUND
POST /v1/profiles/{id}/start
- ทำงานเหมือนการคลิก “เปิด” ในแอป: ตรวจสอบเคอร์เนลและไลเซนส์สำหรับเคอร์เนล Pro ทดสอบพร็อกซีและการเปลี่ยนแปลงของ IP ขาออก แล้วจึงเปิดหน้าต่างเบราว์เซอร์ เมื่อสำเร็จจะส่งคืนออบเจ็กต์โปรไฟล์ที่มีสถานะ
running - หากโปรไฟล์กำลังทำงานอยู่แล้ว จะส่งคืนสถานะปัจจุบันทันทีโดยไม่เปิดซ้ำ
- Prism จะประมวลผลคำขอถัดไปหลังจากคำขอเปิดโปรไฟล์ส่งผลลัพธ์กลับมาแล้วเท่านั้น หากต้องการเปิดหลายโปรไฟล์ ให้เรียกเอนด์พอยต์นี้ทีละรายการ ส่วนจำนวนโปรไฟล์ที่ทำงานพร้อมกันได้ขึ้นอยู่กับหน่วยความจำและ CPU ของคอมพิวเตอร์
- หากไม่มีเคอร์เนลที่ต้องใช้ การทดสอบพร็อกซีไม่ผ่าน IP ขาออกของพร็อกซีเปลี่ยนไป (เมื่อนโยบายเป็น
block) หรือมีกระบวนการค้าง การเปิดจะล้มเหลวและส่งคืน 502 โดยerror.messageจะอธิบายสาเหตุ - กรณีที่แอปจะขอให้คุณยืนยันก่อนดำเนินการต่อ จะล้มเหลวทันทีเมื่อเรียกผ่าน API เช่น เมื่อแหล่งข้อมูลตำแหน่งของ IP ขาออกของพร็อกซีขัดแย้งกัน หากพบข้อผิดพลาดลักษณะนี้ ให้เปิดโปรไฟล์นั้นในแอป Prism หรือเปลี่ยนตัวตนเครือข่ายของโปรไฟล์เป็น
manual - โปรไฟล์ที่มีการเรียกเอนด์พอยต์เปิดโปรไฟล์ (รวมถึงโปรไฟล์ที่กำลังทำงานอยู่แล้วขณะเรียก) จะถูกบันทึกไว้ และจะถูกปิดไปด้วยเมื่อคลิก “หยุดฉุกเฉิน” ในหน้าต่าง “API ระบบอัตโนมัติ” ส่วน “หยุด API” รวมถึงปุ่มหยุดและปุ่มหยุดฉุกเฉินในหน้าต่าง MCP จะหยุดเฉพาะ API และโปรไฟล์เหล่านี้จะยังเปิดอยู่
POST /v1/profiles/{id}/close
ปิดหน้าต่างเบราว์เซอร์โดยเก็บข้อมูลโปรไฟล์ไว้ และส่งคืนออบเจ็กต์โปรไฟล์ที่มีสถานะ closed หากโปรไฟล์ไม่ได้ทำงานอยู่ ก็จะส่งคืน closed ทันที หากเบราว์เซอร์ยังไม่ปิดตัวลงภายใน 8 วินาทีและยังใช้งานไดเรกทอรีข้อมูลอยู่ สถานะที่ส่งคืนจะเป็น orphaned และการเรียกปิดอีกครั้งจะยุติกระบวนการค้างนั้น
PROFILE_ID='8f0c2b9e-4d6a-4f51-9a7e-2f1c3d5b6a70' # an id from GET /v1/profiles
curl -X POST -H "Authorization: Bearer $PRISM_TOKEN" "$PRISM_API/v1/profiles/$PROFILE_ID/start"
curl -X POST -H "Authorization: Bearer $PRISM_TOKEN" "$PRISM_API/v1/profiles/$PROFILE_ID/close"สร้างโปรไฟล์
เอนด์พอยต์สำหรับสร้างโปรไฟล์จะบันทึกโปรไฟล์ใหม่ในสถานะปิดอยู่ โดยไม่เปิดเบราว์เซอร์ ทุกฟิลด์ละเว้นได้: ฟิลด์ที่ละเว้นจะใช้ค่าเริ่มต้นเดียวกับ “โปรไฟล์ใหม่” ในแอป และแต่ละโปรไฟล์จะได้ค่า seed ลายนิ้วมือใหม่ ฟิลด์ที่ไม่รู้จักจะถูกปฏิเสธ
สร้างโปรไฟล์หนึ่งรายการ
curl -X POST "$PRISM_API/v1/profiles" \
-H "Authorization: Bearer $PRISM_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: shop-b-001" \
-d '{
"name": "Shop B",
"group": "Project A",
"tags": ["automation"],
"startUrls": ["https://example.com/"],
"proxy": { "protocol": "socks5", "host": "203.0.113.10", "port": 1080, "username": "user", "password": "pass" }
}'เมื่อสำเร็จจะส่งคืนโปรไฟล์ใหม่:
{
"result": {
"id": "3b1f7a52-9c4e-4d2b-8f60-1a2b3c4d5e6f",
"serialNumber": 13,
"name": "Shop B",
"group": "Project A",
"tags": ["automation"],
"status": "closed"
}
}สร้างเป็นชุด
เนื้อหาคำขอของ POST /v1/profiles/batch ใช้อาร์เรย์ profiles ครั้งละ 1–50 รายการ แต่ละรายการเขียนแบบเดียวกับการสร้างโปรไฟล์เดียว ยกเว้น requestKey ที่ต้องระบุไว้ที่ระดับบนสุดของเนื้อหาคำขอหรือในส่วนหัวคำขอ Prism จะตรวจสอบการกำหนดค่าทั้งหมดก่อน หากมีรายการใดไม่ถูกต้อง จะไม่สร้างโปรไฟล์ใดเลย และข้อความแสดงข้อผิดพลาดจะระบุว่าเป็นฟิลด์ใดของโปรไฟล์ใด (profiles[1] หมายถึงโปรไฟล์ที่สอง เพราะเริ่มนับจาก 0) ผลลัพธ์จะส่งคืนตามลำดับที่ส่งเข้าไป:
{
"requestKey": "shops-batch-001",
"profiles": [
{ "name": "Shop C", "group": "Project A" },
{ "name": "Shop D", "group": "Project A", "fingerprint": { "platform": "windows" } }
]
}{
"result": {
"profiles": [
{ "id": "…", "serialNumber": 14, "name": "Shop C", "group": "Project A", "tags": [], "status": "closed" },
{ "id": "…", "serialNumber": 15, "name": "Shop D", "group": "Project A", "tags": [], "status": "closed" }
],
"count": 2
}
}ฟิลด์ของโปรไฟล์
| ฟิลด์ | คำอธิบาย | หากละเว้น |
|---|---|---|
name | ชื่อ ยาว 1–60 อักขระ | “API” ตามด้วยหมายเลข เช่น API 8 โดยหมายเลขคือจำนวนโปรไฟล์ปัจจุบันบวก 1 และเพิ่มขึ้นตามลำดับเมื่อสร้างเป็นชุด ชื่อนี้อาจซ้ำกับชื่อที่มีอยู่แล้ว |
group | กลุ่ม ไม่เกิน 40 อักขระ | ไม่มีกลุ่ม |
tags | อาร์เรย์ของแท็ก สูงสุด 20 แท็ก แต่ละแท็กไม่เกิน 30 อักขระ | ไม่มี |
note | หมายเหตุ ไม่เกิน 500 อักขระ | ไม่มี |
color | สีกำกับ #RRGGBB | หมุนเวียนสีตามลำดับ |
startUrls | อาร์เรย์ของหน้าเริ่มต้น สูงสุด 50 หน้า รองรับเฉพาะ http / https ห้ามมีชื่อผู้ใช้หรือรหัสผ่าน และที่อยู่ที่ไม่ระบุโปรโตคอลจะใช้ https | เว็บไซต์ทางการของ Prism |
proxy | พร็อกซี ดูตารางด้านล่าง | เชื่อมต่อโดยตรง |
fingerprint | ตัวเลือกลายนิ้วมือ ดูตารางด้านล่าง | เหมือนการสร้างโปรไฟล์ใหม่ในแอป |
extensionIds | ID ภายในของ Prism สำหรับส่วนขยายที่ติดตั้งแล้ว สูงสุด 50 รายการ ในหน้าต่าง “ส่วนขยายเบราว์เซอร์” ชื่อโฟลเดอร์ในพาธส่วนขยาย …/<ID>/extension ก็คือ ID นี้ ซึ่งไม่ใช่ ID ส่วนขยายของ Chrome เว็บสโตร์ | ไม่เปิดใช้ส่วนขยาย |
kernelVersion | ปักหมุดเวอร์ชันเคอร์เนล ใช้ตัวเลขสี่ส่วน เช่น 144.0.7559.132 และต้องติดตั้งเวอร์ชันนั้นไว้แล้วเมื่อเปิดโปรไฟล์ | ใช้เคอร์เนลเริ่มต้น |
requestKey | คีย์คำขอสำหรับการลองใหม่อย่างปลอดภัย ดู “การลองใหม่อย่างปลอดภัย” | ไม่มี |
ฟิลด์พร็อกซี
| ฟิลด์ | คำอธิบาย |
|---|---|
protocol | ต้องระบุ: direct, http, https หรือ socks5 |
host | ชื่อโฮสต์หรือ IP ไม่รวมโปรโตคอล พอร์ต และข้อมูลบัญชี ต้องระบุเมื่อไม่ใช่ direct |
port | จำนวนเต็ม 1–65535 ต้องระบุเมื่อไม่ใช่ direct |
username、password | ไม่บังคับ รหัสผ่านจะเข้ารหัสและจัดเก็บบนคอมพิวเตอร์เครื่องนี้ และไม่มีเอนด์พอยต์ใดส่งคืนรหัสผ่าน |
ฟิลด์ลายนิ้วมือ
| ฟิลด์ | คำอธิบาย | หากละเว้น |
|---|---|---|
platform | macos หรือ windows | ตามเทมเพลตฮาร์ดแวร์ หากไม่ได้ระบุเทมเพลต จะใช้ระบบปฏิบัติการของคอมพิวเตอร์เครื่องนี้ |
hardwareProfileId | เทมเพลตฮาร์ดแวร์ ดูตารางด้านล่าง เวอร์ชันระบบปฏิบัติการ จำนวนคอร์ CPU และขนาดหน้าจอจะกำหนดโดยเทมเพลต | เทมเพลต “แยกตามค่า seed” ของระบบนั้น |
seed | ค่า seed ลายนิ้วมือ เป็นจำนวนเต็ม 0–4294967295 หากค่า seed และการตั้งค่าลายนิ้วมืออื่นๆ เหมือนกันทั้งหมด จะได้ลายนิ้วมือเดียวกัน | สุ่ม |
brand | Chrome หรือ Edge | Chrome |
brandVersion | หมายเลขเวอร์ชันเบราว์เซอร์ โดยทั่วไปให้เว้นว่างเพื่อใช้เวอร์ชันของเคอร์เนล หากระบุ เวอร์ชันหลักต้องตรงกับเคอร์เนลที่ใช้เปิดโปรไฟล์ มิฉะนั้นจะเปิดโปรไฟล์ไม่ได้ | ตามเคอร์เนล |
language | ภาษาอินเทอร์เฟซ เช่น en-US | ภาษาของระบบบนคอมพิวเตอร์เครื่องนี้ |
acceptLanguages | ส่วนหัวคำขอ Accept-Language | สร้างอัตโนมัติจากภาษา |
timezone | เขตเวลา IANA เช่น America/New_York | เขตเวลาของคอมพิวเตอร์เครื่องนี้ |
networkIdentityMode | proxy: ทดสอบ IP ขาออกของพร็อกซีก่อนเปิดโปรไฟล์ แล้วใช้เขตเวลาและตำแหน่งทางภูมิศาสตร์ตาม IP ขาออก รวมถึงภาษาด้วยหากระบุประเทศของ IP ขาออกได้ manual: ใช้ค่าที่กรอกไว้เสมอ | proxy |
proxyExitPolicy | เมื่อ IP ขาออกของพร็อกซีไม่ตรงกับการทดสอบครั้งก่อน: block จะทำให้การเปิดครั้งนี้ล้มเหลว และการเปิดอีกครั้งจะถือเป็นการยืนยัน ดังนั้นสคริปต์ไม่ควรลองใหม่โดยอัตโนมัติเมื่อพบข้อผิดพลาดนี้ warn จะแจ้งเตือนเท่านั้น | block |
webrtcPolicy | proxy_only ป้องกันการรั่วไหล, public_only อินเทอร์เฟซสาธารณะเท่านั้น, default ค่าเริ่มต้นของระบบ | proxy_only |
เทมเพลตฮาร์ดแวร์
| ID | ระบบ | คำอธิบาย |
|---|---|---|
macos-seeded-apple | macOS | Apple GPU แยกตามค่า seed เหมาะสำหรับหลายโปรไฟล์ และเป็นค่าเริ่มต้นของ macOS |
macos-host | macOS | ฮาร์ดแวร์ของเครื่องนี้ ใช้ได้เฉพาะบน Mac |
macos-m1 | macOS | Apple M1 · 8GB |
macos-m3-pro | macOS | Apple M3 Pro · 18GB |
macos-m4-pro | macOS | Apple M4 Pro · 24GB |
windows-seeded-nvidia | Windows | NVIDIA GPU แยกตามค่า seed เหมาะสำหรับหลายโปรไฟล์ และเป็นค่าเริ่มต้นของ Windows |
windows-host | Windows | ฮาร์ดแวร์ของเครื่องนี้ ใช้ได้เฉพาะบนคอมพิวเตอร์ Windows |
windows-10-rtx3060 | Windows | Windows 10 · RTX 3060 · 16GB |
windows-11-rtx4060 | Windows | Windows 11 · RTX 4060 · 16GB |
windows-11-rtx4070 | Windows | Windows 11 · RTX 4070 · 32GB |
หากเทมเพลตไม่ตรงกับ platform คำขอจะถูกปฏิเสธ ตำแหน่งและขนาดหน้าต่าง คุกกี้ และข้อมูลส่วนขยาย เป็นต้น ตั้งค่าผ่าน API ไม่ได้ แต่แก้ไขได้ในแอป Prism หลังสร้างโปรไฟล์แล้ว
การลองใหม่อย่างปลอดภัย
เมื่อเครือข่ายขาดหายหรือคำขอหมดเวลา คุณอาจไม่ทราบว่าโปรไฟล์ถูกสร้างแล้วหรือยัง ให้ระบุคีย์คำขอสำหรับการสร้างแต่ละครั้ง แล้วการลองใหม่จะไม่สร้างโปรไฟล์ซ้ำ:
- ระบุคีย์ความยาว 8–128 อักขระในส่วนหัวคำขอ
Idempotency-Keyหรือในฟิลด์requestKeyของเนื้อหาคำขอ โดยใช้ได้เฉพาะตัวอักษรภาษาอังกฤษ ตัวเลข และ. _ : -หากระบุทั้งสองที่ ค่าต้องตรงกัน - หากลองใหม่ภายใน 24 ชั่วโมงด้วยคีย์เดิมและเนื้อหาเดิม จะได้โปรไฟล์ที่สร้างไว้ในครั้งแรกกลับมา (HTTP 200) แม้ Prism จะรีสตาร์ทไปแล้วก็ตาม
- หากคีย์เดิมแต่เนื้อหาต่างกัน จะส่งคืน 409
IDEMPOTENCY_CONFLICTหากโปรไฟล์ที่สร้างในครั้งแรกถูกลบไปแล้ว (รวมถึงย้ายไปที่ถังขยะ) จะส่งคืน 409IDEMPOTENCY_RESULT_GONEและจะไม่สร้างใหม่โดยไม่แจ้ง หากต้องการสร้างใหม่ ให้ใช้คีย์ใหม่ - เมื่อเกิน 24 ชั่วโมงแล้ว คีย์เดิมจะนับเป็นคำขอใหม่
- ภายใน 24 ชั่วโมง ระบบจะเก็บคำขอที่มีคีย์ไว้ได้สูงสุด 1,000 รายการ โดยขีดจำกัดนี้ใช้ร่วมกับการสร้างโปรไฟล์ผ่าน MCP (การสร้างผ่าน MCP แต่ละครั้งจะนับเป็น 1 รายการ) เมื่อถึงขีดจำกัดจะส่งคืน 429
IDEMPOTENCY_CAPACITYจนกว่าบันทึกเก่าจะหมดอายุ - คีย์และเนื้อหาคำขอจะเก็บไว้บนคอมพิวเตอร์เครื่องนี้ในรูปค่าแฮชที่เข้ารหัสเท่านั้น จึงไม่มีการเก็บรหัสผ่านพร็อกซีเป็นข้อความธรรมดา
แนะนำให้สร้างคีย์จากข้อมูลงานของคุณ เช่น หมายเลขแถวในตารางหรือหมายเลขคำสั่งซื้อ: shop-b-001
การจัดการข้อผิดพลาด
เมื่อคำขอถูกปฏิเสธตั้งแต่ด่านแรก (ดู “กฎของคำขอ”) error จะเป็นสตริง เช่น {"error":"unauthorized"} แต่หาก Prism เกิดข้อผิดพลาดขณะประมวลผลคำขอ error จะเป็นออบเจ็กต์:
{
"error": {
"code": "INVALID_PROFILE_INPUT",
"message": "Invalid profile creation request; see details",
"retryable": false,
"details": [
{ "path": "profiles[1].proxy.port", "message": "Too big: expected number to be <=65535" }
]
}
}โปรแกรมควรตัดสินจากสถานะ HTTP และ code ส่วน message เป็นคำอธิบายสำหรับให้คนอ่าน บางส่วนเป็นภาษาจีน และถ้อยคำอาจเปลี่ยนไปในแต่ละเวอร์ชัน เมื่อ retryable เป็น true สามารถส่งคำขอเดิมซ้ำได้ในภายหลัง ส่วน details จะปรากฏเฉพาะเมื่อฟิลด์สำหรับสร้างโปรไฟล์ไม่ถูกต้อง มีได้สูงสุด 20 รายการ และจะไม่แสดงค่าที่คุณส่งมา
| HTTP | ข้อผิดพลาด | ความหมาย | สิ่งที่ควรทำ |
|---|---|---|---|
| 400 | INVALID_PROFILE_INPUT | ฟิลด์สำหรับสร้างโปรไฟล์ไม่ถูกต้อง โดย details จะระบุฟิลด์และสาเหตุ | แก้ไขฟิลด์ตาม details แล้วส่งใหม่ |
| 400 | query_not_allowed、body_not_allowed、json_body_required、invalid_json_body | คำขอไม่เป็นไปตามกฎ | แก้ไขตาม “กฎของคำขอ” |
| 401 | unauthorized | โทเค็นไม่ถูกต้องหรือใช้ไม่ได้แล้ว | เริ่ม API ใหม่ใน Prism แล้วใช้โทเค็นใหม่ |
| 403 | invalid_host、browser_origin_not_allowed | ไม่ยอมรับที่อยู่หรือแหล่งที่มาของคำขอ | ใช้ 127.0.0.1 และเรียกใช้จากสคริปต์ ไม่ใช่จากหน้าเว็บ |
| 403 | PRO_REQUIRED | ไลเซนส์ Pro หมดอายุหรือใช้ไม่ได้แล้ว หรือเคอร์เนลที่ปักหมุดต้องใช้ Pro | ต่ออายุหรือเปิดใช้งาน Pro อีกครั้ง |
| 404 | not_found | ไม่มีพาธหรือเมธอดนี้ | ตรวจสอบ “รายการเอนด์พอยต์” |
| 404 | PROFILE_NOT_FOUND | ไม่พบโปรไฟล์ หรือโปรไฟล์ถูกย้ายไปที่ถังขยะแล้ว | ดึงรายการโปรไฟล์ใหม่อีกครั้ง |
| 409 | IDEMPOTENCY_CONFLICT、IDEMPOTENCY_RESULT_GONE | คีย์คำขอขัดแย้งกัน หรือโปรไฟล์ที่เคยสร้างไว้ถูกลบแล้ว | ใช้คีย์คำขอใหม่ |
| 413 | request_too_large | เนื้อหาคำขอใหญ่เกิน 96 KiB | แบ่งเป็นหลายชุด |
| 429 | rate_limited、IDEMPOTENCY_CAPACITY | ส่งคำขอถี่เกินไป หรือมีคีย์คำขอครบ 1,000 รายการภายใน 24 ชั่วโมง | ลองใหม่ภายหลัง |
| 502 | MCP_REQUEST_FAILED เป็นต้น | การดำเนินการล้มเหลวด้วยสาเหตุอื่น เช่น ไม่มีเคอร์เนล การทดสอบพร็อกซีไม่ผ่าน หรือมีกระบวนการค้าง | ดำเนินการตาม message |
| 504 | BROKER_TIMEOUT | Prism ไม่ตอบกลับภายใน 60 วินาที และการดำเนินการอาจยังไม่เสร็จสิ้น | ตรวจสอบสถานะก่อน และลองคำขอสร้างโปรไฟล์ใหม่ด้วยคีย์เดิม |
MCP_REQUEST_FAILED เป็นชื่อข้อผิดพลาดทั่วไปที่ใช้ภายใน Prism และ API ภายในเครื่องก็ใช้ชื่อนี้ด้วย
ตัวอย่างโค้ด
แทนที่ที่อยู่และโทเค็นในตัวอย่างด้วยค่าที่แสดงในหน้าต่าง Prism ตัวอย่างจะสร้างโปรไฟล์ แล้วเปิดและปิดโปรไฟล์ที่เพิ่งสร้าง
Python
ต้องใช้ requests (pip install requests):
import requests
API = "http://127.0.0.1:43123" # the API address shown in Prism
TOKEN = "<token>" # the token shown in Prism
session = requests.Session()
session.headers["Authorization"] = f"Bearer {TOKEN}"
def call(method, path, **kwargs):
response = session.request(method, API + path, timeout=70, **kwargs)
body = response.json()
if not response.ok:
raise RuntimeError(f"{response.status_code}: {body['error']}")
return body.get("result", body)
created = call("POST", "/v1/profiles/batch",
headers={"Idempotency-Key": "shops-batch-002"},
json={"profiles": [{"name": "Shop C"}, {"name": "Shop D"}]})
for profile in created["profiles"]:
print("created", profile["serialNumber"], profile["id"])
profiles = call("GET", "/v1/profiles")
for profile in profiles:
print(profile["serialNumber"], profile["name"], profile["status"])
first = created["profiles"][0]["id"]
print(call("POST", f"/v1/profiles/{first}/start")["status"]) # running
print(call("POST", f"/v1/profiles/{first}/close")["status"]) # closedNode.js
Node.js 18 ขึ้นไปมี fetch ในตัว จึงไม่ต้องติดตั้งแพ็คเกจเพิ่ม:
// prism.mjs — run with: node prism.mjs (Node.js 18 or later)
const API = 'http://127.0.0.1:43123' // the API address shown in Prism
const TOKEN = '<token>' // the token shown in Prism
async function call(method, path, body, headers = {}) {
const response = await fetch(API + path, {
method,
headers: { Authorization: `Bearer ${TOKEN}`, ...(body ? { 'Content-Type': 'application/json' } : {}), ...headers },
body: body ? JSON.stringify(body) : undefined,
signal: AbortSignal.timeout(70_000),
})
const data = await response.json()
if (!response.ok) throw new Error(`${response.status}: ${JSON.stringify(data.error)}`)
return data.result ?? data
}
const profile = await call('POST', '/v1/profiles', {
name: 'Shop E',
fingerprint: { language: 'en-US', timezone: 'America/New_York', networkIdentityMode: 'manual' },
}, { 'Idempotency-Key': 'shop-e-001' })
console.log('created', profile.serialNumber, profile.id)
console.log((await call('POST', `/v1/profiles/${profile.id}/start`)).status) // running
console.log((await call('POST', `/v1/profiles/${profile.id}/close`)).status) // closedAPI ภายในเครื่องกับ MCP
API ภายในเครื่องมีไว้สำหรับสคริปต์ที่คุณเขียนเอง ส่วนไคลเอนต์ AI ควรเชื่อมต่อกับ Prism ผ่าน MCP ซึ่งใช้โทเค็นและสิทธิ์แยกต่างหาก AI จะมองเห็นเฉพาะโปรไฟล์ที่อนุญาตไว้ใน “AI ในเครื่อง · MCP” และเรียกใช้ API ภายในเครื่องไม่ได้ ทั้งสองส่วนใช้บริการภายในเครื่องตัวเดียวกันและขีดจำกัด 120 คำขอต่อ 60 วินาทีร่วมกัน เมื่อหยุด MCP หรือหยุด MCP ฉุกเฉิน API ภายในเครื่องก็จะหยุดด้วย
AI ก็สร้างโปรไฟล์ได้เช่นกันด้วยเครื่องมือ MCP prism_create_profile และ prism_create_profiles ซึ่งใช้ฟิลด์เดียวกับในหน้านี้ โดยคุณต้องเปิด “อนุญาตให้ AI สร้างโปรไฟล์” ใน “AI ในเครื่อง · MCP” ก่อน (ปิดไว้โดยค่าเริ่มต้น) ส่วน AI จะควบคุมโปรไฟล์ใหม่ได้หรือไม่ ขึ้นอยู่กับโหมดสิทธิ์ของโปรไฟล์ที่คุณตั้งไว้ คีย์คำขอของ MCP และ API ภายในเครื่องแยกจากกัน แต่ใช้ขีดจำกัดบันทึก 1,000 รายการภายใน 24 ชั่วโมงร่วมกัน
คำแนะนำด้านความปลอดภัย
- โทเค็นเปรียบเสมือนกุญแจสำหรับจัดการโปรไฟล์บนคอมพิวเตอร์เครื่องนี้ อย่าใส่ไว้ในรีโพสิทอรีโค้ด ล็อก หรือประวัติแชท หากสงสัยว่าโทเค็นรั่วไหล ให้หยุดแล้วเริ่ม API ใหม่ โทเค็นเก่าจะใช้ไม่ได้ทันที
- API รับฟังเฉพาะ 127.0.0.1 อุปกรณ์อื่นในเครือข่ายท้องถิ่นหรือบนอินเทอร์เน็ตจึงเข้าถึงโดยตรงไม่ได้ การตรวจสอบ Host มีไว้เพื่อกันเบราว์เซอร์และการใช้งานผิดพลาดโดยไม่ตั้งใจเป็นหลัก และไม่สามารถใช้แทนการควบคุมการเข้าถึงได้ อย่าเปิดให้เข้าถึงจากภายนอกด้วยการส่งต่อพอร์ต (port forwarding) หรือรีเวิร์สพร็อกซี
- โปรแกรมอื่นบนคอมพิวเตอร์เครื่องนี้ที่ได้โทเค็นไปก็เรียกใช้ API ได้เช่นกัน ควรเปิดใช้เฉพาะบนคอมพิวเตอร์ที่เชื่อถือได้ และคลิก “หยุด API” เมื่อใช้งานเสร็จ
- “หยุดฉุกเฉิน” ในหน้าต่าง “API ระบบอัตโนมัติ” จะหยุด API และปิดโปรไฟล์ที่เปิดผ่าน API ในรอบนี้ซึ่งยังทำงานอยู่
- ทุกคำขอที่ Prism ดำเนินการจะถูกบันทึกลงในบันทึกการตรวจสอบ (audit log) ในเครื่องที่
vault/logs/automation-audit.jsonl(ในไดเรกทอรีข้อมูลของ Prism) โดยบันทึกเวลา การดำเนินการ ผลลัพธ์ ID ของคำขอ ID ของโปรไฟล์ และสาเหตุที่ล้มเหลว แต่ไม่บันทึกโทเค็น เนื้อหาคำขอ หรือเนื้อหาหน้าเว็บ คำขอที่ถูกปฏิเสธตามกฎของคำขอและGET /v1/statusจะไม่ถูกบันทึก
คำถามที่พบบ่อย
- เรียกใช้ API จากหน้าเว็บหรือส่วนขยายเบราว์เซอร์ได้หรือไม่?
- ไม่ได้ คำขอที่ส่งจากเบราว์เซอร์จะมีส่วนหัว Origin ซึ่ง API จะปฏิเสธ ให้เรียกใช้จากเทอร์มินัล สคริปต์ หรือโปรแกรมในเครื่องแทน
- ทำไมใช้ localhost แล้วได้ 403?
- API กำหนดให้ส่วนหัว Host ต้องตรงกับ 127.0.0.1 และพอร์ตในที่อยู่ API ทุกประการ localhost จึงถูกปฏิเสธ ให้ใช้ 127.0.0.1 เป็นชื่อโฮสต์ในที่อยู่
- หน้าต่าง “API ระบบอัตโนมัติ” แสดงว่ากำลังทำงาน แต่ไม่มีโทเค็น ต้องทำอย่างไร?
- เมื่อเปิดใช้ MCP แล้ว Prism จะเริ่มบริการภายในเครื่องที่ API และ MCP ใช้ร่วมกันโดยอัตโนมัติ หน้าต่างจึงแสดงเฉพาะที่อยู่ โทเค็นจะแสดงเพียงครั้งเดียว คือเมื่อคลิก “เริ่ม API ในเครื่อง” สำเร็จ ให้คลิก “หยุด API” ก่อน แล้วคลิก “เริ่ม API ในเครื่อง” เพื่อรับโทเค็นใหม่ ระหว่างที่หยุดอยู่ การเชื่อมต่อ MCP จะถูกตัดไปด้วย
- หลังรีสตาร์ท Prism ยังใช้โทเค็นเดิมได้หรือไม่?
- ไม่ได้ ทุกครั้งที่เริ่ม API จะได้พอร์ตและโทเค็นใหม่ และเมื่อหยุด API หรือออกจาก Prism โทเค็นเก่าจะใช้ไม่ได้อีก
- ใช้ API แก้ไขหรือลบโปรไฟล์ได้หรือไม่?
- ไม่ได้ API สร้าง สอบถาม เปิด และปิดโปรไฟล์ได้ ส่วนการแก้ไขการกำหนดค่าและการลบ ให้ทำในแอป Prism
- เชื่อมต่อ Puppeteer, Playwright หรือ Selenium ได้หรือไม่?
- ไม่ได้ API ไม่มีพอร์ตดีบักหรือที่อยู่ WebDriver หากต้องการดำเนินการระดับหน้าเว็บ ให้ไคลเอนต์ AI ทำผ่าน MCP
- เปิดหลายโปรไฟล์ในครั้งเดียวได้หรือไม่?
- ได้ โดยเรียกเอนด์พอยต์เปิดโปรไฟล์ทีละรายการ Prism จะประมวลผลคำขอตามลำดับ และจะทำคำขอถัดไปเมื่อเปิดโปรไฟล์ก่อนหน้าเสร็จแล้ว ส่วนจำนวนโปรไฟล์ที่ทำงานพร้อมกันได้ขึ้นอยู่กับหน่วยความจำและ CPU ของคอมพิวเตอร์
- ใช้บน Windows ได้หรือไม่?
- ได้ Prism Pro ทั้งบน macOS และ Windows มี API ภายในเครื่องที่มีเอนด์พอยต์เหมือนกัน ใน Windows PowerShell ให้ใช้ curl.exe หรือ Invoke-RestMethod