Dành cho đội kỹ thuật

Tài liệu API & Webhook

Kết nối Salezy với hệ thống của bạn theo hai chiều: gọi API để tạo và đọc dữ liệu, hoặc nhận webhook để được báo ngay khi có sự kiện mới — không cần chờ hỏi lại (polling).

Tổng quan

Salezy cho phép hai cách tích hợp bổ sung cho nhau:

  • API — hệ thống của bạn gọi vào Salezy để tạo lead/liên hệ mới, hoặc đọc danh sách lead, liên hệ, cơ hội, đơn hàng.
  • Webhook — Salezy báo ra cho hệ thống của bạn ngay khi có sự kiện (lead mới, đơn hàng đổi trạng thái…), không cần bạn tự hỏi lại theo chu kỳ.

Bắt đầu trong 3 bước:

  1. Vào Cài đặt › Tích hợp, tạo một khóa API với quyền (scope) cần dùng.
  2. Gọi thử GET /open/me để xác nhận khóa hoạt động (xem mục Public API).
  3. Muốn nhận sự kiện thời gian thực, tạo thêm một webhook trỏ về URL của bạn (xem mục Webhook).

Public API — xác thực & giới hạn

Mọi endpoint nằm dưới một base URL cố định, xác thực bằng header x-api-key. Tạo khóa tại Cài đặt › Tích hợp trong tài khoản Salezy của bạn — mỗi khóa gắn với một hoặc nhiều quyền (scope) bên dưới, chỉ dùng được cho đúng những endpoint thuộc quyền đó.

Chỉ gọi từ server — khóa API dùng cho giao tiếp máy chủ với máy chủ (server-to-server). Không nhúng khóa vào code chạy trên trình duyệt hoặc app di động: bất kỳ ai xem được mã nguồn/traffic đều lấy được khóa. Trình duyệt cũng sẽ tự chặn (CORS) header x-api-key gọi thẳng từ JavaScript phía client.

Base URL
https://api.salezy.vn/api/v1/open
Quyền (scope)Ý nghĩa
leads:readĐọc lead — Xem danh sách và chi tiết lead.
leads:writeTạo lead — Tạo mới lead qua API.
contacts:readĐọc liên hệ — Xem danh sách và chi tiết liên hệ.
contacts:writeTạo liên hệ — Tạo mới liên hệ qua API.
deals:readĐọc cơ hội — Xem danh sách và chi tiết cơ hội.
orders:readĐọc đơn hàng — Xem danh sách và chi tiết đơn hàng.

Giới hạn 1.000 request/giờ VÀ 120 request/phút (chặn burst) cho mỗi khóa API — vượt một trong hai đều nhận về mã 429 kèm header Retry-After (số giây nên chờ trước khi gọi lại).

Kết quả danh sách luôn theo một khuôn có phân trang:

Định dạng phản hồi danh sách
{
  "success": true,
  "message": "OK",
  "data": {
    "data": [ /* các bản ghi */ ],
    "meta": { "page": 1, "limit": 20, "total": 42, "totalPages": 3 }
  }
}

Mã lỗi

HTTPerrorCodeÝ nghĩa
400BAD_REQUESTDữ liệu gửi lên không hợp lệ — thiếu trường bắt buộc hoặc sai định dạng.
401INVALID_API_KEYKhoá API sai, đã bị thu hồi, hoặc thiếu header `x-api-key`. Gửi khoá sai quá 30 lần/phút từ cùng một địa chỉ IP thì các lần sai tiếp theo nhận 429 thay vì 401 (tối đa 60 giây); khoá đúng vẫn gọi được bình thường.
403API_SCOPE_MISSINGKhoá API hợp lệ nhưng không có quyền (scope) cần cho endpoint này.
403ORGANIZATION_INACTIVETổ chức bị tạm ngưng (chưa thanh toán) chỉ đọc được, không tạo mới được; tổ chức đã xoá bị từ chối hoàn toàn.
404NOT_FOUNDKhông tìm thấy bản ghi với id đã cho (hoặc bản ghi không thuộc tổ chức của khoá API).
429TOO_MANY_REQUESTSVượt giới hạn 1.000 request/giờ hoặc 120 request/phút cho một khoá API, hoặc gửi khoá sai quá 30 lần/phút từ cùng một địa chỉ IP (bị chặn tối đa 60 giây). Xem header `Retry-After` (số giây) để biết khi nào gọi lại được.

Phản hồi lỗi luôn có dạng { "success": false, "message": "...", "errorCode": "..." }.

Kiểm tra khóa API

GET/open/me

Kiểm tra khoá API còn dùng được không, xem tổ chức và các quyền (scope) đang có.

Quyền cần: Bất kỳ khoá API hợp lệ nào

curl
curl -s "https://api.salezy.vn/api/v1/open/me" \
  -H "x-api-key: sk_ab12cd_9f8e7d6c5b4a3928170615243342516071"
Phản hồi mẫu
{
  "success": true,
  "message": "OK",
  "data": {
    "organization": {
      "id": "org_3f9a1c2b",
      "name": "Cửa hàng An Phát"
    },
    "key": {
      "name": "Zapier",
      "prefix": "ab12cd",
      "scopes": [
        "leads:read",
        "leads:write"
      ]
    }
  }
}

Lead

Tạo và đọc lead — dữ liệu khách hàng tiềm năng trước khi trở thành liên hệ.

POST/open/leads

Tạo một lead mới. Số điện thoại được tự động chuẩn hoá về định dạng Việt Nam.

Quyền cần: Tạo lead (`leads:write`)

Tham sốKiểuBắt buộcMô tả
fullNamestringCóHọ tên khách hàng.
phonestringKhôngSố điện thoại (chuẩn hoá tự động).
emailstringKhôngEmail.
companyNamestringKhôngTên công ty/cửa hàng.
needstringKhôngNhu cầu, mô tả ngắn.
budgetstringKhôngNgân sách dự kiến.
regionstringKhôngKhu vực.
notestringKhôngGhi chú thêm.
customFieldsobjectKhôngTrường tuỳ biến (key/value).
utmobjectKhôngThông tin nguồn UTM (source, campaign…).
curl
curl -s -X POST "https://api.salezy.vn/api/v1/open/leads" \
  -H "x-api-key: sk_ab12cd_9f8e7d6c5b4a3928170615243342516071" \
  -H "Content-Type: application/json" \
  -d '{
  "fullName": "Nguyễn Văn An",
  "phone": "0901234567",
  "email": "khach@example.com",
  "companyName": "Cửa hàng An Phát",
  "need": "Tư vấn gói dịch vụ",
  "utm": {
    "source": "facebook",
    "campaign": "thang-9"
  }
}'
Phản hồi mẫu
{
  "success": true,
  "message": "Tạo lead thành công",
  "data": {
    "id": "7c0e4f6a-1b2c-4d3e-9f8a-0123456789ab",
    "fullName": "Nguyễn Văn An",
    "phone": "0901234567",
    "email": "khach@example.com",
    "companyName": "Cửa hàng An Phát",
    "source": "FORM",
    "status": "NEW",
    "score": 10,
    "need": "Tư vấn gói dịch vụ",
    "budget": null,
    "region": "Hà Nội",
    "jobTitle": null,
    "note": null,
    "ownerId": "usr_8f2a1c3d",
    "owner": {
      "id": "usr_8f2a1c3d",
      "name": "Trần Thị Bình",
      "email": "binh@congty.vn"
    },
    "campaignId": null,
    "utm": {
      "source": "facebook",
      "campaign": "thang-9"
    },
    "customFields": {},
    "convertedContactId": null,
    "convertedCompanyId": null,
    "convertedDealId": null,
    "createdAt": "2026-09-29T08:00:00.000Z",
    "updatedAt": "2026-09-29T08:00:00.000Z"
  }
}
GET/open/leads

Lấy danh sách lead, có phân trang.

Quyền cần: Đọc lead (`leads:read`)

Tham sốKiểuBắt buộcMô tả
pagenumberKhôngTrang, bắt đầu từ 1 (mặc định 1).
limitnumberKhôngSố bản ghi mỗi trang, tối đa 100 (mặc định 20).
updatedSincestring (ISO 8601)KhôngChỉ lấy bản ghi cập nhật từ thời điểm này trở đi.
statusstringKhôngLọc theo trạng thái lead.
phonestringKhôngLọc theo số điện thoại (đã chuẩn hoá).
emailstringKhôngLọc theo email.
curl
curl -s "https://api.salezy.vn/api/v1/open/leads?page=1&limit=20&status=NEW" \
  -H "x-api-key: sk_ab12cd_9f8e7d6c5b4a3928170615243342516071"
