📣 Chonj vẫn từng ngày phát triển và cập nhật nên sẽ có hình ảnh và thông tin sai lệch chút. Bạn hãy cùng Chonj cập nhật lại nhé!
Chonj.vn

Cài đặt App Chonj.vnMở nhanh từ màn hình chính, nhận nhắc giờ ăn

Chonj.vn cho nhà phát triển

🧩 Chonj Open API & Widget nhúng

Đưa vòng quay "Hôm nay ăn gì?" lên website, blog ẩm thực hay ứng dụng của bạn chỉ với một đoạn mã, hoặc gọi API để lấy danh mục, món và quay ngẫu nhiên theo bộ lọc.

🎡 Widget nhúng ⚙️ REST API

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

  1. 1️⃣

    Đăng ký đối tác

    Dùng chính tài khoản Chonj.vn của bạn (tài khoản nhà tài trợ cũng được).

  2. 2️⃣

    Tạo API key

    Publishable cho widget trên trình duyệt, Secret cho máy chủ.

  3. 3️⃣

    Dán mã nhúng / gọi API

    Lấy mã nhúng có xem trước ngay trong bảng điều khiển.

🎡 Widget vòng quay nhúng

Dán đoạn mã sau vào nơi muốn hiện vòng quay. Widget tự lấy màu theo mùa của Chonj.vn, chạy trong Shadow DOM nên không ảnh hưởng CSS của trang bạn, nhẹ và không cần thư viện nào.

<div data-chonj-widget data-key="chj_pub_xxxxxxxx" data-tab="an-gi"></div>
<script src="https://api.chonj.vn/widget/v1.js" async></script>
Thuộc tínhGiá trịÝ nghĩa
data-keychj_pub_…Publishable key (bắt buộc). Chỉ chạy trên tên miền bạn đã đăng ký.
data-taban-gi | uong-gi | nau-gi | di-dau | du-lich | tang-giDanh mục của vòng quay.
data-sizecompact | fullGọn (360px) hoặc rộng (640px).
data-themeauto | light | darkauto: màu & ruy băng theo mùa (Tết, Trung Thu, Giáng sinh…) của Chonj.vn.
data-color#ff6b00Màu thương hiệu riêng của bạn.
data-localevi | enNgôn ngữ của widget.
data-cityHà NộiTỉnh / thành của khách: hiện chi nhánh tài trợ gần đó (nếu có).

Không chèn được script? Dùng iframe

Cho Blogger và các CMS chặn thẻ <script>:

<iframe src="https://api.chonj.vn/embed/spin?key=chj_pub_xxxxxxxx&tab=an-gi" title="Chonj.vn" loading="lazy" style="width:100%;max-width:420px;height:560px;border:0;border-radius:20px"></iframe>

⚙️ REST API

Địa chỉ gốc:

https://api.chonj.vn/api/v1

Gửi key qua header Authorization: Bearer <key> (hoặc X-Chonj-Key). Dữ liệu trả về dạng JSON { "data": …, "meta": … }; thêm ?locale=en để nhận tiếng Anh. Secret key không bao giờ được đặt trên URL hay trong mã chạy trên trình duyệt.

EndpointQuyềnMô tả
GET /categoriesreadDanh mục (Ăn gì, Uống gì, Nấu gì…) kèm bộ lọc được hỗ trợ.
GET /itemsreadDanh sách món, phân trang. Lọc: category, q, dish_type, cuisine, drink_type, meal_type, recipient, occasion, gift_budget, group, price_min, price_max; per_page (≤ 50), page, sort=id|title|random.
GET /items/{id}readChi tiết một món (id công khai, ví dụ k3x9ab).
POST /spinspinQuay ngẫu nhiên có trọng số: category (bắt buộc) + các bộ lọc trên, exclude (id đã ra), city.
GET /themereadGiao diện theo mùa đang dùng (màu, ruy băng).
GET /ping—Kiểm tra kết nối, không cần key.

Ví dụ

curl -X POST https://api.chonj.vn/api/v1/spin \
  -H "Authorization: Bearer chj_live_xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"category":"an-gi","price_max":60000}'
const res = await fetch('https://api.chonj.vn/api/v1/items?category=an-gi&per_page=10', {
  headers: { Authorization: 'Bearer ' + process.env.CHONJ_SECRET_KEY },
});
const { data, meta } = await res.json();
{
    "data": {
        "id": "k3x9ab",
        "title": "Phở bò",
        "image": "https://…",
        "price": {
            "min": 45000,
            "max": 65000,
            "label": "Từ 45.000đ - 65.000đ",
            "currency": "VND"
        },
        "category": {
            "slug": "an-gi",
            "name": "Ăn gì?",
            "icon": "🍜"
        },
        "maps_url": "https://www.google.com/maps/search/…",
        "url": "https://chonj.vn/?tab=an-gi&q=…",
        "sponsored": false,
        "sponsor": null
    },
    "meta": {
        "plan": "free",
        "branding": {
            "powered_by": true,
            "text": "Powered by Chonj.vn",
            "url": "https://chonj.vn/…"
        },
        "locale": "vi",
        "pool_size": 84
    }
}

Mã lỗi

401missing_key, invalid_key, key_revoked, key_expired, secret_key_in_url
403client_inactive (đối tác chưa kích hoạt / tạm khóa), insufficient_scope, domain_not_allowed
404unknown_category, item_not_found, no_items, not_found
422invalid_request (kèm "fields")
429rate_limited (quá số lượt/phút), quota_exceeded (hết lượt trong ngày); xem header Retry-After
503api_disabled (Open API đang tạm tắt)

Mỗi phản hồi có header X-RateLimit-Limit, X-RateLimit-Remaining và (gói có hạn mức ngày) X-Quota-Limit, X-Quota-Remaining.

📦 Các gói API

Free

Miễn phí

  • ⚡ 60 lượt gọi / phút
  • 📊 5.000 lượt/ngày
  • 🔑 2 key · 🌐 3 tên miền
  • 🏷️ Hiện "Powered by Chonj.vn"
  • 📣 Có chen món tài trợ

Partner

Miễn phí

  • ⚡ 300 lượt gọi / phút
  • 📊 50.000 lượt/ngày
  • 🔑 5 key · 🌐 10 tên miền
  • 🏷️ Hiện "Powered by Chonj.vn"
  • 🚫 Không quảng cáo

Premium

Miễn phí

  • ⚡ 1.000 lượt gọi / phút
  • 📊 Không giới hạn
  • 🔑 20 key · 🌐 50 tên miền
  • ✨ Ẩn "Powered by"
  • 🚫 Không quảng cáo

Gói tài trợ của nhà tài trợ có thể đã kèm sẵn gói API cao hơn. Muốn nâng gói? Liên hệ Chonj.vn qua trang Hỗ trợ.

📜 Điều khoản ngắn gọn

  • Gói có "Powered by Chonj.vn" phải giữ dòng này cùng liên kết về Chonj.vn.
  • Món "Tài trợ" luôn được gắn nhãn rõ ràng, không được che hoặc đổi nhãn.
  • Không lưu trữ lại toàn bộ dữ liệu Chonj.vn để dựng dịch vụ cạnh tranh; dữ liệu được làm mới liên tục qua API.
  • Key bị lộ: thu hồi ngay trong bảng điều khiển và tạo key mới.
⚖️ Đọc đầy đủ Điều khoản sử dụng API