API tin tức · Cuộc thi trực tuyến - Online Contest
Banner header mẫu
Thứ Bảy, ngày 30 tháng 05 năm 2026

API tin tức công khai

REST API JSON cho phép mobile app / widget / chatbot lấy tin tức đã đăng từ Cuộc thi trực tuyến - Online Contest.

Read-only (GET) Không cần token Throttle 120 req/phút/IP Cache 3 phút

Endpoints

Click Mở để xem dữ liệu trực tiếp (?pretty=1 cho JSON indent đẹp).

GET
https://thitructuyen-vanhoa.vnptdaklak.vn/api/posts

Danh sách bài đã đăng (kèm phân trang).

GET
https://thitructuyen-vanhoa.vnptdaklak.vn/api/posts/{slug}

Chi tiết 1 bài theo slug (kèm body, attachments, linked audio/video).

RSS
https://thitructuyen-vanhoa.vnptdaklak.vn/rss

RSS 2.0 feed — dùng với Feedly, Inoreader, Thunderbird…

Mở RSS

Query parameters

Param Loại Mặc định Mô tả
type string Lọc theo loại: news, resource, video, audio, event
category slug Lọc theo slug chuyên mục. VD: thong-bao, chi-dao-dieu-hanh, tin-dia-phuong, cai-cach-hc, doanh-nghiep, cong-dan
tag slug Lọc theo tag (hashtag).
q string Tìm trong tiêu đề + mô tả ngắn.
limit int (1–50) 20 Số bài mỗi trang.
page int 1 Phân trang.
pretty bool 0 Format JSON cho dễ đọc trên browser.

Ví dụ response

Gọi GET https://thitructuyen-vanhoa.vnptdaklak.vn/api/posts?type=news&limit=2

{
  "data": [
    {
      "id": "01HKZ8…",        // ULID public_id
      "type": "news",
      "title": "Khai mạc cuộc thi tìm hiểu pháp luật 2026",
      "slug": "khai-mac-cuoc-thi-tim-hieu-phap-luat-2026",
      "excerpt": "Ngày 19/05, BTC chính thức khai mạc…",
      "cover_image": "https://…/storage/posts/abc.jpg",
      "video_url": null,
      "is_featured": true,
      "published_at": "2026-05-19T08:30:00+07:00",
      "category": { "name": "Tin sự kiện", "slug": "tin-su-kien" },
      "author": { "name": "Nguyễn Văn A" },
      "tags": [],
      "link": "https://…/posts/01HKZ8…"
    }
  ],
  "meta": {
    "total": 128,
    "per_page": 2,
    "current_page": 1,
    "last_page": 64
  },
  "links": {
    "self": "…/api/posts?type=news&limit=2",
    "rss":  "…/rss",
    "docs": "…/api"
  }
}

Cách gọi

cURL
curl -s "https://thitructuyen-vanhoa.vnptdaklak.vn/api/posts?type=news&limit=5"
JavaScript (fetch)
const r = await fetch("https://thitructuyen-vanhoa.vnptdaklak.vn/api/posts?limit=10");
const { data, meta } = await r.json();
console.log(meta.total, data[0].title);
Python (requests)
import requests
r = requests.get("https://thitructuyen-vanhoa.vnptdaklak.vn/api/posts", params={"type": "news", "limit": 20})
posts = r.json()["data"]
for p in posts:
    print(p["title"], p["link"])

Lưu ý

  • API chỉ đọc — không hỗ trợ POST/PUT/DELETE. Trả lỗi 405 nếu gọi method khác GET.
  • Chỉ trả về bài có status = publishedpublished_at ≤ hiện tại. Bài draft/pending/scheduled tự ẩn.
  • Rate limit 120 req/phút/IP — vượt sẽ nhận HTTP 429.
  • Trường body chỉ có ở endpoint chi tiết bài, không có trong list (giảm dung lượng).
  • Khi đổi locale (vi/en) qua session, API trả về bài tương ứng — bài chưa dịch sẽ tự ẩn ở locale=en.