Tài khoản
Tạo tài khoản
Tạo tài khoản provider. auth_mode bắt buộc và phải là qrcode, code hoặc session. Khi cặp provider + auth_mode cần số điện thoại, hãy gửi provider_data.phone; giá trị được lưu cho các bước xác thực sau. Chế độ ví tạo tài khoản trực tiếp, không cần yêu cầu báo giá trước. 201 xác nhận tạo và trừ tiền; kiểm tra billing.state trước xác thực. Tạo đồng thời trong cùng workspace trả 409 wallet_account_creation_in_progress. Idempotency-Key là tùy chọn; sau timeout hãy kiểm tra kết quả trước, chỉ thử lại bằng khóa cũ mới tránh mua lần hai.
https://api.unifyport.ai/v1/accountsKênh được hỗ trợ
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.
Dùng API Key của workspace đích. Tài khoản chế độ ví được tính phí USD cho 30 ngày. Xem số dư và nạp tiền trong Dashboard.
Tham số yêu cầu
Tiêu đề
X-Api-KeyAPI 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-TypeDùng application/json khi gửi nội dung yêu cầu JSON.
Idempotency-KeyIdempotency-Key là tùy chọn khi tạo bằng ví. Dùng khóa cũ khi thử lại kết quả chưa rõ; nếu không có khóa, yêu cầu sau khi hoàn tất sẽ tạo tài khoản mới.
Nội dung yêu cầu
nameTên tài khoản dễ đọc.
providerMã định danh provider cho khách hàng: telegram, whatsapp, whatsapp-protocol, line, twitter, zalo hoặc tiktok.
enum: telegram, whatsapp, line, twitter, zalo, tiktok, whatsapp-protocol, x, x_client, twitter_client
regionKhu vực của nhà cung cấp dùng để phân bổ. Hãy chọn khu vực được báo cáo allocatable: true qua Liệt kê khu vực của nhà cung cấp.
minLength: 1
statusTrạng thái nghiệp vụ của tài khoản, như active hoặc inactive.
runtime_statusTrạng thái runtime yêu cầu khi provider hỗ trợ thay đổi qua cấu hình tài khoản.
enum: unknown, starting, running, stopping, stopped, reconnecting, disconnected, error
auth_modeBắt buộc khi tạo tài khoản: qrcode, code hoặc session.
enum: qrcode, code, session
capabilities[]Với PATCH, bỏ qua để giữ nguyên, gửi [] để xoá; null không hợp lệ.
metadataVới PATCH, bỏ qua để giữ nguyên, gửi {} để xoá; null không hợp lệ.
provider_account_refDanh tính tài khoản phía provider, thường được điền sau khi xác thực.
provider_dataCấu hình nhà cung cấp. Với PATCH, bỏ qua để giữ nguyên; {} xóa mà không thêm thông tin xác thực mặc định; null không hợp lệ. TikTok provider_data.enable_comment chỉ nhận Boolean, mặc định false; chuỗi, số và null trả 400 invalid_request. Thay đổi khi trực tuyến cần reconnect; start thành công không chứng minh đã áp dụng, tắt không thu hồi sự kiện đã xếp hàng. Telegram api_id và api_hash là tùy chọn cho code, qrcode và session; thông tin tùy chỉnh phải là cặp chuỗi từ cùng ứng dụng. Tạo không có thông tin tùy chỉnh và các trường xác thực bị bỏ qua khi thay bằng cấu hình không rỗng sẽ dùng mặc định của nền tảng; yêu cầu thất bại nếu mặc định cần thiết không khả dụng. Đổi mặc định không thay thông tin xác thực của tài khoản hiện có. Không ghi bí mật vào log.
proxyCấu hình proxy gửi ra tùy chọn cho tài khoản này.
Hiểu kết quả
Chế độ ví tạo tài khoản trực tiếp, không cần yêu cầu báo giá trước. 201 xác nhận tạo và trừ tiền; kiểm tra billing.state trước xác thực. Tạo đồng thời trong cùng workspace trả 409 wallet_account_creation_in_progress. Idempotency-Key là tùy chọn; sau timeout hãy kiểm tra kết quả trước, chỉ thử lại bằng khóa cũ mới tránh mua lần hai.
Phản hồi 201 · PREPAID_QUOTA
{
"request_id": "<REQUEST_ID>",
"data": {
"id": "acc_example",
"name": "Telegram Production",
"provider": "telegram",
"region": "<REGION>",
"status": "active",
"runtime_status": "stopped",
"auth_mode": "qrcode",
"capabilities": [
"send_message",
"receive_message"
]
}
}
Phản hồi 201 · ACCOUNT_WALLET_30D
{
"request_id": "<REQUEST_ID>",
"data": {
"id": "acc_example",
"name": "Messaging account",
"provider": "telegram",
"region": "<REGION>",
"status": "active",
"runtime_status": "stopped",
"auth_mode": "qrcode",
"capabilities": [
"send_message",
"receive_message"
],
"billing": {
"period_start_at": "2026-10-19T00:00:00Z",
"period_end_at": "2026-11-18T00:00:00Z",
"amount_minor": 1000,
"currency": "USD",
"operation_id": "op_example",
"state": "ACTIVE"
}
}
}
Nội dung phản hồi
provider_profileobjectHồ sơ do nhà cung cấp báo cáo, ví dụ display_name. Bị bỏ qua trước khi tài khoản được xác thực.
provider_profileHồ sơ do nhà cung cấp báo cáo, ví dụ display_name. Bị bỏ qua trước khi tài khoản được xác thực.
idĐịnh danh opaque của tài khoản trên kênh đã kết nối. Với WhatsApp, đây có thể là canonical LID không có hậu tố thiết bị.
device_idSố thiết bị đăng nhập tùy chọn trong chi tiết tài khoản WhatsApp khi xác định được phiên hiện tại. Có thể thay đổi sau khi xác thực lại và không phải mã thiết bị cố định.
minimum: 0 · maximum: 65535
phoneSố điện thoại đã chuẩn hóa, bỏ khoảng trắng, gạch nối và dấu + đầu.
usernameusername do provider báo cáo, nếu có.
display_nameTên hiển thị của tài khoản; với WhatsApp, tên này được tạo bằng cách ưu tiên BusinessName và dùng PushName làm giá trị dự phòng.
push_namePushName hiện được đặt trên tài khoản WhatsApp; các provider khác không định nghĩa ngữ nghĩa cho trường này.
business_nameWhatsApp BusinessName; trường này bị bỏ qua khi provider không trả về giá trị.
first_nameTên do provider báo cáo, nếu có.
last_nameHọ do provider báo cáo, nếu có.
avatar_urlURL avatar tài khoản do provider báo cáo.
bioTiểu sử hoặc trạng thái tài khoản do provider báo cáo.
platformĐịnh danh nền tảng đăng nhập do WhatsApp báo cáo khi ghép nối. Hãy coi đây là chuỗi opaque và chấp nhận giá trị chưa biết; các provider khác không định nghĩa ý nghĩa của trường này. Trường này khác với device_platform.
billingobjectChu kỳ đã trả chỉ tài khoản ví; không suy ra đã mua từ số dư.
billingChu kỳ đã trả chỉ tài khoản ví; không suy ra đã mua từ số dư.
period_start_atBắt đầu chu kỳ đã trả từ máy chủ.
format: date-time
period_end_atKết thúc chu kỳ đã trả từ máy chủ.
format: date-time
amount_minorSố tiền máy chủ cố định theo cent USD; xử lý số nguyên chính xác.
minimum: 1 · format: int64
currencyChỉ USD.
operation_idMã công khai từ billing.operation_id hoặc phản hồi xóa; dùng nguyên trong workspace cũ.
stateTrạng thái thanh toán hay thao tác không chứng minh xác thực, trực tuyến hoặc ghi có hoàn tiền.
enum: ACTIVE, DELETING, DELETED, COMPENSATED, REVIEW
idĐịnh danh tài khoản duy nhất (acc_...). Dùng trong các route theo phạm vi tài khoản.
nameTên tài khoản dễ đọc.
providerMã định danh kênh. Dùng nguyên giá trị API trả về trong các lần gọi sau; xem enum bên dưới để biết giá trị của API này.
enum: telegram, whatsapp, line, twitter, zalo, tiktok, whatsapp-protocol
regionKhu vực nhà cung cấp mà tài khoản được phân bổ tới.
statusTrạng thái vòng đời của tài khoản, ví dụ active.
runtime_statusTrạng thái runtime đã chuẩn hoá: một trong unknown, starting, running, stopping, stopped, reconnecting, disconnected hoặc error.
enum: unknown, starting, running, stopping, stopped, reconnecting, disconnected, error
auth_modeLuồng xác thực mà tài khoản dùng: code, qrcode hoặc session.
capabilities[]Các năng lực được bật cho tài khoản, ví dụ send_message và receive_message.
metadataNhãn môi trường của riêng bạn được lưu trên tài khoản.
provider_account_refĐịnh danh phía nhà cung cấp mà bạn có thể gắn để liên kết tài khoản với hệ thống của riêng mình.
proxyCấu hình proxy gửi ra của tài khoản, khi đã thiết lập.
Phản hồi
201201 Created
Yêu cầu thành công. Xem ví dụ nội dung phản hồi.
400Bad Request
Body, đường dẫn hoặc tham số yêu cầu không hợp lệ.
401Unauthorized
Header X-Api-Key thiếu hoặc không hợp lệ.
403Forbidden
Yêu cầu đã được nhận diện nhưng thao tác không được phép.
404Not 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.
409Conflict
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ó.
500Internal Server Error
Dịch vụ gặp lỗi không mong muốn.
503Service Unavailable
Dịch vụ backend cần thiết tạm thời không khả dụng.
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ụ.
- auth_mode_phone_required · 20019 · 400
Cách ủy quyền này yêu cầu provider_data.phone khi tạo tài khoản.
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 · 20019
{ "request_id": "req_example", "error": { "code": "auth_mode_phone_required", "numeric_code": "20019", "message": "Phone number is required for this auth mode" } }- 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" } }- unsupported_provider_auth_mode · 20018 · 400
Dùng auth_mode được kênh hỗ trợ.
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 · 20018
{ "request_id": "req_example", "error": { "code": "unsupported_provider_auth_mode", "numeric_code": "20018", "message": "Auth mode not supported by this provider" } }- wallet_invalid_request · 20021 · 400
Kiểm tra tham số tạo tài khoản bằng ví và tiêu đề Idempotency-Key tùy chọn.
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 · 20021
{ "request_id": "req_example", "error": { "code": "wallet_invalid_request", "numeric_code": "20021", "message": "Invalid wallet account request" } }- 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_allocation_busy · 20011 · 409
Đang bận cấp tài khoản; thử lại sau một lú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 · 20011
{ "request_id": "req_example", "error": { "code": "account_allocation_busy", "numeric_code": "20011", "message": "Allocation is busy in the current region; please retry later" } }- 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" } }- no_allocatable_server · 20013 · 409
Vùng chưa có tài nguyên trống; truy vấn vùng có thể cấp phát.
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 · 20013
{ "request_id": "req_example", "error": { "code": "no_allocatable_server", "numeric_code": "20013", "message": "No allocatable server in the current region" } }- wallet_account_creation_in_progress · 20030 · 409
Workspace này đang tạo một tài khoản bằng ví khác. Hãy đợi hoàn tất rồi thử lại.
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 · 20030
{ "request_id": "req_example", "error": { "code": "wallet_account_creation_in_progress", "numeric_code": "20030", "message": "Account creation is in progress; please wait" } }- wallet_idempotency_conflict · 20024 · 409
Khóa chống lặp đã gắn với tham số khác. Kiểm tra thao tác ban đầu trước khi tạo lại.
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 · 20024
{ "request_id": "req_example", "error": { "code": "wallet_idempotency_conflict", "numeric_code": "20024", "message": "Idempotency key was used for a different request" } }- wallet_insufficient_funds · 20023 · 409
Số dư không đủ. Chủ sở hữu có thể nạp tiền rồi xác nhận yêu cầu ban đầu.
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 · 20023
{ "request_id": "req_example", "error": { "code": "wallet_insufficient_funds", "numeric_code": "20023", "message": "Insufficient wallet balance" } }- wallet_workspace_disabled · 20022 · 409
Đã tắt mua mới bằng số dư; không có nghĩa thao tác hiện có đã bị hủy.
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 · 20022
{ "request_id": "req_example", "error": { "code": "wallet_workspace_disabled", "numeric_code": "20022", "message": "New wallet purchases are disabled" } }- workspace_account_quota_exceeded · 20014 · 409
Đã đạt giới hạn tài khoản nhắn tin; kiểm tra mức sử dụng và hạn mứ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 · 20014
{ "request_id": "req_example", "error": { "code": "workspace_account_quota_exceeded", "numeric_code": "20014", "message": "Workspace account quota exceeded" } }- create_account_failed · 20002 · 500
Tạo tài khoản: tạo tài nguyên lỗi hoặc chưa xác nhận được kết quả.
Xử lý và thử lại: Liệt kê hoặc truy vấn tài nguyên hiện có để xem lần tạo trước đã có hiệu lực chưa. Sửa nguyên nhân gốc và giữ request_id; không tự động tạo tài nguyên trùng.
JSON minh họa; message thay đổi theo nguyên nhân thực tế · 500 · 20002
{ "request_id": "req_example", "error": { "code": "create_account_failed", "numeric_code": "20002", "message": "Failed to create account" } }- allocation_service_unavailable · 20012 · 503
Dịch vụ cấp tài khoản tạm không khả dụng; thử lại sau.
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ế · 503 · 20012
{ "request_id": "req_example", "error": { "code": "allocation_service_unavailable", "numeric_code": "20012", "message": "Allocation service is temporarily unavailable" } }- wallet_unavailable · 20028 · 503
Dữ liệu hoặc cấu hình ví tạm không khả dụng. Kết quả ghi có thể chưa rõ; kiểm tra thao tác ban đầu.
Xử lý và thử lại: Đọc trạng thái hiện tại và xác nhận kết quả lần thay đổi trước khi thử lại. Giữ request_id; không tự động ghi lại khi kết quả chưa rõ.
JSON minh họa; message thay đổi theo nguyên nhân thực tế · 503 · 20028
{ "request_id": "req_example", "error": { "code": "wallet_unavailable", "numeric_code": "20028", "message": "Wallet service is unavailable" } }