การอนุญาตบัญชี
สร้างเซสชันการให้สิทธิ์ของผู้ให้บริการ
สร้างเซสชันการให้สิทธิ์ WhatsApp แบบสาธารณะสำหรับขั้น Passkey เพิ่มเติมใน QR flow ใช้ authorize_url ที่โฮสต์ไว้หรือ auth_payload.public_key เพื่อเรียก WebAuthn โดยตรง ห้ามบันทึก URL, challenge หรือ credential ลง log สาธารณะหรือแชร์ให้ผู้อื่น
https://api.unifyport.ai/v1/accounts/{account_id}/auth-sessionsช่องทางที่รองรับ
ก่อนเรียกใช้
ใช้ X-Api-Key ของ workspace เจ้าของทรัพยากรบนเซิร์ฟเวอร์ แทนค่าตัวอย่างทั้งหมดก่อนเรียกใช้
ที่มาของพารามิเตอร์
- account_id
- รับ data.id จากการสร้างหรือค้นหาบัญชี รหัสเป็นของ workspace ที่ระบุด้วย X-Api-Key ดูบัญชี
พารามิเตอร์คำขอ
ส่วนหัว
X-Api-KeyAPI key ของพื้นที่ทำงาน ระบบจะระบุพื้นที่ทำงานจากส่วนหัวนี้
พารามิเตอร์ใน path
account_idตัวระบุที่ใช้ใน route ของ authentication
เนื้อหาของคำขอ
จุดเชื่อมต่อนี้ไม่ต้องใช้เนื้อหา JSON
ทำความเข้าใจผลลัพธ์
อ่าน status/auth_status และ auth_payload ที่ส่งกลับจริงสำหรับคำสั่งยืนยันตัวตนนี้ หากต้องให้ผู้ใช้ดำเนินการ ให้ทำตามคู่มือช่องทาง authorized หมายถึงยืนยันตัวตนเสร็จ แต่ก่อนส่งข้อความต้องตรวจ runtime_status ด้วย
การตอบกลับ 201 Created
{
"request_id": "<REQUEST_ID>",
"data": {
"account_id": "acc_example",
"provider": "whatsapp",
"auth_mode": "qrcode",
"status": "passkey_required",
"auth_payload": {
"type": "passkey",
"public_key": {
"challenge": "<BASE64URL_CHALLENGE>"
}
},
"authorize_url": "https://auth.example.com/authorize/whatsapp/<SESSION_TOKEN>",
"expires_at": "2026-08-12T08:10:00Z",
"switchable": false,
"available_auth_modes": [
"qrcode"
]
}
}
เนื้อหาการตอบกลับ
account_idบัญชีของผู้ให้บริการที่การตอบกลับนี้อ้างถึง
providerรหัสช่องทาง ใช้ค่าที่ API ส่งกลับโดยไม่แก้ไขในการเรียกครั้งต่อไป ดูค่าที่ API นี้คืนได้จาก enum ด้านล่าง
enum: whatsapp
auth_modeโหมดการให้สิทธิ์ของเซสชัน Passkey เป็นสาขาเพิ่มเติมของ WhatsApp qrcode
statusสถานะ flow การให้สิทธิ์ปัจจุบัน เช่น pending_auth, awaiting_qr_scan, awaiting_code, pending, passkey_required, passkey_pending, passkey_confirmation, passkey_confirmation_sent, authorized หรือ failed
auth_payloadpayload มาตรฐานที่ต้องใช้ในขั้นปัจจุบัน QR ใช้ qr_code; ขั้นยืนยัน code ใช้ type=code; Passkey อาจคืน type=passkey และ public_key หรือ type=passkey_confirmation พร้อมข้อความให้ยืนยัน payload ของขั้นที่แยกกันจะไม่ปรากฏพร้อมกัน TikTok session อาจคืนคำขอให้สแกน QR หรือป้อนรหัสยืนยันเมื่อจำเป็นต้องโต้ตอบ HTTP 200 ไม่ได้หมายความว่าให้สิทธิ์สำเร็จ
authorize_urlURL ชั่วคราวที่โฮสต์ไว้สำหรับทำขั้น Passkey ห้ามบันทึกหรือแชร์ค่านี้
format: uri
expires_attimestamp แบบ RFC3339 ที่หลังจากนั้น auth_payload ปัจจุบันจะไม่ใช้ได้แล้ว
format: date-time
switchableระบุว่าผู้ใช้เปลี่ยนไปใช้โหมดการให้สิทธิ์อื่นที่พร้อมใช้งานได้หรือไม่
available_auth_modes[]โหมดการให้สิทธิ์ที่เปลี่ยนไปใช้ได้อย่างปลอดภัยจากเซสชันปัจจุบัน
การตอบกลับ
201201 Created
คำขอสำเร็จ ดูตัวอย่างเนื้อหาตอบกลับด้านบน
400Bad Request
เนื้อหาของคำขอ path หรือพารามิเตอร์ไม่ถูกต้อง
401Unauthorized
ส่วนหัว X-Api-Key หายไปหรือไม่ถูกต้อง
403Forbidden
ระบบระบุคำขอได้ แต่ไม่อนุญาตให้ดำเนินการนี้
404Not Found
ไม่พบทรัพยากรที่ร้องขอ โปรดตรวจสอบ error.code ร่วมกับการดำเนินการปัจจุบัน
409Conflict
การดำเนินการขัดแย้งกับบัญชีของผู้ให้บริการหรือทรัพยากรที่มีอยู่
500Internal Server Error
บริการพบข้อผิดพลาดที่ไม่คาดคิด
503Service Unavailable
บริการ backend ที่จำเป็นไม่พร้อมใช้งานชั่วคราว
เมื่อคำขอล้มเหลว
ตรวจ HTTP และ error.code/numeric_code เก็บ request_id แล้วแก้พารามิเตอร์ ยืนยันตัวตนต่อ หรือตรวจ runtime ตามสาเหตุ ตรวจผลครั้งก่อนก่อนส่งหรือเขียนซ้ำ อ้างอิงรหัสข้อผิดพลาด
อ่านสถานะ HTTP, error.code และ error.numeric_code ร่วมกับคำสั่งที่เรียก รหัสตัวเลขเป็นสตริง เก็บ request_id เพื่อตรวจปัญหา ค่านี้ไม่ใช่คีย์ป้องกันการทำซ้ำหรือรหัสงาน
- invalid_request · 10000 · 400
ตรวจ JSON และฟิลด์ที่จำเป็น
เงื่อนไข: ใช้เมื่อเนื้อหาคำขอไม่ว่าง แต่ Content-Type ไม่ใช่ application/json
วิธีจัดการและลองใหม่: แก้พารามิเตอร์ตามคำสั่งและเงื่อนไขช่องทางก่อนเรียกใหม่ การส่งคำขอผิดแบบเดิมซ้ำไม่ช่วยแก้ข้อผิดพลาด
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 400 · 10000
{ "request_id": "req_example", "error": { "code": "invalid_request", "numeric_code": "10000", "message": "Content-Type must be application/json" } }- invalid_target_workspace · 11003 · 400
เวิร์กสเปซเป้าหมายที่กำหนดทับว่างหรือรูปแบบไม่ถูกต้อง ให้ลบเฮดเดอร์กำหนดทับและใช้ API Key ของเวิร์กสเปซเป้าหมาย
เงื่อนไข: ใช้เมื่อคำขอมีเฮดเดอร์ X-Workspace-Id เพื่อระบุเวิร์กสเปซทับ
วิธีจัดการและลองใหม่: แก้พารามิเตอร์ตามคำสั่งและเงื่อนไขช่องทางก่อนเรียกใหม่ การส่งคำขอผิดแบบเดิมซ้ำไม่ช่วยแก้ข้อผิดพลาด
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 400 · 11003
{ "request_id": "req_example", "error": { "code": "invalid_target_workspace", "numeric_code": "11003", "message": "Invalid target workspace" } }- unsupported_provider_auth_mode · 20018 · 400
ใช้ auth_mode ที่ช่องทางรองรับ
วิธีจัดการและลองใหม่: เลือกช่องทางและคำสั่งที่เอกสารระบุว่ารองรับ การส่งซ้ำไม่เพิ่มความสามารถหรือเปิดสิทธิ์เบต้า
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 400 · 20018
{ "request_id": "req_example", "error": { "code": "unsupported_provider_auth_mode", "numeric_code": "20018", "message": "Auth mode not supported by this provider" } }- invalid_api_key · 11001 · 401
ตรวจว่า API Key ถูกต้องและเปิดใช้งานอยู่
วิธีจัดการและลองใหม่: เก็บ request_id และรหัสแบบมีโครงสร้าง ตรวจคำสั่งปัจจุบันก่อนเลือกการดำเนินการถัดไป
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 401 · 11001
{ "request_id": "req_example", "error": { "code": "invalid_api_key", "numeric_code": "11001", "message": "Invalid API key" } }- missing_api_key · 11000 · 401
เพิ่มส่วนหัว X-Api-Key
วิธีจัดการและลองใหม่: เก็บ request_id และรหัสแบบมีโครงสร้าง ตรวจคำสั่งปัจจุบันก่อนเลือกการดำเนินการถัดไป
ตัวอย่าง · 401 · 11000
{ "request_id": "req_xxx", "error": { "code": "missing_api_key", "numeric_code": "11000", "message": "Missing X-Api-Key header" } }- workspace_override_forbidden · 11002 · 403
คำขอพยายามระบุเวิร์กสเปซทับโดย API Key นี้ไม่มีสิทธิ์ ให้ลบเฮดเดอร์กำหนดทับและใช้ API Key ของเวิร์กสเปซเป้าหมาย
เงื่อนไข: ใช้เมื่อคำขอมีเฮดเดอร์ X-Workspace-Id เพื่อระบุเวิร์กสเปซทับ
วิธีจัดการและลองใหม่: เก็บ request_id และรหัสแบบมีโครงสร้าง ตรวจคำสั่งปัจจุบันก่อนเลือกการดำเนินการถัดไป
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 403 · 11002
{ "request_id": "req_example", "error": { "code": "workspace_override_forbidden", "numeric_code": "11002", "message": "Workspace override is not allowed" } }- target_workspace_not_found · 11004 · 404
ไม่พบเวิร์กสเปซที่กำหนดทับหรือใช้งานไม่ได้ ตรวจเจ้าของเวิร์กสเปซ ลบเฮดเดอร์กำหนดทับ และใช้ API Key ของเวิร์กสเปซเป้าหมาย การส่งซ้ำไม่เพิ่มสิทธิ์
เงื่อนไข: ใช้เมื่อคำขอมีเฮดเดอร์ X-Workspace-Id เพื่อระบุเวิร์กสเปซทับ
วิธีจัดการและลองใหม่: ตรวจรหัสเป้าหมาย เจ้าของทรัพยากร และเวิร์กสเปซปัจจุบัน อย่าถือว่าเป้าหมายที่ยืนยันแล้วว่าไม่มีหรือเข้าไม่ถึงเป็นความขัดข้องชั่วคราวที่ควรลองซ้ำอัตโนมัติ
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 404 · 11004
{ "request_id": "req_example", "error": { "code": "target_workspace_not_found", "numeric_code": "11004", "message": "Target workspace not found" } }- egress_configuration_pending · 20032 · 409
ยังยืนยันหรือโหลดการตั้งค่าเครือข่ายเริ่มต้นของแพลตฟอร์มไม่ได้ ไม่ได้หมายความว่าบัญชีออกจากระบบแล้ว
เงื่อนไข: การดำเนินการนี้ใช้ความจุเครือข่ายที่แพลตฟอร์มจัดสรรหรือการตั้งค่าเครือข่ายเริ่มต้นที่ผูกไว้กับบัญชี
วิธีจัดการและลองใหม่: เก็บ request_id และตรวจสอบบัญชีหรือผลการสร้างก่อนเขียนซ้ำ รอให้ความจุหรือการตั้งค่ากลับมาพร้อม หรือแจ้งฝ่ายสนับสนุน อย่าสร้างบัญชี เปลี่ยนเครือข่าย หรือเริ่มบัญชีใหม่ซ้ำโดยอัตโนมัติ
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 409 · 20032
{ "request_id": "req_example", "error": { "code": "egress_configuration_pending", "numeric_code": "20032", "message": "Account network configuration is pending verification" } }- provider_not_ready · 30009 · 409
การเชื่อมต่อยังไม่พร้อม ตรวจการอนุญาตและ runtime_status ก่อนลองใหม่
วิธีจัดการและลองใหม่: ตรวจสถานะยืนยันตัวตนและ runtime แล้วเลือกรีเฟรช เริ่ม หรือเชื่อมต่อใหม่ตามเป้าหมายและความสามารถของช่องทาง ปัญหาการเชื่อมต่อเพียงอย่างเดียวไม่ได้ยืนยันว่าออกจากระบบ ตรวจให้เป็น running ก่อนทำงานที่ต้องใช้การเชื่อมต่อ
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 409 · 30009
{ "request_id": "req_example", "error": { "code": "provider_not_ready", "numeric_code": "30009", "message": "Provider client is not ready" } }- run_auth_action_failed · 20010 · 500
ดำเนินคำสั่งยืนยันตัวตน: คำสั่งยืนยันตัวตนล้มเหลว ตรวจขั้นตอนเดิมก่อน อย่าสรุปว่าต้องเริ่มยืนยันใหม่
วิธีจัดการและลองใหม่: ตรวจขั้นตอนยืนยันตัวตนปัจจุบันว่าต้องให้ผู้ใช้ทำอะไรหรือไม่ อย่าเริ่มยืนยันใหม่เพียงเพราะคำขอนี้ล้มเหลว และอย่าส่งซ้ำไปยังเซสชันที่หมดอายุหรือจบแล้ว
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 500 · 20010
{ "request_id": "req_example", "error": { "code": "run_auth_action_failed", "numeric_code": "20010", "message": "Failed to run auth action" } }- run_auth_action_failed · 20020 · 500
ตรวจ account_id และใช้ X-Api-Key ของเวิร์กสเปซเจ้าของบัญชี คีย์ปัจจุบันไม่สามารถเข้าถึงบัญชีที่ไม่พบในเวิร์กสเปซนี้
เงื่อนไข: ใช้เมื่อไม่พบบัญชี โดยคงสถานะ HTTP และ code ของคำสั่งเดิม และใช้ numeric_code ระบุว่าบัญชีไม่มีอยู่
วิธีจัดการและลองใหม่: ตรวจรหัสเป้าหมาย เจ้าของทรัพยากร และเวิร์กสเปซปัจจุบัน อย่าถือว่าเป้าหมายที่ยืนยันแล้วว่าไม่มีหรือเข้าไม่ถึงเป็นความขัดข้องชั่วคราวที่ควรลองซ้ำอัตโนมัติ
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 500 · 20020
{ "request_id": "req_example", "error": { "code": "run_auth_action_failed", "numeric_code": "20020", "message": "Account not found" } }- internal_auth_not_configured · 11006 · 503
บริการเซสชันยืนยันตัวตนที่คำขอนี้ต้องใช้ยังไม่พร้อมหรือยังไม่ได้ตั้งค่า ติดต่อผู้ให้บริการเพื่อตรวจบริการเซสชันยืนยันตัวตน
วิธีจัดการและลองใหม่: เก็บ request_id และรหัสแบบมีโครงสร้าง ตรวจคำสั่งปัจจุบันก่อนเลือกการดำเนินการถัดไป
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 503 · 11006
{ "request_id": "req_example", "error": { "code": "internal_auth_not_configured", "numeric_code": "11006", "message": "Internal endpoint authentication is not configured" } }