Bỏ qua để đến Nội dung
Beta: Hubz API v1 đang được triển khai lên production. Endpoint và giới hạn có thể thay đổi; mọi thay đổi được ghi ở Nhật ký thay đổi.

Hubz API v1 (beta) · Hubz v0.7.0 · 2026-11-06

API reference: Hubz API v1

Tải mô tả API (OpenAPI 3.1, yaml)

https://api.hubz.vn · Mọi request cần Authorization: Bearer hbz_live_xxx.

Endpoint

GET /v1/me

Khóa này là của công ty nào, đang hành động dưới tên ai

Tham số

TênỞKiểu
X-Hubz-Userheaderstring (email)Email nhân viên để hành động dưới tên người đó.

Trả về 200

Thành công: object

TrườngKiểu
integrationobject{ id, name, scopes }
companyobject{ id, name }
userobject{ id, name, email, role }
accountIdsstring[]

Lỗi: xem Giới hạn và mã lỗi.

GET /v1/accounts

Các số Zalo khóa dùng được

Tham số

TênỞKiểu
X-Hubz-Userheaderstring (email)Email nhân viên để hành động dưới tên người đó.

Trả về 200

Thành công: Account[]

Lỗi: xem Giới hạn và mã lỗi.

GET /v1/contacts

Tìm khách theo số điện thoại (mọi cách viết) hoặc theo tên

Tham số

TênỞKiểu
X-Hubz-Userheaderstring (email)Email nhân viên để hành động dưới tên người đó.
phonequerystring0912 345 678, +84912345678, 84912345678 là một số.
qquerystring (min 2)
limitqueryinteger (default 20; max 100)

Trả về 200

Thành công: Contact[]

Lỗi: xem Giới hạn và mã lỗi.

GET /v1/contacts/{id}

Một khách

Tham số

TênỞKiểu
id bắt buộcđường dẫnstring (uuid)
X-Hubz-Userheaderstring (email)Email nhân viên để hành động dưới tên người đó.

Trả về 200

Thành công: Contact

Lỗi: xem Giới hạn và mã lỗi.

GET /v1/conversations/{id}

Một hội thoại

Tham số

TênỞKiểu
id bắt buộcđường dẫnstring (uuid)
X-Hubz-Userheaderstring (email)Email nhân viên để hành động dưới tên người đó.

Trả về 200

Thành công: Conversation

Lỗi: xem Giới hạn và mã lỗi.

GET /v1/conversations/{id}/messages

Tin của hội thoại, mới nhất trước; trang tiếp theo dùng before = id tin cũ nhất đã nhận

Tham số

TênỞKiểu
id bắt buộcđường dẫnstring (uuid)
X-Hubz-Userheaderstring (email)Email nhân viên để hành động dưới tên người đó.
beforequerystring (uuid)

Trả về 200

Thành công: Message[]

Lỗi: xem Giới hạn và mã lỗi.

POST /v1/conversations/{id}/messages

Gửi tin (quyền send). Có tệp kèm chữ thì tệp gửi trước, chữ sau.

Tham số

TênỞKiểu
id bắt buộcđường dẫnstring (uuid)
X-Hubz-Userheaderstring (email)Email nhân viên để hành động dưới tên người đó.

Dữ liệu gửi lên

TrườngKiểu
textstring (max 4000)
fileobject{ name, mime, base64 }

Trả về 200

Các tin vừa xếp hàng gửi: Message[]

Lỗi: xem Giới hạn và mã lỗi.

GET /v1/files

Tải tệp của một tin (chuyển hướng 302 tới link ký sẵn 5 phút)

Tham số

TênỞKiểu
key bắt buộcquerystring

Trả về 302

Chuyển hướng tới tệp

Lỗi: xem Giới hạn và mã lỗi.

GET /v1/events

Kéo sự kiện (quyền events)

Tham số

TênỞKiểu
afterqueryinteger (default 0)Giá trị next của lần gọi trước; 0 lần đầu.
limitqueryinteger (default 100; max 500)
typesquerystringLọc loại

Trả về 200

Thành công: object

TrườngKiểu
eventsEvent[]
nextstring

Lỗi: xem Giới hạn và mã lỗi.

PUT /v1/webhook

Phần mềm tự đăng ký webhook (quyền events). Trả bí mật ký khi tạo mới, đổi địa chỉ hoặc rotateSecret.

Dữ liệu gửi lên

