Lewati ke isi
Sawitara

Dokumentasi API Sawitara

API REST hanya-baca bertoken di setiap instance Sawitara, untuk sistem yang butuh data jurnal atau ketertelusuran tanpa ekspor manual.

Pengguna

Untuk siapa API ini

Akses selalu diberikan pelanggan pemilik instance, per token dan per unit.

Integrator ERP dan akuntansi grup

Tarik jurnal POSTED dan batch ekspor ke SAP/Accurate, lalu tandai batch diterima. Endpoint /jurnal dan /batch. Bukan integrasi bersertifikat vendor.

Pembeli dan eksportir

Plot pemasok dengan GeoJSON, STDB, legalitas, TTP per bulan, dan paket data DDS per DO (Pratinjau). Token diterbitkan PKS pemasok yang memakai Sawitara.

Bank dan mitra pembiayaan

Hari ini: data plot, legalitas, STDB, dan kesiapan per koperasi lewat token trace:baca yang diberikan pelanggan. Berkas PSR/KUR khusus untuk mitra masih Segera.

Dinas perkebunan (Disbun)

Register STDB, geolokasi, dan persentase plot ber-STDB per pemasok bila pelanggan memberi token. STDB tetap diterbitkan dinas; Sawitara hanya mencatatnya.

Autentikasi

Token Bearer dengan kemampuan dan cakupan unit

Admin instance membuat token di Pengaturan › Token API, mencentang kemampuannya, dan bisa membatasinya ke satu unit (beserta unit turunannya) serta masa berlaku dalam hari. Teks token tampil sekali; yang disimpan hanya hash SHA-256-nya. Pembuatan dan pencabutan token tercatat di Jejak Audit.

Kirim di setiap permintaan:

Authorization: Bearer <id>|<teks token>
Accept: application/json

Cakupan unit selalu diiris dengan unit yang boleh dilihat pemilik token. Token tidak berlaku untuk aplikasi web (yang memakai sesi login). Layani API hanya lewat HTTPS dan pastikan reverse proxy meneruskan header Authorization.

KemampuanArti
jurnal:bacaMembaca jurnal, status ekspor, dan isi batch.
batch:konfirmasiMenandai batch ekspor sudah diterima (butuh jurnal:baca).
trace:bacaMembaca plot, kesiapan EUDR, TTP, dan paket DDS.
trace:data-pribadiNIK pemilik plot dikirim utuh (butuh trace:baca). Tanpa ini NIK disamarkan.

Token trace:baca tidak bisa membaca jurnal, dan token jurnal:baca tidak bisa membaca data ketertelusuran. Nomor HP, rekening, alamat, dan jalur berkas tidak pernah dikirim.

Mulai cepat

Contoh curl

Ganti https://erp.contoh.co.id dengan domain instance Anda.

Jurnal yang belum diekspor, dengan kode akun SAP

curl -s "https://erp.contoh.co.id/api/v1/jurnal?periode=2026-07&status=belum&sistem=SAP" \
  -H "Authorization: Bearer 12|swt_xxxxxxxxxxxxxxxx" \
  -H "Accept: application/json"

Plot yang belum siap EUDR

curl -s "https://erp.contoh.co.id/api/v1/ketertelusuran/plot?saringan=belum_siap&per_halaman=50" \
  -H "Authorization: Bearer 14|swt_xxxxxxxxxxxxxxxx" \
  -H "Accept: application/json"

Jawaban (diringkas):

{
  "data": [ { "kode_plot": "PLS-001-A", "jenis": "PLASMA", "siap_eudr": false, "...": "..." } ],
  "meta": { "halaman": 1, "per_halaman": 50, "total": 1, "halaman_terakhir": 1, "berikutnya": null, "nik": "disamarkan" },
  "ringkasan": { "jumlah_plot": 1, "persen_stdb": 100, "...": "..." },
  "filter": { "unit": null, "jenis": null, "saringan": "belum_siap", "pemasok": null }
}

Tandai batch diterima

curl -s -X POST "https://erp.contoh.co.id/api/v1/batch/7/diterima" \
  -H "Authorization: Bearer 12|swt_xxxxxxxxxxxxxxxx" \
  -H "Accept: application/json" -H "Content-Type: application/json" \
  -d '{"referensi": "BKPF 1000/4900000123/2026"}'
Endpoint

Semua 12 endpoint

URL dasar https://erp.contoh.co.id/api/v1. Dibuat dari openapi.yaml saat build.

Jurnal

Jurnal buku besar dan batch ekspor ke SAP/Accurate (Sawitara Finance). Kemampuan jurnal:baca dan batch:konfirmasi.

GET /api/v1/jurnal Tersedia

Daftar jurnal POSTED beserta status ekspornya. Satu jurnal = satu dokumen dua baris (debet D dan kredit K) yang jumlahnya sama. Wajib periode, atau dari dan sampai. Urut tanggal lalu id.

Kemampuan token: jurnal:baca

ParameterDiTipeKeterangan
periodequerystringBulan YYYY-MM. Wajib bila dari/sampai tidak diisi.
pola ^\d{4}-(0[1-9]|1[0-2])$
dariquerystring (date)Tanggal awal YYYY-MM-DD (bersama sampai).
sampaiquerystring (date)Tanggal akhir YYYY-MM-DD, sama atau setelah dari.
statusquerystringStatus ekspor jurnal.
semua belum diekspor diterima · bawaan semua
unitquerystringKode unit di dalam cakupan token (beserta turunannya). Di luar cakupan dijawab 403.
maks 20 karakter
sistemquerystringIsi akun_eksternal dari pemetaan akun sistem ini (null bila belum dipetakan).
SAP ACCURATE
per_halamanqueryintegerJumlah baris per halaman.
min 1 · maks 500 · bawaan 100
pagequeryintegerNomor halaman, mulai 1.
min 1 · bawaan 1

Jawaban: 200 401 403 422 429

Field jawaban (200), 35 field
FieldTipeKeterangan
dataarray<object>
data[].idinteger
data[].nojurnalstring
data[].tanggalstring (date)
data[].periodestring
data[].periode_ditutupbooleanPeriode sudah tutup buku (CLOSED_LOCKED). Jurnal di periode terbuka masih bisa bertambah atau dibalik.
data[].unitstring | null
data[].keteranganstring | null
data[].nominalnumberRupiah, 2 desimal.
data[].barisarray<object>
data[].baris[].nomor_barisinteger
1 2
data[].baris[].sisistring
D K
data[].baris[].akunstring | null
data[].baris[].akun_eksternalstring | nullKode akun di sistem tujuan (hanya bila parameter sistem diisi dan akun sudah dipetakan).
data[].baris[].jumlahnumber
data[].eksporobject | null
data[].ekspor.batch_idinteger
data[].ekspor.nobatchstring
data[].ekspor.sistemstring
SAP ACCURATE
data[].ekspor.statusstring
DIEKSPOR DITERIMA
data[].ekspor.diekspor_atstring (date-time) | null
data[].ekspor.diekspor_olehstring | null
data[].ekspor.diterima_atstring (date-time) | null
metaobject
meta.halamaninteger
meta.per_halamaninteger
meta.totalinteger
meta.halaman_terakhirinteger
meta.berikutnyastring (uri) | nullURL halaman berikutnya (null di halaman terakhir).
filterobject
filter.daristring (date)
filter.sampaistring (date)
filter.statusstring
semua belum diekspor diterima
filter.unitstring | null
filter.sistemstring | null
SAP ACCURATE

