Tham chiếu API

Ủy quyền tài khoản

Import session xác thực

Nhập URL phiên hoặc thông tin xác thực riêng của kênh để bắt đầu xác thực. Tài khoản TikTok session dùng tiktok.cookies. Khi pending, kiểm tra trạng thái xác thực và vận hành cho đến authorized và running. Chỉ HTTP 200 chưa có nghĩa là xác thực hoàn tất.

POSThttps://api.unifyport.ai/v1/accounts/{account_id}/auth/session

Kênh được hỗ trợ

TelegramXFacebookTikTokWhatsApp Protocol

Trước khi gọi

Dùng X-Api-Key của workspace sở hữu tài nguyên trên máy chủ. Thay mọi giá trị mẫu trước khi chạy.

Chuẩn bị dữ liệu phiên theo kênh: Telegram và X dùng URL hoặc tham chiếu phiên hiện có; chỉ WhatsApp Protocol dùng đối tượng thông tin whatsapp-protocol. Làm theo hướng dẫn của kênh và không ghi dữ liệu phiên hoặc khóa vào nhật ký.

Nguồn tham số
account_id
Lấy data.id từ phản hồi tạo hoặc truy vấn tài khoản. ID thuộc workspace của X-Api-Key. Lấy tài khoản

Tham số yêu cầu

Tiêu đề

X-Api-Key
stringbắt buộc

API key của không gian làm việc. Không gian làm việc được xác định từ tiêu đề này.

Content-Type
stringbắt buộc

Dùng application/json khi gửi nội dung yêu cầu JSON.

Tham số đường dẫn

account_id
stringbắt buộc

Định danh dùng cho route authentication.

Nội dung yêu cầu

session_url
string

URL hoặc tham chiếu tới artifact session đã có của nhà cung cấp. Facebook yêu cầu session_url trỏ tới JSON có mảng cookies chứa c_user, xs và datr. Nhập thành công chưa xác nhận runtime sẵn sàng.

format: uri

whatsapp-protocol
object

Thông tin xác thực để nhập phiên WhatsApp Protocol, chỉ được gửi tới /v1/accounts/{account_id}/auth/session trong đối tượng lồng này, không qua provider_data. Khi cung cấp đối tượng này, bắt buộc có phone, static_pub_key, static_pri_key, identity_pub_key và identity_pri_key. Phản hồi không trả lại khóa giao thức hay thông tin xác thực nhạy cảm khác. phone dùng để kiểm tra tính nhất quán danh tính; khóa công khai và khóa riêng của giao thức chỉ dùng để khởi động phía thượng nguồn. Nền tảng chèn edge_routing cố định; bên gọi không được gửi trường này.

phone
string

Khi cung cấp whatsapp-protocol để nhập phiên, phone là chuỗi bắt buộc, không rỗng, dùng để kiểm tra tính nhất quán của danh tính. Đầu vào có định dạng được phép chứa khoảng trắng, gạch nối, dấu ngoặc hoặc dấu cộng; máy chủ chuẩn hóa thành chuỗi số dương.

minLength: 1

platform
integer

Giá trị nền tảng để nhập phiên WhatsApp Protocol (int32).

format: int32

app_version
string

Phiên bản ứng dụng để nhập phiên WhatsApp Protocol.

server_address
string

Địa chỉ máy chủ provider để nhập phiên WhatsApp Protocol.

fallback_server_addresses[]
string[]

Danh sách địa chỉ máy chủ dự phòng để nhập phiên WhatsApp Protocol.

country
string

Mã quốc gia để nhập phiên WhatsApp Protocol.

device
integer

Giá trị thiết bị để nhập phiên WhatsApp Protocol (uint32).

format: uint32

static_pub_key
string

Khóa công khai của giao thức; chỉ ghi.

minLength: 1

static_pri_key
string

Khóa riêng của giao thức; chỉ ghi.

minLength: 1

