Giới thiệu API LadiPage

API LadiPage cho phép hệ thống của bạn đọc và ghi dữ liệu trong tài khoản LadiPage: bài viết Blog và tin tức Website, khách hàng, giao dịch và công việc trên LadiWork, đơn hàng của cửa hàng. Hiện có 86 API. Mọi API gọi bằng HTTPS, dữ liệu gửi và nhận ở dạng JSON.

Yêu cầu khi dùng API

  • Mọi lời gọi cần token LadiPage MCP của tài khoản. Xem Xác thực.
  • Mỗi token gọi tối đa 60 lượt mỗi phút. Xem Giới hạn và quyền.
  • API làm được đúng những việc tài khoản của token làm được trong LadiPage: cùng workspace, cùng vai trò, cùng gói dịch vụ.
  • Gọi API từ máy chủ của bạn. Không đặt token trong mã chạy trên trình duyệt hay ứng dụng di động.

Xác thực

Mỗi lời gọi gửi token trong header api-key. Token bắt đầu bằng lfm_. Đây cũng là token bạn dùng để kết nối LadiPage MCP với trợ lý AI.

Lấy token

  1. Đăng nhập LadiPage.
  2. Mở trang Tài khoản, tìm mục MCP Server.
  3. Chọn cách kết nối bằng token, bấm Hiện token rồi Sao chép.

Mỗi tài khoản có một token đang dùng. Token không tự hết hạn, chỉ ngừng hoạt động khi bạn tạo token mới.

Token mang quyền của tài khoản bạn: ai có token là làm được những việc bạn làm được qua API. Nếu lộ token, bấm Tạo lại token ở mục MCP Server. Token cũ ngừng hoạt động ngay, mọi kết nối đang dùng nó (kể cả trợ lý AI) cần cập nhật token mới.

Các API này không nhận khoá API cũ cấp riêng cho từng workspace, cũng không nhận phiên đăng nhập của ứng dụng LadiPage.

Cấu trúc lời gọi

POSThttps://api.ladipage.net/2.0/api/{tên-api}

HeaderGiá trị
api-keyToken của bạn, dạng lfm_...
Content-Typeapplication/json

Tên API viết thường, các từ nối bằng dấu gạch ngang, ví dụ post-list, lw-list-deals. Tên viết bằng dấu gạch dưới như trong LadiPage MCP (post_list) cũng được nhận. Body là một đối tượng JSON chứa tham số của API. API không cần tham số thì gửi {}.

Kết quả

Mọi phản hồi có cùng khuôn gồm code (trùng mã HTTP), message và data. Thành công thì code là 200 và dữ liệu nằm trong data. Lỗi thì data là null và message nêu lý do.

Phản hồi của account-list-workspaces
{
  "code": 200,
  "message": "Success",
  "data": {
    "total": 1,
    "items": [
      {
        "store_id": "5f2b8c9d1e3a4b5c6d7e8f90",
        "ladipage_store_id": "5f2b8c9d1e3a4b5c6d7e8f90",
        "ladisales_store_id": "1024",
        "name": "Cửa hàng Mẫu",
        "is_owner": true
      }
    ]
  }
}

Thao tác ghi (tạo, sửa, đăng, huỷ, xoá) chạy ngay khi gọi, không có bước xác nhận. Kiểm tra kỹ tham số trước khi gọi, nhất là với bài viết đang hiển thị và đơn hàng.

Chọn workspace

Dữ liệu LadiPage thuộc về từng workspace. Gọi account-list-workspaces để lấy danh sách workspace mà token được vào, rồi truyền mã workspace vào các API khác.

Nhóm APITham sốLấy từ
Bài viết, LadiWorkstore_idTrường store_id của account-list-workspaces
Đơn hàng cửa hàngworkspace_idTrường ladisales_store_id của account-list-workspaces, hoặc shop-list-workspaces