GET /api/v1/batch Tersedia

Daftar batch ekspor jurnal, terbaru dulu. 50 batch per halaman. Batch di luar cakupan unit token tidak ikut.

Kemampuan token: jurnal:baca

ParameterDiTipeKeterangan
statusquerystringStatus batch.
DIEKSPOR DITERIMA DIBATALKAN
sistemquerystringSistem tujuan batch.
SAP ACCURATE
pagequeryintegerNomor halaman, mulai 1.
min 1 · bawaan 1

Jawaban: 200 401 403 422 429

Field jawaban (200), 22 field
FieldTipeKeterangan
dataarray<object>
data[].idinteger
data[].nobatchstring
data[].sistemstring
SAP ACCURATE
data[].statusstring
DIEKSPOR DITERIMA DIBATALKAN
data[].formatstring
CSV XLSX
data[].tanggal_daristring (date)
data[].tanggal_sampaistring (date)
data[].unitstring | nullnull = semua unit.
data[].jumlah_jurnalinteger
data[].total_nominalnumber
data[].periode_belum_ditutuparray<string>Periode yang belum tutup buku saat batch dibuat.
data[].dibuat_atstring (date-time) | null
data[].dibuat_olehstring | null
data[].diterima_atstring (date-time) | null
data[].diterima_olehstring | nullUntuk konfirmasi lewat API: "API: <nama token> (<pemilik>)".
data[].referensi_penerimastring | null
metaobject
meta.halamaninteger
meta.totalinteger
meta.halaman_terakhirinteger
meta.berikutnyastring (uri) | null

GET /api/v1/batch/{id} Tersedia

Isi batch ekspor (salinan saat batch dibuat). Dokumen dan baris persis seperti saat batch dibuat; tidak berubah walau pemetaan akun diubah kemudian. cost_center hanya diisi pada baris akun beban.

Kemampuan token: jurnal:baca

ParameterDiTipeKeterangan
idpathinteger wajibid batch dari GET /batch. Batch di luar cakupan unit token dijawab 404.
min 1

Jawaban: 200 401 403 404 429

Field jawaban (200), 36 field
FieldTipeKeterangan
dataobject
data.idinteger
data.nobatchstring
data.sistemstring
SAP ACCURATE
data.statusstring
DIEKSPOR DITERIMA DIBATALKAN
data.formatstring
CSV XLSX
data.tanggal_daristring (date)
data.tanggal_sampaistring (date)
data.unitstring | nullnull = semua unit.
data.jumlah_jurnalinteger
data.total_nominalnumber
data.periode_belum_ditutuparray<string>Periode yang belum tutup buku saat batch dibuat.
data.dibuat_atstring (date-time) | null
data.dibuat_olehstring | null
data.diterima_atstring (date-time) | null
data.diterima_olehstring | nullUntuk konfirmasi lewat API: "API: <nama token> (<pemilik>)".
data.referensi_penerimastring | null
data.profilstring | nullNama profil kolom saat batch dibuat.
data.dokumenarray<object>
data.dokumen[].jurnal_idinteger
data.dokumen[].referensistringNomor jurnal Sawitara; pakai sebagai referensi dokumen di sistem tujuan agar posting ganda terdeteksi.
data.dokumen[].barisarray<object>
data.dokumen[].baris[].nomor_barisinteger
data.dokumen[].baris[].sisistring
D K
data.dokumen[].baris[].tanggalstring (date)
data.dokumen[].baris[].referensistring
data.dokumen[].baris[].teksstring
data.dokumen[].baris[].unitstring | null
data.dokumen[].baris[].akun_internalstring | null
data.dokumen[].baris[].akunstring | nullKode akun di sistem tujuan.
data.dokumen[].baris[].jumlahnumber
data.dokumen[].baris[].kode_perusahaanstring | null
data.dokumen[].baris[].profit_centerstring | null
data.dokumen[].baris[].cost_centerstring | nullHanya pada baris akun beban.
data.dokumen[].baris[].departemenstring | null
data.dokumen[].baris[].proyekstring | null

POST /api/v1/batch/{id}/diterima Tersedia

Tandai batch sudah diterima sistem tujuan. Idempoten: batch yang sudah DITERIMA tidak diubah. Batch DIBATALKAN dijawab 409. Tercatat di Jejak Audit dengan nama token dan pemiliknya.

Kemampuan token: batch:konfirmasi

ParameterDiTipeKeterangan
idpathinteger wajibid batch dari GET /batch. Batch di luar cakupan unit token dijawab 404.
min 1

Body JSON opsional: referensi (string | null, maks 100).

Jawaban: 200 401 403 404 409 422 429

Field jawaban (200), 17 field
FieldTipeKeterangan
dataobject
data.idinteger
data.nobatchstring
data.sistemstring
SAP ACCURATE
data.statusstring
DIEKSPOR DITERIMA DIBATALKAN
data.formatstring
CSV XLSX
data.tanggal_daristring (date)
data.tanggal_sampaistring (date)
data.unitstring | nullnull = semua unit.
data.jumlah_jurnalinteger
data.total_nominalnumber
data.periode_belum_ditutuparray<string>Periode yang belum tutup buku saat batch dibuat.
data.dibuat_atstring (date-time) | null
data.dibuat_olehstring | null
data.diterima_atstring (date-time) | null
data.diterima_olehstring | nullUntuk konfirmasi lewat API: "API: <nama token> (<pemilik>)".
data.referensi_penerimastring | null

Ketertelusuran

Plot pemasok, kesiapan EUDR, TTP, paket data DDS, lapisan referensi dan hasil skrining EUDR, serta GeoJSON DDS Sistem Informasi EUDR (Sawitara Trace). Kemampuan trace:baca dan trace:data-pribadi.

GET /api/v1/ketertelusuran/plot Tersedia

Plot pemasok dengan geolokasi, STDB, legalitas, dan checklist EUDR. NIK pemilik disamarkan (1401********0001) kecuali token juga punya trace:data-pribadi. Nomor HP, rekening, alamat, dan jalur berkas tidak pernah dikirim. ringkasan dihitung atas seluruh hasil saringan, bukan hanya halaman ini.

Kemampuan token: trace:baca

ParameterDiTipeKeterangan
unitquerystringKode unit di dalam cakupan token (beserta turunannya). Di luar cakupan dijawab 403.
maks 20 karakter
jenisquerystringJenis plot. Petani swadaya = PIHAK3 yang tertaut pemasok berjenis SWADAYA.
INTI PLASMA PIHAK3
saringanquerystringHanya plot yang belum memenuhi butir checklist tertentu.
tanpa_stdb belum_terverifikasi geolokasi_belum_lengkap belum_siap
pemasokquerystringKunci pemasok (pemasok.kunci dari endpoint ini atau pemasok_kunci dari /ketertelusuran/kesiapan).
maks 200 karakter
per_halamanqueryintegerJumlah baris per halaman.
min 1 · maks 500 · bawaan 100
pagequeryintegerNomor halaman, mulai 1.
min 1 · bawaan 1