identity_pub_key
string

Khóa công khai danh tính; chỉ ghi.

minLength: 1

identity_pri_key
string

Khóa riêng danh tính; chỉ ghi.

minLength: 1

hash
string

Trường tương thích đã lỗi thời; giá trị hiện bị bỏ qua và không lưu. Nên bỏ trường này.

peer_kem_public
string

Khóa công khai KEM của phía đối tác; chỉ ghi.

auth_hex_data
string

Dữ liệu xác thực hiện tại ở dạng thập lục phân; chỉ ghi.

authhexdata
string

Trường dữ liệu xác thực cũ ở dạng thập lục phân, đã lỗi thời; chỉ ghi.

pq_handshake_mode
string

Chế độ bắt tay PQ để nhập phiên WhatsApp Protocol.

use_xxkem_handshake
boolean

Có dùng bắt tay XXKEM để nhập phiên WhatsApp Protocol hay không.

tiktok
object

Chỉ dùng cho tài khoản TikTok có auth_mode=session. Khi được gửi, tiktok phải là trường cấp cao nhất duy nhất; bên trong chỉ chấp nhận cookies và user_id tùy chọn. Toàn bộ JSON nhập không được vượt quá 65536 byte. Vượt qua kiểm tra định dạng không có nghĩa thông tin xác thực hợp lệ hay ủy quyền thành công. Khi cần quét QR hoặc mã xác minh, hệ thống trả về trạng thái chờ tương ứng; chế độ session hiện chưa hỗ trợ tiếp tục tương tác cho các bước này. Không bảo đảm việc nhập lại sẽ ghi đè phiên đăng nhập hiện có hoặc thay nóng Cookie.

user_id
string

Trường tương thích tùy chọn, không dùng để xác minh hay liên kết danh tính; danh tính thực tế do kết quả ủy quyền quyết định.

cookies[]
object[]

Bắt buộc khi gửi tiktok: mảng chỉ ghi gồm 1–128 Cookie. Không cho phép trùng cặp tên/miền; các thuộc tính Cookie xuất khác được giữ lại. Tính hợp lệ được xác định qua kết quả đăng nhập.

minItems: 1 · maxItems: 128

name
string

Tên không rỗng, bắt buộc cho mỗi TikTok Cookie.

minLength: 1

value
string

Giá trị không rỗng, bắt buộc cho mỗi TikTok Cookie; chỉ ghi.

minLength: 1

domain
string

Miền không rỗng, bắt buộc cho mỗi TikTok Cookie; giữ nguyên giá trị đã xuất.

minLength: 1

path
string

Đường dẫn bắt buộc cho mỗi TikTok Cookie; phải bắt đầu bằng /.

pattern: ^/

expires
number

Dấu thời gian Unix theo giây đã xuất hoặc dấu chỉ Cookie phiên, tùy chọn; không kiểm tra hết hạn khi nhập.

secure
boolean

Cờ Secure đã xuất của TikTok Cookie, tùy chọn.

http_only
boolean

Cờ HttpOnly đã xuất của TikTok Cookie, tùy chọn.

same_site
string

Giá trị SameSite đã xuất của TikTok Cookie, tùy chọn.

Hiểu kết quả

Đọc kết quả xác thực rồi kiểm tra runtime_status. Nhập phiên và kết nối trực tuyến là hai bước khác nhau.

Phản hồi pending · TikTok session

{
  "request_id": "<REQUEST_ID>",
  "data": {
    "account_id": "acc_example",
    "provider": "tiktok",
    "action": "import_session",
    "status": "pending",
    "runtime_status": "starting"
  }
}

Phản hồi authorized

{
  "request_id": "<REQUEST_ID>",
  "data": {
    "account_id": "acc_example",
    "status": "authorized"
  }
}

Nội dung phản hồi

account_id
string

Tài khoản nhà cung cấp mà phản hồi này tham chiếu tới.

status
string

