Dokumentasi API untuk frontend yang hanya dapat membaca data dari collections posts, clients, dan careers.
Semua endpoint menggunakan base URL Payload CMS:
/api/{collection-slug}
Endpoints ini bersifat public read-only, tidak memerlukan authentication untuk membaca data.
Base Endpoint: /api/posts
Collection untuk News dan Blog posts. Menggunakan field type untuk membedakan antara "news" dan "blog".
/api/postsMengambil daftar posts dengan pagination dan filtering.
Query Parameters:
page - Nomor halaman (default: 1)limit - Jumlah item per halaman (default: 10)sort - Sorting field (contoh: -publishedDate untuk descending, publishedDate untuk ascending)where[type][equals] - Filter berdasarkan type: "news" atau "blog"where[category][equals] - Filter berdasarkan category (text)where[slug][equals] - Filter berdasarkan slug (untuk single post lookup)where[author][equals] - Filter berdasarkan author IDwhere[publishedDate][greater_than] - Filter posts setelah tanggal tertentuwhere[publishedDate][less_than] - Filter posts sebelum tanggal tertentudepth - Depth untuk populate relationships (default: 0, gunakan 1-2 untuk populate author dan image)Response Structure:
docs - Array of post objectstotalDocs - Total jumlah dokumenlimit - Limit per halamantotalPages - Total jumlah halamanpage - Halaman saat inihasPrevPage - Boolean, apakah ada halaman sebelumnyahasNextPage - Boolean, apakah ada halaman selanjutnyaPost Object Fields:
id - Unique identifiertype - "news" atau "blog"category - Category name (string)title - Post title (string)slug - URL-friendly slug (string, unique)image - Media object atau ID (relationship ke media)excerpt - Short description/teaser (string)publishedDate - Published date (ISO date string)content - Rich text content (Lexical JSON structure)author - Author object atau ID (relationship ke authors)createdAt - Creation timestamp (ISO date string)updatedAt - Last update timestamp (ISO date string)/api/posts/:idMengambil single post berdasarkan ID.
Path Parameters:
id - Post IDQuery Parameters:
depth - Depth untuk populate relationships (recommended: 2 untuk populate author dan image secara lengkap)Response: Single post object
Base Endpoint: /api/clients
Collection untuk client/partner logos dan informasi.
/api/clientsMengambil daftar clients dengan pagination dan filtering.
Query Parameters:
page - Nomor halaman (default: 1)limit - Jumlah item per halaman (default: 10)sort - Sorting field (contoh: name untuk ascending, -name untuk descending)where[category][equals] - Filter berdasarkan category:
"Banking & Finance""Enterprise & Industrial""Government"where[name][contains] - Search berdasarkan nama client (case-insensitive)depth - Depth untuk populate logo relationship (default: 0, gunakan 1 untuk populate logo object)Response Structure:
docs - Array of client objectstotalDocs - Total jumlah dokumenlimit - Limit per halamantotalPages - Total jumlah halamanpage - Halaman saat inihasPrevPage - BooleanhasNextPage - BooleanClient Object Fields:
id - Unique identifiername - Client name (string)href - Website URL (string)logo - Media object atau ID (relationship ke media)category - Category (string, salah satu dari tiga opsi di atas)imageHeight - Optional image height in pixels (number)createdAt - Creation timestamp (ISO date string)updatedAt - Last update timestamp (ISO date string)/api/clients/:idMengambil single client berdasarkan ID.
Path Parameters:
id - Client IDQuery Parameters:
depth - Depth untuk populate logo relationship (recommended: 1)Response: Single client object
Base Endpoint: /api/careers
Collection untuk job openings dan career opportunities.
/api/careersMengambil daftar career positions dengan pagination dan filtering.
Query Parameters:
page - Nomor halaman (default: 1)limit - Jumlah item per halaman (default: 10)sort - Sorting field (contoh: -createdAt untuk newest first)where[jobCategory][equals] - Filter berdasarkan job category:
"Technology & Engineering""Marketing, Sales & Communication""Finance & Accounting""Human Resources & General Affairs""Creative & Design""Operations & Customer Success"where[isUrgentlyHiring][equals] - Filter hanya urgent positions (boolean: true atau false)where[slug][equals] - Filter berdasarkan slug (untuk single career lookup)where[title][contains] - Search berdasarkan job title (case-insensitive)depth - Depth untuk populate image relationship (default: 0, gunakan 1 untuk populate image object)Response Structure:
docs - Array of career objectstotalDocs - Total jumlah dokumenlimit - Limit per halamantotalPages - Total jumlah halamanpage - Halaman saat inihasPrevPage - BooleanhasNextPage - BooleanCareer Object Fields:
id - Unique identifiertitle - Job title (string)slug - URL-friendly slug (string, unique)image - Media object atau ID (relationship ke media, optional)requirements - Array of requirement objects, setiap object memiliki:
item - Requirement text (string)mainJobDescription - Array of job description objects, setiap object memiliki:
item - Job description text (string)isUrgentlyHiring - Boolean flag untuk urgent positionsjobCategory - Job category (string, salah satu dari enam opsi di atas)createdAt - Creation timestamp (ISO date string)updatedAt - Last update timestamp (ISO date string)/api/careers/:idMengambil single career position berdasarkan ID.
Path Parameters:
id - Career IDQuery Parameters:
depth - Depth untuk populate image relationship (recommended: 1)Response: Single career object
Semua collections yang memiliki field upload (image/logo) akan mengembalikan relationship ke collection media.
Untuk mendapatkan informasi lengkap media (URL, dimensions, dll), gunakan parameter depth=1 atau depth=2 pada request, atau fetch langsung ke /api/media/:id.
id - Media IDalt - Alt text untuk accessibilityfilename - Nama filemimeType - MIME type (contoh: image/jpeg)filesize - Ukuran file dalam byteswidth - Lebar gambar dalam pixelsheight - Tinggi gambar dalam pixelsurl - Public URL untuk mengakses filecreatedAt - Creation timestampupdatedAt - Last update timestampPayload CMS mendukung berbagai query operators untuk filtering:
equals - Exact matchnot_equals - Not equalin - Value dalam array (contoh: where[type][in]=news,blog)not_in - Value tidak dalam arraycontains - Contains substring (case-insensitive untuk text)like - Like search (semua kata harus ada)exists - Field exists (boolean: true atau false)greater_than - Greater thangreater_than_equal - Greater than or equalless_than - Less thanless_than_equal - Less than or equaland - Multiple conditions (AND)or - Multiple conditions (OR)Contoh penggunaan logical operators:
where[or][0][type][equals]=news&where[or][1][type][equals]=blog
Pagination: Selalu gunakan limit untuk membatasi jumlah data yang diambil, terutama untuk list endpoints.
Depth untuk Relationships:
depth=0 jika hanya perlu ID relationshipsdepth=1 untuk populate first-level relationships (author, image, logo)depth=2 untuk populate nested relationships (author dengan image-nya)Sorting: Gunakan sort parameter untuk mengurutkan hasil, contoh:
-publishedDate untuk newest firstpublishedDate untuk oldest firsttitle untuk alphabetical ascending-title untuk alphabetical descendingFiltering: Kombinasikan multiple filters untuk mendapatkan hasil yang lebih spesifik.
Error Handling: Payload akan mengembalikan status code:
200 - Success404 - Not found (untuk single item endpoints)400 - Bad request (invalid query parameters)500 - Server errorSaat ini tidak ada rate limiting yang dikonfigurasi. Namun disarankan untuk:
depth parameter dengan bijak (semakin besar depth, semakin berat response)