Phản hồi mẫu
{
  "success": true,
  "message": "OK",
  "data": {
    "data": [
      {
        "id": "7c0e4f6a-1b2c-4d3e-9f8a-0123456789ab",
        "fullName": "Nguyễn Văn An",
        "phone": "0901234567",
        "email": "khach@example.com",
        "companyName": "Cửa hàng An Phát",
        "source": "FORM",
        "status": "NEW",
        "score": 10,
        "need": "Tư vấn gói dịch vụ",
        "budget": null,
        "region": "Hà Nội",
        "jobTitle": null,
        "note": null,
        "ownerId": "usr_8f2a1c3d",
        "owner": {
          "id": "usr_8f2a1c3d",
          "name": "Trần Thị Bình",
          "email": "binh@congty.vn"
        },
        "campaignId": null,
        "utm": {
          "source": "facebook",
          "campaign": "thang-9"
        },
        "customFields": {},
        "convertedContactId": null,
        "convertedCompanyId": null,
        "convertedDealId": null,
        "createdAt": "2026-09-29T08:00:00.000Z",
        "updatedAt": "2026-09-29T08:00:00.000Z"
      }
    ],
    "meta": {
      "page": 1,
      "limit": 20,
      "total": 1,
      "totalPages": 1
    }
  }
}
GET/open/leads/{id}

Lấy chi tiết một lead theo id.

Quyền cần: Đọc lead (`leads:read`)

Tham sốKiểuBắt buộcMô tả
idstringCóId của lead.
curl
curl -s "https://api.salezy.vn/api/v1/open/leads/7c0e4f6a-1b2c-4d3e-9f8a-0123456789ab" \
  -H "x-api-key: sk_ab12cd_9f8e7d6c5b4a3928170615243342516071"
Phản hồi mẫu
{
  "success": true,
  "message": "OK",
  "data": {
    "id": "7c0e4f6a-1b2c-4d3e-9f8a-0123456789ab",
    "fullName": "Nguyễn Văn An",
    "phone": "0901234567",
    "email": "khach@example.com",
    "companyName": "Cửa hàng An Phát",
    "source": "FORM",
    "status": "NEW",
    "score": 10,
    "need": "Tư vấn gói dịch vụ",
    "budget": null,
    "region": "Hà Nội",
    "jobTitle": null,
    "note": null,
    "ownerId": "usr_8f2a1c3d",
    "owner": {
      "id": "usr_8f2a1c3d",
      "name": "Trần Thị Bình",
      "email": "binh@congty.vn"
    },
    "campaignId": null,
    "utm": {
      "source": "facebook",
      "campaign": "thang-9"
    },
    "customFields": {},
    "convertedContactId": null,
    "convertedCompanyId": null,
    "convertedDealId": null,
    "createdAt": "2026-09-29T08:00:00.000Z",
    "updatedAt": "2026-09-29T08:00:00.000Z"
  }
}

Liên hệ

Tạo và đọc liên hệ — khách hàng đã được xác nhận (thường chuyển đổi từ lead).

POST/open/contacts

Tạo một liên hệ mới.

Quyền cần: Tạo liên hệ (`contacts:write`)

Tham sốKiểuBắt buộcMô tả
fullNamestringCóHọ tên.
phonestringKhôngSố điện thoại (chuẩn hoá tự động).
emailstringKhôngEmail.
jobTitlestringKhôngChức danh.
notestringKhôngGhi chú thêm.
customFieldsobjectKhôngTrường tuỳ biến (key/value).
curl
curl -s -X POST "https://api.salezy.vn/api/v1/open/contacts" \
  -H "x-api-key: sk_ab12cd_9f8e7d6c5b4a3928170615243342516071" \
  -H "Content-Type: application/json" \
  -d '{
  "fullName": "Lê Thị Hoa",
  "phone": "0907654321",
  "email": "khach@example.com",
  "jobTitle": "Chủ cửa hàng"
}'
Phản hồi mẫu
{
  "success": true,
  "message": "Tạo liên hệ thành công",
  "data": {
    "id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
    "code": "KH-000456",
    "fullName": "Lê Thị Hoa",
    "phone": "0907654321",
    "email": "khach@example.com",
    "phones": [
      "0907654321"
    ],
    "emails": [
      "khach@example.com"
    ],
    "zalo": "0907654321",
    "gender": "FEMALE",
    "dob": null,
    "jobTitle": null,
    "companyId": null,
    "company": null,
    "source": "FORM",
    "lifecycleStage": "CUSTOMER",
    "customerGroup": null,
    "region": "Hà Nội",
    "note": null,
    "ownerId": "usr_8f2a1c3d",
    "owner": {
      "id": "usr_8f2a1c3d",
      "name": "Trần Thị Bình",
      "email": "binh@congty.vn"
    },
    "doNotContact": false,
    "customFields": {},
    "createdAt": "2026-09-29T08:00:00.000Z",
    "updatedAt": "2026-09-29T08:00:00.000Z"
  }
}
GET/open/contacts

Lấy danh sách liên hệ, có phân trang.

Quyền cần: Đọc liên hệ (`contacts:read`)

Tham sốKiểuBắt buộcMô tả
pagenumberKhôngTrang, bắt đầu từ 1 (mặc định 1).
limitnumberKhôngSố bản ghi mỗi trang, tối đa 100 (mặc định 20).
updatedSincestring (ISO 8601)KhôngChỉ lấy bản ghi cập nhật từ thời điểm này trở đi.
phonestringKhôngLọc theo số điện thoại (đã chuẩn hoá).
emailstringKhôngLọc theo email.
curl
curl -s "https://api.salezy.vn/api/v1/open/contacts?page=1&limit=20" \
  -H "x-api-key: sk_ab12cd_9f8e7d6c5b4a3928170615243342516071"
Phản hồi mẫu
{
  "success": true,
  "message": "OK",
  "data": {
    "data": [
      {
        "id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
        "code": "KH-000456",
        "fullName": "Lê Thị Hoa",
        "phone": "0907654321",
        "email": "khach@example.com",
        "phones": [
          "0907654321"
        ],
        "emails": [
          "khach@example.com"
        ],
        "zalo": "0907654321",
        "gender": "FEMALE",
        "dob": null,
        "jobTitle": null,
        "companyId": null,
        "company": null,
        "source": "FORM",
        "lifecycleStage": "CUSTOMER",
        "customerGroup": null,
        "region": "Hà Nội",
        "note": null,
        "ownerId": "usr_8f2a1c3d",
        "owner": {
          "id": "usr_8f2a1c3d",
          "name": "Trần Thị Bình",
          "email": "binh@congty.vn"
        },
        "doNotContact": false,
        "customFields": {},
        "createdAt": "2026-09-29T08:00:00.000Z",
        "updatedAt": "2026-09-29T08:00:00.000Z"
      }
    ],
    "meta": {
      "page": 1,
      "limit": 20,
      "total": 1,
      "totalPages": 1
    }
  }
}
GET/open/contacts/{id}

Lấy chi tiết một liên hệ theo id.

Quyền cần: Đọc liên hệ (`contacts:read`)

Tham sốKiểuBắt buộcMô tả
idstringCóId của liên hệ.
curl
curl -s "https://api.salezy.vn/api/v1/open/contacts/a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d" \
  -H "x-api-key: sk_ab12cd_9f8e7d6c5b4a3928170615243342516071"
Phản hồi mẫu
{
  "success": true,
  "message": "OK",
  "data": {
    "id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
    "code": "KH-000456",
    "fullName": "Lê Thị Hoa",
    "phone": "0907654321",
    "email": "khach@example.com",
    "phones": [
      "0907654321"
    ],
    "emails": [
      "khach@example.com"
    ],
    "zalo": "0907654321",
    "gender": "FEMALE",
    "dob": null,
    "jobTitle": null,
    "companyId": null,
    "company": null,
    "source": "FORM",
    "lifecycleStage": "CUSTOMER",
    "customerGroup": null,
    "region": "Hà Nội",
    "note": null,
    "ownerId": "usr_8f2a1c3d",
    "owner": {
      "id": "usr_8f2a1c3d",
      "name": "Trần Thị Bình",
      "email": "binh@congty.vn"
    },
    "doNotContact": false,
    "customFields": {},
    "createdAt": "2026-09-29T08:00:00.000Z",
    "updatedAt": "2026-09-29T08:00:00.000Z"
  }
}

Cơ hội

Chỉ đọc — cơ hội bán hàng (deal) đang được quản lý trong pipeline.

GET/open/deals

Lấy danh sách cơ hội, có phân trang.

Quyền cần: Đọc cơ hội (`deals:read`)

Tham sốKiểuBắt buộcMô tả
pagenumberKhôngTrang, bắt đầu từ 1 (mặc định 1).
limitnumberKhôngSố bản ghi mỗi trang, tối đa 100 (mặc định 20).
updatedSincestring (ISO 8601)KhôngChỉ lấy bản ghi cập nhật từ thời điểm này trở đi.
stageIdstringKhôngLọc theo giai đoạn trong pipeline.
pipelineIdstringKhôngLọc theo pipeline.
curl
curl -s "https://api.salezy.vn/api/v1/open/deals?page=1&limit=20" \
  -H "x-api-key: sk_ab12cd_9f8e7d6c5b4a3928170615243342516071"