Trạng thái hiện tại của luồng ủy quyền, ví dụ pending_auth, awaiting_qr_scan, awaiting_code, pending, passkey_required, passkey_pending, passkey_confirmation, passkey_confirmation_sent, authorized hoặc failed.

Phản hồi

200

200 OK

Yêu cầu thành công. Xem ví dụ nội dung phản hồi.

400

Bad Request

Body, đường dẫn hoặc tham số yêu cầu không hợp lệ.

401

Unauthorized

Header X-Api-Key thiếu hoặc không hợp lệ.

403

Forbidden

Yêu cầu đã được nhận diện nhưng thao tác không được phép.

404

Not Found

Không tìm thấy tài nguyên được yêu cầu. Kiểm tra error.code cùng với thao tác hiện tại.

409

Conflict

Thao tác đang yêu cầu xung đột với tài khoản hoặc tài nguyên nhà cung cấp đã có.

500

Internal Server Error

Dịch vụ gặp lỗi không mong muốn.

502

Bad Gateway

Adapter hoặc upstream provider không thể hoàn tất thao tác.

Khi yêu cầu thất bại

Kiểm tra HTTP và error.code/numeric_code, giữ request_id. Sửa tham số, tiếp tục xác thực hoặc kiểm tra runtime tùy nguyên nhân. Xác nhận kết quả cũ trước khi thử lại thao tác gửi hoặc ghi. Tham chiếu mã lỗi

Đọc trạng thái HTTP, error.code và error.numeric_code theo thao tác đang gọi. Mã số có kiểu chuỗi. Giữ request_id để chẩn đoán; đây không phải khóa chống lặp hay mã tác vụ.

invalid_request · 10000 · 400

Kiểm tra JSON và các trường bắt buộc.

Xử lý và thử lại: Sửa tham số theo thao tác và điều kiện của kênh rồi mới gọi lại. Lặp lại yêu cầu sai y nguyên không khắc phục lỗi.

JSON minh họa; message thay đổi theo nguyên nhân thực tế · 400 · 10000
{
  "request_id": "req_example",
  "error": {
    "code": "invalid_request",
    "numeric_code": "10000",
    "message": "Invalid request parameters"
  }
}
invalid_target_workspace · 11003 · 400

Đích ghi đè workspace trống hoặc sai định dạng. Bỏ tiêu đề ghi đè và dùng API Key thuộc workspace đích.

Điều kiện: Áp dụng khi yêu cầu có tiêu đề X-Workspace-Id để ghi đè workspace.

Xử lý và thử lại: Sửa tham số theo thao tác và điều kiện của kênh rồi mới gọi lại. Lặp lại yêu cầu sai y nguyên không khắc phục lỗi.

JSON minh họa; message thay đổi theo nguyên nhân thực tế · 400 · 11003
{
  "request_id": "req_example",
  "error": {
    "code": "invalid_target_workspace",
    "numeric_code": "11003",
    "message": "Invalid target workspace"
  }
}
provider_invalid_request · 30001 · 400

Kiểm tra các trường và định dạng riêng của kênh.

Xử lý và thử lại: Sửa tham số theo thao tác và điều kiện của kênh rồi mới gọi lại. Lặp lại yêu cầu sai y nguyên không khắc phục lỗi.

JSON minh họa; message thay đổi theo nguyên nhân thực tế · 400 · 30001
{
  "request_id": "req_example",
  "error": {
    "code": "provider_invalid_request",
    "numeric_code": "30001",
    "message": "Provider rejected the request"
  }
}
unsupported_action · 30005 · 400

Thao tác tài khoản không được nhận diện; dùng thao tác trong tài liệu.

Xử lý và thử lại: Chọn kênh và thao tác được tài liệu ghi là hỗ trợ. Lặp yêu cầu không bổ sung tính năng hay cấp quyền beta.

