API Documentation
Kelola artikel dan kategori secara terprogram menggunakan REST API SecuilInfo. Dapatkan akses ke semua fitur dengan API key.
Pendahuluan
API ini memungkinkan Anda untuk mengelola konten SecuilInfo secara terprogram. Gunakan API untuk mengintegrasikan konten dengan aplikasi mobile, static site generator, atau layanan pihak ketiga. Semua response dalam format JSON.
Autentikasi
Endpoint publik (GET) tidak memerlukan autentikasi. Endpoint write (POST, PUT, PATCH, DELETE) memerlukan API key yang dikirim melalui header.
curl http://localhost:8080/api/articles \ -H "X-API-Key: YOUR_API_KEY"
Alternatif
API key juga dapat dikirim via Authorization: Bearer <key>
Base URL
HTTP Status Codes
| Code | Description |
|---|---|
| 200 | OK — Request berhasil |
| 201 | Created — Resource berhasil dibuat |
| 400 | Bad Request — Request tidak valid |
| 401 | Unauthorized — API key tidak disertakan |
| 403 | Forbidden — API key tidak valid / tidak aktif |
| 404 | Not Found — Resource tidak ditemukan |
| 409 | Conflict — Kategori masih memiliki artikel |
| 422 | Unprocessable Entity — Validasi gagal |
| 429 | Too Many Requests — Rate limit tercapai |
| 500 | Internal Server Error |
Rate Limiting
Publik (GET)
60/menit
Terautentikasi
1.000/menit
Response menyertakan header X-RateLimit-Limit, X-RateLimit-Remaining, dan X-RateLimit-Reset.
List Articles
/api/articlesMendapatkan daftar artikel yang dipublikasikan dengan paginasi.
Query params: page, per_page, category_id
curl "http://localhost:8080/api/articles?page=1&per_page=10"
{
"status": "success",
"message": "OK",
"data": [
{
"id": 1,
"title": "Judul Artikel",
"slug": "judul-artikel",
"excerpt": "Cuplikan artikel...",
"featured_image": "https://...",
"category": {
"id": 1,
"name": "Teknologi",
"slug": "teknologi"
},
"author": "Admin",
"published_at": "2026-06-01T10:00:00+07:00"
}
],
"meta": {
"page": 1,
"per_page": 10,
"total": 24,
"total_pages": 3
}
}Get Article
/api/articles/{id}Mendapatkan detail artikel berdasarkan ID, termasuk artikel terkait.
curl http://localhost:8080/api/articles/1
{
"status": "success",
"message": "OK",
"data": {
"id": 1,
"title": "Judul Artikel",
"slug": "judul-artikel",
"content": "<p>Konten lengkap artikel...</p>",
"excerpt": "Cuplikan...",
"featured_image": "https://...",
"alt_text": "Deskripsi gambar",
"meta_title": "SEO Title",
"meta_description": "SEO Description",
"canonical_url": null,
"is_published": true,
"category": { "id": 1, "name": "Teknologi", "slug": "teknologi" },
"author": "Admin",
"related_articles": [
{ "id": 2, "title": "Artikel Terkait", "slug": "artikel-terkait" }
],
"published_at": "2026-06-01T10:00:00+07:00",
"created_at": "2026-06-01T09:00:00+07:00",
"updated_at": "2026-06-01T10:00:00+07:00"
}
}Create Article
/api/articlesMembuat artikel baru. Auth required
curl -X POST http://localhost:8080/api/articles \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{
"title": "Judul Baru",
"content": "Isi artikel minimal 50 karakter untuk bisa dipublikasikan...",
"excerpt": "Cuplikan opsional",
"category_id": 1,
"is_published": true
}'{
"status": "success",
"message": "Article created",
"data": {
"id": 25,
"title": "Judul Baru",
"slug": "judul-baru",
"is_published": true
}
}| Field | Tipe | Keterangan |
|---|---|---|
| title | string | Required, max 255 |
| content | string | Required, min 50 |
| excerpt | string | Opsional, max 500 |
| category_id | int | Opsional |
| featured_image | url | Opsional, max 500 |
| alt_text | string | Opsional, max 255 |
| meta_title | string | Opsional, max 255 |
| meta_description | string | Opsional, max 320 |
| is_published | bool | Default: false |
Update Article
/api/articles/{id}Update penuh artikel. Semua field required. Auth required
curl -X PUT http://localhost:8080/api/articles/1 \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{
"title": "Judul Diubah",
"content": "Konten artikel yang sudah diperbarui dengan minimal 50 karakter...",
"is_published": true
}'{
"status": "success",
"message": "Article updated",
"data": {
"id": 1,
"title": "Judul Diubah",
"slug": "judul-diubah"
}
}Patch Article
/api/articles/{id}Update parsial artikel. Hanya field yang dikirim akan diubah. Auth required
curl -X PATCH http://localhost:8080/api/articles/1 \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{"title": "Judul Baru Saja"}'{
"status": "success",
"message": "Article patched",
"data": {
"id": 1,
"title": "Judul Baru Saja"
}
}Delete Article
/api/articles/{id}Menghapus artikel. Auth required
curl -X DELETE http://localhost:8080/api/articles/1 \ -H "X-API-Key: YOUR_API_KEY"
{
"status": "success",
"message": "Article deleted",
"data": null
}List Categories
/api/categoriesMendapatkan semua kategori dengan jumlah artikel.
curl http://localhost:8080/api/categories
{
"status": "success",
"message": "OK",
"data": [
{
"id": 1,
"name": "Teknologi",
"slug": "teknologi",
"description": "Berita teknologi terkini",
"article_count": 12,
"created_at": "2026-01-01T00:00:00+07:00",
"updated_at": "2026-06-01T10:00:00+07:00"
}
]
}Get Category
/api/categories/{id}Detail kategori beserta artikel di dalamnya (paginasi).
curl "http://localhost:8080/api/categories/1?page=1&per_page=5"
{
"status": "success",
"message": "OK",
"data": {
"id": 1,
"name": "Teknologi",
"slug": "teknologi",
"description": "Berita teknologi terkini",
"articles": [
{
"id": 3,
"title": "Artikel dalam kategori",
"slug": "artikel-dalam-kategori",
"excerpt": "Cuplikan...",
"featured_image": null,
"alt_text": null,
"author": "Admin",
"published_at": "2026-06-01T10:00:00+07:00"
}
]
},
"meta": {
"page": 1,
"per_page": 5,
"total": 8,
"total_pages": 2
}
}Create Category
/api/categoriesMembuat kategori baru. Auth required
curl -X POST http://localhost:8080/api/categories \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{"name": "Kategori Baru"}'{
"status": "success",
"message": "Category created",
"data": {
"id": 7,
"name": "Kategori Baru",
"slug": "kategori-baru"
}
}| Field | Tipe | Keterangan |
|---|---|---|
| name | string | Required, max 100 |
| slug | string | Opsional (auto-generated) |
| description | string | Opsional, max 500 |
Update Category
/api/categories/{id}Update penuh kategori. Auth required
curl -X PUT http://localhost:8080/api/categories/1 \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{"name": "Kategori Diubah"}'{
"status": "success",
"message": "Category updated",
"data": {
"id": 1,
"name": "Kategori Diubah",
"slug": "kategori-diubah"
}
}Patch Category
/api/categories/{id}Update parsial kategori. Auth required
curl -X PATCH http://localhost:8080/api/categories/1 \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{"description": "Deskripsi baru"}'{
"status": "success",
"message": "Category patched",
"data": {
"id": 1,
"name": "Teknologi",
"slug": "teknologi",
"description": "Deskripsi baru"
}
}Delete Category
/api/categories/{id}Menghapus kategori. Gagal (409) jika masih memiliki artikel. Auth required
curl -X DELETE http://localhost:8080/api/categories/1 \ -H "X-API-Key: YOUR_API_KEY"
{
"status": "success",
"message": "Category deleted",
"data": null
}