Jawaban: 200 401 403 422 429

Field jawaban (200), 85 field
FieldTipeKeterangan
dataarray<object>
data[].kode_plotstring
data[].jenisstring
INTI PLASMA PIHAK3
data[].unitstring | null
data[].luas_hanumber
data[].tanggal_tanamstring (date) | null
data[].pemasokobject
data[].pemasok.kuncistringPrefiks KOPERASI:, PEMASOK:, REF:, atau INTI:.
data[].pemasok.namastring | null
data[].pemasok.jenisstring
INTI KOPERASI PIHAK3 SWADAYA
data[].pemilikobject | null
data[].pemilik.namastring | null
data[].pemilik.nikstring | nullDisamarkan (1401********0001) kecuali token punya trace:data-pribadi.
data[].geolokasiobject
data[].geolokasi.tipestring | null
Point Polygon
data[].geolokasi.wajib_poligonbooleanPlot lebih dari 4 ha wajib Polygon (EU 2023/1115 Pasal 2 angka 28 dan Pasal 9).
data[].geolokasi.lengkapboolean
data[].geolokasi.galatarray<string>
data[].geolokasi.geometriGeoJSON Point | Polygon | null
data[].stdbobject
data[].stdb.statusstring
ADA BELUM TIDAK_BERLAKU
data[].stdb.nomorstring | null
data[].stdb.tanggal_terbitstring (date) | null
data[].stdb.penerbitstring | null
data[].stdb.ada_berkasboolean
data[].legalitasobject
data[].legalitas.status_dokumenstring | null
LENGKAP DALAM_PROSES BELUM_LENGKAP
data[].legalitas.alas_hakobject
data[].legalitas.alas_hak.jenisstring | null
SHM SKT HGU LAINNYA
data[].legalitas.alas_hak.nomorstring | null
data[].legalitas.alas_hak.keteranganstring | null
data[].legalitas.alas_hak.berlaku_sampaistring (date) | null
data[].legalitas.alas_hak.kedaluwarsaboolean
data[].legalitas.alas_hak.ada_berkasboolean
data[].legalitas.verifikasiobject
data[].legalitas.verifikasi.statusstring
BELUM TERVERIFIKASI DITOLAK
data[].legalitas.verifikasi.alasanstring | null
data[].legalitas.verifikasi.olehstring | null
data[].legalitas.verifikasi.padastring (date-time) | null
data[].sertifikasiobject
data[].sertifikasi.skemastring | null
ISPO RSPO TIDAK_ADA
data[].sertifikasi.nomorstring | null
data[].sertifikasi.berlaku_sampaistring (date) | null
data[].skrining_deforestasiobject
data[].skrining_deforestasi.hasilstring | null
BELUM LOLOS TIDAK_LOLOS
Hasil yang dipakai checklist. Diisi manual dari analisis di luar aplikasi (sumber MANUAL), atau hasil efektif skrining lapisan referensi (sumber LAPISAN; lihat GET /ketertelusuran/skrining).
data[].skrining_deforestasi.tanggalstring (date) | null
data[].skrining_deforestasi.sumberstring | null
MANUAL LAPISAN
MANUAL = diisi dari analisis di luar aplikasi; LAPISAN = hasil skrining lapisan referensi; null = belum ada.
data[].skrining_deforestasi.indikasistring | null
TIDAK_TERINDIKASI PERLU_DITINJAU TERINDIKASI
Status indikasi skrining lapisan terkini; null bila belum diskrining. Bukan klaim bebas deforestasi.
data[].skrining_deforestasi.tinjauanstring | null
BELUM DITERIMA DITOLAK
Tinjauan staf atas hasil skrining lapisan terkini; null bila belum diskrining.
data[].checklistobjectPlot siap EUDR bila keempat butir true.
data[].checklist.geolokasi_lengkapbooleanGeoJSON terbaca, koordinat minimal 6 desimal, plot > 4 ha berupa Polygon.
data[].checklist.stdbbooleanPlot non-inti punya nomor STDB (plot inti selalu true).
data[].checklist.legalitas_terverifikasibooleanVerifikasi TERVERIFIKASI dan alas hak belum kedaluwarsa.
data[].checklist.skrining_lolosbooleanHasil skrining deforestasi LOLOS.
data[].siap_eudrboolean
metaobject
meta.halamaninteger
meta.per_halamaninteger
meta.totalinteger
meta.halaman_terakhirinteger
meta.berikutnyastring (uri) | nullURL halaman berikutnya (null di halaman terakhir).
meta.nikstring
utuh disamarkan
utuh bila token punya trace:data-pribadi.
ringkasanobject
ringkasan.jumlah_plotinteger
ringkasan.luas_hanumber
ringkasan.plot_wajib_stdbinteger
ringkasan.plot_ber_stdbinteger
ringkasan.persen_stdbnumber | null
ringkasan.plot_terverifikasiinteger
ringkasan.persen_terverifikasinumber | null
ringkasan.plot_wajib_poligonintegerPlot lebih dari 4 ha.
ringkasan.persen_poligon_wajibnumber | null
ringkasan.persen_poligonnumber | null
ringkasan.persen_geolokasi_lengkapnumber | null
ringkasan.plot_siapinteger
ringkasan.persen_siapnumber | null
ringkasan.plot_tidak_terindikasiintegerPlot yang skrining lapisan terkininya TIDAK_TERINDIKASI (indikasi, bukan klaim bebas deforestasi).
ringkasan.plot_perlu_ditinjauinteger
ringkasan.plot_terindikasiinteger
ringkasan.plot_belum_diskrininginteger
filterobject
filter.unitstring | null
filter.jenisstring | null
filter.saringanstring | null
filter.pemasokstring | null

GET /api/v1/ketertelusuran/kesiapan Tersedia

Checklist kesiapan EUDR per pemasok atau koperasi. Kelompok: plot plasma per koperasi (KOPERASI:), plot pihak ketiga per master pemasok (PEMASOK:) atau per nama rujukan (REF:), plot inti per afdeling (INTI:). Persentase null berarti penyebutnya nol, bukan 0% atau 100%.

Kemampuan token: trace:baca

ParameterDiTipeKeterangan
unitquerystringKode unit di dalam cakupan token (beserta turunannya). Di luar cakupan dijawab 403.
maks 20 karakter

Jawaban: 200 401 403 422 429