JSON minh họa; message thay đổi theo nguyên nhân thực tế · 400 · 30005
{
  "request_id": "req_example",
  "error": {
    "code": "unsupported_action",
    "numeric_code": "30005",
    "message": "Action not supported"
  }
}
invalid_api_key · 11001 · 401

Kiểm tra API Key có đúng và được bật hay không.

Xử lý và thử lại: Giữ request_id và mã lỗi có cấu trúc; kiểm tra thao tác hiện tại trước khi chọn hành động tiếp theo.

JSON minh họa; message thay đổi theo nguyên nhân thực tế · 401 · 11001
{
  "request_id": "req_example",
  "error": {
    "code": "invalid_api_key",
    "numeric_code": "11001",
    "message": "Invalid API key"
  }
}
missing_api_key · 11000 · 401

Thêm tiêu đề X-Api-Key.

Xử lý và thử lại: Giữ request_id và mã lỗi có cấu trúc; kiểm tra thao tác hiện tại trước khi chọn hành động tiếp theo.

Ví dụ · 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

Yêu cầu cố ghi đè workspace mà API Key không được phép dùng. Bỏ tiêu đề ghi đè và dùng API Key thuộc workspace đích.

Điều kiện: Áp dụng khi yêu cầu có tiêu đề X-Workspace-Id để ghi đè workspace.

Xử lý và thử lại: Giữ request_id và mã lỗi có cấu trúc; kiểm tra thao tác hiện tại trước khi chọn hành động tiếp theo.

JSON minh họa; message thay đổi theo nguyên nhân thực tế · 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

Không tìm thấy workspace được ghi đè hoặc workspace không khả dụng. Kiểm tra chủ sở hữu, bỏ tiêu đề ghi đè và dùng API Key của workspace đích; gọi lặp không cấp thêm quyền.

Điều kiện: Áp dụng khi yêu cầu có tiêu đề X-Workspace-Id để ghi đè workspace.

Xử lý và thử lại: Kiểm tra mã đích, chủ sở hữu tài nguyên và workspace hiện tại. Không coi đích đã xác nhận thiếu hoặc không truy cập được là lỗi dịch vụ tạm thời để tự thử lại.

JSON minh họa; message thay đổi theo nguyên nhân thực tế · 404 · 11004
{
  "request_id": "req_example",
  "error": {
    "code": "target_workspace_not_found",
    "numeric_code": "11004",
    "message": "Target workspace not found"
  }
}
account_already_authorized · 20016 · 409

Tài khoản đã xác thực xong nên thao tác từ chối xác thực trùng. Làm mới trạng thái và dùng lại kết quả đã hoàn tất; không lặp xác thực hoặc hủy theo vòng.

Xử lý và thử lại: Giữ request_id và mã lỗi có cấu trúc; kiểm tra thao tác hiện tại trước khi chọn hành động tiếp theo.

JSON minh họa; message thay đổi theo nguyên nhân thực tế · 409 · 20016
{
  "request_id": "req_example",
  "error": {
    "code": "account_already_authorized",
    "numeric_code": "20016",
    "message": "Account is already authorized; re-authentication is not required"
  }
}
account_binding_not_found · 30006 · 409

Tài khoản chưa gắn với kết nối kênh hoạt động; kiểm tra trạng thái.

Xử lý và thử lại: Kiểm tra trạng thái xác thực và runtime rồi chọn làm mới, khởi động hoặc kết nối lại theo mục tiêu và khả năng kênh. Lỗi kết nối không tự chứng minh đã đăng xuất. Xác nhận running trước thao tác nghiệp vụ cần kết nối.

JSON minh họa; message thay đổi theo nguyên nhân thực tế · 409 · 30006
{
  "request_id": "req_example",
  "error": {
    "code": "account_binding_not_found",
    "numeric_code": "30006",
    "message": "Account is not bound to an available server"
  }
}
duplicate_provider_account · 20015 · 409

Danh tính kênh này đã gắn với tài khoản khác trong không gian làm việc.

