0.2.0
OpenAPI 3.1.0

JagaDana API

Tim JagaDana
Prototipe kompetisi (bukan untuk produksi)

API JagaDana — lapisan transparansi pengadaan. Semua data paket, penyedia, dan penawaran adalah data demo sintetis berlabel “Data Demo”; tidak ada data nyata atau hasil scraping.

Aturan lintas endpoint

  • Nominal uang: rupiah bulat (integer), tanpa pecahan. Contoh 190342598.
  • Waktu: ISO-8601 dengan zona, mis. 2026-11-15T08:30:00+07:00.
  • ID: UUID v4.
  • Daftar memakai cursor: ?limit=&cursor= → { items, next_cursor }.
  • Galat selalu memakai satu envelope: { error: { code, message, fields? }, request_id? }.
  • Angka audit (deviasi, sinkronisasi, kemiripan, skor risiko) dihitung kode deterministik, bukan LLM.

Penawaran tersegel: selama masa penawaran, publik hanya melihat hash komitmen. Harga dan identitas penawar dibuka setelah bids/open, dan rincian pemenang dibuka setelah penetapan + masa sanggah.

Penanda status: x-status: implemented berarti endpoint sudah ada di kode; planned berarti kontrak sudah disepakati dan implementasinya menyusul pada fase berikutnya. Dokumentasi ini adalah kontrak, bukan klaim bahwa semua endpoint sudah berjalan.

Bahasa temuan netral: sistem menandai “Perlu Klarifikasi” sebagai indikator untuk dijelaskan, bukan bukti pelanggaran.

Origin yang sama dengan aplikasi

No authentication selected
Client Libraries

Publik

​

Daftar paket pengadaan

​

Daftar paket untuk peta dan tabel publik. Tanpa autentikasi.

Hanya menampilkan data yang boleh publik: judul, dinas, nilai pagu/HPS, status tahapan, skor risiko, dan jumlah penawaran. Harga penawaran tidak ikut sebelum penetapan pemenang.

Urutan default: risk_score menurun, lalu judul.

Query Parameters

  • values
    DRAFTDIUMUMKANPENAWARANEVALUASIPENETAPANSANGGAHKONTRAKPELAKSANAANSELESAIDIBATALKAN
  • Cari pada judul, dinas, atau nama penyedia

  • Integer numbers.

  • Jumlah item per halaman

  • Cursor dari respons sebelumnya

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/packages
curl '/api/packages?limit=20'
{
  "items": [
    {
      "id": "123e4567-e89b-12d3-a456-426614174000",
      "code": "string",
      "title": "string",
      "project_type": "JALAN",
      "department_name": "string",
      "location": {
        "lat": -90,
        "lng": -180
      },
      "address": "string",
      "pagu": 0,
      "hps_total": 0,
      "status": "DRAFT",
      "risk_score": 0,
      "risk_level": "LOW",
      "bid_count": 0,
      "citizen_report_count": 0,
      "is_demo": true,
      "announced_at": "2026-11-15T09:23:31.892Z",
      "bid_close_at": "2026-11-15T09:23:31.892Z",
      "created_at": "2026-11-15T09:23:31.892Z"
    }
  ],
  "next_cursor": null
}

Detail satu paket

​

Detail paket beserta jadwal, indikator tingkat paket, dan ringkasan bahasa awam.

Bila status sudah melewati PENETAPAN, respons menyertakan award dan rincian penawaran pemenang pada endpoint terpisah (packages.results).

