Dokumentasi API SIMPUL

Akses konten yang diterbitkan secara publik tanpa autentikasi. Bangun integrasi powerful dengan RESTful API kami.

Memulai

Base URL

https://public.simpulapi.id/public/{organizationId}

Ganti {organizationId} dengan ID organisasi Anda dari dashboard.

Autentikasi

Endpoint publik API tidak memerlukan autentikasi. Namun, jika tipe konten memiliki proteksi kunci API, sertakan kunci di header X-API-Key.

Endpoint API Publik
Tanpa Autentikasi

Dapatkan Semua Konten

GET /public/{organizationId}/content/{contentTypeId}

Parameter query: page, limit, search, sortBy, sortOrder

Dapatkan Konten Spesifik

GET /public/{organizationId}/content/{contentTypeId}/{id}

Ganti {id} dengan ID konten atau slug yang sebenarnya

Dapatkan Berdasarkan Slug

GET /public/{organizationId}/content/{contentTypeId}/by-slug/{slug}

Endpoint khusus untuk mengambil konten berdasarkan slug

Cari Semua Konten

GET /public/{organizationId}/search?q={query}

Wajib: q (istilah pencarian)
Opsional: page, limit, contentTypeId

Dapatkan Tipe Konten

GET /public/{organizationId}/content-types

Dapatkan semua tipe konten publik untuk organisasi ini

Formulir Publik
Fitur Opsional

Dapatkan Skema Formulir

GET /public/{organizationId}/form-schema/{contentTypeId}

Mengembalikan definisi formulir dengan semua field, aturan validasi, dan opsi

Kirim Formulir (JSON)

POST /public/{organizationId}/submit/{contentTypeId}

Gunakan untuk formulir tanpa upload file. Kirim data sebagai JSON.

Kirim Formulir dengan File (multipart/form-data)

POST /public/{organizationId}/submit/{contentTypeId}/with-files

Gunakan untuk formulir dengan upload file. Kirim data sebagai multipart/form-data.
Format: data[fieldName] untuk setiap field, file langsung dengan nama field

Contoh Kode

JavaScript/fetch

// Dapatkan semua konten
fetch('https://public.simpulapi.id/public/{organizationId}/content/{contentTypeId}')
  .then(response => response.json())
  .then(data => console.log(data));

// Dapatkan konten spesifik
fetch('https://public.simpulapi.id/public/{organizationId}/content/{contentTypeId}/{id}')
  .then(response => response.json())
  .then(data => console.log(data));

// Cari konten
fetch('https://public.simpulapi.id/public/{organizationId}/search?q=keyword')
  .then(response => response.json())
  .then(data => console.log(data));

Kirim Formulir (JavaScript)

const response = await fetch('https://public.simpulapi.id/public/{organizationId}/submit/{contentTypeId}', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-API-Key': 'YOUR_API_KEY' // Jika diperlukan
  },
  body: JSON.stringify({
    fieldName1: 'value1',
    fieldName2: 'value2'
  })
});

const result = await response.json();
console.log(result); // { success: true, entryId: "..." }

Kirim Formulir dengan File

const formData = new FormData();
formData.append('data[textField]', 'Teks');
formData.append('data[emailField]', 'user@example.com');

// Tambah file
const fileInput = document.querySelector('input[type="file"]');
formData.append('fileField', fileInput.files[0]);

const response = await fetch('https://public.simpulapi.id/public/{organizationId}/submit/{contentTypeId}/with-files', {
  method: 'POST',
  headers: {
    'X-API-Key': 'YOUR_API_KEY' // Jika diperlukan
  },
  body: formData
});

const result = await response.json();
console.log(result);

Format Respons

Respons List

{
  "message": "Pesan sukses",
  "data": {
    "items": [...],
    "total": 100,
    "page": 1,
    "limit": 10,
    "totalPages": 10
  }
}

Respons Item Tunggal

{
  "message": "Pesan sukses",
  "data": {
    "id": "content-id",
    "title": "Judul Konten",
    "slug": "content-slug",
    "status": "published",
    "data": { ... },
    "createdAt": "2024-01-01T00:00:00.000Z",
    "updatedAt": "2024-01-01T00:00:00.000Z"
  }
}

Respons Formulir

{
  "success": true,
  "entryId": "content-item-id"
}