Xử lý và thử lại: Giữ request_id và mã lỗi có cấu trúc; kiểm tra thao tác hiện tại trước khi chọn hành động tiếp theo.

JSON minh họa; message thay đổi theo nguyên nhân thực tế · 409 · 20015
{
  "request_id": "req_example",
  "error": {
    "code": "duplicate_provider_account",
    "numeric_code": "20015",
    "message": "A provider account with the same identity already exists in this workspace"
  }
}
egress_configuration_pending · 20032 · 409

Hiện chưa thể xác nhận hoặc tải cấu hình mạng mặc định của nền tảng. Điều này không có nghĩa là tài khoản đã đăng xuất.

Điều kiện: Thao tác này dùng dung lượng mạng do nền tảng phân bổ hoặc cấu hình mạng mặc định cố định của tài khoản.

Xử lý và thử lại: Lưu request_id và kiểm tra tài khoản hoặc kết quả tạo trước khi ghi lại. Chờ dung lượng hoặc cấu hình phục hồi, hoặc liên hệ hỗ trợ. Không tự động tạo tài khoản, đổi mạng hay khởi động lại liên tục.

JSON minh họa; message thay đổi theo nguyên nhân thực tế · 409 · 20032
{
  "request_id": "req_example",
  "error": {
    "code": "egress_configuration_pending",
    "numeric_code": "20032",
    "message": "Account network configuration is pending verification"
  }
}
provider_account_mismatch · 20017 · 409

Danh tính kênh trong yêu cầu không khớp với liên kết tài khoản.

Xử lý và thử lại: Giữ request_id và mã lỗi có cấu trúc; kiểm tra thao tác hiện tại trước khi chọn hành động tiếp theo.

JSON minh họa; message thay đổi theo nguyên nhân thực tế · 409 · 20017
{
  "request_id": "req_example",
  "error": {
    "code": "provider_account_mismatch",
    "numeric_code": "20017",
    "message": "Authenticated provider account does not match the bound account; re-scan with the original account"
  }
}
provider_not_ready · 30009 · 409

Kết nối chưa sẵn sàng. Kiểm tra ủy quyền và runtime_status trước khi thử lại.

Xử lý và thử lại: Kiểm tra trạng thái xác thực và runtime rồi chọn làm mới, khởi động hoặc kết nối lại theo mục tiêu và khả năng kênh. Lỗi kết nối không tự chứng minh đã đăng xuất. Xác nhận running trước thao tác nghiệp vụ cần kết nối.

JSON minh họa; message thay đổi theo nguyên nhân thực tế · 409 · 30009
{
  "request_id": "req_example",
  "error": {
    "code": "provider_not_ready",
    "numeric_code": "30009",
    "message": "Provider client is not ready"
  }
}
wallet_account_creation_in_progress · 20030 · 409

Một tài khoản thanh toán bằng ví đang được tạo trong không gian làm việc này, hoặc tài khoản đích chưa khởi tạo xong.

Xử lý và thử lại: Khi yêu cầu tạo tài khoản bị xung đột, hãy chờ theo Retry-After và dùng lại Idempotency-Key nếu đã gửi khóa đó trong yêu cầu ban đầu. Nếu yêu cầu xác thực trả về lỗi này, dùng billing.operation_id trong phản hồi tạo tài khoản để gọi GET /v1/account-operations/{operation_id}. Chờ data.state=SUCCEEDED rồi thử lại thao tác ban đầu trên chính tài khoản đó. billing.state=ACTIVE không có nghĩa là đã khởi tạo xong; không tạo tài khoản khác.

JSON minh họa; message thay đổi theo nguyên nhân thực tế · 409 · 20030
{
  "request_id": "req_example",
  "error": {
    "code": "wallet_account_creation_in_progress",
    "numeric_code": "20030",
    "message": "Account creation is in progress; please wait"
  }
}
run_auth_action_failed · 20010 · 500