Phản hồi mẫu
{
  "success": true,
  "message": "OK",
  "data": {
    "data": [
      {
        "id": "d1e2f3a4-b5c6-4d7e-8f9a-0b1c2d3e4f5a",
        "name": "Gói dịch vụ cao cấp - Nguyễn Văn An",
        "value": 15000000,
        "currency": "VND",
        "pipelineId": "pl_default",
        "stageId": "stg_negotiation",
        "stage": {
          "id": "stg_negotiation",
          "name": "Đang đàm phán",
          "type": "OPEN"
        },
        "contactId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
        "companyId": null,
        "ownerId": "usr_8f2a1c3d",
        "owner": {
          "id": "usr_8f2a1c3d",
          "name": "Trần Thị Bình",
          "email": "binh@congty.vn"
        },
        "source": "FORM",
        "expectedCloseDate": "2026-10-15T00:00:00.000Z",
        "description": null,
        "customFields": {},
        "createdAt": "2026-09-29T08:00:00.000Z",
        "updatedAt": "2026-09-29T08:00:00.000Z"
      }
    ],
    "meta": {
      "page": 1,
      "limit": 20,
      "total": 1,
      "totalPages": 1
    }
  }
}
GET/open/deals/{id}

Lấy chi tiết một cơ hội theo id.

Quyền cần: Đọc cơ hội (`deals:read`)

Tham sốKiểuBắt buộcMô tả
idstringCóId của cơ hội.
curl
curl -s "https://api.salezy.vn/api/v1/open/deals/d1e2f3a4-b5c6-4d7e-8f9a-0b1c2d3e4f5a" \
  -H "x-api-key: sk_ab12cd_9f8e7d6c5b4a3928170615243342516071"
Phản hồi mẫu
{
  "success": true,
  "message": "OK",
  "data": {
    "id": "d1e2f3a4-b5c6-4d7e-8f9a-0b1c2d3e4f5a",
    "name": "Gói dịch vụ cao cấp - Nguyễn Văn An",
    "value": 15000000,
    "currency": "VND",
    "pipelineId": "pl_default",
    "stageId": "stg_negotiation",
    "stage": {
      "id": "stg_negotiation",
      "name": "Đang đàm phán",
      "type": "OPEN"
    },
    "contactId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
    "companyId": null,
    "ownerId": "usr_8f2a1c3d",
    "owner": {
      "id": "usr_8f2a1c3d",
      "name": "Trần Thị Bình",
      "email": "binh@congty.vn"
    },
    "source": "FORM",
    "expectedCloseDate": "2026-10-15T00:00:00.000Z",
    "description": null,
    "customFields": {},
    "createdAt": "2026-09-29T08:00:00.000Z",
    "updatedAt": "2026-09-29T08:00:00.000Z"
  }
}

Đơn hàng

Chỉ đọc — đơn hàng đã tạo trong hệ thống.

GET/open/orders

Lấy danh sách đơn hàng, có phân trang.

Quyền cần: Đọc đơn hàng (`orders:read`)

Tham sốKiểuBắt buộcMô tả
pagenumberKhôngTrang, bắt đầu từ 1 (mặc định 1).
limitnumberKhôngSố bản ghi mỗi trang, tối đa 100 (mặc định 20).
updatedSincestring (ISO 8601)KhôngChỉ lấy bản ghi cập nhật từ thời điểm này trở đi.
statusstringKhôngLọc theo trạng thái đơn hàng.
curl
curl -s "https://api.salezy.vn/api/v1/open/orders?page=1&limit=20" \
  -H "x-api-key: sk_ab12cd_9f8e7d6c5b4a3928170615243342516071"
Phản hồi mẫu
{
  "success": true,
  "message": "OK",
  "data": {
    "data": [
      {
        "id": "e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b",
        "number": "DH-000123",
        "status": "PROCESSING",
        "paymentStatus": "UNPAID",
        "subtotal": 500000,
        "discount": 0,
        "vatAmount": 50000,
        "shippingFee": 30000,
        "total": 580000,
        "contactId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
        "contact": {
          "id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
          "fullName": "Lê Thị Hoa",
          "phone": "0907654321"
        },
        "companyId": null,
        "shippingAddress": "12 Nguyễn Trãi, Thanh Xuân, Hà Nội",
        "note": null,
        "expectedDeliveryAt": "2026-10-02T00:00:00.000Z",
        "items": [
          {
            "productId": "p_001",
            "variantId": null,
            "name": "Áo sơ mi nam trắng",
            "sku": "ASM-TRANG-L",
            "quantity": 1,
            "unitPrice": 500000,
            "total": 500000
          }
        ],
        "customFields": {},
        "createdAt": "2026-09-29T08:00:00.000Z",
        "updatedAt": "2026-09-29T08:00:00.000Z"
      }
    ],
    "meta": {
      "page": 1,
      "limit": 20,
      "total": 1,
      "totalPages": 1
    }
  }
}
GET/open/orders/{id}

Lấy chi tiết một đơn hàng theo id.

Quyền cần: Đọc đơn hàng (`orders:read`)

Tham sốKiểuBắt buộcMô tả
idstringCóId của đơn hàng.
curl
curl -s "https://api.salezy.vn/api/v1/open/orders/e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b" \
  -H "x-api-key: sk_ab12cd_9f8e7d6c5b4a3928170615243342516071"
Phản hồi mẫu
{
  "success": true,
  "message": "OK",
  "data": {
    "id": "e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b",
    "number": "DH-000123",
    "status": "PROCESSING",
    "paymentStatus": "UNPAID",
    "subtotal": 500000,
    "discount": 0,
    "vatAmount": 50000,
    "shippingFee": 30000,
    "total": 580000,
    "contactId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
    "contact": {
      "id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
      "fullName": "Lê Thị Hoa",
      "phone": "0907654321"
    },
    "companyId": null,
    "shippingAddress": "12 Nguyễn Trãi, Thanh Xuân, Hà Nội",
    "note": null,
    "expectedDeliveryAt": "2026-10-02T00:00:00.000Z",
    "items": [
      {
        "productId": "p_001",
        "variantId": null,
        "name": "Áo sơ mi nam trắng",
        "sku": "ASM-TRANG-L",
        "quantity": 1,
        "unitPrice": 500000,
        "total": 500000
      }
    ],
    "customFields": {},
    "createdAt": "2026-09-29T08:00:00.000Z",
    "updatedAt": "2026-09-29T08:00:00.000Z"
  }
}

Webhook