Field jawaban (200), 41 field
FieldTipeKeterangan
dataarray<object>
data[].jumlah_plotinteger
data[].luas_hanumber
data[].plot_wajib_stdbinteger
data[].plot_ber_stdbinteger
data[].persen_stdbnumber | null
data[].plot_terverifikasiinteger
data[].persen_terverifikasinumber | null
data[].plot_wajib_poligonintegerPlot lebih dari 4 ha.
data[].persen_poligon_wajibnumber | null
data[].persen_poligonnumber | null
data[].persen_geolokasi_lengkapnumber | null
data[].plot_siapinteger
data[].persen_siapnumber | null
data[].plot_tidak_terindikasiintegerPlot yang skrining lapisan terkininya TIDAK_TERINDIKASI (indikasi, bukan klaim bebas deforestasi).
data[].plot_perlu_ditinjauinteger
data[].plot_terindikasiinteger
data[].plot_belum_diskrininginteger
data[].pemasok_kuncistring
data[].pemasok_namastring | null
data[].pemasok_jenisstring
INTI KOPERASI PIHAK3 SWADAYA
totalobject
total.jumlah_plotinteger
total.luas_hanumber
total.plot_wajib_stdbinteger
total.plot_ber_stdbinteger
total.persen_stdbnumber | null
total.plot_terverifikasiinteger
total.persen_terverifikasinumber | null
total.plot_wajib_poligonintegerPlot lebih dari 4 ha.
total.persen_poligon_wajibnumber | null
total.persen_poligonnumber | null
total.persen_geolokasi_lengkapnumber | null
total.plot_siapinteger
total.persen_siapnumber | null
total.plot_tidak_terindikasiintegerPlot yang skrining lapisan terkininya TIDAK_TERINDIKASI (indikasi, bukan klaim bebas deforestasi).
total.plot_perlu_ditinjauinteger
total.plot_terindikasiinteger
total.plot_belum_diskrininginteger
filterobject
filter.unitstring | null

GET /api/v1/ketertelusuran/ttp Tersedia

Ringkasan TTP (traceability to plantation) per bulan. TTP = kg TBS dari tiket timbang selesai yang tertaut ke plot berstatus skrining LOLOS, dibagi seluruh kg TBS periode itu. Wajib periode, atau dari dan sampai (paling panjang 12 bulan).

Kemampuan token: trace:baca

ParameterDiTipeKeterangan
periodequerystringSatu bulan YYYY-MM.
pola ^\d{4}-(0[1-9]|1[0-2])$
dariquerystringBulan awal YYYY-MM (bersama sampai).
pola ^\d{4}-(0[1-9]|1[0-2])$
sampaiquerystringBulan akhir YYYY-MM, paling jauh 11 bulan setelah dari.
pola ^\d{4}-(0[1-9]|1[0-2])$
unitquerystringKode unit di dalam cakupan token (beserta turunannya). Di luar cakupan dijawab 403.
maks 20 karakter

Jawaban: 200 401 403 422 429

Field jawaban (200), 43 field
FieldTipeKeterangan
dataarray<object>
data[].jumlah_tiketinteger
data[].total_kgnumber
data[].terhubung_plot_kgnumberkg dari tiket yang tertaut ke plot.
data[].lolos_kgnumberkg dari plot berstatus skrining LOLOS.
data[].persen_ttpnumber | nulllolos_kg / total_kg x 100, 2 desimal; null bila total_kg nol.
data[].periodestring
data[].per_kelompokobject
data[].per_kelompok.INTIobject
data[].per_kelompok.INTI.jumlah_tiketinteger
data[].per_kelompok.INTI.total_kgnumber
data[].per_kelompok.INTI.terhubung_plot_kgnumberkg dari tiket yang tertaut ke plot.
data[].per_kelompok.INTI.lolos_kgnumberkg dari plot berstatus skrining LOLOS.
data[].per_kelompok.INTI.persen_ttpnumber | nulllolos_kg / total_kg x 100, 2 desimal; null bila total_kg nol.
data[].per_kelompok.PLASMAobject
data[].per_kelompok.PLASMA.jumlah_tiketinteger
data[].per_kelompok.PLASMA.total_kgnumber
data[].per_kelompok.PLASMA.terhubung_plot_kgnumberkg dari tiket yang tertaut ke plot.
data[].per_kelompok.PLASMA.lolos_kgnumberkg dari plot berstatus skrining LOLOS.
data[].per_kelompok.PLASMA.persen_ttpnumber | nulllolos_kg / total_kg x 100, 2 desimal; null bila total_kg nol.
data[].per_kelompok.PIHAK3object
data[].per_kelompok.PIHAK3.jumlah_tiketinteger
data[].per_kelompok.PIHAK3.total_kgnumber
data[].per_kelompok.PIHAK3.terhubung_plot_kgnumberkg dari tiket yang tertaut ke plot.
data[].per_kelompok.PIHAK3.lolos_kgnumberkg dari plot berstatus skrining LOLOS.
data[].per_kelompok.PIHAK3.persen_ttpnumber | nulllolos_kg / total_kg x 100, 2 desimal; null bila total_kg nol.
data[].per_kelompok.TIDAK_DIKETAHUIobject
data[].per_kelompok.TIDAK_DIKETAHUI.jumlah_tiketinteger
data[].per_kelompok.TIDAK_DIKETAHUI.total_kgnumber
data[].per_kelompok.TIDAK_DIKETAHUI.terhubung_plot_kgnumberkg dari tiket yang tertaut ke plot.
data[].per_kelompok.TIDAK_DIKETAHUI.lolos_kgnumberkg dari plot berstatus skrining LOLOS.
data[].per_kelompok.TIDAK_DIKETAHUI.persen_ttpnumber | nulllolos_kg / total_kg x 100, 2 desimal; null bila total_kg nol.
data[].stdbobjectHanya plot non-inti yang memasok pada periode.
data[].stdb.plot_wajib_stdbinteger
data[].stdb.plot_ber_stdbinteger
data[].stdb.persen_plot_ber_stdbnumber | null
data[].stdb.kg_wajib_stdbnumber
data[].stdb.kg_ber_stdbnumber
data[].stdb.persen_kg_ber_stdbnumber | null
filterobject
filter.daristring
filter.sampaistring
filter.unitstring | null

GET /api/v1/ketertelusuran/dds Pratinjau

Paket data uji tuntas (DDS) per DO atau kontrak. Pratinjau: isinya plot yang memasok TBS ke PKS pada periode produksi (dari tiket timbang), bukan segregasi fisik per pengiriman. Periode produksi: parameter periode; bila kosong, periode klaim mass balance aktif; bila tidak ada, bulan tanggal muat DO atau tanggal kontrak. Wajib nodo atau nokontrak. Untuk porsi dan alokasi tiap plot atas satu kiriman, pakai GET /ketertelusuran/dds-pengiriman.

Kemampuan token: trace:baca

ParameterDiTipeKeterangan
nodoquerystringNomor DO pengapalan. Wajib bila nokontrak tidak diisi.
maks 35 karakter
nokontrakquerystringNomor kontrak penjualan (dipakai bila nodo kosong).
maks 35 karakter
periodequerystringPaksa periode produksi YYYY-MM.
pola ^\d{4}-(0[1-9]|1[0-2])$
unitquerystringKode unit di dalam cakupan token (beserta turunannya). Di luar cakupan dijawab 403.
maks 20 karakter

Jawaban: 200 401 403 404 422 429