Path Parameters

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/packages/{id}
curl /api/packages/123e4567-e89b-12d3-a456-426614174000
{
  "id": "123e4567-e89b-12d3-a456-426614174000",
  "code": "string",
  "title": "string",
  "project_type": "JALAN",
  "department_name": "string",
  "location": {
    "lat": -90,
    "lng": -180
  },
  "address": "string",
  "pagu": 0,
  "hps_total": 0,
  "status": "DRAFT",
  "risk_score": 0,
  "risk_level": "LOW",
  "bid_count": 0,
  "citizen_report_count": 0,
  "is_demo": true,
  "announced_at": "2026-11-15T09:23:31.975Z",
  "bid_close_at": "2026-11-15T09:23:31.975Z",
  "created_at": "2026-11-15T09:23:31.975Z",
  "description": "string",
  "ppk_name": "string",
  "pokja_name": "string",
  "ai_summary": null,
  "flags": [
    {
      "code": "string",
      "severity": "INFO",
      "message": "string",
      "subject": "string",
      "value": 1
    }
  ],
  "schedule": {
    "announcement": "2026-11-15T09:23:31.975Z",
    "bid_open": "2026-11-15T09:23:31.975Z",
    "bid_close": "2026-11-15T09:23:31.975Z",
    "evaluation": "2026-11-15T09:23:31.975Z",
    "award": "2026-11-15T09:23:31.975Z",
    "appeal_end": "2026-11-15T09:23:31.975Z",
    "contract": "2026-11-15T09:23:31.975Z"
  }
}

Statistik ringkas untuk beranda

​

Agregat publik: jumlah paket, total nilai, jumlah yang perlu klarifikasi, jumlah item ditandai, dan potensi selisih.

Responses

  • application/json
  • application/json
  • application/json
Request Example for get/api/stats
curl /api/stats
{
  "packages": -9007199254740991,
  "contract_total": 0,
  "flagged_packages": -9007199254740991,
  "no_bid_packages": -9007199254740991,
  "flagged_items": -9007199254740991,
  "exposure": 0
}

Hash komitmen penawaran (tanpa harga)

​

Selama masa penawaran, publik hanya melihat bukti komitmen: nama samaran peserta, SHA-256 isi penawaran, waktu kirim, dan nomor revisi.

Hash dihitung atas isi penawaran yang tersegel. Setelah pembukaan, hash dapat diverifikasi ulang; perubahan satu angka akan mengubah hash.

Endpoint ini sengaja tidak mengembalikan harga, total, atau identitas penyedia.

Path Parameters

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/packages/{id}/bids/commitments
curl /api/packages/123e4567-e89b-12d3-a456-426614174000/bids/commitments
{
  "items": [
    {
      "alias": "string",
      "commit_hash": "string",
      "submitted_at": "2026-11-15T09:23:32.066Z",
      "revision": -9007199254740991
    }
  ],
  "next_cursor": null
}

Hasil penetapan dan perbandingan penawaran

​

Dibuka setelah penetapan pemenang dan masa sanggah berakhir, sesuai keputusan K-13.

Berisi pemenang, nilai kontrak, serta perbandingan side-by-side terhadap HPS dan HSPK: total tiap peserta, rasio terhadap HPS, flag harga per item, dan indikator kemiripan antar-penawar.

Identitas badan usaha yang sensitif (NPWP, alamat, kontak) tidak ditampilkan. Sebelum penetapan, endpoint mengembalikan 409 STATE_CONFLICT.

Path Parameters

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/packages/{id}/results
curl /api/packages/123e4567-e89b-12d3-a456-426614174000/results
{
  "package_id": "123e4567-e89b-12d3-a456-426614174000",
  "bid_id": "123e4567-e89b-12d3-a456-426614174000",
  "provider": {
    "id": "123e4567-e89b-12d3-a456-426614174000",
    "name": "string",
    "integrity_score": 0
  },
  "value": 0,
  "decided_at": "2026-11-15T09:23:32.111Z",
  "rank": -9007199254740991,
  "not_lowest_reason": null,
  "appeal_end_at": "2026-11-15T09:23:32.111Z",
  "entries": [
    {
      "bid_id": "123e4567-e89b-12d3-a456-426614174000",
      "alias": "string",
      "provider": {
        "id": "123e4567-e89b-12d3-a456-426614174000",
        "name": "string",
        "integrity_score": 0
      },
      "total": 0,
      "corrected_total": 0,
      "hps_ratio_pct": 1,
      "total_synced": true,
      "passed": true,
      "rank": -9007199254740991,
      "flags": [
        {
          "code": "string",
          "severity": "INFO",
          "message": "string",
          "subject": "string",
          "value": 1
        }
      ],
      "similarity": [
        {
          "peer_alias": "string",
          "identical_item_pct": 1,
          "price_order_correlation": -1,
          "severity": "LOW"
        }
      ]
    }
  ]
}

