{"openapi":"3.1.0","info":{"title":"MagangHub Explorer API","version":"1.0.0","description":"API publik snapshot lowongan 31 Oktober 2026. Bukan API resmi Kemnaker atau data live. Online interview tidak berarti kerja remote. Informasi yang tidak tersedia tidak boleh dikarang. Parameter tambahan yang tidak dikenal diabaikan, termasuk yang berulang; parameter pencarian resmi tetap divalidasi."},"servers":[{"url":"https://maganghub.ngerti.in"}],"security":[],"paths":{"/api/v1/jobs":{"get":{"operationId":"searchJobs","summary":"Cari lowongan magang","description":"Default hybrid. Filter selalu wajib dipenuhi. total menghitung seluruh hasil keyword ditambah maksimal 200 kandidat semantic yang melewati threshold, bukan seluruh kemungkinan kecocokan semantic. Query kosong memakai urutan portal. Provider gagal menghasilkan mode keyword dan fallbackReason. Maksimal 60 request/menit/client; pembuatan embedding baru dibatasi terpisah.","parameters":[{"name":"q","in":"query","required":false,"description":"Kata kunci atau deskripsi minat/keahlian, maksimal 250 karakter.","schema":{"type":"string","maxLength":250}},{"name":"mode","in":"query","required":false,"description":"Default hybrid; keyword tidak memanggil embedding provider.","schema":{"type":"string","enum":["hybrid","keyword"]}},{"name":"category","in":"query","required":false,"description":"Kategori posisi.","schema":{"type":"string","enum":["administrasi","ai","bisnis","data","desain","hukum","it","kesehatan","keuangan","lingkungan","logistik","pariwisata","pemasaran","pendidikan","pertanian","manufaktur","publik","riset","sdm","dev","teknik","lain"]}},{"name":"province","in":"query","required":false,"description":"value provinsi dari /api/v1/facets.","schema":{"type":"string"}},{"name":"city","in":"query","required":false,"description":"value kota dari facets, termasuk prefix provinsi.","schema":{"type":"string"}},{"name":"organizationType","in":"query","required":false,"description":"Jenis penyelenggara.","schema":{"type":"string","enum":["company","government"]}},{"name":"education","in":"query","required":false,"description":"Jenjang pendidikan.","schema":{"type":"string","enum":["diploma","sarjana","profesi"]}},{"name":"interview","in":"query","required":false,"description":"Tipe wawancara; online tidak berarti pekerjaan remote.","schema":{"type":"string","enum":["online","onsite"]}},{"name":"minQuota","in":"query","required":false,"description":"Kuota minimal, 0 sampai 1000000.","schema":{"type":"integer","minimum":0,"maximum":1000000}},{"name":"disability","in":"query","required":false,"description":"1 untuk posisi ramah disabilitas.","schema":{"type":"string","enum":["0","1"]}},{"name":"sort","in":"query","required":false,"description":"Urutan hasil; score adalah skor peluang, bukan relevansi.","schema":{"type":"string","enum":["relevance","portal","score","quota","appl","az"]}},{"name":"page","in":"query","required":false,"description":"Halaman mulai dari 1, maksimal 100000.","schema":{"type":"integer","minimum":1,"maximum":100000,"default":1}},{"name":"limit","in":"query","required":false,"description":"Hasil per halaman, 1-50; default 12.","schema":{"type":"integer","minimum":1,"maximum":50,"default":12}}],"responses":{"200":{"description":"Hasil pencarian","content":{"application/json":{"schema":{"type":"object","required":["jobs","total","page","pages","pageSize","meta"],"properties":{"jobs":{"type":"array","items":{"$ref":"#/components/schemas/Job"}},"total":{"type":"integer"},"page":{"type":"integer"},"pages":{"type":"integer"},"pageSize":{"type":"integer"},"meta":{"$ref":"#/components/schemas/Metadata"}}}}}},"400":{"description":"Parameter tidak valid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Lowongan tidak ditemukan","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit, lihat Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Katalog/database tidak tersedia","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/jobs/{id}":{"get":{"operationId":"getJob","summary":"Baca detail lowongan","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Detail beserta metadata snapshot","content":{"application/json":{"schema":{"type":"object","required":["job","meta"],"properties":{"job":{"$ref":"#/components/schemas/Job"},"meta":{"$ref":"#/components/schemas/Metadata"}}}}}},"400":{"description":"Parameter tidak valid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Lowongan tidak ditemukan","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit, lihat Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Katalog/database tidak tersedia","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/facets":{"get":{"operationId":"getFacets","summary":"Nilai filter dan hubungan kota-provinsi","responses":{"200":{"description":"Gunakan value, bukan label, sebagai parameter filter","content":{"application/json":{"schema":{"type":"object","properties":{"total":{"type":"integer"},"provinces":{"type":"array","items":{"type":"object","required":["value","label"],"properties":{"value":{"type":"string"},"label":{"type":"string"},"count":{"type":"integer"},"province":{"type":"string"}}}},"cities":{"type":"array","items":{"type":"object","required":["value","label"],"properties":{"value":{"type":"string"},"label":{"type":"string"},"count":{"type":"integer"},"province":{"type":"string"}}}},"categories":{"type":"array","items":{"type":"object","required":["value","label"],"properties":{"value":{"type":"string"},"label":{"type":"string"},"count":{"type":"integer"},"province":{"type":"string"}}}},"organizations":{"type":"integer"},"education":{"type":"array","items":{"type":"string"}},"interview":{"type":"array","items":{"type":"string"}},"organizationTypes":{"type":"array","items":{"type":"string"}},"meta":{"$ref":"#/components/schemas/Metadata"}}}}}},"400":{"description":"Parameter tidak valid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Lowongan tidak ditemukan","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit, lihat Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Katalog/database tidak tersedia","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"Job":{"type":"object","required":["id","title","organization","city","province","quota","sourceUrl","detailUrl","opportunityScore"],"properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string"},"organization":{"type":"string"},"organizationType":{"type":"integer","enum":[0,1]},"city":{"type":"string"},"province":{"type":"string"},"quota":{"type":"integer"},"applicants":{"type":"integer"},"education":{"type":"array","items":{"type":"string"}},"programs":{"type":"array","items":{"type":"string"}},"interview":{"type":"array","items":{"type":"string"}},"days":{"type":"integer"},"disability":{"type":"boolean"},"category":{"type":"string"},"opportunityScore":{"type":"number","description":"Skor peluang dari snapshot; bukan peluang diterima atau skor relevansi."},"relevanceScore":{"type":"number","description":"Skor ranking internal, bukan probabilitas."},"sourceUrl":{"type":"string","format":"uri"},"detailUrl":{"type":"string","format":"uri"},"description":{"type":["string","null"]},"descriptionAvailable":{"type":"boolean"},"address":{"type":"string"},"observedAt":{"type":["string","null"],"format":"date-time","description":"Waktu data lowongan diamati bot; null untuk data snapshot awal."}}},"Metadata":{"type":"object","required":["snapshotId","snapshotDate","isLive","sourceUrl","categoryVersion","categorySource"],"properties":{"snapshotId":{"type":"string"},"snapshotDate":{"type":"string","format":"date"},"isLive":{"type":"boolean","const":false},"sourceUrl":{"type":"string","format":"uri"},"dataMode":{"type":"string","enum":["snapshot","incremental"]},"lastIngestedAt":{"type":["string","null"],"format":"date-time","description":"Waktu batch terakhir diterima; bukan jaminan semua lowongan diperbarui pada waktu ini."},"revision":{"type":"integer"},"categoryVersion":{"type":"integer"},"categorySource":{"type":"string","const":"inferred_from_position_title","description":"Bidang diperkirakan dari judul posisi; bukan klasifikasi resmi penyelenggara."},"requestedMode":{"type":"string","enum":["hybrid","keyword"]},"mode":{"type":"string","enum":["hybrid","keyword"]},"fallbackReason":{"type":"string"},"totalScope":{"type":"string","enum":["keyword_matches","keyword_plus_semantic_candidates"]},"semanticCandidateLimit":{"type":"integer"}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}