Field jawaban (200), 88 field
FieldTipeKeterangan
dataobject
data.dokumenobject
data.dokumen.jenisstring
DO KONTRAK
data.dokumen.nodostring | null
data.dokumen.nokontrakstring
data.dokumen.pembelistring | null
data.dokumen.komoditasstring | null
data.dokumen.kode_hsstring | null
1511.10 1207.10
Lampiran I EU 2023/1115 untuk CPO (1511.10) dan inti sawit (1207.10); komoditas lain null.
data.dokumen.negara_produksistring = ID
data.dokumen.kuantum_kgnumber
data.dokumen.tanggal_muatstring (date) | null
data.dokumen.pelabuhan_muatstring | null
data.dokumen.pelabuhan_bongkarstring | null
data.dokumen.statusstring | null
data.periode_produksiarray<string>
data.dasar_periodestring
parameter klaim_mass_balance tanggal_muat tanggal_kontrak
data.catatanstring
data.klaim_mass_balancearray<object>
data.klaim_mass_balance[].tanggalstring (date) | null
data.klaim_mass_balance[].periodestring
data.klaim_mass_balance[].skemastring | null
data.klaim_mass_balance[].produkstring | null
data.klaim_mass_balance[].kgnumber
data.ttparray<object>
data.ttp[].jumlah_tiketinteger
data.ttp[].total_kgnumber
data.ttp[].terhubung_plot_kgnumberkg dari tiket yang tertaut ke plot.
data.ttp[].lolos_kgnumberkg dari plot berstatus skrining LOLOS.
data.ttp[].persen_ttpnumber | nulllolos_kg / total_kg x 100, 2 desimal; null bila total_kg nol.
data.ttp[].periodestring
data.ttp[].per_kelompokobject
data.ttp[].per_kelompok.INTIobject
data.ttp[].per_kelompok.INTI.jumlah_tiketinteger
data.ttp[].per_kelompok.INTI.total_kgnumber
data.ttp[].per_kelompok.INTI.terhubung_plot_kgnumberkg dari tiket yang tertaut ke plot.
data.ttp[].per_kelompok.INTI.lolos_kgnumberkg dari plot berstatus skrining LOLOS.
data.ttp[].per_kelompok.INTI.persen_ttpnumber | nulllolos_kg / total_kg x 100, 2 desimal; null bila total_kg nol.
data.ttp[].per_kelompok.PLASMAobject
data.ttp[].per_kelompok.PLASMA.jumlah_tiketinteger
data.ttp[].per_kelompok.PLASMA.total_kgnumber
data.ttp[].per_kelompok.PLASMA.terhubung_plot_kgnumberkg dari tiket yang tertaut ke plot.
data.ttp[].per_kelompok.PLASMA.lolos_kgnumberkg dari plot berstatus skrining LOLOS.
data.ttp[].per_kelompok.PLASMA.persen_ttpnumber | nulllolos_kg / total_kg x 100, 2 desimal; null bila total_kg nol.
data.ttp[].per_kelompok.PIHAK3object
data.ttp[].per_kelompok.PIHAK3.jumlah_tiketinteger
data.ttp[].per_kelompok.PIHAK3.total_kgnumber
data.ttp[].per_kelompok.PIHAK3.terhubung_plot_kgnumberkg dari tiket yang tertaut ke plot.
data.ttp[].per_kelompok.PIHAK3.lolos_kgnumberkg dari plot berstatus skrining LOLOS.
data.ttp[].per_kelompok.PIHAK3.persen_ttpnumber | nulllolos_kg / total_kg x 100, 2 desimal; null bila total_kg nol.
data.ttp[].per_kelompok.TIDAK_DIKETAHUIobject
data.ttp[].per_kelompok.TIDAK_DIKETAHUI.jumlah_tiketinteger
data.ttp[].per_kelompok.TIDAK_DIKETAHUI.total_kgnumber
data.ttp[].per_kelompok.TIDAK_DIKETAHUI.terhubung_plot_kgnumberkg dari tiket yang tertaut ke plot.
data.ttp[].per_kelompok.TIDAK_DIKETAHUI.lolos_kgnumberkg dari plot berstatus skrining LOLOS.
data.ttp[].per_kelompok.TIDAK_DIKETAHUI.persen_ttpnumber | nulllolos_kg / total_kg x 100, 2 desimal; null bila total_kg nol.
data.ttp[].stdbobjectHanya plot non-inti yang memasok pada periode.
data.ttp[].stdb.plot_wajib_stdbinteger
data.ttp[].stdb.plot_ber_stdbinteger
data.ttp[].stdb.persen_plot_ber_stdbnumber | null
data.ttp[].stdb.kg_wajib_stdbnumber
data.ttp[].stdb.kg_ber_stdbnumber
data.ttp[].stdb.persen_kg_ber_stdbnumber | null
data.plotobjectGeoJSON FeatureCollection plot pemasok pada periode produksi.
data.plot.typestring = FeatureCollection
data.plot.featuresarray<object>
data.plot.features[].typestring = Feature
data.plot.features[].geometryGeoJSON Point | Polygon | null
data.plot.features[].propertiesobject
data.plot.features[].properties.kode_plotstring
data.plot.features[].properties.jenisstring
INTI PLASMA PIHAK3
data.plot.features[].properties.luas_hanumber
data.plot.features[].properties.tanggal_tanamstring (date) | null
data.plot.features[].properties.status_legalitasstring | null
data.plot.features[].properties.no_stdbstring | null
data.plot.features[].properties.jenis_alas_hakstring | null
data.plot.features[].properties.status_verifikasi_legalitasstring | null
data.plot.features[].properties.sertifikasistring | null
data.plot.features[].properties.nomor_sertifikatstring | null
data.plot.features[].properties.hasil_skrining_deforestasistring | null
data.plot.features[].properties.tanggal_skriningstring (date) | null
data.plot.features[].properties.produksi_tbs_kgnumberkg TBS dari plot ini, dijumlah atas semua periode produksi.
data.plot.features[].properties.periodearray<string>
data.plot.features[].properties.status_stdbstring | null
ADA BELUM TIDAK_BERLAKU
data.plot.features[].properties.geolokasi_lengkapboolean | null
data.plot.features[].properties.legalitas_terverifikasiboolean | null
data.plot.features[].properties.siap_eudrboolean | null
filterobject
filter.unitstring | null

GET /api/v1/ketertelusuran/dds-pengiriman Pratinjau

Paket DDS per pengiriman dengan alokasi neraca massa (mass balance). Pratinjau, mass balance (bukan segregasi fisik). Satu DO CPO atau inti sawit: jendela produksi lot (parameter dari/sampai; bila kosong periode klaim mass balance aktif DO; bila tidak ada, hari produksi LHP terakhir PKS pengirim sampai tanggal muat yang menutup volume kiriman; bila LHP tidak cukup, TRACE_JENDELA_PRODUKSI_HARI hari sampai tanggal muat), lalu porsi tiap plot = kg TBS plot dari tiket timbang selesai dalam jendela dibagi seluruh kg TBS jendela. Alokasi produk plot = porsi x volume kiriman; alokasi TBS = alokasi produk / rendemen jendela. Status kesiapan SIAP hanya bila seluruh kg TBS jendela berasal dari plot siap EUDR. DO selain CPO/PALM_KERNEL dijawab 422; DO yang PKS pengirimnya di luar cakupan token dijawab 404.

Kemampuan token: trace:baca

ParameterDiTipeKeterangan
nodoquerystring wajibNomor DO pengapalan CPO atau inti sawit.
maks 35 karakter
dariquerystring (date)Paksa awal jendela produksi YYYY-MM-DD (bersama sampai, paling panjang 92 hari).
sampaiquerystring (date)Paksa akhir jendela produksi YYYY-MM-DD.
unitquerystringKode unit di dalam cakupan token (beserta turunannya). Di luar cakupan dijawab 403.
maks 20 karakter

Jawaban: 200 401 403 404 422 429