Laporan warga pada satu paket

​

Laporan lapangan yang terhubung ke paket, termasuk laporan gabungan (cluster) dalam radius 50 m.

Foto publik sudah bebas EXIF; koordinat dibulatkan 4 desimal; tidak ada identitas pelapor.

Path Parameters

Query Parameters

  • values
    PENDINGVERIFIEDRESOLVEDREJECTED

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/packages/{id}/reports
curl /api/packages/123e4567-e89b-12d3-a456-426614174000/reports
{
  "items": [
    {
      "id": "123e4567-e89b-12d3-a456-426614174000",
      "package_id": "123e4567-e89b-12d3-a456-426614174000",
      "report_type": "PHYSICAL_ISSUE",
      "description": "string",
      "photo_url": "string",
      "location": {
        "lat": -90,
        "lng": -180
      },
      "status": "PENDING",
      "cluster_id": "123e4567-e89b-12d3-a456-426614174000",
      "duplicate_of": "123e4567-e89b-12d3-a456-426614174000",
      "vision": {
        "label": "string",
        "confidence": 0,
        "matches_category": true
      },
      "created_at": "2026-11-15T09:23:32.172Z"
    }
  ],
  "next_cursor": null
}

Katalog harga acuan HSPK

​

396 item harga acuan dari Perwali Kota Malang No. 10/2022 (HSPK 2022) untuk jenis Jalan, Drainase, dan Gedung.

Dipakai form HPS (PPK) dan form penawaran (Penyedia) untuk memilih ssh_code. Parameter q mencari pada nama item; category menyaring jenis.

Query Parameters

  • values
    JALANDRAINASEGEDUNGUMUM
  • Jumlah item per halaman

  • Cursor dari respons sebelumnya

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/price-references
curl '/api/price-references?limit=20'
{
  "items": [
    {
      "code": "string",
      "item_name": "string",
      "unit": "string",
      "price": 0,
      "category": "string",
      "source": "string"
    }
  ],
  "next_cursor": null
}

Verifikasi rantai audit

​

Menjalankan verify_audit_chain() dan mengembalikan hasilnya: utuh atau rusak pada baris tertentu.

Hash-chain bersifat tamper-evident, bukan tamper-proof: perubahan dapat dideteksi, bukan dicegah secara absolut.

Responses

  • application/json
  • application/json
  • application/json
Request Example for get/api/audit/chain
curl /api/audit/chain
{
  "intact": true,
  "broken_at": null,
  "checked_rows": -9007199254740991,
  "checked_at": "2026-11-15T09:23:32.248Z"
}

Log audit publik (read-only)

​

Riwayat aksi pada seluruh entitas, tanpa data sensitif. Filter entity_type dan entity_id.

Query Parameters

  • Integer numbers.

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/api/audit/log
curl '/api/audit/log?limit=50'
{
  "items": [
    {
      "id": "string",
      "action": "string",
      "actor_role": "PUBLIK",
      "actor_name": "string",
      "created_at": "2026-11-15T09:23:32.287Z",
      "previous_state": "@filename",
      "new_state": "@filename"
    }
  ],
  "next_cursor": null
}

Autentikasi (Collapsed)

​

PPK — Paket & HPS (Collapsed)

​

Pokja — Evaluasi & Penetapan (Collapsed)

​

Penyedia — Penawaran (Collapsed)

​

Kontrak & Termin (Collapsed)

​

Laporan Warga (Collapsed)

​

Laporan lapangan tanpa akun, dengan klaster radius 50 m dan perlindungan privasi.

Sistem (Collapsed)

​

Referensi (Collapsed)

​

Katalog harga acuan HSPK.

Referensi Operations

Models