{
  "title": "WhyPik public documentation",
  "version": "2026-10-14.10",
  "language": "vi",
  "canonical": "https://whypik.com/docs",
  "scope": "Public product documentation only; excludes internal runbooks and customer data.",
  "groups": [
    {
      "id": "start",
      "label": "Bắt đầu"
    },
    {
      "id": "customer",
      "label": "Người dùng"
    },
    {
      "id": "shop",
      "label": "Chủ cửa hàng"
    },
    {
      "id": "developer",
      "label": "Lập trình viên"
    },
    {
      "id": "admin",
      "label": "Quản trị"
    }
  ],
  "articles": [
    {
      "id": "first-start",
      "group": "start",
      "title": "Bắt đầu với WhyPik",
      "summary": "Tạo một dự án chung, xem tổng quan rồi chọn cửa hàng theo mẫu hoặc bật các dịch vụ cần dùng.",
      "keywords": [],
      "url": "https://whypik.com/docs/first-start",
      "markdown_url": "https://whypik.com/docs/first-start.md",
      "steps": true,
      "related": [
        "angular-first-start",
        "shop-first-start",
        "project-management",
        "shop-templates",
        "hosting",
        "mini-server",
        "using-docs"
      ],
      "sections": [
        {
          "title": "Tạo tài khoản",
          "url": "https://whypik.com/docs/first-start#section-0"
        },
        {
          "title": "Chọn hoặc bắt đầu dự án",
          "url": "https://whypik.com/docs/first-start#section-1"
        },
        {
          "title": "Đặt tên dự án",
          "url": "https://whypik.com/docs/first-start#section-2"
        },
        {
          "title": "Chọn khu vực hoạt động",
          "url": "https://whypik.com/docs/first-start#section-3"
        },
        {
          "title": "Chọn tùy chọn và tạo dự án",
          "url": "https://whypik.com/docs/first-start#section-4"
        },
        {
          "title": "Bật dịch vụ cần dùng",
          "url": "https://whypik.com/docs/first-start#section-5"
        },
        {
          "title": "Kiểm tra bằng tài khoản khác",
          "url": "https://whypik.com/docs/first-start#section-6"
        }
      ]
    },
    {
      "id": "project-management",
      "group": "start",
      "title": "Tạo, chọn, chỉnh sửa và xóa dự án",
      "summary": "Một tổng quan chung cho cửa hàng theo mẫu, Authentication, Database, Hosting và Storage; hiểu rõ liên kết và phạm vi xóa.",
      "keywords": [
        "project",
        "xóa dự án",
        "đổi dự án",
        "tổng quan",
        "mã dự án",
        "múi giờ",
        "liên kết cửa hàng",
        "Cloud platform",
        "số dịch vụ",
        "nhiều website",
        "quốc gia",
        "khu vực hoạt động",
        "tỉnh",
        "thành phố",
        "địa phương",
        "đổi tên",
        "chuyển dự án",
        "phiên đăng nhập",
        "MFA",
        "xác thực hai bước",
        "mã khôi phục"
      ],
      "url": "https://whypik.com/docs/project-management",
      "markdown_url": "https://whypik.com/docs/project-management.md",
      "steps": false,
      "related": [
        "first-start",
        "shop-first-start",
        "database-recovery",
        "admin-queues",
        "storage",
        "hosting",
        "mini-server",
        "plans",
        "account-mfa",
        "service-status"
      ],
      "sections": [
        {
          "title": "Chọn dự án",
          "url": "https://whypik.com/docs/project-management#section-0"
        },
        {
          "title": "Tạo dự án và chọn tùy chọn",
          "url": "https://whypik.com/docs/project-management#section-1"
        },
        {
          "title": "Đổi tên và múi giờ",
          "url": "https://whypik.com/docs/project-management#section-2"
        },
        {
          "title": "Khu vực hoạt động",
          "url": "https://whypik.com/docs/project-management#section-3"
        },
        {
          "title": "Một dự án có bao nhiêu dịch vụ?",
          "url": "https://whypik.com/docs/project-management#section-4"
        },
        {
          "title": "Khi nào cần tạo dự án khác?",
          "url": "https://whypik.com/docs/project-management#section-5"
        },
        {
          "title": "Cửa hàng trong dự án",
          "url": "https://whypik.com/docs/project-management#section-6"
        },
        {
          "title": "Số dự án theo gói",
          "url": "https://whypik.com/docs/project-management#section-7"
        },
        {
          "title": "Xóa dự án",
          "url": "https://whypik.com/docs/project-management#section-8"
        },
        {
          "title": "Mã và địa chỉ sau khi xóa",
          "url": "https://whypik.com/docs/project-management#section-9"
        },
        {
          "title": "Theo dõi kết quả",
          "url": "https://whypik.com/docs/project-management#section-10"
        },
        {
          "title": "Đăng xuất khỏi trang app",
          "url": "https://whypik.com/docs/project-management#section-11"
        },
        {
          "title": "Đặt lại mật khẩu tài khoản WhyPik",
          "url": "https://whypik.com/docs/project-management#section-12"
        },
        {
          "title": "Xem và thu hồi phiên đăng nhập",
          "url": "https://whypik.com/docs/project-management#section-13"
        },
        {
          "title": "Xác thực hai bước cho tài khoản quản lý",
          "url": "https://whypik.com/docs/project-management#section-14"
        }
      ]
    },
    {
      "id": "account-mfa",
      "group": "start",
      "title": "Bật xác thực hai bước cho tài khoản WhyPik",
      "summary": "Bảo vệ tài khoản quản lý bằng ứng dụng xác thực, lưu mã khôi phục và đăng nhập khi đã bật MFA.",
      "keywords": [
        "MFA",
        "2FA",
        "TOTP",
        "QR",
        "tài khoản",
        "mã khôi phục",
        "mất điện thoại"
      ],
      "url": "https://whypik.com/docs/account-mfa",
      "markdown_url": "https://whypik.com/docs/account-mfa.md",
      "steps": true,
      "related": [
        "project-management",
        "first-start"
      ],
      "sections": [
        {
          "title": "Xác nhận mật khẩu",
          "url": "https://whypik.com/docs/account-mfa#section-0"
        },
        {
          "title": "Thêm tài khoản vào ứng dụng xác thực",
          "url": "https://whypik.com/docs/account-mfa#section-1"
        },
        {
          "title": "Lưu mã khôi phục",
          "url": "https://whypik.com/docs/account-mfa#section-2"
        },
        {
          "title": "Đăng nhập với MFA",
          "url": "https://whypik.com/docs/account-mfa#section-3"
        }
      ]
    },
    {
      "id": "customer-account",
      "group": "customer",
      "title": "Đăng nhập, mật khẩu và email",
      "summary": "Dành cho người mua hoặc người sử dụng cửa hàng. Không cần hiểu API hay code.",
      "keywords": [
        "OTP",
        "đăng ký",
        "quên mật khẩu",
        "mail",
        "đăng xuất"
      ],
      "url": "https://whypik.com/docs/customer-account",
      "markdown_url": "https://whypik.com/docs/customer-account.md",
      "steps": false,
      "related": [],
      "sections": [
        {
          "title": "Đăng nhập đúng cửa hàng",
          "url": "https://whypik.com/docs/customer-account#section-0"
        },
        {
          "title": "Không nhận được email",
          "url": "https://whypik.com/docs/customer-account#section-1"
        },
        {
          "title": "Quên hoặc đổi mật khẩu",
          "url": "https://whypik.com/docs/customer-account#section-2"
        },
        {
          "title": "Đăng xuất",
          "url": "https://whypik.com/docs/customer-account#section-3"
        }
      ]
    },
    {
      "id": "customer-orders",
      "group": "customer",
      "title": "Đơn hàng, quyền sử dụng và tải phần mềm",
      "summary": "Tìm lại phần mềm đã mua, xem thời hạn và xử lý khi chưa có quyền sử dụng.",
      "keywords": [
        "mua",
        "license",
        "thiết bị",
        "download"
      ],
      "url": "https://whypik.com/docs/customer-orders",
      "markdown_url": "https://whypik.com/docs/customer-orders.md",
      "steps": false,
      "related": [],
      "sections": [
        {
          "title": "Theo dõi đơn hàng",
          "url": "https://whypik.com/docs/customer-orders#section-0"
        },
        {
          "title": "Xem quyền và tải xuống",
          "url": "https://whypik.com/docs/customer-orders#section-1"
        },
        {
          "title": "Khi cần hỗ trợ",
          "url": "https://whypik.com/docs/customer-orders#section-2"
        }
      ]
    },
    {
      "id": "shop-first-start",
      "group": "shop",
      "title": "Mở cửa hàng theo mẫu",
      "summary": "Chọn một trong 10 mẫu, chỉnh nội dung khởi đầu và chuẩn bị danh mục phù hợp với cửa hàng.",
      "keywords": [
        "template",
        "mẫu cửa hàng",
        "spa",
        "phần mềm"
      ],
      "url": "https://whypik.com/docs/shop-first-start",
      "markdown_url": "https://whypik.com/docs/shop-first-start.md",
      "steps": true,
      "related": [
        "shop-spa",
        "shop-content",
        "shop-operations",
        "hosting-domains",
        "project-management",
        "shop-templates",
        "shop-settings"
      ],
      "sections": [
        {
          "title": "Tạo cửa hàng",
          "url": "https://whypik.com/docs/shop-first-start#section-0"
        },
        {
          "title": "Thêm danh mục đúng mẫu",
          "url": "https://whypik.com/docs/shop-first-start#section-1"
        },
        {
          "title": "Phần mềm: tạo gói sử dụng",
          "url": "https://whypik.com/docs/shop-first-start#section-2"
        },
        {
          "title": "Phần mềm: chuẩn bị bản tải",
          "url": "https://whypik.com/docs/shop-first-start#section-3"
        },
        {
          "title": "Thiết kế và kiểm tra",
          "url": "https://whypik.com/docs/shop-first-start#section-4"
        },
        {
          "title": "Kiểm tra trước khi chia sẻ",
          "url": "https://whypik.com/docs/shop-first-start#section-5"
        }
      ]
    },
    {
      "id": "shop-spa",
      "group": "shop",
      "title": "Mở cửa hàng Spa",
      "summary": "Chọn mẫu Spa & chăm sóc, thêm nhóm, liệu trình, sản phẩm và kênh liên hệ.",
      "keywords": [
        "spa",
        "template",
        "mẫu",
        "nhóm",
        "liệu trình",
        "mỹ phẩm",
        "đặt lịch",
        "Mộc An"
      ],
      "url": "https://whypik.com/docs/shop-spa",
      "markdown_url": "https://whypik.com/docs/shop-spa.md",
      "steps": true,
      "related": [
        "shop-first-start",
        "shop-content",
        "store-template-api",
        "plans"
      ],
      "sections": [
        {
          "title": "Chọn mẫu Spa",
          "url": "https://whypik.com/docs/shop-spa#section-0"
        },
        {
          "title": "Sửa giới thiệu và câu chuyện",
          "url": "https://whypik.com/docs/shop-spa#section-1"
        },
        {
          "title": "Thêm nhóm",
          "url": "https://whypik.com/docs/shop-spa#section-2"
        },
        {
          "title": "Thêm liệu trình hoặc sản phẩm",
          "url": "https://whypik.com/docs/shop-spa#section-3"
        },
        {
          "title": "Thêm ảnh",
          "url": "https://whypik.com/docs/shop-spa#section-4"
        },
        {
          "title": "Thiết lập liên hệ",
          "url": "https://whypik.com/docs/shop-spa#section-5"
        },
        {
          "title": "Kiểm tra trang cửa hàng",
          "url": "https://whypik.com/docs/shop-spa#section-6"
        }
      ]
    },
    {
      "id": "shop-content",
      "group": "shop",
      "title": "Thiết kế, nội dung và bản phát hành",
      "summary": "Chỉnh đúng khu vực đang hiển thị cho khách; giữ trang gọn và dễ đọc.",
      "keywords": [
        "banner",
        "logo",
        "upload",
        "update",
        "template",
        "spa",
        "nhóm",
        "dịch vụ",
        "favicon",
        "ico",
        "gói dịch vụ",
        "phần mềm",
        "minh họa",
        "nội dung khởi đầu"
      ],
      "url": "https://whypik.com/docs/shop-content",
      "markdown_url": "https://whypik.com/docs/shop-content.md",
      "steps": false,
      "related": [
        "shop-spa",
        "store-template-api",
        "python-sdk",
        "sdk-install",
        "hosting-domains",
        "shop-templates",
        "shop-settings",
        "store-storage-api"
      ],
      "sections": [
        {
          "title": "Đổi tên cửa hàng",
          "url": "https://whypik.com/docs/shop-content#section-0"
        },
        {
          "title": "Thêm tên miền thương hiệu",
          "url": "https://whypik.com/docs/shop-content#section-1"
        },
        {
          "title": "Nội dung trang",
          "url": "https://whypik.com/docs/shop-content#section-2"
        },
        {
          "title": "Bố cục và nội dung mẫu Phần mềm",
          "url": "https://whypik.com/docs/shop-content#section-3"
        },
        {
          "title": "Bảng giá cho mẫu Phần mềm",
          "url": "https://whypik.com/docs/shop-content#section-4"
        },
        {
          "title": "Quản lý gói dịch vụ",
          "url": "https://whypik.com/docs/shop-content#section-5"
        },
        {
          "title": "Ảnh và banner",
          "url": "https://whypik.com/docs/shop-content#section-6"
        },
        {
          "title": "Favicon riêng cho cửa hàng",
          "url": "https://whypik.com/docs/shop-content#section-7"
        },
        {
          "title": "Cập nhật phần mềm",
          "url": "https://whypik.com/docs/shop-content#section-8"
        },
        {
          "title": "Bộ tích hợp",
          "url": "https://whypik.com/docs/shop-content#section-9"
        }
      ]
    },
    {
      "id": "shop-operations",
      "group": "shop",
      "title": "Quản lý bán hàng và hỗ trợ",
      "summary": "Dùng tổng quan để biết việc cần làm, rồi mở đúng mục để xử lý.",
      "keywords": [
        "coupon",
        "affiliate",
        "referral",
        "đơn hàng"
      ],
      "url": "https://whypik.com/docs/shop-operations",
      "markdown_url": "https://whypik.com/docs/shop-operations.md",
      "steps": false,
      "related": [
        "shop-settings"
      ],
      "sections": [
        {
          "title": "Hằng ngày",
          "url": "https://whypik.com/docs/shop-operations#section-0"
        },
        {
          "title": "Giảm giá và giới thiệu",
          "url": "https://whypik.com/docs/shop-operations#section-1"
        },
        {
          "title": "Khi có lỗi",
          "url": "https://whypik.com/docs/shop-operations#section-2"
        }
      ]
    },
    {
      "id": "hosting",
      "group": "shop",
      "title": "Đưa website lên Static Hosting",
      "summary": "Dành cho website đã build sẵn. Hosting không chạy backend tùy ý.",
      "keywords": [
        "Angular",
        "ZIP",
        "deploy",
        "rollback",
        "SPA",
        "website",
        "nhiều website",
        "site_id",
        "xuất ZIP",
        "tiếp tục upload",
        "mất mạng"
      ],
      "url": "https://whypik.com/docs/hosting",
      "markdown_url": "https://whypik.com/docs/hosting.md",
      "steps": false,
      "related": [
        "hosting-domains",
        "angular-first-start",
        "project-management",
        "plans",
        "cloud-api",
        "cicd"
      ],
      "sections": [
        {
          "title": "Chọn website",
          "url": "https://whypik.com/docs/hosting#section-0"
        },
        {
          "title": "Chuẩn bị ZIP",
          "url": "https://whypik.com/docs/hosting#section-1"
        },
        {
          "title": "Triển khai và kiểm tra",
          "url": "https://whypik.com/docs/hosting#section-2"
        },
        {
          "title": "Quay lại phiên bản trước",
          "url": "https://whypik.com/docs/hosting#section-3"
        },
        {
          "title": "Hạ gói, xuất và xóa",
          "url": "https://whypik.com/docs/hosting#section-4"
        }
      ]
    },
    {
      "id": "hosting-domains",
      "group": "shop",
      "title": "Dùng tên miền riêng và HTTPS",
      "summary": "Thêm tên miền, xác minh quyền sở hữu rồi chờ hệ thống tự bật HTTPS.",
      "keywords": [
        "DNS",
        "TXT",
        "CNAME",
        "SSL",
        "525",
        "Cloudflare",
        "cửa hàng",
        "tên miền chính",
        "ALIAS",
        "custom domain"
      ],
      "url": "https://whypik.com/docs/hosting-domains",
      "markdown_url": "https://whypik.com/docs/hosting-domains.md",
      "steps": false,
      "related": [
        "admin-queues",
        "shop-content",
        "store-template-api",
        "shop-settings"
      ],
      "sections": [
        {
          "title": "Tên miền của cửa hàng theo mẫu",
          "url": "https://whypik.com/docs/hosting-domains#section-0"
        },
        {
          "title": "Tên miền của Static Hosting",
          "url": "https://whypik.com/docs/hosting-domains#section-1"
        },
        {
          "title": "Chờ hệ thống kiểm tra",
          "url": "https://whypik.com/docs/hosting-domains#section-2"
        },
        {
          "title": "Xử lý lỗi",
          "url": "https://whypik.com/docs/hosting-domains#section-3"
        },
        {
          "title": "Địa chỉ WhyPik",
          "url": "https://whypik.com/docs/hosting-domains#section-4"
        },
        {
          "title": "Dùng Cloudflare trước website",
          "url": "https://whypik.com/docs/hosting-domains#section-5"
        }
      ]
    },
    {
      "id": "storage",
      "group": "shop",
      "title": "Storage cửa hàng và Object Storage",
      "summary": "Chọn đúng kho file, hiểu quyền tải và cách hai mục dùng chung dung lượng tài khoản.",
      "keywords": [
        "file",
        "upload",
        "download",
        "signed URL",
        "private",
        "Storage cửa hàng",
        "Object Storage",
        "quota",
        "dung lượng dùng chung",
        "hết dung lượng",
        "bucket",
        "nhiều bucket",
        "bucket_id",
        "CORS",
        "storage.whypik.app"
      ],
      "url": "https://whypik.com/docs/storage",
      "markdown_url": "https://whypik.com/docs/storage.md",
      "steps": false,
      "related": [
        "cloud-api",
        "plans",
        "project-management",
        "store-storage-api"
      ],
      "sections": [
        {
          "title": "Nên dùng kho nào?",
          "url": "https://whypik.com/docs/storage#section-0"
        },
        {
          "title": "Dung lượng được tính như thế nào?",
          "url": "https://whypik.com/docs/storage#section-1"
        },
        {
          "title": "Tiếp tục tải Object Storage khi mất mạng",
          "url": "https://whypik.com/docs/storage#section-2"
        },
        {
          "title": "Mở Storage cửa hàng",
          "url": "https://whypik.com/docs/storage#section-3"
        },
        {
          "title": "Tiếp tục tải file cửa hàng và bản phát hành",
          "url": "https://whypik.com/docs/storage#section-4"
        },
        {
          "title": "Tải file vào Object Storage",
          "url": "https://whypik.com/docs/storage#section-5"
        },
        {
          "title": "Chia sẻ file Object Storage",
          "url": "https://whypik.com/docs/storage#section-6"
        },
        {
          "title": "Cho phép website đọc file qua CORS",
          "url": "https://whypik.com/docs/storage#section-7"
        },
        {
          "title": "Xóa và quota",
          "url": "https://whypik.com/docs/storage#section-8"
        }
      ]
    },
    {
      "id": "plans",
      "group": "start",
      "title": "Quota và nâng cấp",
      "summary": "Phân biệt quota theo gói với giới hạn thử nghiệm của Auth.",
      "keywords": [
        "pricing",
        "free",
        "pro",
        "starter",
        "quota",
        "100",
        "200"
      ],
      "url": "https://whypik.com/docs/plans",
      "markdown_url": "https://whypik.com/docs/plans.md",
      "steps": false,
      "related": [
        "hosting",
        "storage",
        "mini-server",
        "prepaid-sandbox"
      ],
      "sections": [
        {
          "title": "Gói nền tảng",
          "url": "https://whypik.com/docs/plans#section-0"
        },
        {
          "title": "Chức năng nhập và tài liệu",
          "url": "https://whypik.com/docs/plans#section-1"
        },
        {
          "title": "Auth trong bản test",
          "url": "https://whypik.com/docs/plans#section-2"
        },
        {
          "title": "Nâng cấp",
          "url": "https://whypik.com/docs/plans#section-3"
        },
        {
          "title": "Kích hoạt gói thử nghiệm bằng mã",
          "url": "https://whypik.com/docs/plans#section-4"
        },
        {
          "title": "Gói đang sử dụng và lịch sử phí",
          "url": "https://whypik.com/docs/plans#section-5"
        }
      ]
    },
    {
      "id": "prepaid-sandbox",
      "group": "start",
      "title": "Thử mua và gia hạn gói trả trước",
      "summary": "Dành cho đợt thử Sandbox được WhyPik hướng dẫn; chưa mở thu tiền thật.",
      "keywords": [
        "Starter",
        "Pro",
        "gia hạn",
        "SePay",
        "trả trước",
        "mất kết nối"
      ],
      "url": "https://whypik.com/docs/prepaid-sandbox",
      "markdown_url": "https://whypik.com/docs/prepaid-sandbox.md",
      "steps": true,
      "related": [
        "plans",
        "first-start"
      ],
      "sections": [
        {
          "title": "Mở đúng môi trường thử",
          "url": "https://whypik.com/docs/prepaid-sandbox#section-0"
        },
        {
          "title": "Chọn gói và số tháng",
          "url": "https://whypik.com/docs/prepaid-sandbox#section-1"
        },
        {
          "title": "Tạo giao dịch thử và kiểm tra",
          "url": "https://whypik.com/docs/prepaid-sandbox#section-2"
        },
        {
          "title": "Xem thời hạn và lịch sử",
          "url": "https://whypik.com/docs/prepaid-sandbox#section-3"
        }
      ]
    },
    {
      "id": "service-status",
      "group": "developer",
      "title": "Đọc tình trạng dịch vụ trong Project",
      "summary": "Xem lỗi gần đây, độ trễ Data API, hàng chờ và dung lượng; phân biệt số liệu Project với hạn mức tài khoản.",
      "keywords": [
        "tình trạng dịch vụ",
        "lỗi",
        "độ trễ",
        "hàng chờ",
        "dung lượng",
        "giám sát",
        "status",
        "latency"
      ],
      "url": "https://whypik.com/docs/service-status",
      "markdown_url": "https://whypik.com/docs/service-status.md",
      "steps": false,
      "related": [
        "project-management",
        "database-recovery",
        "mini-server",
        "admin-queues"
      ],
      "sections": [
        {
          "title": "Mở màn hình và làm mới",
          "url": "https://whypik.com/docs/service-status#section-0"
        },
        {
          "title": "Trạng thái dịch vụ và độ trễ",
          "url": "https://whypik.com/docs/service-status#section-1"
        },
        {
          "title": "Hàng chờ và lỗi gần đây",
          "url": "https://whypik.com/docs/service-status#section-2"
        },
        {
          "title": "Dung lượng và cảnh báo",
          "url": "https://whypik.com/docs/service-status#section-3"
        },
        {
          "title": "Quyền xem",
          "url": "https://whypik.com/docs/service-status#section-4"
        }
      ]
    },
    {
      "id": "database-start",
      "group": "start",
      "title": "Bắt đầu Database",
      "summary": "Tạo bảng, đưa dữ liệu vào rồi cấp đúng quyền cho ứng dụng.",
      "keywords": [],
      "url": "https://whypik.com/docs/database-start",
      "markdown_url": "https://whypik.com/docs/database-start.md",
      "steps": true,
      "related": [
        "database-import",
        "data-queries",
        "data-relations",
        "database-recovery",
        "data-migrations"
      ],
      "sections": [
        {
          "title": "Kích hoạt",
          "url": "https://whypik.com/docs/database-start#section-0"
        },
        {
          "title": "Nhập cấu trúc",
          "url": "https://whypik.com/docs/database-start#section-1"
        },
        {
          "title": "Nhập dữ liệu",
          "url": "https://whypik.com/docs/database-start#section-2"
        },
        {
          "title": "Cấp quyền ứng dụng",
          "url": "https://whypik.com/docs/database-start#section-3"
        },
        {
          "title": "Gọi SDK/API",
          "url": "https://whypik.com/docs/database-start#section-4"
        }
      ]
    },
    {
      "id": "database-import",
      "group": "developer",
      "title": "Nhập JSON, SQL và dữ liệu có sẵn",
      "summary": "Luồng tự phục vụ: xuất từ nền tảng cũ → xem trước cấu trúc → tạo bảng → nhập dữ liệu → cấu hình quyền.",
      "keywords": [
        "raw",
        "SQL",
        "schema",
        "csv",
        "json",
        "import",
        "migration",
        "Supabase",
        "Firebase"
      ],
      "url": "https://whypik.com/docs/database-import",
      "markdown_url": "https://whypik.com/docs/database-import.md",
      "steps": false,
      "related": [
        "schema-reference",
        "management-api",
        "database-permissions",
        "database-recovery",
        "data-migrations"
      ],
      "sections": [
        {
          "title": "An toàn và phạm vi",
          "url": "https://whypik.com/docs/database-import#section-0"
        },
        {
          "title": "SQL được hỗ trợ",
          "url": "https://whypik.com/docs/database-import#section-1"
        },
        {
          "title": "JSON cấu trúc cho AI",
          "url": "https://whypik.com/docs/database-import#section-2"
        },
        {
          "title": "Chuyển từ database khác",
          "url": "https://whypik.com/docs/database-import#section-3"
        },
        {
          "title": "CSV/JSON dữ liệu",
          "url": "https://whypik.com/docs/database-import#section-4"
        },
        {
          "title": "Giới hạn, tiến độ và thử lại",
          "url": "https://whypik.com/docs/database-import#section-5"
        },
        {
          "title": "Chưa có Query SQL tự do",
          "url": "https://whypik.com/docs/database-import#section-6"
        },
        {
          "title": "Import trong mode migration",
          "url": "https://whypik.com/docs/database-import#section-7"
        }
      ]
    },
    {
      "id": "schema-reference",
      "group": "developer",
      "title": "Tham chiếu cấu trúc bảng",
      "summary": "Schema JSON là hợp đồng giới hạn rõ ràng, không phải SQL tùy ý.",
      "keywords": [
        "column",
        "foreign key",
        "default",
        "index",
        "DDL"
      ],
      "url": "https://whypik.com/docs/schema-reference",
      "markdown_url": "https://whypik.com/docs/schema-reference.md",
      "steps": false,
      "related": [
        "database-import",
        "database-permissions",
        "data-migrations",
        "data-migrations-reference"
      ],
      "sections": [
        {
          "title": "Table và Column",
          "url": "https://whypik.com/docs/schema-reference#section-0"
        },
        {
          "title": "Giá trị dữ liệu",
          "url": "https://whypik.com/docs/schema-reference#section-1"
        },
        {
          "title": "Thay đổi bảng hiện có",
          "url": "https://whypik.com/docs/schema-reference#section-2"
        },
        {
          "title": "Database được quản lý bằng Migration",
          "url": "https://whypik.com/docs/schema-reference#section-3"
        }
      ]
    },
    {
      "id": "database-permissions",
      "group": "developer",
      "title": "Quản trị viên và quyền dữ liệu dùng chung",
      "summary": "Bảng mới chỉ Admin truy cập. Cấp quyền cho người dùng bằng bộ quy tắc liên kết nhiều bảng, chọn riêng dòng và cột.",
      "keywords": [
        "is_admin",
        "RLS",
        "role",
        "owner",
        "permission",
        "security",
        "policy_sets",
        "policy_bindings",
        "bộ quy tắc",
        "phân quyền hàng loạt"
      ],
      "url": "https://whypik.com/docs/database-permissions",
      "markdown_url": "https://whypik.com/docs/database-permissions.md",
      "steps": false,
      "related": [
        "auth-reference",
        "data-relations",
        "data-migrations",
        "data-migrations-reference"
      ],
      "sections": [
        {
          "title": "Bắt đầu: không cần viết quy tắc chặn từng bảng",
          "url": "https://whypik.com/docs/database-permissions#section-0"
        },
        {
          "title": "1. Tạo bộ quy tắc",
          "url": "https://whypik.com/docs/database-permissions#section-1"
        },
        {
          "title": "2. Chọn bảng, dòng và cột",
          "url": "https://whypik.com/docs/database-permissions#section-2"
        },
        {
          "title": "3. Xem trước và áp dụng",
          "url": "https://whypik.com/docs/database-permissions#section-3"
        },
        {
          "title": "Quyền riêng và nhiều bộ quy tắc",
          "url": "https://whypik.com/docs/database-permissions#section-4"
        },
        {
          "title": "Kiểm tra với người thật",
          "url": "https://whypik.com/docs/database-permissions#section-5"
        },
        {
          "title": "Quyền trong mode migration",
          "url": "https://whypik.com/docs/database-permissions#section-6"
        }
      ]
    },
    {
      "id": "sdk-install",
      "group": "developer",
      "title": "Cài SDK và chọn đúng loại",
      "summary": "SDK JavaScript/TypeScript cho Auth + Data; Python cho licensing và cập nhật phần mềm.",
      "keywords": [
        "npm",
        "install",
        "download",
        "typescript",
        "python"
      ],
      "url": "https://whypik.com/docs/sdk-install",
      "markdown_url": "https://whypik.com/docs/sdk-install.md",
      "steps": false,
      "related": [
        "angular-first-start",
        "node-sdk",
        "python-sdk"
      ],
      "sections": [
        {
          "title": "JavaScript / TypeScript",
          "url": "https://whypik.com/docs/sdk-install#section-0"
        },
        {
          "title": "Chọn entry point",
          "url": "https://whypik.com/docs/sdk-install#section-1"
        },
        {
          "title": "Bản khác",
          "url": "https://whypik.com/docs/sdk-install#section-2"
        }
      ]
    },
    {
      "id": "angular-first-start",
      "group": "start",
      "title": "First Start: tích hợp Angular",
      "summary": "Làm từng bước với một ứng dụng Angular chạy phía trình duyệt. Đường nhanh dùng memory session; bản chạy trên WhyPik Hosting có thể dùng cookie cùng origin.",
      "keywords": [
        "angular",
        "first start",
        "next",
        "typescript"
      ],
      "url": "https://whypik.com/docs/angular-first-start",
      "markdown_url": "https://whypik.com/docs/angular-first-start.md",
      "steps": true,
      "related": [
        "auth-reference",
        "data-queries",
        "data-writes"
      ],
      "sections": [
        {
          "title": "Chuẩn bị Project và HTTPS",
          "url": "https://whypik.com/docs/angular-first-start#section-0"
        },
        {
          "title": "Cài SDK",
          "url": "https://whypik.com/docs/angular-first-start#section-1"
        },
        {
          "title": "Tạo client",
          "url": "https://whypik.com/docs/angular-first-start#section-2"
        },
        {
          "title": "Đăng ký và xác minh",
          "url": "https://whypik.com/docs/angular-first-start#section-3"
        },
        {
          "title": "Đăng nhập và đăng xuất",
          "url": "https://whypik.com/docs/angular-first-start#section-4"
        },
        {
          "title": "Thêm Database và policy",
          "url": "https://whypik.com/docs/angular-first-start#section-5"
        },
        {
          "title": "Thử ghi, đọc và types",
          "url": "https://whypik.com/docs/angular-first-start#section-6"
        },
        {
          "title": "Chuyển sang phiên bền",
          "url": "https://whypik.com/docs/angular-first-start#section-7"
        }
      ]
    },
    {
      "id": "auth-reference",
      "group": "developer",
      "title": "Auth SDK: đăng ký, phiên và khôi phục",
      "summary": "Danh tính nằm riêng trong từng Project; tài khoản WhyPik dashboard không phải tài khoản của ứng dụng.",
      "keywords": [
        "callback",
        "allowed_origins",
        "redirect_urls",
        "redirects_automatic",
        "PROJECT_ID",
        "PROJECT_UUID",
        "env",
        "JSON",
        "Public key",
        "origin",
        "/auth/callback",
        "is_admin",
        "quản trị viên ứng dụng"
      ],
      "url": "https://whypik.com/docs/auth-reference",
      "markdown_url": "https://whypik.com/docs/auth-reference.md",
      "steps": false,
      "related": [
        "angular-first-start",
        "node-sdk",
        "auth-custom-token",
        "sdk-errors"
      ],
      "sections": [
        {
          "title": "Khóa dùng cho website và Static Hosting",
          "url": "https://whypik.com/docs/auth-reference#section-0"
        },
        {
          "title": "Quản trị viên ứng dụng đầu tiên",
          "url": "https://whypik.com/docs/auth-reference#section-1"
        },
        {
          "title": "Lấy UUID và tải cấu hình client",
          "url": "https://whypik.com/docs/auth-reference#section-2"
        },
        {
          "title": "Tên miền và callback trong cấu hình",
          "url": "https://whypik.com/docs/auth-reference#section-3"
        },
        {
          "title": "Khởi tạo và phiên",
          "url": "https://whypik.com/docs/auth-reference#section-4"
        },
        {
          "title": "Đăng ký và đăng nhập",
          "url": "https://whypik.com/docs/auth-reference#section-5"
        },
        {
          "title": "Hành động email",
          "url": "https://whypik.com/docs/auth-reference#section-6"
        },
        {
          "title": "Callback và trạng thái",
          "url": "https://whypik.com/docs/auth-reference#section-7"
        },
        {
          "title": "Phiên bền và giới hạn",
          "url": "https://whypik.com/docs/auth-reference#section-8"
        },
        {
          "title": "Hợp đồng cấu hình callback qua API quản lý",
          "url": "https://whypik.com/docs/auth-reference#section-9"
        }
      ]
    },
    {
      "id": "auth-custom-token",
      "group": "developer",
      "title": "Đăng nhập từ hệ thống có sẵn",
      "summary": "Đổi danh tính đã xác minh ở backend của bạn sang phiên WhyPik; không yêu cầu nhập lại mật khẩu vào WhyPik.",
      "keywords": [],
      "url": "https://whypik.com/docs/auth-custom-token",
      "markdown_url": "https://whypik.com/docs/auth-custom-token.md",
      "steps": false,
      "related": [
        "auth-reference",
        "database-permissions"
      ],
      "sections": [
        {
          "title": "Tin cậy từ backend",
          "url": "https://whypik.com/docs/auth-custom-token#section-0"
        },
        {
          "title": "Đổi token",
          "url": "https://whypik.com/docs/auth-custom-token#section-1"
        },
        {
          "title": "Nguồn triển khai",
          "url": "https://whypik.com/docs/auth-custom-token#section-2"
        }
      ]
    },
    {
      "id": "data-queries",
      "group": "developer",
      "title": "Data API: chọn cột, lọc và phân trang",
      "summary": "Truy vấn có giới hạn và quyền theo từng bảng/cột/dòng. Cú pháp gần Django nhưng dùng object JavaScript.",
      "keywords": [
        "select",
        "first",
        "filter",
        "orderBy",
        "cursor",
        "page",
        "eq",
        "gte",
        "in",
        "icontains",
        "isnull",
        "abortSignal"
      ],
      "url": "https://whypik.com/docs/data-queries",
      "markdown_url": "https://whypik.com/docs/data-queries.md",
      "steps": false,
      "related": [
        "data-relations",
        "data-writes",
        "sdk-errors",
        "data-admin"
      ],
      "sections": [
        {
          "title": "Đọc cơ bản",
          "url": "https://whypik.com/docs/data-queries#section-0"
        },
        {
          "title": "Toán tử filter",
          "url": "https://whypik.com/docs/data-queries#section-1"
        },
        {
          "title": "Kết hợp và kiểu",
          "url": "https://whypik.com/docs/data-queries#section-2"
        },
        {
          "title": "Cursor và page",
          "url": "https://whypik.com/docs/data-queries#section-3"
        },
        {
          "title": "Hủy và vòng đời",
          "url": "https://whypik.com/docs/data-queries#section-4"
        }
      ]
    },
    {
      "id": "data-relations",
      "group": "developer",
      "title": "Quan hệ: include và lọc qua bảng liên kết",
      "summary": "Join theo foreign key đã khai báo. Không nhận raw JOIN SQL hoặc nối bảng tùy ý.",
      "keywords": [
        "join",
        "include",
        "foreign key",
        "relation",
        "reverse_alias",
        "server__id"
      ],
      "url": "https://whypik.com/docs/data-relations",
      "markdown_url": "https://whypik.com/docs/data-relations.md",
      "steps": false,
      "related": [
        "schema-reference",
        "data-queries",
        "database-permissions"
      ],
      "sections": [
        {
          "title": "Khai báo tên quan hệ",
          "url": "https://whypik.com/docs/data-relations#section-0"
        },
        {
          "title": "Forward và reverse",
          "url": "https://whypik.com/docs/data-relations#section-1"
        },
        {
          "title": "Lọc liên kết",
          "url": "https://whypik.com/docs/data-relations#section-2"
        },
        {
          "title": "Giới hạn",
          "url": "https://whypik.com/docs/data-relations#section-3"
        }
      ]
    },
    {
      "id": "data-writes",
      "group": "developer",
      "title": "Thêm, sửa, xóa bằng SDK",
      "summary": "Một request ghi được giới hạn và có transaction; không tự retry khi chưa biết kết quả.",
      "keywords": [
        "insert",
        "update",
        "delete",
        "returning",
        "execute",
        "transaction",
        "upsert"
      ],
      "url": "https://whypik.com/docs/data-writes",
      "markdown_url": "https://whypik.com/docs/data-writes.md",
      "steps": false,
      "related": [
        "sdk-errors",
        "data-rest",
        "database-import",
        "data-admin"
      ],
      "sections": [
        {
          "title": "Insert và returning",
          "url": "https://whypik.com/docs/data-writes#section-0"
        },
        {
          "title": "Update và delete",
          "url": "https://whypik.com/docs/data-writes#section-1"
        },
        {
          "title": "Thực thi một lần",
          "url": "https://whypik.com/docs/data-writes#section-2"
        },
        {
          "title": "Lỗi và thao tác chưa rõ kết quả",
          "url": "https://whypik.com/docs/data-writes#section-3"
        }
      ]
    },
    {
      "id": "data-rest",
      "group": "developer",
      "title": "REST Data API",
      "summary": "Dùng cho ngôn ngữ chưa có SDK. Endpoint public vẫn kiểm tra key, user token và policy.",
      "keywords": [],
      "url": "https://whypik.com/docs/data-rest",
      "markdown_url": "https://whypik.com/docs/data-rest.md",
      "steps": false,
      "related": [
        "data-queries",
        "data-relations",
        "data-writes",
        "sdk-errors"
      ],
      "sections": [
        {
          "title": "Địa chỉ và xác thực",
          "url": "https://whypik.com/docs/data-rest#section-0"
        },
        {
          "title": "Payload đọc",
          "url": "https://whypik.com/docs/data-rest#section-1"
        },
        {
          "title": "Payload ghi",
          "url": "https://whypik.com/docs/data-rest#section-2"
        },
        {
          "title": "Response và lỗi",
          "url": "https://whypik.com/docs/data-rest#section-3"
        }
      ]
    },
    {
      "id": "node-sdk",
      "group": "developer",
      "title": "Node, SSR và BFF",
      "summary": "Tách secret backend và phiên từng người dùng. Node 24+ cho entry server.",
      "keywords": [],
      "url": "https://whypik.com/docs/node-sdk",
      "markdown_url": "https://whypik.com/docs/node-sdk.md",
      "steps": false,
      "related": [
        "auth-reference",
        "data-rest",
        "sdk-install",
        "data-admin"
      ],
      "sections": [
        {
          "title": "Server Data API",
          "url": "https://whypik.com/docs/node-sdk#section-0"
        },
        {
          "title": "Auth cookie trên website ngoài WhyPik",
          "url": "https://whypik.com/docs/node-sdk#section-1"
        },
        {
          "title": "Browser dùng BFF",
          "url": "https://whypik.com/docs/node-sdk#section-2"
        },
        {
          "title": "SSR và tài khoản",
          "url": "https://whypik.com/docs/node-sdk#section-3"
        }
      ]
    },
    {
      "id": "sdk-errors",
      "group": "developer",
      "title": "Lỗi, timeout và chẩn đoán SDK",
      "summary": "Dựa vào mã lỗi và request_id; không đưa password, token hoặc payload riêng tư vào log.",
      "keywords": [],
      "url": "https://whypik.com/docs/sdk-errors",
      "markdown_url": "https://whypik.com/docs/sdk-errors.md",
      "steps": false,
      "related": [
        "data-writes",
        "auth-reference",
        "admin-queues"
      ],
      "sections": [
        {
          "title": "Thời gian chờ Data API",
          "url": "https://whypik.com/docs/sdk-errors#section-0"
        },
        {
          "title": "Hàng chờ Data API và kết quả ghi",
          "url": "https://whypik.com/docs/sdk-errors#section-1"
        },
        {
          "title": "WhyPikError",
          "url": "https://whypik.com/docs/sdk-errors#section-2"
        },
        {
          "title": "Hướng xử lý",
          "url": "https://whypik.com/docs/sdk-errors#section-3"
        },
        {
          "title": "Khi báo hỗ trợ",
          "url": "https://whypik.com/docs/sdk-errors#section-4"
        }
      ]
    },
    {
      "id": "management-api",
      "group": "developer",
      "title": "REST quản lý Database và import",
      "summary": "Dành cho backend/CLI của chủ Project, tách khỏi runtime Data API của người dùng ứng dụng.",
      "keywords": [],
      "url": "https://whypik.com/docs/management-api",
      "markdown_url": "https://whypik.com/docs/management-api.md",
      "steps": false,
      "related": [
        "database-import",
        "cloud-api",
        "database-recovery",
        "data-migrations"
      ],
      "sections": [
        {
          "title": "Base và quyền",
          "url": "https://whypik.com/docs/management-api#section-0"
        },
        {
          "title": "Cấu trúc và thao tác",
          "url": "https://whypik.com/docs/management-api#section-1"
        },
        {
          "title": "Dữ liệu",
          "url": "https://whypik.com/docs/management-api#section-2"
        },
        {
          "title": "Receipt và giới hạn",
          "url": "https://whypik.com/docs/management-api#section-3"
        },
        {
          "title": "Backup và keys",
          "url": "https://whypik.com/docs/management-api#section-4"
        }
      ]
    },
    {
      "id": "store-template-api",
      "group": "developer",
      "title": "API mẫu cửa hàng và danh mục dịch vụ, sản phẩm",
      "summary": "Phiên chủ cửa hàng, snapshot có phiên bản và ảnh; phân biệt với Project Auth và Data SDK.",
      "keywords": [
        "spa",
        "template_id",
        "service-catalog",
        "categories",
        "items",
        "CAS",
        "owner",
        "SSR",
        "favicon",
        "ico",
        "software_section",
        "starter_content",
        "illustration",
        "standard"
      ],
      "url": "https://whypik.com/docs/store-template-api",
      "markdown_url": "https://whypik.com/docs/store-template-api.md",
      "steps": false,
      "related": [
        "shop-spa",
        "cloud-api",
        "auth-reference",
        "sdk-install",
        "hosting-domains",
        "shop-templates"
      ],
      "sections": [
        {
          "title": "Phạm vi và xác thực",
          "url": "https://whypik.com/docs/store-template-api#section-0"
        },
        {
          "title": "Tên hiển thị cửa hàng",
          "url": "https://whypik.com/docs/store-template-api#section-1"
        },
        {
          "title": "Tên miền riêng của cửa hàng",
          "url": "https://whypik.com/docs/store-template-api#section-2"
        },
        {
          "title": "Điểm nổi bật và các bước dùng chung",
          "url": "https://whypik.com/docs/store-template-api#section-3"
        },
        {
          "title": "Chọn mẫu và nội dung",
          "url": "https://whypik.com/docs/store-template-api#section-4"
        },
        {
          "title": "Bố cục và minh họa Phần mềm",
          "url": "https://whypik.com/docs/store-template-api#section-5"
        },
        {
          "title": "Bảng giá Phần mềm",
          "url": "https://whypik.com/docs/store-template-api#section-6"
        },
        {
          "title": "Favicon của cửa hàng",
          "url": "https://whypik.com/docs/store-template-api#section-7"
        },
        {
          "title": "Đọc và ghi danh mục",
          "url": "https://whypik.com/docs/store-template-api#section-8"
        },
        {
          "title": "Ví dụ sửa một giá từ phiên owner",
          "url": "https://whypik.com/docs/store-template-api#section-9"
        },
        {
          "title": "Ảnh mục danh mục",
          "url": "https://whypik.com/docs/store-template-api#section-10"
        },
        {
          "title": "Public API, SSR và giới hạn chức năng",
          "url": "https://whypik.com/docs/store-template-api#section-11"
        },
        {
          "title": "Cài đặt và vòng đời cửa hàng",
          "url": "https://whypik.com/docs/store-template-api#section-12"
        }
      ]
    },
    {
      "id": "cloud-api",
      "group": "developer",
      "title": "API Hosting, Storage và Project",
      "summary": "API quản lý dùng key tài khoản wpc_, chỉ đặt ở backend hoặc công cụ riêng của bạn.",
      "keywords": [
        "site_id",
        "bucket_id",
        "resource_plan_locked",
        "nhiều website",
        "bucket"
      ],
      "url": "https://whypik.com/docs/cloud-api",
      "markdown_url": "https://whypik.com/docs/cloud-api.md",
      "steps": false,
      "related": [
        "hosting",
        "storage",
        "management-api",
        "auth-reference",
        "python-sdk",
        "store-template-api",
        "cicd"
      ],
      "sections": [
        {
          "title": "Bắt đầu",
          "url": "https://whypik.com/docs/cloud-api#section-0"
        },
        {
          "title": "Khóa triển khai CI/CD",
          "url": "https://whypik.com/docs/cloud-api#section-1"
        },
        {
          "title": "Thứ tự pipeline, trạng thái và retry",
          "url": "https://whypik.com/docs/cloud-api#section-2"
        },
        {
          "title": "Ghim bộ cài WhyPik CLI",
          "url": "https://whypik.com/docs/cloud-api#section-3"
        },
        {
          "title": "Chọn thời hạn khóa",
          "url": "https://whypik.com/docs/cloud-api#section-4"
        },
        {
          "title": "Tìm contract đang chạy",
          "url": "https://whypik.com/docs/cloud-api#section-5"
        },
        {
          "title": "Chọn website hoặc bucket",
          "url": "https://whypik.com/docs/cloud-api#section-6"
        },
        {
          "title": "Endpoint theo nhóm",
          "url": "https://whypik.com/docs/cloud-api#section-7"
        },
        {
          "title": "Danh tính và tùy chọn dự án",
          "url": "https://whypik.com/docs/cloud-api#section-8"
        },
        {
          "title": "Sử dụng an toàn",
          "url": "https://whypik.com/docs/cloud-api#section-9"
        },
        {
          "title": "Phân biệt các API",
          "url": "https://whypik.com/docs/cloud-api#section-10"
        },
        {
          "title": "Tải tiếp tục Hosting và Object Storage (chunks-v1)",
          "url": "https://whypik.com/docs/cloud-api#section-11"
        }
      ]
    },
    {
      "id": "cicd",
      "group": "developer",
      "title": "CI/CD với GitHub, GitLab và Bitbucket",
      "summary": "Sinh pipeline từ whypik.toml để build Hosting hoặc triển khai Mini Server bằng khóa riêng của tài nguyên.",
      "keywords": [
        "CI/CD",
        "GitHub Actions",
        "GitLab CI",
        "Bitbucket Pipelines",
        "whypik ci init",
        "hosting",
        "api",
        "deploy key",
        "pipeline"
      ],
      "url": "https://whypik.com/docs/cicd",
      "markdown_url": "https://whypik.com/docs/cicd.md",
      "steps": false,
      "related": [
        "mini-server",
        "cloud-api",
        "hosting",
        "mini-server-admin",
        "mini-server-variables",
        "data-migrations",
        "data-migrations-reference"
      ],
      "sections": [
        {
          "title": "Chuẩn bị cấu hình và quyền",
          "url": "https://whypik.com/docs/cicd#section-0"
        },
        {
          "title": "Kiểm tra source trước khi sinh pipeline",
          "url": "https://whypik.com/docs/cicd#section-1"
        },
        {
          "title": "GitHub Actions",
          "url": "https://whypik.com/docs/cicd#section-2"
        },
        {
          "title": "GitLab CI",
          "url": "https://whypik.com/docs/cicd#section-3"
        },
        {
          "title": "Bitbucket Pipelines",
          "url": "https://whypik.com/docs/cicd#section-4"
        },
        {
          "title": "Repository có nhiều thư mục hoặc đã có CI",
          "url": "https://whypik.com/docs/cicd#section-5"
        },
        {
          "title": "Bản CLI, trạng thái và retry",
          "url": "https://whypik.com/docs/cicd#section-6"
        },
        {
          "title": "Migration trước deploy: một stage cho mỗi Database",
          "url": "https://whypik.com/docs/cicd#section-7"
        },
        {
          "title": "Tiếp tục tải ZIP Hosting",
          "url": "https://whypik.com/docs/cicd#section-8"
        }
      ]
    },
    {
      "id": "python-sdk",
      "group": "developer",
      "title": "Python SDK: license và cập nhật phần mềm",
      "summary": "SDK Python hiện phục vụ licensing v2 và cập nhật có chữ ký; chưa có Python Auth/Data SDK.",
      "keywords": [
        "python",
        "licensing",
        "activate",
        "check",
        "deactivate",
        "WhyPikUpdateClient"
      ],
      "url": "https://whypik.com/docs/python-sdk",
      "markdown_url": "https://whypik.com/docs/python-sdk.md",
      "steps": false,
      "related": [
        "shop-operations",
        "sdk-errors"
      ],
      "sections": [
        {
          "title": "Tải và cài",
          "url": "https://whypik.com/docs/python-sdk#section-0"
        },
        {
          "title": "License v2",
          "url": "https://whypik.com/docs/python-sdk#section-1"
        },
        {
          "title": "Cập nhật signed",
          "url": "https://whypik.com/docs/python-sdk#section-2"
        },
        {
          "title": "Xử lý lỗi",
          "url": "https://whypik.com/docs/python-sdk#section-3"
        }
      ]
    },
    {
      "id": "database-recovery",
      "group": "developer",
      "title": "Backup, khôi phục và lịch sử Database",
      "summary": "Kiểm tra trạng thái bản sao trước khi thực hiện thay đổi có thể mất dữ liệu.",
      "keywords": [
        "làm trống",
        "reset",
        "nhập lại",
        "backup",
        "khôi phục"
      ],
      "url": "https://whypik.com/docs/database-recovery",
      "markdown_url": "https://whypik.com/docs/database-recovery.md",
      "steps": false,
      "related": [
        "management-api",
        "admin-queues",
        "database-import",
        "data-migrations",
        "data-migrations-reference",
        "service-status"
      ],
      "sections": [
        {
          "title": "Backup",
          "url": "https://whypik.com/docs/database-recovery#section-0"
        },
        {
          "title": "Restore và rollback",
          "url": "https://whypik.com/docs/database-recovery#section-1"
        },
        {
          "title": "Ứng dụng khi thay schema",
          "url": "https://whypik.com/docs/database-recovery#section-2"
        },
        {
          "title": "Làm trống để nhập lại từ đầu",
          "url": "https://whypik.com/docs/database-recovery#section-3"
        },
        {
          "title": "Management API: làm trống Database",
          "url": "https://whypik.com/docs/database-recovery#section-4"
        },
        {
          "title": "Migration history khi restore hoặc làm trống",
          "url": "https://whypik.com/docs/database-recovery#section-5"
        }
      ]
    },
    {
      "id": "admin-first-start",
      "group": "admin",
      "title": "First Start: quản trị WhyPik",
      "summary": "Đăng nhập an toàn, tìm đúng tài khoản và xử lý công việc đang chờ.",
      "keywords": [],
      "url": "https://whypik.com/docs/admin-first-start",
      "markdown_url": "https://whypik.com/docs/admin-first-start.md",
      "steps": true,
      "related": [
        "admin-queues",
        "admin-accounts",
        "admin-security"
      ],
      "sections": [
        {
          "title": "Đăng nhập",
          "url": "https://whypik.com/docs/admin-first-start#section-0"
        },
        {
          "title": "Nhìn tổng thể",
          "url": "https://whypik.com/docs/admin-first-start#section-1"
        },
        {
          "title": "Tìm đúng người và dự án",
          "url": "https://whypik.com/docs/admin-first-start#section-2"
        },
        {
          "title": "Xử lý và ghi lý do",
          "url": "https://whypik.com/docs/admin-first-start#section-3"
        }
      ]
    },
    {
      "id": "admin-queues",
      "group": "admin",
      "title": "Hàng đợi, lỗi và lịch sử thao tác",
      "summary": "Biết ai làm gì, việc nào đang kẹt và bước tiếp theo.",
      "keywords": [
        "queue",
        "job",
        "audit",
        "lỗi",
        "pending",
        "retry",
        "kẹt"
      ],
      "url": "https://whypik.com/docs/admin-queues",
      "markdown_url": "https://whypik.com/docs/admin-queues.md",
      "steps": false,
      "related": [
        "admin-first-start",
        "admin-security",
        "hosting-domains",
        "service-status"
      ],
      "sections": [
        {
          "title": "Đọc bảng hàng đợi",
          "url": "https://whypik.com/docs/admin-queues#section-0"
        },
        {
          "title": "Khi có lỗi",
          "url": "https://whypik.com/docs/admin-queues#section-1"
        },
        {
          "title": "Ai đã thao tác",
          "url": "https://whypik.com/docs/admin-queues#section-2"
        },
        {
          "title": "Không thể xử lý từ nút",
          "url": "https://whypik.com/docs/admin-queues#section-3"
        }
      ]
    },
    {
      "id": "admin-accounts",
      "group": "admin",
      "title": "Tài khoản, gói và dịch vụ của khách",
      "summary": "Kiểm tra đúng account, quota và trạng thái dịch vụ trước khi hỗ trợ.",
      "keywords": [],
      "url": "https://whypik.com/docs/admin-accounts",
      "markdown_url": "https://whypik.com/docs/admin-accounts.md",
      "steps": false,
      "related": [
        "plans",
        "admin-queues",
        "admin-security",
        "service-status"
      ],
      "sections": [
        {
          "title": "Account và cửa hàng",
          "url": "https://whypik.com/docs/admin-accounts#section-0"
        },
        {
          "title": "Gói, billing và API keys",
          "url": "https://whypik.com/docs/admin-accounts#section-1"
        },
        {
          "title": "Auth và Database thử nghiệm",
          "url": "https://whypik.com/docs/admin-accounts#section-2"
        }
      ]
    },
    {
      "id": "admin-security",
      "group": "admin",
      "title": "Quyền quản trị và thông tin nhạy cảm",
      "summary": "Chỉ truy cập và thay đổi những gì công việc hỗ trợ yêu cầu.",
      "keywords": [],
      "url": "https://whypik.com/docs/admin-security",
      "markdown_url": "https://whypik.com/docs/admin-security.md",
      "steps": false,
      "related": [
        "admin-accounts",
        "admin-queues"
      ],
      "sections": [
        {
          "title": "Bảo vệ tài khoản",
          "url": "https://whypik.com/docs/admin-security#section-0"
        },
        {
          "title": "Xem dữ liệu và sửa dữ liệu",
          "url": "https://whypik.com/docs/admin-security#section-1"
        },
        {
          "title": "Sự cố",
          "url": "https://whypik.com/docs/admin-security#section-2"
        }
      ]
    },
    {
      "id": "mini-server",
      "group": "developer",
      "title": "Bắt đầu với Mini Server",
      "summary": "Viết API Python, chạy thử trên máy và triển khai tại /api của dự án.",
      "keywords": [
        "Python",
        "FastAPI",
        "CLI",
        "server.py",
        "backend",
        "deploy",
        "rollback",
        "nhiều backend",
        "service_id",
        "--service"
      ],
      "url": "https://whypik.com/docs/mini-server",
      "markdown_url": "https://whypik.com/docs/mini-server.md",
      "steps": true,
      "related": [
        "mini-server-sdk",
        "mini-server-admin",
        "data-queries",
        "cicd",
        "mini-server-variables",
        "mini-server-libraries",
        "mini-server-https",
        "data-admin",
        "data-migrations",
        "service-status"
      ],
      "sections": [
        {
          "title": "Chọn dự án và bật Mini Server",
          "url": "https://whypik.com/docs/mini-server#section-0"
        },
        {
          "title": "Cài WhyPik CLI và khởi tạo mã nguồn",
          "url": "https://whypik.com/docs/mini-server#section-1"
        },
        {
          "title": "Viết và chạy thử API",
          "url": "https://whypik.com/docs/mini-server#section-2"
        },
        {
          "title": "Triển khai lên WhyPik",
          "url": "https://whypik.com/docs/mini-server#section-3"
        },
        {
          "title": "Gọi API và xem kết quả",
          "url": "https://whypik.com/docs/mini-server#section-4"
        },
        {
          "title": "Quay về phiên bản trước hoặc tạm dừng",
          "url": "https://whypik.com/docs/mini-server#section-5"
        }
      ]
    },
    {
      "id": "mini-server-variables",
      "group": "developer",
      "title": "Variables và môi trường local",
      "summary": "Cấu hình theo backend, bí mật mã hóa và cách dùng cùng os.environ trên máy riêng.",
      "keywords": [
        "Variables",
        "environment",
        "os.environ",
        ".env",
        "secret",
        "API key",
        "revision",
        "rollback"
      ],
      "url": "https://whypik.com/docs/mini-server-variables",
      "markdown_url": "https://whypik.com/docs/mini-server-variables.md",
      "steps": false,
      "related": [
        "mini-server",
        "mini-server-sdk",
        "mini-server-admin",
        "cicd",
        "mini-server-libraries",
        "mini-server-https",
        "data-admin",
        "data-migrations"
      ],
      "sections": [
        {
          "title": "Thêm biến cho backend",
          "url": "https://whypik.com/docs/mini-server-variables#section-0"
        },
        {
          "title": "Đọc trong Python",
          "url": "https://whypik.com/docs/mini-server-variables#section-1"
        },
        {
          "title": "Local dùng .env riêng",
          "url": "https://whypik.com/docs/mini-server-variables#section-2"
        },
        {
          "title": "API của dashboard",
          "url": "https://whypik.com/docs/mini-server-variables#section-3"
        },
        {
          "title": "Phạm vi bảo vệ bí mật",
          "url": "https://whypik.com/docs/mini-server-variables#section-4"
        },
        {
          "title": "Chọn Database local riêng",
          "url": "https://whypik.com/docs/mini-server-variables#section-5"
        }
      ]
    },
    {
      "id": "mini-server-libraries",
      "group": "developer",
      "title": "Thư viện Python có sẵn",
      "summary": "Phiên bản runtime, bộ thư viện được cài sẵn và cài cùng phiên bản trên máy local.",
      "keywords": [
        "Python",
        "runtime",
        "Pillow",
        "NumPy",
        "pandas",
        "OpenAI",
        "Anthropic",
        "Gemini",
        "Vision",
        "pip",
        "thư viện"
      ],
      "url": "https://whypik.com/docs/mini-server-libraries",
      "markdown_url": "https://whypik.com/docs/mini-server-libraries.md",
      "steps": false,
      "related": [
        "mini-server",
        "mini-server-sdk",
        "mini-server-variables",
        "cicd",
        "mini-server-https"
      ],
      "sections": [
        {
          "title": "Runtime và phạm vi sử dụng",
          "url": "https://whypik.com/docs/mini-server-libraries#section-0"
        },
        {
          "title": "Danh sách thư viện",
          "url": "https://whypik.com/docs/mini-server-libraries#section-1"
        },
        {
          "title": "Cài trên máy local",
          "url": "https://whypik.com/docs/mini-server-libraries#section-2"
        },
        {
          "title": "Ví dụ Pillow và NumPy",
          "url": "https://whypik.com/docs/mini-server-libraries#section-3"
        },
        {
          "title": "Dịch vụ AI và tài khoản bên ngoài",
          "url": "https://whypik.com/docs/mini-server-libraries#section-4"
        },
        {
          "title": "Thư viện đã cài và RAM khi chạy",
          "url": "https://whypik.com/docs/mini-server-libraries#section-5"
        }
      ]
    },
    {
      "id": "mini-server-sdk",
      "group": "developer",
      "title": "Mini Server: API và SDK Python",
      "summary": "Handler, danh tính request.user, Admin Database theo Project, truy vấn và kết quả chưa xác định.",
      "keywords": [
        "Request",
        "Response",
        "filter",
        "order_by",
        "include",
        "insert",
        "update",
        "delete",
        "Python",
        "role"
      ],
      "url": "https://whypik.com/docs/mini-server-sdk",
      "markdown_url": "https://whypik.com/docs/mini-server-sdk.md",
      "steps": false,
      "related": [
        "mini-server",
        "data-queries",
        "data-relations",
        "data-writes",
        "auth-reference",
        "mini-server-libraries",
        "mini-server-https",
        "data-admin",
        "data-migrations"
      ],
      "sections": [
        {
          "title": "Khai báo handler",
          "url": "https://whypik.com/docs/mini-server-sdk#section-0"
        },
        {
          "title": "Đọc và phân trang",
          "url": "https://whypik.com/docs/mini-server-sdk#section-1"
        },
        {
          "title": "Thêm, sửa, xóa",
          "url": "https://whypik.com/docs/mini-server-sdk#section-2"
        },
        {
          "title": "Quyền truy cập và giới hạn",
          "url": "https://whypik.com/docs/mini-server-sdk#section-3"
        },
        {
          "title": "Vòng đời sandbox và bộ nhớ",
          "url": "https://whypik.com/docs/mini-server-sdk#section-4"
        },
        {
          "title": "API tải ZIP có thể tiếp tục",
          "url": "https://whypik.com/docs/mini-server-sdk#section-5"
        }
      ]
    },
    {
      "id": "mini-server-admin",
      "group": "admin",
      "title": "Quản lý Mini Server",
      "summary": "Xem phiên bản, tác vụ lỗi, mức dùng và runtime chưa dọn xong.",
      "keywords": [
        "sandbox",
        "gVisor",
        "timeout",
        "Mini Server",
        "hàng đợi",
        "lỗi",
        "quota"
      ],
      "url": "https://whypik.com/docs/mini-server-admin",
      "markdown_url": "https://whypik.com/docs/mini-server-admin.md",
      "steps": false,
      "related": [
        "mini-server",
        "mini-server-variables"
      ],
      "sections": [
        {
          "title": "Xác định dịch vụ bị lỗi",
          "url": "https://whypik.com/docs/mini-server-admin#section-0"
        },
        {
          "title": "Tạm dừng, rollback và dọn dữ liệu",
          "url": "https://whypik.com/docs/mini-server-admin#section-1"
        },
        {
          "title": "Đọc hạn mức đúng phạm vi",
          "url": "https://whypik.com/docs/mini-server-admin#section-2"
        }
      ]
    },
    {
      "id": "shop-templates",
      "group": "shop",
      "title": "Chọn mẫu theo ngành",
      "summary": "Tạo một cửa hàng có nội dung sẵn, sửa dịch vụ, ảnh và từng khu vực theo thương hiệu.",
      "keywords": [
        "template",
        "salon",
        "fitness",
        "giáo dục",
        "studio",
        "nhà hàng",
        "villa",
        "garage",
        "dịch vụ tại nhà",
        "phần mềm",
        "minh họa",
        "gói khởi đầu"
      ],
      "url": "https://whypik.com/docs/shop-templates",
      "markdown_url": "https://whypik.com/docs/shop-templates.md",
      "steps": true,
      "related": [
        "shop-content",
        "shop-first-start",
        "shop-spa",
        "store-template-api",
        "hosting-domains",
        "shop-settings"
      ],
      "sections": [
        {
          "title": "Chọn phong cách cửa hàng",
          "url": "https://whypik.com/docs/shop-templates#section-0"
        },
        {
          "title": "Chỉnh nội dung có sẵn",
          "url": "https://whypik.com/docs/shop-templates#section-1"
        },
        {
          "title": "Sửa dịch vụ và giá",
          "url": "https://whypik.com/docs/shop-templates#section-2"
        },
        {
          "title": "Bật liên hệ và chia sẻ",
          "url": "https://whypik.com/docs/shop-templates#section-3"
        }
      ]
    },
    {
      "id": "shop-settings",
      "group": "shop",
      "title": "Tên miền, tạm ngừng bán và xóa cửa hàng",
      "summary": "Quản lý địa chỉ trong Cài đặt cửa hàng. Tạm ngừng nhận đơn mà vẫn phục vụ khách đã mua, hoặc xóa cửa hàng chưa có giao dịch.",
      "keywords": [
        "cài đặt",
        "tên miền",
        "domain",
        "DNS",
        "HTTPS",
        "tạm ngừng",
        "mở bán",
        "xóa cửa hàng"
      ],
      "url": "https://whypik.com/docs/shop-settings",
      "markdown_url": "https://whypik.com/docs/shop-settings.md",
      "steps": false,
      "related": [
        "shop-first-start",
        "shop-operations",
        "hosting-domains",
        "project-management"
      ],
      "sections": [
        {
          "title": "Mở Cài đặt cửa hàng",
          "url": "https://whypik.com/docs/shop-settings#section-0"
        },
        {
          "title": "Địa chỉ mặc định và tên miền chính",
          "url": "https://whypik.com/docs/shop-settings#section-1"
        },
        {
          "title": "Kết nối tên miền riêng",
          "url": "https://whypik.com/docs/shop-settings#section-2"
        },
        {
          "title": "Tạm ngừng bán và mở lại",
          "url": "https://whypik.com/docs/shop-settings#section-3"
        },
        {
          "title": "Xóa cửa hàng chưa có giao dịch",
          "url": "https://whypik.com/docs/shop-settings#section-4"
        }
      ]
    },
    {
      "id": "using-docs",
      "group": "start",
      "title": "Tìm và đọc tài liệu WhyPik",
      "summary": "Chọn đúng nhóm hướng dẫn, tìm theo việc muốn làm và chia sẻ nội dung công khai với công cụ hỗ trợ.",
      "keywords": [
        "tài liệu",
        "docs",
        "AI",
        "markdown",
        "tìm kiếm",
        "hướng dẫn"
      ],
      "url": "https://whypik.com/docs/using-docs",
      "markdown_url": "https://whypik.com/docs/using-docs.md",
      "steps": false,
      "related": [
        "first-start",
        "shop-settings",
        "sdk-install"
      ],
      "sections": [
        {
          "title": "Chọn đúng hướng dẫn",
          "url": "https://whypik.com/docs/using-docs#section-0"
        },
        {
          "title": "Đọc toàn bộ hoặc làm từng bước",
          "url": "https://whypik.com/docs/using-docs#section-1"
        },
        {
          "title": "Dùng tài liệu với AI hoặc công cụ khác",
          "url": "https://whypik.com/docs/using-docs#section-2"
        }
      ]
    },
    {
      "id": "mini-server-https",
      "group": "developer",
      "title": "Gọi HTTPS và dịch vụ bên ngoài",
      "summary": "Gọi API AI, gửi email qua API và tải dữ liệu bằng HTTPS trong Mini Server.",
      "keywords": [
        "HTTPS",
        "outbound",
        "requests",
        "httpx",
        "OpenAI",
        "Anthropic",
        "Gemini",
        "Vision",
        "proxy",
        "timeout",
        "SSRF",
        "SMTP"
      ],
      "url": "https://whypik.com/docs/mini-server-https",
      "markdown_url": "https://whypik.com/docs/mini-server-https.md",
      "steps": false,
      "related": [
        "mini-server",
        "mini-server-sdk",
        "mini-server-variables",
        "mini-server-libraries"
      ],
      "sections": [
        {
          "title": "Giao thức và địa chỉ được hỗ trợ",
          "url": "https://whypik.com/docs/mini-server-https#section-0"
        },
        {
          "title": "Thử một request không cần API key",
          "url": "https://whypik.com/docs/mini-server-https#section-1"
        },
        {
          "title": "Giới hạn trong một invocation",
          "url": "https://whypik.com/docs/mini-server-https#section-2"
        },
        {
          "title": "Khóa nhà cung cấp và cách đọc lỗi",
          "url": "https://whypik.com/docs/mini-server-https#section-3"
        },
        {
          "title": "Khác biệt giữa local và runtime",
          "url": "https://whypik.com/docs/mini-server-https#section-4"
        }
      ]
    },
    {
      "id": "data-admin",
      "group": "developer",
      "title": "Admin SDK: Database của Project",
      "summary": "Python và Node có toàn quyền dữ liệu, cấu trúc Database trong Project; client SDK tiếp tục áp dụng policy người dùng.",
      "keywords": [
        "AdminClient",
        "WhyPikAdmin",
        "wpk_admin",
        "WHYPIK_ADMIN_KEY",
        "schema",
        "apply_schema",
        "applySchema",
        "operation",
        "migration",
        "request.user"
      ],
      "url": "https://whypik.com/docs/data-admin",
      "markdown_url": "https://whypik.com/docs/data-admin.md",
      "steps": false,
      "related": [
        "mini-server-sdk",
        "mini-server-variables",
        "data-queries",
        "data-writes",
        "cicd",
        "data-migrations",
        "data-migrations-reference"
      ],
      "sections": [
        {
          "title": "Cấp khóa cho máy chủ tin cậy",
          "url": "https://whypik.com/docs/data-admin#section-0"
        },
        {
          "title": "Python trên local hoặc máy chủ khác",
          "url": "https://whypik.com/docs/data-admin#section-1"
        },
        {
          "title": "Node trên máy chủ",
          "url": "https://whypik.com/docs/data-admin#section-2"
        },
        {
          "title": "Đọc và thay đổi cấu trúc có revision",
          "url": "https://whypik.com/docs/data-admin#section-3"
        },
        {
          "title": "HTTP và kết quả chưa xác định",
          "url": "https://whypik.com/docs/data-admin#section-4"
        },
        {
          "title": "Local Database và Migration có lịch sử",
          "url": "https://whypik.com/docs/data-admin#section-5"
        }
      ]
    },
    {
      "id": "data-migrations",
      "group": "developer",
      "title": "Bắt đầu với Database Migration",
      "summary": "Khai báo cấu trúc trong Git, thử với Database local, xem kế hoạch rồi áp dụng vào đúng Project hosted.",
      "keywords": [
        "migration",
        "whypik db",
        "local",
        "Docker",
        "PostgreSQL",
        "baseline",
        "schema.json",
        "plan",
        "migrate"
      ],
      "url": "https://whypik.com/docs/data-migrations",
      "markdown_url": "https://whypik.com/docs/data-migrations.md",
      "steps": true,
      "related": [
        "data-migrations-reference",
        "data-admin",
        "schema-reference",
        "mini-server-variables",
        "cicd",
        "database-recovery"
      ],
      "sections": [
        {
          "title": "Chuẩn bị bản CLI và môi trường thử",
          "url": "https://whypik.com/docs/data-migrations#section-0"
        },
        {
          "title": "Khai báo bảng đầu tiên",
          "url": "https://whypik.com/docs/data-migrations#section-1"
        },
        {
          "title": "Áp dụng local và kiểm tra lịch sử",
          "url": "https://whypik.com/docs/data-migrations#section-2"
        },
        {
          "title": "Chạy ứng dụng với đúng Database",
          "url": "https://whypik.com/docs/data-migrations#section-3"
        },
        {
          "title": "Liên kết Project thử và xem plan",
          "url": "https://whypik.com/docs/data-migrations#section-4"
        },
        {
          "title": "Áp dụng kế hoạch đã review",
          "url": "https://whypik.com/docs/data-migrations#section-5"
        }
      ]
    },
    {
      "id": "data-migrations-reference",
      "group": "developer",
      "title": "Migration: hợp đồng, baseline và phục hồi",
      "summary": "Tra cứu file, lệnh, quyền, rủi ro, nhánh Git, SDK, CI và cách xử lý kết quả chưa xác định.",
      "keywords": [
        "migration",
        "baseline",
        "drift",
        "checksum",
        "lineage",
        "generation",
        "security_revision",
        "operation",
        "migration_outcome_unknown",
        "whypik-schema-v1",
        "whypik-json-v1",
        "expand backfill contract"
      ],
      "url": "https://whypik.com/docs/data-migrations-reference",
      "markdown_url": "https://whypik.com/docs/data-migrations-reference.md",
      "steps": false,
      "related": [
        "data-migrations",
        "schema-reference",
        "database-permissions",
        "data-admin",
        "database-recovery",
        "cicd"
      ],
      "sections": [
        {
          "title": "Availability và capabilities",
          "url": "https://whypik.com/docs/data-migrations-reference#section-0"
        },
        {
          "title": "Nguồn sự thật và file portable",
          "url": "https://whypik.com/docs/data-migrations-reference#section-1"
        },
        {
          "title": "Lệnh và kết quả",
          "url": "https://whypik.com/docs/data-migrations-reference#section-2"
        },
        {
          "title": "Cấp khóa Migration riêng cho CI",
          "url": "https://whypik.com/docs/data-migrations-reference#section-3"
        },
        {
          "title": "Phạm vi thay đổi và dữ liệu hiện có",
          "url": "https://whypik.com/docs/data-migrations-reference#section-4"
        },
        {
          "title": "Thêm cột, đổi tên, index và policy",
          "url": "https://whypik.com/docs/data-migrations-reference#section-5"
        },
        {
          "title": "Baseline Database đã có dữ liệu",
          "url": "https://whypik.com/docs/data-migrations-reference#section-6"
        },
        {
          "title": "Plan tới một migration trong chuỗi",
          "url": "https://whypik.com/docs/data-migrations-reference#section-7"
        },
        {
          "title": "Replay toàn bộ lịch sử trên Database local",
          "url": "https://whypik.com/docs/data-migrations-reference#section-8"
        },
        {
          "title": "API backup riêng của local replay",
          "url": "https://whypik.com/docs/data-migrations-reference#section-9"
        },
        {
          "title": "Expand → backfill → contract",
          "url": "https://whypik.com/docs/data-migrations-reference#section-10"
        },
        {
          "title": "Nhánh Git, plan cũ và drift",
          "url": "https://whypik.com/docs/data-migrations-reference#section-11"
        },
        {
          "title": "Timeout, partial batch và API chưa sẵn sàng",
          "url": "https://whypik.com/docs/data-migrations-reference#section-12"
        },
        {
          "title": "Backup, restore và reset",
          "url": "https://whypik.com/docs/data-migrations-reference#section-13"
        },
        {
          "title": "Đối soát quyền an toàn sau restore",
          "url": "https://whypik.com/docs/data-migrations-reference#section-14"
        },
        {
          "title": "Python, Node và HTTP",
          "url": "https://whypik.com/docs/data-migrations-reference#section-15"
        }
      ]
    },
    {
      "id": "store-storage-api",
      "group": "developer",
      "title": "API Storage cửa hàng: tải tiếp theo phần",
      "summary": "Tải file độc lập vào cửa hàng, tiếp tục sau mất mạng và kiểm tra trạng thái quét.",
      "keywords": [
        "chunks-v1",
        "Storage API",
        "upload",
        "Idempotency-Key",
        "X-Chunk-SHA256",
        "ClamAV",
        "48 giờ"
      ],
      "url": "https://whypik.com/docs/store-storage-api",
      "markdown_url": "https://whypik.com/docs/store-storage-api.md",
      "steps": false,
      "related": [
        "storage",
        "shop-content",
        "cloud-api"
      ],
      "sections": [
        {
          "title": "Chọn đúng API và quyền",
          "url": "https://whypik.com/docs/store-storage-api#section-0"
        },
        {
          "title": "Hợp đồng chunks-v1",
          "url": "https://whypik.com/docs/store-storage-api#section-1"
        },
        {
          "title": "Ví dụ Python chạy được",
          "url": "https://whypik.com/docs/store-storage-api#section-2"
        }
      ]
    }
  ]
}