Tài khoản chỉ thuộc một workspace thì bỏ trống được. Tài khoản thuộc từ hai workspace trở lên nên luôn truyền mã workspace: thiếu mã, API có thể dùng workspace bạn sở hữu hoặc trả lỗi kèm danh sách workspace hợp lệ. Truyền mã của workspace mà token không được vào thì bị từ chối.

Liệt kê workspace Đọc

POST/2.0/api/account-list-workspaces

Trả về các workspace mà chủ token có quyền truy cập, kèm store_id của từng workspace. Gọi đầu tiên để lấy store_id truyền cho các API có tham số store_id.

Tham số

Không có tham số. Gửi body {}.

Ví dụ

cURL
curl -X POST https://api.ladipage.net/2.0/api/account-list-workspaces \
  -H "api-key: $LADIPAGE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'

Kết quả

Phản hồi mẫu · JSON
{
  "code": 200,
  "message": "Success",
  "data": {
    "total": 2,
    "items": [
      {
        "store_id": "5f2b8c9d1e3a4b5c6d7e8f90",
        "ladipage_store_id": "5f2b8c9d1e3a4b5c6d7e8f90",
        "ladisales_store_id": "1024",
        "name": "Cửa hàng Mẫu",
        "is_owner": true
      },
      {
        "store_id": "64c1a7e2f9b3d50012c4e8a1",
        "ladipage_store_id": "64c1a7e2f9b3d50012c4e8a2",
        "name": "Agency Đối tác",
        "is_owner": false
      }
    ]
  }
}

ladisales_store_id chỉ có khi workspace đã kết nối cửa hàng LadiSales. is_owner là true nếu chủ token là chủ workspace.

Lưu ý

  • Không cần tham số. Danh sách gồm workspace do chủ token sở hữu và các workspace họ được mời vào làm thành viên.
  • store_id là giá trị truyền vào tham số store_id của các API post-*; các API này cũng nhận ladipage_store_id thay cho store_id.
  • ladisales_store_id (chuỗi số) là mã cửa hàng LadiSales gắn với workspace, cùng giá trị với workspace_id của các API shop-*.
  • Tài khoản chưa có workspace nào thì API trả lỗi.

Giới hạn và quyền

  • 60 lượt mỗi phút cho mỗi token, tính chung mọi API. Vượt mức nhận HTTP 429; chờ sang phút sau rồi gọi lại. Lượt gọi API không trừ vào hạn mức lượt gọi LadiPage MCP.
  • Quyền theo người giữ token. API áp đúng vai trò của bạn trong workspace (chủ sở hữu, quản lý, nhân viên...) và gói dịch vụ của workspace. Nhân viên chỉ thấy dữ liệu trong phạm vi được giao, giống trong ứng dụng.
  • Xoá chỉ có ở bài viết. post-delete, post-delete-category, post-delete-tag là các API xoá duy nhất. Khách hàng, giao dịch, công việc và đơn hàng không xoá được qua API.
  • Mỗi trang tối đa 50 bản ghi ở các API danh sách có phân trang. Dùng page để lấy trang tiếp theo.

Mã lỗi

Mã HTTPKhi nàoCách xử lý
200Thành công.Đọc data.
400Tham số sai hoặc thiếu, không có quyền, không tìm thấy dữ liệu, hoặc thao tác bị từ chối. message nêu lý do.Sửa theo message rồi gọi lại.
401Thiếu header api-key, token sai hoặc đã được tạo lại. Tên API viết sai cũng nhận mã này.Kiểm tra token ở mục MCP Server và tên API trong danh mục.
429Quá 60 lượt mỗi phút với cùng một token.Chờ sang phút sau, giãn nhịp gọi.
500Lỗi phía LadiPage.Gọi lại sau ít phút. Lỗi kéo dài thì báo LadiPage kèm thời điểm và tên API.

Thông báo lỗi nghiệp vụ hiện viết bằng tiếng Việt. Dựa vào mã HTTP để xử lý, dùng message để ghi log và hiển thị.

Ví dụ trọn luồng

Ví dụ dưới đây lấy danh sách Blog, tạo một bài nháp rồi đăng bài. Đặt token vào biến môi trường LADIPAGE_TOKEN trước khi chạy.