Tạo một webhook tại Cài đặt › Tích hợp: nhập URL nhận (bắt buộc https:// — URL http:// bị từ chối ngay lúc lưu, mã lỗi WEBHOOK_URL_NOT_ALLOWED) và chọn sự kiện muốn theo dõi. URL không đạt quy tắc này ở bước gọi HTTP trong Tự động hoá sẽ bị từ chối khi chạy. Mỗi lần sự kiện xảy ra, Salezy gửi một request POST tới URL đó với nội dung dạng “envelope” như sau:

Envelope
{
  "id": "evt_5a7c9e21-3b4d-4f6a-8c1e-2d3f4a5b6c7d",
  "event": "lead.created",
  "at": "2026-09-29T08:00:00.000Z",
  "organizationId": "org_3f9a1c2b",
  "data": {
    "leadId": "7c0e4f6a-1b2c-4d3e-9f8a-0123456789ab",
    "lead": {
      "id": "7c0e4f6a-1b2c-4d3e-9f8a-0123456789ab",
      "fullName": "Nguyễn Văn An",
      "phone": "0901234567",
      "email": "khach@example.com",
      "companyName": "Cửa hàng An Phát",
      "source": "FORM",
      "status": "NEW",
      "score": 10,
      "need": "Tư vấn gói dịch vụ",
      "budget": null,
      "region": "Hà Nội",
      "jobTitle": null,
      "note": null,
      "ownerId": "usr_8f2a1c3d",
      "owner": {
        "id": "usr_8f2a1c3d",
        "name": "Trần Thị Bình",
        "email": "binh@congty.vn"
      },
      "campaignId": null,
      "utm": {
        "source": "facebook",
        "campaign": "thang-9"
      },
      "customFields": {},
      "convertedContactId": null,
      "convertedCompanyId": null,
      "convertedDealId": null,
      "createdAt": "2026-09-29T08:00:00.000Z",
      "updatedAt": "2026-09-29T08:00:00.000Z"
    }
  }
}

id (dạng evt_…) là mã của LẦN GỬI này — dùng để chống xử lý trùng (idempotency): lưu lại các id đã xử lý, bỏ qua nếu nhận lại đúng id đó (ví dụ do webhook được gửi lại).

Header đi kèm mỗi request

HeaderÝ nghĩa
X-Salezy-SignatureChữ ký để xác minh request đến từ Salezy — xem mục Kiểm tra chữ ký.
x-signatureChữ ký kiểu cũ (giữ để tương thích ngược) — HMAC-SHA256 trực tiếp trên nội dung gửi đi, không kèm thời gian.
X-Salezy-EventTên sự kiện, ví dụ “lead.created”.
X-Salezy-DeliveryBằng đúng id trong envelope.

URL nhận phải trả về mã 2xx trong vòng 10 giây. Bất kỳ điều gì khác — lỗi mạng, mã 3xx/4xx/5xx, hoặc quá thời gian — đều tính là gửi thất bại và được thử lại theo lịch cách quãng tăng dần: 2, 4, 8, 16, 32 phút (tối đa 5 lần gửi lại). Hết số lần trên, Salezy ngừng thử và ghi nhận là lỗi vĩnh viễn cho lần gửi đó.

Trong màn Cài đặt, mỗi webhook có nút Gửi thử để gửi ngay một sự kiện mẫu và xem kết quả, không cần đợi sự kiện thật xảy ra.

Danh sách sự kiện

Bấm vào một sự kiện để xem payload mẫu đầy đủ.

Lead

lead.created— Có lead mới

Bắn khi có một lead mới được tạo trong hệ thống.

Payload mẫu
{
  "id": "evt_5a7c9e21-3b4d-4f6a-8c1e-2d3f4a5b6c7d",
  "event": "lead.created",
  "at": "2026-09-29T08:00:00.000Z",
  "organizationId": "org_3f9a1c2b",
  "data": {
    "leadId": "7c0e4f6a-1b2c-4d3e-9f8a-0123456789ab",
    "lead": {
      "id": "7c0e4f6a-1b2c-4d3e-9f8a-0123456789ab",
      "fullName": "Nguyễn Văn An",
      "phone": "0901234567",
      "email": "khach@example.com",
      "companyName": "Cửa hàng An Phát",
      "source": "FORM",
      "status": "NEW",
      "score": 10,
      "need": "Tư vấn gói dịch vụ",
      "budget": null,
      "region": "Hà Nội",
      "jobTitle": null,
      "note": null,
      "ownerId": "usr_8f2a1c3d",
      "owner": {
        "id": "usr_8f2a1c3d",
        "name": "Trần Thị Bình",
        "email": "binh@congty.vn"
      },
      "campaignId": null,
      "utm": {
        "source": "facebook",
        "campaign": "thang-9"
      },
      "customFields": {},
      "convertedContactId": null,
      "convertedCompanyId": null,
      "convertedDealId": null,
      "createdAt": "2026-09-29T08:00:00.000Z",
      "updatedAt": "2026-09-29T08:00:00.000Z"
    }
  }
}
lead.updated— Lead được cập nhật

Bắn khi thông tin của một lead được sửa.

Payload mẫu
{
  "id": "evt_5a7c9e21-3b4d-4f6a-8c1e-2d3f4a5b6c7d",
  "event": "lead.updated",
  "at": "2026-09-29T08:00:00.000Z",
  "organizationId": "org_3f9a1c2b",
  "data": {
    "leadId": "7c0e4f6a-1b2c-4d3e-9f8a-0123456789ab",
    "changedFields": [
      "status",
      "note"
    ],
    "lead": {
      "id": "7c0e4f6a-1b2c-4d3e-9f8a-0123456789ab",
      "fullName": "Nguyễn Văn An",
      "phone": "0901234567",
      "email": "khach@example.com",
      "companyName": "Cửa hàng An Phát",
      "source": "FORM",
      "status": "NEW",
      "score": 10,
      "need": "Tư vấn gói dịch vụ",
      "budget": null,
      "region": "Hà Nội",
      "jobTitle": null,
      "note": null,
      "ownerId": "usr_8f2a1c3d",
      "owner": {
        "id": "usr_8f2a1c3d",
        "name": "Trần Thị Bình",
        "email": "binh@congty.vn"
      },
      "campaignId": null,
      "utm": {
        "source": "facebook",
        "campaign": "thang-9"
      },
      "customFields": {},
      "convertedContactId": null,
      "convertedCompanyId": null,
      "convertedDealId": null,
      "createdAt": "2026-09-29T08:00:00.000Z",
      "updatedAt": "2026-09-29T08:00:00.000Z"
    }
  }
}
lead.assigned— Lead được giao người phụ trách

Bắn khi một lead được giao (hoặc đổi) người phụ trách.

Payload mẫu
{
  "id": "evt_5a7c9e21-3b4d-4f6a-8c1e-2d3f4a5b6c7d",
  "event": "lead.assigned",
  "at": "2026-09-29T08:00:00.000Z",
  "organizationId": "org_3f9a1c2b",
  "data": {
    "leadId": "7c0e4f6a-1b2c-4d3e-9f8a-0123456789ab",
    "ownerId": "usr_8f2a1c3d",
    "lead": {
      "id": "7c0e4f6a-1b2c-4d3e-9f8a-0123456789ab",
      "fullName": "Nguyễn Văn An",
      "phone": "0901234567",
      "email": "khach@example.com",
      "companyName": "Cửa hàng An Phát",
      "source": "FORM",
      "status": "NEW",
      "score": 10,
      "need": "Tư vấn gói dịch vụ",
      "budget": null,
      "region": "Hà Nội",
      "jobTitle": null,
      "note": null,
      "ownerId": "usr_8f2a1c3d",
      "owner": {
        "id": "usr_8f2a1c3d",
        "name": "Trần Thị Bình",
        "email": "binh@congty.vn"
      },
      "campaignId": null,
      "utm": {
        "source": "facebook",
        "campaign": "thang-9"
      },
      "customFields": {},
      "convertedContactId": null,
      "convertedCompanyId": null,
      "convertedDealId": null,
      "createdAt": "2026-09-29T08:00:00.000Z",
      "updatedAt": "2026-09-29T08:00:00.000Z"
    }
  }
}
lead.converted— Lead chuyển thành khách hàng

Bắn khi lead được chuyển đổi thành liên hệ (và có thể kèm cơ hội).

Payload mẫu
{
  "id": "evt_5a7c9e21-3b4d-4f6a-8c1e-2d3f4a5b6c7d",
  "event": "lead.converted",
  "at": "2026-09-29T08:00:00.000Z",
  "organizationId": "org_3f9a1c2b",
  "data": {
    "leadId": "7c0e4f6a-1b2c-4d3e-9f8a-0123456789ab",
    "contactId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
    "companyId": null,
    "dealId": "d1e2f3a4-b5c6-4d7e-8f9a-0b1c2d3e4f5a",
    "reusedContact": false,
    "reusedCompany": false,
    "lead": {
      "id": "7c0e4f6a-1b2c-4d3e-9f8a-0123456789ab",
      "fullName": "Nguyễn Văn An",
      "phone": "0901234567",
      "email": "khach@example.com",
      "companyName": "Cửa hàng An Phát",
      "source": "FORM",
      "status": "NEW",
      "score": 10,
      "need": "Tư vấn gói dịch vụ",
      "budget": null,
      "region": "Hà Nội",
      "jobTitle": null,
      "note": null,
      "ownerId": "usr_8f2a1c3d",
      "owner": {
        "id": "usr_8f2a1c3d",
        "name": "Trần Thị Bình",
        "email": "binh@congty.vn"
      },
      "campaignId": null,
      "utm": {
        "source": "facebook",
        "campaign": "thang-9"
      },
      "customFields": {},
      "convertedContactId": null,
      "convertedCompanyId": null,
      "convertedDealId": null,
      "createdAt": "2026-09-29T08:00:00.000Z",
      "updatedAt": "2026-09-29T08:00:00.000Z"
    },
    "contact": {
      "id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
      "code": "KH-000456",
      "fullName": "Lê Thị Hoa",
      "phone": "0907654321",
      "email": "khach@example.com",
      "phones": [
        "0907654321"
      ],
      "emails": [
        "khach@example.com"
      ],
      "zalo": "0907654321",
      "gender": "FEMALE",
      "dob": null,
      "jobTitle": null,
      "companyId": null,
      "company": null,
      "source": "FORM",
      "lifecycleStage": "CUSTOMER",
      "customerGroup": null,
      "region": "Hà Nội",
      "note": null,
      "ownerId": "usr_8f2a1c3d",
      "owner": {
        "id": "usr_8f2a1c3d",
        "name": "Trần Thị Bình",
        "email": "binh@congty.vn"
      },
      "doNotContact": false,
      "customFields": {},
      "createdAt": "2026-09-29T08:00:00.000Z",
      "updatedAt": "2026-09-29T08:00:00.000Z"
    },
    "deal": {
      "id": "d1e2f3a4-b5c6-4d7e-8f9a-0b1c2d3e4f5a",
      "name": "Gói dịch vụ cao cấp - Nguyễn Văn An",
      "value": 15000000,
      "currency": "VND",
      "pipelineId": "pl_default",
      "stageId": "stg_negotiation",
      "stage": {
        "id": "stg_negotiation",
        "name": "Đang đàm phán",
        "type": "OPEN"
      },
      "contactId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
      "companyId": null,
      "ownerId": "usr_8f2a1c3d",
      "owner": {
        "id": "usr_8f2a1c3d",
        "name": "Trần Thị Bình",
        "email": "binh@congty.vn"
      },
      "source": "FORM",
      "expectedCloseDate": "2026-10-15T00:00:00.000Z",
      "description": null,
      "customFields": {},
      "createdAt": "2026-09-29T08:00:00.000Z",
      "updatedAt": "2026-09-29T08:00:00.000Z"
    }
  }
}

Liên hệ

contact.created— Có liên hệ mới

Bắn khi có một liên hệ mới được tạo.

Payload mẫu
{
  "id": "evt_5a7c9e21-3b4d-4f6a-8c1e-2d3f4a5b6c7d",
  "event": "contact.created",
  "at": "2026-09-29T08:00:00.000Z",
  "organizationId": "org_3f9a1c2b",
  "data": {
    "contactId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
    "contact": {
      "id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
      "code": "KH-000456",
      "fullName": "Lê Thị Hoa",
      "phone": "0907654321",
      "email": "khach@example.com",
      "phones": [
        "0907654321"
      ],
      "emails": [
        "khach@example.com"
      ],
      "zalo": "0907654321",
      "gender": "FEMALE",
      "dob": null,
      "jobTitle": null,
      "companyId": null,
      "company": null,
      "source": "FORM",
      "lifecycleStage": "CUSTOMER",
      "customerGroup": null,
      "region": "Hà Nội",
      "note": null,
      "ownerId": "usr_8f2a1c3d",
      "owner": {
        "id": "usr_8f2a1c3d",
        "name": "Trần Thị Bình",
        "email": "binh@congty.vn"
      },
      "doNotContact": false,
      "customFields": {},
      "createdAt": "2026-09-29T08:00:00.000Z",
      "updatedAt": "2026-09-29T08:00:00.000Z"
    }
  }
}
contact.updated— Liên hệ được cập nhật

Bắn khi thông tin của một liên hệ được sửa.

Payload mẫu
{
  "id": "evt_5a7c9e21-3b4d-4f6a-8c1e-2d3f4a5b6c7d",
  "event": "contact.updated",
  "at": "2026-09-29T08:00:00.000Z",
  "organizationId": "org_3f9a1c2b",
  "data": {
    "contactId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
    "changedFields": [
      "phone",
      "note"
    ],
    "contact": {
      "id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
      "code": "KH-000456",
      "fullName": "Lê Thị Hoa",
      "phone": "0907654321",
      "email": "khach@example.com",
      "phones": [
        "0907654321"
      ],
      "emails": [
        "khach@example.com"
      ],
      "zalo": "0907654321",
      "gender": "FEMALE",
      "dob": null,
      "jobTitle": null,
      "companyId": null,
      "company": null,
      "source": "FORM",
      "lifecycleStage": "CUSTOMER",
      "customerGroup": null,
      "region": "Hà Nội",
      "note": null,
      "ownerId": "usr_8f2a1c3d",
      "owner": {
        "id": "usr_8f2a1c3d",
        "name": "Trần Thị Bình",
        "email": "binh@congty.vn"
      },
      "doNotContact": false,
      "customFields": {},
      "createdAt": "2026-09-29T08:00:00.000Z",
      "updatedAt": "2026-09-29T08:00:00.000Z"
    }
  }
}

Cơ hội

deal.created— Có cơ hội mới

Bắn khi có một cơ hội (deal) mới được tạo.

Payload mẫu
{
  "id": "evt_5a7c9e21-3b4d-4f6a-8c1e-2d3f4a5b6c7d",
  "event": "deal.created",
  "at": "2026-09-29T08:00:00.000Z",
  "organizationId": "org_3f9a1c2b",
  "data": {
    "dealId": "d1e2f3a4-b5c6-4d7e-8f9a-0b1c2d3e4f5a",
    "deal": {
      "id": "d1e2f3a4-b5c6-4d7e-8f9a-0b1c2d3e4f5a",
      "name": "Gói dịch vụ cao cấp - Nguyễn Văn An",
      "value": 15000000,
      "currency": "VND",
      "pipelineId": "pl_default",
      "stageId": "stg_negotiation",
      "stage": {
        "id": "stg_negotiation",
        "name": "Đang đàm phán",
        "type": "OPEN"
      },
      "contactId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
      "companyId": null,
      "ownerId": "usr_8f2a1c3d",
      "owner": {
        "id": "usr_8f2a1c3d",
        "name": "Trần Thị Bình",
        "email": "binh@congty.vn"
      },
      "source": "FORM",
      "expectedCloseDate": "2026-10-15T00:00:00.000Z",
      "description": null,
      "customFields": {},
      "createdAt": "2026-09-29T08:00:00.000Z",
      "updatedAt": "2026-09-29T08:00:00.000Z"
    }
  }
}
deal.updated— Cơ hội được cập nhật

Bắn khi thông tin của một cơ hội được sửa.

Payload mẫu
{
  "id": "evt_5a7c9e21-3b4d-4f6a-8c1e-2d3f4a5b6c7d",
  "event": "deal.updated",
  "at": "2026-09-29T08:00:00.000Z",
  "organizationId": "org_3f9a1c2b",
  "data": {
    "dealId": "d1e2f3a4-b5c6-4d7e-8f9a-0b1c2d3e4f5a",
    "changedFields": [
      "value",
      "stageId"
    ],
    "deal": {
      "id": "d1e2f3a4-b5c6-4d7e-8f9a-0b1c2d3e4f5a",
      "name": "Gói dịch vụ cao cấp - Nguyễn Văn An",
      "value": 15000000,
      "currency": "VND",
      "pipelineId": "pl_default",
      "stageId": "stg_negotiation",
      "stage": {
        "id": "stg_negotiation",
        "name": "Đang đàm phán",
        "type": "OPEN"
      },
      "contactId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
      "companyId": null,
      "ownerId": "usr_8f2a1c3d",
      "owner": {
        "id": "usr_8f2a1c3d",
        "name": "Trần Thị Bình",
        "email": "binh@congty.vn"
      },
      "source": "FORM",
      "expectedCloseDate": "2026-10-15T00:00:00.000Z",
      "description": null,
      "customFields": {},
      "createdAt": "2026-09-29T08:00:00.000Z",
      "updatedAt": "2026-09-29T08:00:00.000Z"
    }
  }
}
deal.stage_changed— Cơ hội chuyển giai đoạn

Bắn khi một cơ hội chuyển sang giai đoạn khác trong pipeline.

Payload mẫu
{
  "id": "evt_5a7c9e21-3b4d-4f6a-8c1e-2d3f4a5b6c7d",
  "event": "deal.stage_changed",
  "at": "2026-09-29T08:00:00.000Z",
  "organizationId": "org_3f9a1c2b",
  "data": {
    "dealId": "d1e2f3a4-b5c6-4d7e-8f9a-0b1c2d3e4f5a",
    "toStageId": "stg_negotiation",
    "deal": {
      "id": "d1e2f3a4-b5c6-4d7e-8f9a-0b1c2d3e4f5a",
      "name": "Gói dịch vụ cao cấp - Nguyễn Văn An",
      "value": 15000000,
      "currency": "VND",
      "pipelineId": "pl_default",
      "stageId": "stg_negotiation",
      "stage": {
        "id": "stg_negotiation",
        "name": "Đang đàm phán",
        "type": "OPEN"
      },
      "contactId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
      "companyId": null,
      "ownerId": "usr_8f2a1c3d",
      "owner": {
        "id": "usr_8f2a1c3d",
        "name": "Trần Thị Bình",
        "email": "binh@congty.vn"
      },
      "source": "FORM",
      "expectedCloseDate": "2026-10-15T00:00:00.000Z",
      "description": null,
      "customFields": {},
      "createdAt": "2026-09-29T08:00:00.000Z",
      "updatedAt": "2026-09-29T08:00:00.000Z"
    }
  }
}
deal.won— Cơ hội thắng

Bắn khi một cơ hội được đánh dấu thắng.

Payload mẫu
{
  "id": "evt_5a7c9e21-3b4d-4f6a-8c1e-2d3f4a5b6c7d",
  "event": "deal.won",
  "at": "2026-09-29T08:00:00.000Z",
  "organizationId": "org_3f9a1c2b",
  "data": {
    "dealId": "d1e2f3a4-b5c6-4d7e-8f9a-0b1c2d3e4f5a",
    "deal": {
      "id": "d1e2f3a4-b5c6-4d7e-8f9a-0b1c2d3e4f5a",
      "name": "Gói dịch vụ cao cấp - Nguyễn Văn An",
      "value": 15000000,
      "currency": "VND",
      "pipelineId": "pl_default",
      "stageId": "stg_negotiation",
      "stage": {
        "id": "stg_negotiation",
        "name": "Đang đàm phán",
        "type": "OPEN"
      },
      "contactId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
      "companyId": null,
      "ownerId": "usr_8f2a1c3d",
      "owner": {
        "id": "usr_8f2a1c3d",
        "name": "Trần Thị Bình",
        "email": "binh@congty.vn"
      },
      "source": "FORM",
      "expectedCloseDate": "2026-10-15T00:00:00.000Z",
      "description": null,
      "customFields": {},
      "createdAt": "2026-09-29T08:00:00.000Z",
      "updatedAt": "2026-09-29T08:00:00.000Z"
    }
  }
}
deal.lost— Cơ hội thua

Bắn khi một cơ hội được đánh dấu thua.

Payload mẫu
{
  "id": "evt_5a7c9e21-3b4d-4f6a-8c1e-2d3f4a5b6c7d",
  "event": "deal.lost",
  "at": "2026-09-29T08:00:00.000Z",
  "organizationId": "org_3f9a1c2b",
  "data": {
    "dealId": "d1e2f3a4-b5c6-4d7e-8f9a-0b1c2d3e4f5a",
    "deal": {
      "id": "d1e2f3a4-b5c6-4d7e-8f9a-0b1c2d3e4f5a",
      "name": "Gói dịch vụ cao cấp - Nguyễn Văn An",
      "value": 15000000,
      "currency": "VND",
      "pipelineId": "pl_default",
      "stageId": "stg_negotiation",
      "stage": {
        "id": "stg_negotiation",
        "name": "Đang đàm phán",
        "type": "OPEN"
      },
      "contactId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
      "companyId": null,
      "ownerId": "usr_8f2a1c3d",
      "owner": {
        "id": "usr_8f2a1c3d",
        "name": "Trần Thị Bình",
        "email": "binh@congty.vn"
      },
      "source": "FORM",
      "expectedCloseDate": "2026-10-15T00:00:00.000Z",
      "description": null,
      "customFields": {},
      "createdAt": "2026-09-29T08:00:00.000Z",
      "updatedAt": "2026-09-29T08:00:00.000Z"
    }
  }
}

Đơn hàng

order.created— Có đơn hàng mới

Bắn khi có một đơn hàng mới được tạo.

Payload mẫu
{
  "id": "evt_5a7c9e21-3b4d-4f6a-8c1e-2d3f4a5b6c7d",
  "event": "order.created",
  "at": "2026-09-29T08:00:00.000Z",
  "organizationId": "org_3f9a1c2b",
  "data": {
    "orderId": "e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b",
    "order": {
      "id": "e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b",
      "number": "DH-000123",
      "status": "PROCESSING",
      "paymentStatus": "UNPAID",
      "subtotal": 500000,
      "discount": 0,
      "vatAmount": 50000,
      "shippingFee": 30000,
      "total": 580000,
      "contactId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
      "contact": {
        "id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
        "fullName": "Lê Thị Hoa",
        "phone": "0907654321"
      },
      "companyId": null,
      "shippingAddress": "12 Nguyễn Trãi, Thanh Xuân, Hà Nội",
      "note": null,
      "expectedDeliveryAt": "2026-10-02T00:00:00.000Z",
      "items": [
        {
          "productId": "p_001",
          "variantId": null,
          "name": "Áo sơ mi nam trắng",
          "sku": "ASM-TRANG-L",
          "quantity": 1,
          "unitPrice": 500000,
          "total": 500000
        }
      ],
      "customFields": {},
      "createdAt": "2026-09-29T08:00:00.000Z",
      "updatedAt": "2026-09-29T08:00:00.000Z"
    }
  }
}
order.status_changed— Đơn hàng đổi trạng thái

Bắn khi trạng thái của một đơn hàng thay đổi.

Payload mẫu
{
  "id": "evt_5a7c9e21-3b4d-4f6a-8c1e-2d3f4a5b6c7d",
  "event": "order.status_changed",
  "at": "2026-09-29T08:00:00.000Z",
  "organizationId": "org_3f9a1c2b",
  "data": {
    "orderId": "e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b",
    "from": "PENDING",
    "to": "PROCESSING",
    "order": {
      "id": "e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b",
      "number": "DH-000123",
      "status": "PROCESSING",
      "paymentStatus": "UNPAID",
      "subtotal": 500000,
      "discount": 0,
      "vatAmount": 50000,
      "shippingFee": 30000,
      "total": 580000,
      "contactId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
      "contact": {
        "id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
        "fullName": "Lê Thị Hoa",
        "phone": "0907654321"
      },
      "companyId": null,
      "shippingAddress": "12 Nguyễn Trãi, Thanh Xuân, Hà Nội",
      "note": null,
      "expectedDeliveryAt": "2026-10-02T00:00:00.000Z",
      "items": [
        {
          "productId": "p_001",
          "variantId": null,
          "name": "Áo sơ mi nam trắng",
          "sku": "ASM-TRANG-L",
          "quantity": 1,
          "unitPrice": 500000,
          "total": 500000
        }
      ],
      "customFields": {},
      "createdAt": "2026-09-29T08:00:00.000Z",
      "updatedAt": "2026-09-29T08:00:00.000Z"
    }
  }
}
order.completed— Đơn hàng hoàn thành

Bắn khi một đơn hàng được đánh dấu hoàn thành.

Payload mẫu
{
  "id": "evt_5a7c9e21-3b4d-4f6a-8c1e-2d3f4a5b6c7d",
  "event": "order.completed",
  "at": "2026-09-29T08:00:00.000Z",
  "organizationId": "org_3f9a1c2b",
  "data": {
    "orderId": "e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b",
    "order": {
      "id": "e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b",
      "number": "DH-000123",
      "status": "PROCESSING",
      "paymentStatus": "UNPAID",
      "subtotal": 500000,
      "discount": 0,
      "vatAmount": 50000,
      "shippingFee": 30000,
      "total": 580000,
      "contactId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
      "contact": {
        "id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
        "fullName": "Lê Thị Hoa",
        "phone": "0907654321"
      },
      "companyId": null,
      "shippingAddress": "12 Nguyễn Trãi, Thanh Xuân, Hà Nội",
      "note": null,
      "expectedDeliveryAt": "2026-10-02T00:00:00.000Z",
      "items": [
        {
          "productId": "p_001",
          "variantId": null,
          "name": "Áo sơ mi nam trắng",
          "sku": "ASM-TRANG-L",
          "quantity": 1,
          "unitPrice": 500000,
          "total": 500000
        }
      ],
      "customFields": {},
      "createdAt": "2026-09-29T08:00:00.000Z",
      "updatedAt": "2026-09-29T08:00:00.000Z"
    }
  }
}
shipment.created— Đã tạo vận đơnPhải chọn riêng

Bắn khi đơn hàng được tạo vận đơn với hãng vận chuyển (sự kiện mới — phải tick riêng, không nằm trong "tất cả").

Payload mẫu
{
  "id": "evt_5a7c9e21-3b4d-4f6a-8c1e-2d3f4a5b6c7d",
  "event": "shipment.created",
  "at": "2026-09-29T08:00:00.000Z",
  "organizationId": "org_3f9a1c2b",
  "data": {
    "orderId": "e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b",
    "shipmentId": "7d0c1f5e-3b9a-4f2e-9c1d-5a6b7c8d9e0f",
    "carrier": "GHN",
    "trackingCode": "GHN123456789",
    "order": {
      "id": "e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b",
      "number": "DH-000123",
      "status": "PROCESSING",
      "paymentStatus": "UNPAID",
      "subtotal": 500000,
      "discount": 0,
      "vatAmount": 50000,
      "shippingFee": 30000,
      "total": 580000,
      "contactId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
      "contact": {
        "id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
        "fullName": "Lê Thị Hoa",
        "phone": "0907654321"
      },
      "companyId": null,
      "shippingAddress": "12 Nguyễn Trãi, Thanh Xuân, Hà Nội",
      "note": null,
      "expectedDeliveryAt": "2026-10-02T00:00:00.000Z",
      "items": [
        {
          "productId": "p_001",
          "variantId": null,
          "name": "Áo sơ mi nam trắng",
          "sku": "ASM-TRANG-L",
          "quantity": 1,
          "unitPrice": 500000,
          "total": 500000
        }
      ],
      "customFields": {},
      "createdAt": "2026-09-29T08:00:00.000Z",
      "updatedAt": "2026-09-29T08:00:00.000Z"
    }
  }
}
shipment.status_changed— Vận đơn đổi trạng tháiPhải chọn riêng

Bắn khi trạng thái vận đơn thay đổi (đã lấy hàng, đang giao, đã giao, hoàn…) — phải tick riêng, không nằm trong "tất cả".

Payload mẫu
{
  "id": "evt_5a7c9e21-3b4d-4f6a-8c1e-2d3f4a5b6c7d",
  "event": "shipment.status_changed",
  "at": "2026-09-29T08:00:00.000Z",
  "organizationId": "org_3f9a1c2b",
  "data": {
    "orderId": "e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b",
    "shipmentId": "7d0c1f5e-3b9a-4f2e-9c1d-5a6b7c8d9e0f",
    "from": "IN_TRANSIT",
    "to": "DELIVERED",
    "order": {
      "id": "e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b",
      "number": "DH-000123",
      "status": "PROCESSING",
      "paymentStatus": "UNPAID",
      "subtotal": 500000,
      "discount": 0,
      "vatAmount": 50000,
      "shippingFee": 30000,
      "total": 580000,
      "contactId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
      "contact": {
        "id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
        "fullName": "Lê Thị Hoa",
        "phone": "0907654321"
      },
      "companyId": null,
      "shippingAddress": "12 Nguyễn Trãi, Thanh Xuân, Hà Nội",
      "note": null,
      "expectedDeliveryAt": "2026-10-02T00:00:00.000Z",
      "items": [
        {
          "productId": "p_001",
          "variantId": null,
          "name": "Áo sơ mi nam trắng",
          "sku": "ASM-TRANG-L",
          "quantity": 1,
          "unitPrice": 500000,
          "total": 500000
        }
      ],
      "customFields": {},
      "createdAt": "2026-09-29T08:00:00.000Z",
      "updatedAt": "2026-09-29T08:00:00.000Z"
    }
  }
}
invoice.einvoice_issued— Đã xuất hoá đơn điện tử

Bắn khi hoá đơn bán hàng của đơn được MISA meInvoice cấp số (hoá đơn điện tử đã phát hành). [MISA]

Payload mẫu
{
  "id": "evt_5a7c9e21-3b4d-4f6a-8c1e-2d3f4a5b6c7d",
  "event": "invoice.einvoice_issued",
  "at": "2026-09-29T08:00:00.000Z",
  "organizationId": "org_3f9a1c2b",
  "data": {
    "orderId": "e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b",
    "order": {
      "id": "e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b",
      "number": "DH-000123",
      "status": "PROCESSING",
      "paymentStatus": "UNPAID",
      "subtotal": 500000,
      "discount": 0,
      "vatAmount": 50000,
      "shippingFee": 30000,
      "total": 580000,
      "contactId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
      "contact": {
        "id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
        "fullName": "Lê Thị Hoa",
        "phone": "0907654321"
      },
      "companyId": null,
      "shippingAddress": "12 Nguyễn Trãi, Thanh Xuân, Hà Nội",
      "note": null,
      "expectedDeliveryAt": "2026-10-02T00:00:00.000Z",
      "items": [
        {
          "productId": "p_001",
          "variantId": null,
          "name": "Áo sơ mi nam trắng",
          "sku": "ASM-TRANG-L",
          "quantity": 1,
          "unitPrice": 500000,
          "total": 500000
        }
      ],
      "customFields": {},
      "createdAt": "2026-09-29T08:00:00.000Z",
      "updatedAt": "2026-09-29T08:00:00.000Z"
    }
  }
}

Phiếu hỗ trợ

ticket.created— Có phiếu hỗ trợ mới

Bắn khi có một phiếu hỗ trợ (ticket) mới được tạo.

Payload mẫu
{
  "id": "evt_5a7c9e21-3b4d-4f6a-8c1e-2d3f4a5b6c7d",
  "event": "ticket.created",
  "at": "2026-09-29T08:00:00.000Z",
  "organizationId": "org_3f9a1c2b",
  "data": {
    "ticketId": "f1a2b3c4-d5e6-4f7a-8b9c-0d1e2f3a4b5c",
    "ticket": {
      "id": "f1a2b3c4-d5e6-4f7a-8b9c-0d1e2f3a4b5c",
      "number": "TK-000078",
      "subject": "Khách hỏi về bảo hành",
      "status": "OPEN",
      "priority": "NORMAL",
      "contactId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
      "assigneeId": "usr_8f2a1c3d",
      "createdAt": "2026-09-29T08:00:00.000Z",
      "updatedAt": "2026-09-29T08:00:00.000Z",
      "resolvedAt": null
    }
  }
}
ticket.status_changed— Phiếu hỗ trợ đổi trạng thái

Bắn khi trạng thái của một phiếu hỗ trợ thay đổi.

Payload mẫu
{
  "id": "evt_5a7c9e21-3b4d-4f6a-8c1e-2d3f4a5b6c7d",
  "event": "ticket.status_changed",
  "at": "2026-09-29T08:00:00.000Z",
  "organizationId": "org_3f9a1c2b",
  "data": {
    "ticketId": "f1a2b3c4-d5e6-4f7a-8b9c-0d1e2f3a4b5c",
    "status": "RESOLVED",
    "ticket": {
      "id": "f1a2b3c4-d5e6-4f7a-8b9c-0d1e2f3a4b5c",
      "number": "TK-000078",
      "subject": "Khách hỏi về bảo hành",
      "status": "OPEN",
      "priority": "NORMAL",
      "contactId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
      "assigneeId": "usr_8f2a1c3d",
      "createdAt": "2026-09-29T08:00:00.000Z",
      "updatedAt": "2026-09-29T08:00:00.000Z",
      "resolvedAt": null
    }
  }
}

Form

form.submitted— Khách gửi form

Bắn khi khách gửi một form (thường sinh ra lead mới).

Payload mẫu
{
  "id": "evt_5a7c9e21-3b4d-4f6a-8c1e-2d3f4a5b6c7d",
  "event": "form.submitted",
  "at": "2026-09-29T08:00:00.000Z",
  "organizationId": "org_3f9a1c2b",
  "data": {
    "formId": "form_001",
    "submissionId": "sub_001",
    "leadId": "7c0e4f6a-1b2c-4d3e-9f8a-0123456789ab",
    "lead": {
      "id": "7c0e4f6a-1b2c-4d3e-9f8a-0123456789ab",
      "fullName": "Nguyễn Văn An",
      "phone": "0901234567",
      "email": "khach@example.com",
      "companyName": "Cửa hàng An Phát",
      "source": "FORM",
      "status": "NEW",
      "score": 10,
      "need": "Tư vấn gói dịch vụ",
      "budget": null,
      "region": "Hà Nội",
      "jobTitle": null,
      "note": null,
      "ownerId": "usr_8f2a1c3d",
      "owner": {
        "id": "usr_8f2a1c3d",
        "name": "Trần Thị Bình",
        "email": "binh@congty.vn"
      },
      "campaignId": null,
      "utm": {
        "source": "facebook",
        "campaign": "thang-9"
      },
      "customFields": {},
      "convertedContactId": null,
      "convertedCompanyId": null,
      "convertedDealId": null,
      "createdAt": "2026-09-29T08:00:00.000Z",
      "updatedAt": "2026-09-29T08:00:00.000Z"
    }
  }
}

Hội thoại

inbox.conversation_created— Có hội thoại mới

Bắn khi có một hội thoại mới được tạo trong hộp thư.

Payload mẫu
{
  "id": "evt_5a7c9e21-3b4d-4f6a-8c1e-2d3f4a5b6c7d",
  "event": "inbox.conversation_created",
  "at": "2026-09-29T08:00:00.000Z",
  "organizationId": "org_3f9a1c2b",
  "data": {
    "conversationId": "a2b3c4d5-e6f7-4a8b-9c0d-1e2f3a4b5c6d",
    "channel": "MESSENGER",
    "conversation": {
      "id": "a2b3c4d5-e6f7-4a8b-9c0d-1e2f3a4b5c6d",
      "channel": "MESSENGER",
      "status": "OPEN",
      "contactId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
      "assigneeId": "usr_8f2a1c3d",
      "lastMessageAt": "2026-09-29T08:00:00.000Z",
      "createdAt": "2026-09-29T08:00:00.000Z"
    }
  }
}
inbox.message_received— Tin nhắn mới từ kháchPhải chọn riêng

Bắn khi khách gửi tin nhắn mới vào một hội thoại (tần suất cao, phải tick riêng).

Payload mẫu
{
  "id": "evt_5a7c9e21-3b4d-4f6a-8c1e-2d3f4a5b6c7d",
  "event": "inbox.message_received",
  "at": "2026-09-29T08:00:00.000Z",
  "organizationId": "org_3f9a1c2b",
  "data": {
    "conversationId": "a2b3c4d5-e6f7-4a8b-9c0d-1e2f3a4b5c6d",
    "messageId": "b3c4d5e6-f7a8-4b9c-0d1e-2f3a4b5c6d7e",
    "assigneeId": "usr_8f2a1c3d",
    "conversation": {
      "id": "a2b3c4d5-e6f7-4a8b-9c0d-1e2f3a4b5c6d",
      "channel": "MESSENGER",
      "status": "OPEN",
      "contactId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
      "assigneeId": "usr_8f2a1c3d",
      "lastMessageAt": "2026-09-29T08:00:00.000Z",
      "createdAt": "2026-09-29T08:00:00.000Z"
    },
    "message": {
      "id": "b3c4d5e6-f7a8-4b9c-0d1e-2f3a4b5c6d7e",
      "direction": "IN",
      "body": "Shop ơi còn hàng không?",
      "attachments": [],
      "sentByBot": false,
      "sentAt": "2026-09-29T08:00:00.000Z",
      "sender": null,
      "external": false
    }
  }
}
inbox.message_sent— Shop gửi tin cho kháchPhải chọn riêng

Bắn khi shop gửi tin cho khách thành công (nhân viên trả lời trong Salezy, bot tự gửi hoặc nhân viên trả lời ngoài Salezy) — kèm người gửi nếu biết (tần suất cao, phải tick riêng).

Payload mẫu
{
  "id": "evt_5a7c9e21-3b4d-4f6a-8c1e-2d3f4a5b6c7d",
  "event": "inbox.message_sent",
  "at": "2026-09-29T08:00:00.000Z",
  "organizationId": "org_3f9a1c2b",
  "data": {
    "conversationId": "a2b3c4d5-e6f7-4a8b-9c0d-1e2f3a4b5c6d",
    "messageId": "c4d5e6f7-a8b9-4c0d-1e2f-3a4b5c6d7e8f",
    "channel": "MESSENGER",
    "sentByUserId": "usr_8f2a1c3d",
    "source": "STAFF",
    "conversation": {
      "id": "a2b3c4d5-e6f7-4a8b-9c0d-1e2f3a4b5c6d",
      "channel": "MESSENGER",
      "status": "OPEN",
      "contactId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
      "assigneeId": "usr_8f2a1c3d",
      "lastMessageAt": "2026-09-29T08:00:00.000Z",
      "createdAt": "2026-09-29T08:00:00.000Z"
    },
    "message": {
      "id": "c4d5e6f7-a8b9-4c0d-1e2f-3a4b5c6d7e8f",
      "direction": "OUT",
      "body": "Dạ shop còn hàng ạ, chị cần size nào ạ?",
      "attachments": [],
      "sentByBot": false,
      "sentAt": "2026-09-29T08:00:00.000Z",
      "sender": {
        "id": "usr_8f2a1c3d",
        "name": "Trần Thị Bình"
      },
      "external": false
    }
  }
}

Kiểm tra chữ ký

Mỗi request có header X-Salezy-Signature: t=<unix giây>,v1=<chữ ký hex>. Chữ ký là HMAC-SHA256 dùng mã bí mật (secret) của webhook (xem lúc tạo webhook, hoặc bấm “Hiện” trong màn Sửa) tính trên chuỗi ${t}.${nội dung request thô}.

  1. Tách t và v1 từ header.
  2. Chỉ chấp nhận khi chênh lệch giữa thời gian hiện tại và t không quá 300 (5 phút) — chặn tấn công phát lại (replay).
  3. Tính lại HMAC-SHA256 trên ${t}.${nội dung thô} bằng secret của webhook, so sánh với v1 bằng hàm so sánh hằng thời gian (không dùng ===/== — so sánh chuỗi thường có thể bị dò ra bằng cách đo thời gian phản hồi).

Quan trọng: đọc nội dung request THÔ (chưa qua parse JSON) trước khi kiểm chữ ký — parse rồi stringify lại có thể lệch khoảng trắng/thứ tự khóa và làm chữ ký luôn sai một cách khó hiểu.

Node.js (Express)
// Express — cần body THÔ (chưa parse JSON) để chữ ký khớp
const express = require('express');
const crypto = require('crypto');

const app = express();
const WEBHOOK_SECRET = process.env.SALEZY_WEBHOOK_SECRET;

app.post(
  '/webhooks/salezy',
  express.raw({ type: 'application/json' }),
  (req, res) => {
    const header = req.header('X-Salezy-Signature') || '';
    const parts = Object.fromEntries(header.split(',').map((p) => p.split('=')));
    const t = Number(parts.t);
    const v1 = parts.v1;

    if (!t || !v1) return res.status(400).send('thieu chu ky');
    if (Math.abs(Date.now() / 1000 - t) > 300) {
      return res.status(400).send('chu ky het han');
    }

    const rawBody = req.body; // Buffer nhờ express.raw()
    const expected = crypto
      .createHmac('sha256', WEBHOOK_SECRET)
      .update(`${t}.${rawBody}`)
      .digest('hex');

    const a = Buffer.from(v1, 'hex');
    const b = Buffer.from(expected, 'hex');
    if (a.length !== b.length || !crypto.timingSafeEqual(a, b)) {
      return res.status(401).send('chu ky khong hop le');
    }

    const event = JSON.parse(rawBody.toString('utf8'));
    // Chống xử lý trùng: lưu event.id (= header X-Salezy-Delivery) đã xử lý rồi thì bỏ qua.
    console.log('Su kien:', event.event, event.id);

    res.sendStatus(200);
  },
);

app.listen(3000);
PHP
<?php
// Đọc body THÔ trước khi bất kỳ framework nào parse JSON.
$secret = getenv('SALEZY_WEBHOOK_SECRET');
$rawBody = file_get_contents('php://input');

$header = $_SERVER['HTTP_X_SALEZY_SIGNATURE'] ?? '';
parse_str(str_replace(',', '&', $header), $parts);
$t = isset($parts['t']) ? (int) $parts['t'] : 0;
$v1 = $parts['v1'] ?? '';

if (!$t || !$v1 || abs(time() - $t) > 300) {
    http_response_code(400);
    exit('chu ky het han hoac thieu');
}

$expected = hash_hmac('sha256', $t . '.' . $rawBody, $secret);

if (!hash_equals($expected, $v1)) {
    http_response_code(401);
    exit('chu ky khong hop le');
}

$event = json_decode($rawBody, true);
// Chống xử lý trùng: lưu $event['id'] (= header X-Salezy-Delivery) đã xử lý rồi thì bỏ qua.
error_log('Su kien: ' . $event['event'] . ' ' . $event['id']);

http_response_code(200);
Python (Flask)
import hashlib
import hmac
import os
import time

from flask import Flask, request

app = Flask(__name__)
WEBHOOK_SECRET = os.environ["SALEZY_WEBHOOK_SECRET"]


@app.post("/webhooks/salezy")
def salezy_webhook():
    raw_body = request.get_data()  # bytes — đọc TRƯỚC khi Flask parse JSON
    header = request.headers.get("X-Salezy-Signature", "")
    parts = dict(p.split("=", 1) for p in header.split(",") if "=" in p)
    t = parts.get("t")
    v1 = parts.get("v1")

    if not t or not v1 or abs(time.time() - int(t)) > 300:
        return "chu ky het han hoac thieu", 400

    expected = hmac.new(
        WEBHOOK_SECRET.encode("utf-8"),
        f"{t}.".encode("utf-8") + raw_body,
        hashlib.sha256,
    ).hexdigest()

    if not hmac.compare_digest(expected, v1):
        return "chu ky khong hop le", 401

    event = request.get_json()
    # Chống xử lý trùng: lưu event["id"] (= header X-Salezy-Delivery) đã xử lý rồi thì bỏ qua.
    print("Su kien:", event["event"], event["id"])

    return "", 200

Kết nối không cần code

Google Sheets (Apps Script)

Tạo một Google Sheet, mở Tiện ích mở rộng › Apps Script, dán đoạn mã dưới, rồi triển khai (Deploy) dạng “Web app” — URL được cấp chính là URL webhook để dán vào Salezy. Ví dụ dưới ghi lead mới vào một sheet tên “Leads”.

Apps Script — doPost(e)
function doPost(e) {
  var body = JSON.parse(e.postData.contents);

  if (body.event === 'lead.created' && body.data && body.data.lead) {
    var lead = body.data.lead;
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Leads');
    sheet.appendRow([new Date(), lead.fullName, lead.phone, lead.email]);
  }

  return ContentService.createTextOutput('OK');
}

Lưu ý: Google Apps Script không đọc được header tùy chỉnh, nên không kiểm tra được chữ ký X-Salezy-Signature. Chỉ dùng cách này cho dữ liệu không nhạy cảm, hoặc thêm bước xác minh riêng (ví dụ một tham số bí mật trong chính URL) nếu cần chắc chắn hơn.

Make / Zapier

Cả hai nền tảng đều có sẵn một khối “nhận webhook” chung (Make gọi là Custom webhook, Zapier gọi là Webhooks by Zapier – Catch Hook): tạo khối đó trước, lấy URL được cấp, dán vào ô URL khi tạo webhook trong Salezy. Từ lần sự kiện tiếp theo, kịch bản (scenario/zap) của bạn sẽ nhận được đúng envelope mô tả ở mục Webhook phía trên.

Ở chiều ngược lại — muốn Make/Zapier TẠO lead hoặc liên hệ trong Salezy — dùng khối gọi HTTP có sẵn của nền tảng (module “HTTP” ở Make, action “Webhooks by Zapier – POST” hoặc tương tự ở Zapier) để gọi thẳng endpoint POST https://api.salezy.vn/api/v1/open/leads với header x-api-key, đúng như mục Endpoint · Lead ở trên.