TrườngKiểu
url bắt buộcstring (uri)
eventsstring (message.created, message.updated, conversation.updated)[]
rotateSecretboolean

Trả về 200

Thành công: object

TrườngKiểu
urlstring
eventsstring[]
secretstring | null

Lỗi: xem Giới hạn và mã lỗi.

DELETE /v1/webhook

Gỡ webhook

Trả về 200

Thành công

Lỗi: xem Giới hạn và mã lỗi.

POST /v1/webhook/test

Gửi thử sự kiện ping tới webhook, trả kết quả ngay

Trả về 200

Thành công: object

TrườngKiểu
okboolean
statusinteger
errorstring | null

Lỗi: xem Giới hạn và mã lỗi.

POST /v1/embed-token

Xin địa chỉ nhúng (một hội thoại, hoặc cả app Hubz) dưới tên nhân viên (X-Hubz-User). Khóa không có quyền send thì chỉ xem.

Tham số

TênỞKiểu
X-Hubz-Userheaderstring (email)Email nhân viên để hành động dưới tên người đó.

Dữ liệu gửi lên

TrườngKiểu
conversationId bắt buộcstring (uuid)
TrườngKiểu
app bắt buộcboolean (True)

Trả về 200

Thành công: object

TrườngKiểu
urlstring
tokenstring
expiresAtstring (date-time)

Lỗi: xem Giới hạn và mã lỗi.

PUT /v1/embed-origins

Thêm trang được nhúng khung chat (origin dạng https://ten-mien)

Dữ liệu gửi lên

TrườngKiểu
origins bắt buộcstring[]

Trả về 200

Danh sách sau khi thêm

Lỗi: xem Giới hạn và mã lỗi.

Cấu trúc dữ liệu

Error

TrườngKiểu
errorstring

Account

TrườngKiểu
idstring (uuid)
namestring
phonestring | null
statusstring (connected, disconnected, pending_qr, banned, deleted)
canReplyboolean

Contact

TrườngKiểu
idstring (uuid)
typestring (person)
namestring
zaloNamestring | null
phonestring | null
accountIdstring | null (uuid)
isFriendboolean
tagsstring[]
linksLink[]
conversationsobject[]

Conversation

TrườngKiểu
idstring (uuid)
accountobject{ id, name, phone }
threadTypestring (user, group)
contactobject{ id, name }
assigneeobject | null{ id, name }
statusstring (open, closed)
lastMessageAtstring | null (date-time)
lastMessagePreviewstring | null
unreadCountinteger
canReplyboolean

File

TrườngKiểu
namestring
mimestring
sizeinteger
keystringDùng với GET /v1/files để tải tệp.

Message

TrườngKiểu
idstring (uuid)
conversationIdstring (uuid)
directionstring (in, out)
kindstring (text, link, image, file, sticker, contact, call, other)
textstring | null
fileFile | null
statusstring (queued, sent, failed)
errorstring | null
sourcestring (customer, web, phone, api)
sentByobject | null{ id, name }
senderNamestring | nullTên thành viên gửi tin trong nhóm chat.
replyToIdstring | null
recalledboolean
createdAtstring (date-time)

Event

TrườngKiểu
idstringTăng dần
typestring (message.created, message.updated, conversation.updated)
versioninteger
createdAtstring (date-time)
dataobjectmessage.*: `{ accountId, message, conversation: { id, accountId, threadType, status, assigneeId }, contact: { id, name, phone }, firstInbound }`. `firstInbound = true` khi đây là tin đầu tiên khách gửi trong hội thoại (dùng để tạo cơ hội, phiếu mới). conversation.updated: `{ accountId, conversation: { id, accountId, threadType, status, assignee, lastMessageAt, unreadCount }, contact: { id, name } }`.

Nội dung data theo loại sự kiện

  • message.*: { accountId, message, conversation: { id, accountId, threadType, status, assigneeId }, contact: { id, name, phone }, firstInbound }.
  • firstInbound = true khi đây là tin đầu tiên khách gửi trong hội thoại (dùng để tạo cơ hội, phiếu mới).
  • conversation.updated: { accountId, conversation: { id, accountId, threadType, status, assignee, lastMessageAt, unreadCount }, contact: { id, name } }.

Hubz không phải sản phẩm của Zalo hay VNG; Hubz không dùng API chính thức của Zalo. Hubz không liên kết với Odoo S.A.; Odoo là nhãn hiệu của Odoo S.A.