Chạy thao tác xác thực: thao tác xác thực lỗi; kiểm tra luồng hiện có, không tự cho rằng phải xác thực lại.

Xử lý và thử lại: Truy vấn luồng xác thực hiện tại và xem có cần người dùng thao tác không. Không bắt đầu xác thực mới chỉ vì yêu cầu này lỗi; không gửi lại vào phiên hết hạn hoặc đã kết thúc.

JSON minh họa; message thay đổi theo nguyên nhân thực tế · 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

Kiểm tra account_id và dùng X-Api-Key của không gian làm việc sở hữu tài khoản. Khóa hiện tại không truy cập được tài khoản không tìm thấy trong không gian này.

Điều kiện: Áp dụng khi không tìm thấy tài khoản; giữ trạng thái HTTP và code của thao tác, dùng numeric_code để làm rõ tài khoản bị thiếu.

Xử lý và thử lại: Kiểm tra mã đích, chủ sở hữu tài nguyên và workspace hiện tại. Không coi đích đã xác nhận thiếu hoặc không truy cập được là lỗi dịch vụ tạm thời để tự thử lại.

JSON minh họa; message thay đổi theo nguyên nhân thực tế · 500 · 20020
{
  "request_id": "req_example",
  "error": {
    "code": "run_auth_action_failed",
    "numeric_code": "20020",
    "message": "Account not found"
  }
}
provider_adapter_not_found · 30004 · 502

Dịch vụ kênh chưa khả dụng. Kiểm tra trạng thái hoặc thử sau; xác nhận kết quả trước khi thử ghi lại.

Xử lý và thử lại: Truy vấn luồng xác thực hiện tại và xem có cần người dùng thao tác không. Không bắt đầu xác thực mới chỉ vì yêu cầu này lỗi; không gửi lại vào phiên hết hạn hoặc đã kết thúc.

JSON minh họa; message thay đổi theo nguyên nhân thực tế · 502 · 30004
{
  "request_id": "req_example",
  "error": {
    "code": "provider_adapter_not_found",
    "numeric_code": "30004",
    "message": "Provider adapter unavailable"
  }
}
provider_unavailable · 30002 · 502

Dịch vụ kênh chưa khả dụng. Kiểm tra trạng thái hoặc thử sau; xác nhận kết quả trước khi thử ghi lại.

Xử lý và thử lại: Truy vấn luồng xác thực hiện tại và xem có cần người dùng thao tác không. Không bắt đầu xác thực mới chỉ vì yêu cầu này lỗi; không gửi lại vào phiên hết hạn hoặc đã kết thúc.

Ví dụ · 502 · 30002
{
  "request_id": "req_example_provider_unavailable",
  "error": {
    "code": "provider_unavailable",
    "numeric_code": "30002",
    "message": "Provider service unavailable"
  }
}
provider_unavailable · 30020 · 502

Yêu cầu đồng bộ whatsapp-protocol xác định hạn chế đăng nhập qua numeric_code=30020. Có thể ảnh hưởng nhập phiên, runtime, gửi và truy vấn liên hệ, đồng thời giữ trạng thái HTTP và code của thao tác. Không áp dụng hợp đồng sự kiện WhatsApp 20102 cho kênh này.

Xử lý và thử lại: Dừng gửi và thử lại tự động, hướng dẫn người dùng kiểm tra và xử lý hạn chế trong ứng dụng WhatsApp chính thức. Chỉ tiếp tục sau khi giải quyết và xác thực lại nếu cần; trạng thái running trước đó không chứng minh hạn chế đã hết.

Kênh áp dụng: WhatsApp Protocol

Ví dụ · 502 · 30020
{
  "request_id": "req_example_account_restricted",
  "error": {
    "code": "provider_unavailable",
    "numeric_code": "30020",
    "message": "Account login is restricted. Check the official WhatsApp app for details."
  }
}