# 1. Lấy site_id của Blog
curl -X POST https://api.ladipage.net/2.0/api/post-list-sites \
  -H "api-key: $LADIPAGE_TOKEN" -H "Content-Type: application/json" \
  -d '{"site_type": "BLOG"}'

# 2. Tạo bài nháp, ghi lại data.post_id
curl -X POST https://api.ladipage.net/2.0/api/post-create \
  -H "api-key: $LADIPAGE_TOKEN" -H "Content-Type: application/json" \
  -d '{"site_type": "BLOG", "site_id": "65a1c3e7b2d94f0012ab34cd", "title": "Ra mắt sản phẩm mới", "content": "<p>Nội dung bài viết.</p>"}'

# 3. Đăng bài
curl -X POST https://api.ladipage.net/2.0/api/post-publish \
  -H "api-key: $LADIPAGE_TOKEN" -H "Content-Type: application/json" \
  -d '{"site_type": "BLOG", "site_id": "65a1c3e7b2d94f0012ab34cd", "post_ids": ["66f0a2b4c8d1e3f5a7b9c0d2"], "action": "PUBLISH"}'
// Node.js 18 trở lên
const API = "https://api.ladipage.net/2.0/api/";

async function call(name, body) {
  const res = await fetch(API + name, {
    method: "POST",
    headers: {
      "api-key": process.env.LADIPAGE_TOKEN,
      "Content-Type": "application/json",
    },
    body: JSON.stringify(body),
  });
  const json = await res.json();
  if (json.code !== 200) throw new Error(json.code + " " + json.message);
  return json.data;
}

const sites = await call("post-list-sites", { site_type: "BLOG" });
const blog = sites.items[0];

const post = await call("post-create", {
  site_type: "BLOG",
  site_id: blog.site_id,
  title: "Ra mắt sản phẩm mới",
  content: "<p>Nội dung bài viết.</p>",
});

await call("post-publish", {
  site_type: "BLOG",
  site_id: blog.site_id,
  post_ids: [post.post_id],
  action: "PUBLISH",
});
# pip install requests
import os
import requests

API = "https://api.ladipage.net/2.0/api/"
HEADERS = {"api-key": os.environ["LADIPAGE_TOKEN"]}


def call(name, body):
    res = requests.post(API + name, json=body, headers=HEADERS, timeout=30)
    payload = res.json()
    if payload["code"] != 200:
        raise RuntimeError(f"{payload['code']} {payload['message']}")
    return payload["data"]


blog = call("post-list-sites", {"site_type": "BLOG"})["items"][0]
post = call("post-create", {
    "site_type": "BLOG",
    "site_id": blog["site_id"],
    "title": "Ra mắt sản phẩm mới",
    "content": "<p>Nội dung bài viết.</p>",
})
call("post-publish", {
    "site_type": "BLOG",
    "site_id": blog["site_id"],
    "post_ids": [post["post_id"]],
    "action": "PUBLISH",
})

Danh mục API

NhómSố APIDùng để
Workspace1Lấy mã workspace để truyền vào các API khác.
Bài viết14API đọc, tạo, sửa, đăng và xoá bài viết, danh mục, thẻ của Blog LadiPage và mục tin tức Website LadiPage.
LadiWork · Khách hàng19API tìm, lọc, đếm, xem chi tiết, xuất và tạo khách hàng trên LadiWork, cùng lịch sử hoạt động, cuộc gọi, ghi chú, đơn hàng của khách.
LadiWork · Giao dịch16API liệt kê, xem và tạo giao dịch, công việc, việc con, bình luận trên LadiWork, cùng đơn hàng LadiWork.
LadiWork · Báo cáo22API chiến dịch, automation, chuỗi tin, báo cáo giao dịch, credit và nhật ký hoạt động trên LadiWork.
Đơn hàng cửa hàng14API liệt kê, xem, tạo đơn hàng, cập nhật ghi chú, thẻ, thanh toán, huỷ đơn và vận đơn của cửa hàng LadiSales.