Field jawaban (200), 93 field
FieldTipeKeterangan
dataobject
data.pengirimanobject
data.pengiriman.nodostring
data.pengiriman.nokontrakstring
data.pengiriman.pembelistring | null
data.pengiriman.komoditasstring
CPO PALM_KERNEL
data.pengiriman.produkstring
CPO PK
data.pengiriman.kode_hsstring
1511.10 1207.10
data.pengiriman.negara_produksistring = ID
data.pengiriman.pksobject | nullPKS pengirim (mutasi stok pengiriman, PKS saat kode verifikasi terbit, atau satu-satunya PKS); null bila tidak diketahui.
data.pengiriman.pks.kodestring
data.pengiriman.pks.namastring | null
data.pengiriman.volume_kgnumber
data.pengiriman.basis_volumestring
REALISASI TARGET
REALISASI = sounding PKS sudah diisi; TARGET = target DO.
data.pengiriman.tanggal_muatstring (date)
data.pengiriman.pelabuhan_muatstring | null
data.pengiriman.pelabuhan_bongkarstring | null
data.pengiriman.statusstring | null
data.metodeobject
data.metode.modelstring = MASS_BALANCE
data.metode.alokasistring = PROPORSIONAL_JENDELA_PRODUKSI
data.metode.segregasi_fisikboolean = false
data.metode.statusstring = PRATINJAU
data.metode.catatanstring
data.jendela_produksiobject
data.jendela_produksi.daristring (date)
data.jendela_produksi.sampaistring (date)
data.jendela_produksi.hariinteger
data.jendela_produksi.dasarstring
parameter klaim_mass_balance produksi_lhp jendela_hari
data.jendela_produksi.produksi_produk_kgnumber | nullCPO atau PK dari LHP PKS pengirim dalam jendela; null bila tidak ada LHP.
data.jendela_produksi.tbs_diolah_kgnumber | null
data.jendela_produksi.rendemen_persennumber | nullproduksi / TBS olah LHP jendela, atau rendemen cadangan konfigurasi; null bila keduanya tidak ada.
data.jendela_produksi.sumber_rendemenstring | null
LHP KONFIGURASI
data.jendela_produksi.cakupan_volume_persennumber | nullproduksi jendela / volume kiriman x 100, paling tinggi 100.
data.input_tbsobject
data.input_tbs.jumlah_tiketinteger
data.input_tbs.total_kgnumber
data.input_tbs.terhubung_plot_kgnumber
data.input_tbs.lolos_kgnumber
data.input_tbs.siap_eudr_kgnumber
data.input_tbs.persen_tertelusur_plotnumber | nullterhubung_plot_kg / total_kg x 100; null bila total_kg nol.
data.input_tbs.persen_ttpnumber | null
data.input_tbs.persen_siap_eudrnumber | null
data.alokasiobjectVolume kiriman dibagi menurut porsi TBS jendela; null bila tidak ada TBS.
data.alokasi.tertelusur_plot_kgnumber | null
data.alokasi.tidak_tertelusur_kgnumber | null
data.alokasi.siap_eudr_kgnumber | null
data.kesiapan_eudrobject
data.kesiapan_eudr.statusstring
SIAP BELUM_SIAP TIDAK_ADA_DATA
data.kesiapan_eudr.plot_kontributorinteger
data.kesiapan_eudr.plot_siapinteger
data.kesiapan_eudr.alasanarray<string>
data.klaim_mass_balancearray<object>
data.klaim_mass_balance[].tanggalstring (date) | null
data.klaim_mass_balance[].periodestring
data.klaim_mass_balance[].skemastring | null
data.klaim_mass_balance[].produkstring | null
data.klaim_mass_balance[].kgnumber
data.verifikasiobject | nullKode verifikasi lot aktif (QR di dokumen DO) dan alamat halaman publiknya; null bila belum ada atau dicabut.
data.verifikasi.kodestring
data.verifikasi.urlstring (uri)
data.plotobjectGeoJSON FeatureCollection plot kontributor dalam jendela produksi.
data.plot.typestring = FeatureCollection
data.plot.featuresarray<object>
data.plot.features[].typestring = Feature
data.plot.features[].geometryGeoJSON Point | Polygon | null
data.plot.features[].propertiesobject
data.plot.features[].properties.kode_plotstring
data.plot.features[].properties.jenisstring
INTI PLASMA PIHAK3
data.plot.features[].properties.luas_hanumber
data.plot.features[].properties.tanggal_tanamstring (date) | null
data.plot.features[].properties.status_legalitasstring | null
data.plot.features[].properties.no_stdbstring | null
data.plot.features[].properties.jenis_alas_hakstring | null
data.plot.features[].properties.status_verifikasi_legalitasstring | null
data.plot.features[].properties.sertifikasistring | null
data.plot.features[].properties.nomor_sertifikatstring | null
data.plot.features[].properties.hasil_skrining_deforestasistring | null
data.plot.features[].properties.tanggal_skriningstring (date) | null
data.plot.features[].properties.sumber_skriningstring | null
MANUAL LAPISAN
MANUAL = diisi dari analisis di luar aplikasi; LAPISAN = hasil skrining lapisan referensi; null = belum ada.
data.plot.features[].properties.indikasi_skriningstring | null
TIDAK_TERINDIKASI PERLU_DITINJAU TERINDIKASI
Status indikasi skrining lapisan terkini; null bila belum diskrining. Bukan klaim bebas deforestasi.
data.plot.features[].properties.tbs_jendela_kgnumberkg TBS plot ini dari tiket timbang selesai dalam jendela produksi.
data.plot.features[].properties.porsi_persennumbertbs_jendela_kg / seluruh kg TBS jendela x 100, 4 desimal.
data.plot.features[].properties.alokasi_produk_kgnumberporsi x volume kiriman.
data.plot.features[].properties.alokasi_tbs_kgnumber | nullalokasi_produk_kg / rendemen jendela; null bila rendemen tidak ada.
data.plot.features[].properties.status_stdbstring | null
ADA BELUM TIDAK_BERLAKU
data.plot.features[].properties.geolokasi_lengkapboolean | null
data.plot.features[].properties.legalitas_terverifikasiboolean | null
data.plot.features[].properties.siap_eudrboolean | null
filterobject
filter.unitstring | null
filter.daristring (date) | null
filter.sampaistring (date) | null

GET /api/v1/ketertelusuran/lapisan Pratinjau

Lapisan referensi skrining EUDR (metadata). Pratinjau. Lapisan yang diunggah staf untuk skrining EUDR: tutupan hutan per 31 Des 2020, kawasan hutan/lindung, dan gambut, beserta sumber, lisensi, tanggal acuan, versi, sidik SHA-256 berkas asal, dan jumlah titik sebelum/sesudah penyederhanaan. Geometri tidak dikirim. Bawaan hanya lapisan aktif; semua=1 menyertakan versi yang diarsipkan.

Kemampuan token: trace:baca

ParameterDiTipeKeterangan
unitquerystringKode unit di dalam cakupan token (beserta turunannya). Di luar cakupan dijawab 403.
maks 20 karakter
semuaqueryboolean1 = sertakan lapisan yang diarsipkan (versi lama).

Jawaban: 200 401 403 422 429

Field jawaban (200), 22 field
FieldTipeKeterangan
dataarray<object>
data[].idinteger
data[].jenisstring
HUTAN_2020 KAWASAN_HUTAN GAMBUT
HUTAN_2020 = tutupan hutan per 31 Des 2020; KAWASAN_HUTAN = kawasan hutan/lindung; GAMBUT = gambut.
data[].namastring
data[].sumberstring
data[].lisensistring | null
data[].tanggal_datastring (date) | null
data[].seristring | nullSama untuk semua versi satu lapisan.
data[].versiinteger
data[].aktifboolean
data[].unitstring | nullnull = berlaku untuk plot semua unit.
data[].formatstring | null
GEOJSON KML SHP
data[].sha256string | nullSidik SHA-256 berkas asal yang diunggah.
data[].jumlah_poligoninteger
data[].jumlah_titikinteger | null
data[].jumlah_titik_asalinteger | null
data[].toleransi_mnumber | nullToleransi penyederhanaan di server (m); null bila tidak disederhanakan.
data[].luas_hanumber | null
data[].diunggah_padastring (date-time) | null
filterobject
filter.unitstring | null
filter.semuaboolean

GET /api/v1/ketertelusuran/skrining Pratinjau

Hasil skrining EUDR terkini per plot. Pratinjau. Tumpang tindih tiap plot dengan setiap lapisan referensi aktif (luas, persen luas plot, jarak terdekat ke batas lapisan), status indikasi (TIDAK_TERINDIKASI, PERLU_DITINJAU, TERINDIKASI menurut ambang), versi lapisan yang dipakai, waktu skrining, dan tinjauan staf. Ini INDIKASI berdasarkan lapisan yang diunggah, bukan pernyataan bebas deforestasi. Plot yang belum diskrining tampil dengan skrining null.

Kemampuan token: trace:baca

ParameterDiTipeKeterangan
unitquerystringKode unit di dalam cakupan token (beserta turunannya). Di luar cakupan dijawab 403.
maks 20 karakter
statusquerystringTIDAK_TERINDIKASI, PERLU_DITINJAU, TERINDIKASI, atau BELUM_DISKRINING.
TIDAK_TERINDIKASI PERLU_DITINJAU TERINDIKASI BELUM_DISKRINING
tinjauanquerystringBELUM, DITERIMA, atau DITOLAK.
BELUM DITERIMA DITOLAK
per_halamanqueryintegerJumlah baris per halaman.
min 1 · maks 500 · bawaan 100
pagequeryintegerNomor halaman, mulai 1.
min 1 · bawaan 1

Jawaban: 200 401 403 422 429

Field jawaban (200), 51 field
FieldTipeKeterangan
dataarray<object>
data[].kode_plotstring
data[].jenisstring
INTI PLASMA PIHAK3
data[].unitstring | null
data[].luas_hanumber
data[].hasil_skriningstring | null
BELUM LOLOS TIDAK_LOLOS
Hasil yang dipakai checklist kesiapan EUDR.
data[].sumber_skriningstring | null
MANUAL LAPISAN
MANUAL = diisi dari analisis di luar aplikasi; LAPISAN = hasil skrining lapisan referensi; null = belum ada.
data[].skriningobject | null
data[].skrining.idinteger
data[].skrining.statusstring
TIDAK_TERINDIKASI PERLU_DITINJAU TERINDIKASI
data[].skrining.tinjauanstring
BELUM DITERIMA DITOLAK
data[].skrining.hasil_efektifstring
LOLOS TIDAK_LOLOS BELUM
data[].skrining.metodestring
POLIGON TITIK_RADIUS
data[].skrining.dijalankan_padastring (date-time) | null
data[].skrining.ditinjau_padastring (date-time) | null
data[].skrining.kedaluwarsabooleanGeometri atau luas plot berubah sejak skrining ini.
data[].skrining.catatanarray<string>
data[].skrining.lapisanarray<object>
data[].skrining.lapisan[].lapisan_idinteger
data[].skrining.lapisan[].jenisstring
data[].skrining.lapisan[].namastring
data[].skrining.lapisan[].versiinteger
data[].skrining.lapisan[].luas_tumpang_hanumber
data[].skrining.lapisan[].persennumberPersen luas plot yang tumpang tindih, 0-100.
data[].skrining.lapisan[].jarak_mnumber | nullJarak terdekat ke batas lapisan (0 bila tumpang tindih); null bila lebih jauh dari jarak_cari_m.
data[].skrining.lapisan[].statusstring
TIDAK_TERINDIKASI PERLU_DITINJAU TERINDIKASI
data[].skrining.radius_mnumber | null
data[].skrining.luas_plot_hanumber
data[].skrining.alasan_tinjauanstring | null
data[].skrining.ada_buktiboolean
metaobject
meta.halamaninteger
meta.per_halamaninteger
meta.totalinteger
meta.halaman_terakhirinteger
meta.berikutnyastring (uri) | nullURL halaman berikutnya (null di halaman terakhir).
ringkasanobject
ringkasan.TIDAK_TERINDIKASIinteger
ringkasan.PERLU_DITINJAUinteger
ringkasan.TERINDIKASIinteger
ringkasan.BELUM_DISKRININGinteger
ambangobject
ambang.persennumberTumpang tindih >= persen ini dari luas plot = TERINDIKASI.
ambang.hanumberTumpang tindih >= luas ini = TERINDIKASI.
ambang.jarak_mnumberBatas lapisan dalam jarak ini (tanpa tumpang tindih) = PERLU_DITINJAU.
ambang.radius_titik_mnumber | nullJari-jari plot titik; null = lingkaran seluas luas plot tercatat.
ambang.jarak_cari_mnumberJarak terdekat dilaporkan sampai radius ini; lebih jauh = null.
filterobject
filter.unitstring | null
filter.statusstring | null
filter.tinjauanstring | null

GET /api/v1/ketertelusuran/dds-pengiriman/eudr Pratinjau

GeoJSON DDS per pengiriman untuk Sistem Informasi EUDR, dengan laporan validasi. Pratinjau. Satu DO CPO atau inti sawit menjadi satu FeatureCollection (satu komoditas/HS) menurut EUDR GeoJSON File Description: satu Feature per plot kontributor (dari alokasi neraca massa GET /ketertelusuran/dds-pengiriman), properti ProducerCountry "ID", ProductionPlace (kode plot), Area (ha), dan ProducerName (nama pemasok; tanpa_nama=1 untuk menghilangkannya). Plot <= 4 ha boleh Point, > 4 ha wajib Polygon. Validasi: tipe geometri, cincin tertutup, tidak berpotongan sendiri, tanpa lubang, titik tidak berimpit setelah dipotong 6 desimal, luas poligon cocok dengan luas tercatat (toleransi EUDR_TOLERANSI_LUAS_PERSEN), seluruh TBS jendela tertaut ke plot, ukuran <= 25 MB. geojson null bila validasi gagal. Spesifikasi resmi dicatat di ringkasan.spesifikasi; uji unggah ke Sistem Informasi EUDR sebelum dipakai.

Kemampuan token: trace:baca

ParameterDiTipeKeterangan
nodoquerystring wajibNomor DO pengapalan CPO atau inti sawit.
maks 35 karakter
tanpa_namaqueryboolean1 = jangan sertakan ProducerName (data pribadi petani swadaya).
unitquerystringKode unit di dalam cakupan token (beserta turunannya). Di luar cakupan dijawab 403.
maks 20 karakter

Jawaban: 200 401 403 404 422 429

Field jawaban (200), 40 field
FieldTipeKeterangan
dataobject
data.ringkasanobject
data.ringkasan.nodostring
data.ringkasan.komoditasstring
data.ringkasan.kode_hsstring
data.ringkasan.negara_produksistring = ID
data.ringkasan.volume_kgnumber
data.ringkasan.tanggal_muatstring (date)
data.ringkasan.pksstring | null
data.ringkasan.jendela_produksiobjectSama dengan jendela_produksi di GET /ketertelusuran/dds-pengiriman.
data.ringkasan.persen_tertelusur_plotnumber | null
data.ringkasan.persen_siap_eudrnumber | null
data.ringkasan.jumlah_fiturinteger
data.ringkasan.jumlah_plotinteger
data.ringkasan.indikasiobjectJumlah plot kontributor per status indikasi (termasuk BELUM_DISKRINING).
data.ringkasan.lapisanarray<string>Lapisan (jenis, nama, versi) yang dipakai skrining terkini plot kontributor.
data.ringkasan.ukuran_bitainteger
data.ringkasan.statusstring = PRATINJAU
data.ringkasan.catatanstring
data.ringkasan.spesifikasiarray<object>
data.ringkasan.spesifikasi[].judulstring
data.ringkasan.spesifikasi[].urlstring (uri)
data.validasiobject
data.validasi.lolosboolean
data.validasi.galatarray<string>Galat format yang menghalangi ekspor.
data.validasi.peringatanarray<string>Catatan kesiapan (plot belum siap, indikasi belum ditinjau, mass balance); tidak menghalangi ekspor.
data.validasi.galat_plotinteger
data.geojsonobject | null
data.geojson.typestring = FeatureCollection
data.geojson.featuresarray<object>
data.geojson.features[].typestring = Feature
data.geojson.features[].propertiesobject
data.geojson.features[].properties.ProducerNamestring
data.geojson.features[].properties.ProducerCountrystring = ID
data.geojson.features[].properties.ProductionPlacestring
data.geojson.features[].properties.AreanumberLuas plot tercatat (ha).
data.geojson.features[].geometryGeoJSON Point | PolygonGeometri GeoJSON (RFC 7946), koordinat [bujur, lintang] WGS 84.
filterobject
filter.unitstring | null
filter.tanpa_namaboolean
Aturan

Paginasi, batas laju, dan galat

Paginasi

Endpoint daftar memakai halaman: page mulai 1 dan per_halaman 1–500 (bawaan 100; /batch tetap 50). meta berisi halaman, total, halaman_terakhir, dan berikutnya (URL halaman berikutnya, null di halaman terakhir).

Batas laju

INTEGRASI_API_PER_MENIT permintaan per menit per token (bawaan 60), ditambah dua kali nilai itu per alamat IP termasuk percobaan dengan token salah. Setiap jawaban membawa X-RateLimit-Limit dan X-RateLimit-Remaining; lewat batas dijawab 429 dengan Retry-After dalam detik.

Format

Tanggal YYYY-MM-DD, bulan YYYY-MM, waktu ISO 8601 berzona Asia/Jakarta, nominal rupiah 2 desimal. Nama field berbahasa Indonesia dan tetap selama v1.

Kode jawaban

KodeArti
200Berhasil
401Token tidak ada, salah, dicabut, atau kedaluwarsa
403Kemampuan kurang, unit di luar cakupan, pemilik nonaktif, atau modul mati
404Data tidak ada atau di luar cakupan token
405Metode tidak didukung (mis. POST ke /jurnal)
409Batch sudah dibatalkan
422Parameter tidak valid; rincian per field di errors
429Batas laju terlampaui; tunggu sesuai Retry-After

Galat berupa JSON dengan message; 422 menambah errors per parameter. Bahasa pesan mengikuti bahasa instance.

Versi

Kebijakan versi

  • Versi mayor ada di path: /api/v1. Selama v1 kami hanya membuat perubahan yang kompatibel: endpoint baru, parameter opsional baru, dan field jawaban baru. Klien Anda wajib mengabaikan field yang tidak dikenalnya.
  • Perubahan yang tidak kompatibel (menghapus atau mengganti nama field, mengubah tipe atau artinya) hanya lewat path baru seperti /api/v2 yang berjalan berdampingan dengan v1. Tanggal penghentian v1, bila ada, diumumkan di catatan rilis sebelum berlaku.
  • Endpoint berlabel Pratinjau masih bisa berubah di dalam v1; setiap perubahan ditulis di CHANGELOG.
  • info.version di openapi.yaml (sekarang 1.2.0) adalah versi dokumennya. Karena tiap pelanggan memperbarui instance-nya sendiri, API di sebuah instance mengikuti versi Sawitara yang terpasang di sana.
Status

Status jujur per endpoint

EndpointStatusCatatan
GET /jurnalTersediaAda di kode dan dicakup tes kontrak.
GET /batchTersediaAda di kode dan dicakup tes kontrak.
GET /batch/{id}TersediaAda di kode dan dicakup tes kontrak.
POST /batch/{id}/diterimaTersediaAda di kode dan dicakup tes kontrak.
GET /ketertelusuran/plotTersediaAda di kode dan dicakup tes kontrak.
GET /ketertelusuran/kesiapanTersediaAda di kode dan dicakup tes kontrak.
GET /ketertelusuran/ttpTersediaAda di kode dan dicakup tes kontrak.
GET /ketertelusuran/ddsPratinjauBerbasis periode: plot yang memasok PKS pada periode produksi, bukan segregasi fisik per pengiriman.
GET /ketertelusuran/dds-pengirimanPratinjauBerbasis periode: plot yang memasok PKS pada periode produksi, bukan segregasi fisik per pengiriman.
GET /ketertelusuran/lapisanPratinjauBerbasis periode: plot yang memasok PKS pada periode produksi, bukan segregasi fisik per pengiriman.
GET /ketertelusuran/skriningPratinjauBerbasis periode: plot yang memasok PKS pada periode produksi, bukan segregasi fisik per pengiriman.
GET /ketertelusuran/dds-pengiriman/eudrPratinjauBerbasis periode: plot yang memasok PKS pada periode produksi, bukan segregasi fisik per pengiriman.

Rencana (belum tersedia)

Ini rencana, bukan endpoint. Tidak ada di paths openapi.yaml dan tidak bisa dipanggil.

  • Segera
    API portal Tandan untuk Sawitara Hub GET /api/v1/portal/*

    Hub membaca data portal Tandan per tautan tanpa menyimpan transaksi PKS (docs/EKOSISTEM.md, Gelombang 2 butir 2.2).

  • Segera
    Berkas PSR/KUR untuk bank dan mitra pembiayaan

    Paket data plot dan legalitas petani untuk pengajuan lewat mitra berizin. Bentuk endpoint belum ditetapkan.

Unduh openapi.yaml (OpenAPI 3.1)

Butuh token uji?

Hubungi kami untuk mencoba API di instance demo dengan data contoh sebelum tim IT Anda memutuskan.