{
 "openapi": "3.1.0",
 "info": {
  "title": "RegulasiDigital.com API baca-saja",
  "version": "1.0.0",
  "description": "Data regulasi ranah komunikasi dan digital Indonesia (Komdigi, sebelumnya Kominfo) untuk agen AI dan program. Tanpa autentikasi, tanpa penulisan, idempoten. Setiap hasil menyebut pasal dasar. Bukan nasihat hukum; untuk keperluan hukum rujuk naskah resmi dari lembaga penerbit.",
  "license": {
   "name": "Lihat https://regulasidigital.com/lisensi/",
   "url": "https://regulasidigital.com/lisensi/"
  }
 },
 "servers": [
  {
   "url": "https://regulasidigital.com"
  }
 ],
 "paths": {
  "/api/cari": {
   "get": {
    "operationId": "cari",
    "summary": "Cari pokok aturan, tanya jawab, dan tenggat dengan kata kunci (mulai dari sini)",
    "description": "Mengembalikan pokok aturan berikut versi terakhirnya (dan alamat /api/berlaku untuk tanggal tertentu), tanya jawab lengkap dengan peraturan sumbernya, dan butir tenggat. Istilah sehari-hari (misalnya lelang cepat) dipetakan ke bahasa peraturan.",
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": true,
      "description": "kata kunci atau pertanyaan",
      "schema": {
       "type": "string",
       "example": "pendaftaran penyelenggara sistem elektronik lingkup privat"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Hasil pencarian terurut"
     },
     "400": {
      "description": "Galat: penyebab dan perbaikan",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Galat"
        }
       }
      }
     }
    }
   }
  },
  "/api/berlaku": {
   "get": {
    "operationId": "berlakuPadaTanggal",
    "summary": "Versi tiap pokok aturan pada satu tanggal",
    "parameters": [
     {
      "name": "tanggal",
      "in": "query",
      "required": true,
      "description": "YYYY-MM-DD",
      "schema": {
       "type": "string",
       "example": "2025-01-01"
      }
     },
     {
      "name": "topik",
      "in": "query",
      "required": false,
      "description": "id topik, opsional (daftar di /berubah/index.json, medan topik[].id)",
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Versi yang berlaku, dengan kutipan pasal"
     },
     "400": {
      "description": "Galat: penyebab dan perbaikan",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Galat"
        }
       }
      }
     },
     "404": {
      "description": "Galat: penyebab dan perbaikan",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Galat"
        }
       }
      }
     }
    }
   }
  },
  "/api/hitung": {
   "get": {
    "operationId": "hitung",
    "summary": "Hitung dengan aturan dari pasal; daftar alat dan parameternya ada di bawah dan di galat 400 tanpa parameter alat",
    "description": "alat=tenggat-pdp: Batas waktu pengendali data pribadi untuk lima kewajiban 3 x 24 jam dalam UU 27/2022: memberi akses, memperbaiki data, menghentikan pemrosesan setelah persetujuan ditarik, menunda dan membatasi pemrosesan, dan memberitahukan kegagalan pelindungan data. Parameter: kewajiban (wajib), waktu (wajib); alat=tenggat-putus-akses: Batas waktu pemutusan akses atas perintah (1 x 24 jam) dan atas peringatan mendesak (4 jam) bagi PSE lingkup privat (Permenkominfo 5/2020) dan lingkup publik (Permenkomdigi 5/2025), serta batas waktu tindak lanjut permohonan normalisasi (2x24 jam). Parameter: lingkup (wajib), jenis (wajib), waktu (wajib); alat=denda-administratif-pdp: Batas tertinggi denda administratif menurut UU 27/2022 Pasal 57 ayat (3): 2 persen dari pendapatan tahunan atau penerimaan tahunan terhadap variabel pelanggaran. Parameter: pendapatan_tahunan (wajib); alat=ancaman-pidana: Ancaman pidana penjara dan denda lima ketentuan (UU 27/2022 Pasal 67 ayat (1) sampai (3) dan Pasal 68, serta Pasal 47 UU 36/1999) menurut tanggal perbuatan: rumusan sebelum penyesuaian pidana, atau rumusan setelah UU 1/2026 mulai berlaku pada 2 Januari 2026. Parameter: ketentuan (wajib), tanggal_perbuatan (wajib), pelaku; alat=kategori-denda: Nilai rupiah kategori denda I sampai VIII menurut UU 1/2023 Pasal 79 ayat (1), dan perbandingan dengan nilai denda yang Anda sebutkan. Parameter: kategori (wajib), nilai_rupiah; alat=masa-penyesuaian: Tanggal berakhirnya masa penyesuaian dalam empat ketentuan peralihan (UU 27/2022 Pasal 74, PP 17/2025 Pasal 49, Permenkomdigi 5/2025 Pasal 101, Permenkomdigi 7/2026 Pasal 32), dan apakah masa itu masih berjalan pada tanggal yang Anda pilih. Parameter: peraturan (wajib), tanggal_acuan (wajib)",
    "parameters": [
     {
      "name": "alat",
      "in": "query",
      "required": true,
      "description": "alat hitung",
      "schema": {
       "type": "string",
       "example": "tenggat-pdp",
       "enum": [
        "tenggat-pdp",
        "tenggat-putus-akses",
        "denda-administratif-pdp",
        "ancaman-pidana",
        "kategori-denda",
        "masa-penyesuaian"
       ]
      }
     },
     {
      "name": "jenis",
      "in": "query",
      "required": false,
      "description": "Jenis tenggat",
      "schema": {
       "type": "string",
       "enum": [
        "perintah",
        "mendesak",
        "normalisasi"
       ]
      }
     },
     {
      "name": "kategori",
      "in": "query",
      "required": false,
      "description": "Kategori denda",
      "schema": {
       "type": "string",
       "enum": [
        "I",
        "II",
        "III",
        "IV",
        "V",
        "VI",
        "VII",
        "VIII"
       ]
      }
     },
     {
      "name": "ketentuan",
      "in": "query",
      "required": false,
      "description": "Ketentuan pidana",
      "schema": {
       "type": "string",
       "enum": [
        "pdp-67-1",
        "pdp-67-2",
        "pdp-67-3",
        "pdp-68",
        "telekomunikasi-47"
       ]
      }
     },
     {
      "name": "kewajiban",
      "in": "query",
      "required": false,
      "description": "Kewajiban",
      "schema": {
       "type": "string",
       "enum": [
        "akses",
        "perbaikan",
        "tarik-persetujuan",
        "tunda-batasi",
        "pemberitahuan-kegagalan"
       ]
      }
     },
     {
      "name": "lingkup",
      "in": "query",
      "required": false,
      "description": "Lingkup PSE",
      "schema": {
       "type": "string",
       "enum": [
        "privat",
        "publik"
       ]
      }
     },
     {
      "name": "nilai_rupiah",
      "in": "query",
      "required": false,
      "description": "Nilai denda untuk dibandingkan (rupiah, opsional)",
      "schema": {
       "type": "number"
      }
     },
     {
      "name": "pelaku",
      "in": "query",
      "required": false,
      "description": "Pelaku",
      "schema": {
       "type": "string",
       "enum": [
        "orang",
        "korporasi"
       ]
      }
     },
     {
      "name": "pendapatan_tahunan",
      "in": "query",
      "required": false,
      "description": "Pendapatan atau penerimaan tahunan (rupiah)",
      "schema": {
       "type": "number"
      }
     },
     {
      "name": "peraturan",
      "in": "query",
      "required": false,
      "description": "Peraturan",
      "schema": {
       "type": "string",
       "enum": [
        "uu-pdp",
        "pp-17-2025",
        "permenkomdigi-5-2025",
        "permenkomdigi-7-2026"
       ]
      }
     },
     {
      "name": "tanggal_acuan",
      "in": "query",
      "required": false,
      "description": "Tanggal acuan",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "tanggal_perbuatan",
      "in": "query",
      "required": false,
      "description": "Tanggal perbuatan",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "waktu",
      "in": "query",
      "required": false,
      "description": "Waktu permintaan diterima (atau kegagalan diketahui)",
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Hasil hitung dengan langkah, aturan dasar, dan kutipan pasal"
     },
     "400": {
      "description": "Galat: penyebab dan perbaikan",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Galat"
        }
       }
      }
     }
    }
   }
  },
  "/api/pasal": {
   "get": {
    "operationId": "ambilPasal",
    "summary": "Bunyi satu pasal dari pustaka",
    "parameters": [
     {
      "name": "regulasi",
      "in": "query",
      "required": true,
      "description": "id regulasi, mis. uu-11-2008",
      "schema": {
       "type": "string",
       "example": "uu-11-2008"
      }
     },
     {
      "name": "pasal",
      "in": "query",
      "required": false,
      "description": "label pasal, mis. Pasal 27; kosong = daftar label",
      "schema": {
       "type": "string",
       "example": "Pasal 27"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Bunyi pasal atau daftar label"
     },
     "404": {
      "description": "Galat: penyebab dan perbaikan",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Galat"
        }
       }
      }
     }
    }
   }
  },
  "/api/teks/{id}.json": {
   "get": {
    "operationId": "teksLengkap",
    "summary": "Seluruh pasal satu regulasi",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Peta label pasal ke bunyi, dan berkas_per_pasal: peta label ke alamat JSON per pasal"
     }
    }
   }
  },
  "/api/pasal/{id}/{label}.json": {
   "get": {
    "operationId": "pasalStatis",
    "summary": "Satu pasal sebagai berkas JSON statis (label huruf kecil, tanda baca menjadi strip; daftar di berkas_per_pasal)",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "label",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "example": "pasal-27"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Bunyi pasal dengan nomor, judul, dan status peraturan"
     },
     "404": {
      "description": "Label tidak ada"
     }
    }
   }
  },
  "/berubah/index.json": {
   "get": {
    "operationId": "rantaiVersi",
    "summary": "Rantai versi semua pokok aturan",
    "responses": {
     "200": {
      "description": "Topik dengan versi, kutipan, dasar tanggal berlaku"
     }
    }
   }
  },
  "/api/jalur.json": {
   "get": {
    "operationId": "jalurPengaduan",
    "summary": "Langkah pengaduan dan sanksi dengan tenggat",
    "responses": {
     "200": {
      "description": "Langkah dengan kutipan dasar"
     }
    }
   }
  },
  "/api/tenggat.json": {
   "get": {
    "operationId": "tenggat",
    "summary": "Batas waktu kewajiban dan hak (pendaftaran, pelaporan, penurunan konten, penanganan kebocoran data, peralihan) dengan kutipan pasal",
    "responses": {
     "200": {
      "description": "Butir tenggat per kelompok dengan kutipan dasar"
     }
    }
   }
  },
  "/api/peralihan.json": {
   "get": {
    "operationId": "peralihan",
    "summary": "Peralihan antar peraturan menurut tanggal berlaku",
    "responses": {
     "200": {
      "description": "Tanggal peralihan dengan kutipan dasar"
     }
    }
   }
  },
  "/api/surat.json": {
   "get": {
    "operationId": "contohSurat",
    "summary": "Contoh surat pengaduan dan permintaan",
    "responses": {
     "200": {
      "description": "Contoh surat dengan kutipan dasar"
     }
    }
   }
  },
  "/api/kunci-kalkulator.json": {
   "get": {
    "operationId": "kunciKalkulator",
    "summary": "Kunci jawaban kalkulator: aturan bersitasi dan semua kasus uji, dijalankan ulang di /kalkulator/uji/",
    "responses": {
     "200": {
      "description": "Aturan dengan kutipan pasal, spesifikasi alat, dan kasus uji beserta hasil yang diharapkan"
     }
    }
   }
  },
  "/api/membantu": {
   "get": {
    "operationId": "membantu",
    "summary": "Cacah anonim jawaban ya atau tidak pada tombol Membantu? di satu halaman (petunjuk kasar, tanpa identitas)",
    "parameters": [
     {
      "name": "halaman",
      "in": "query",
      "required": true,
      "description": "jalur halaman, mis. /topik/telekomunikasi-penyelenggaraan/",
      "schema": {
       "type": "string",
       "example": "/tenggat/"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Cacah ya dan tidak"
     },
     "400": {
      "description": "Galat: penyebab dan perbaikan",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Galat"
        }
       }
      }
     }
    }
   }
  },
  "/mcp": {
   "post": {
    "operationId": "mcp",
    "summary": "Server MCP baca-saja (JSON-RPC 2.0): initialize, tools/list, tools/call",
    "responses": {
     "200": {
      "description": "Balasan JSON-RPC"
     }
    }
   }
  }
 },
 "components": {
  "schemas": {
   "Galat": {
    "type": "object",
    "required": [
     "galat",
     "status",
     "penyebab",
     "perbaikan"
    ],
    "properties": {
     "galat": {
      "type": "boolean"
     },
     "status": {
      "type": "integer"
     },
     "penyebab": {
      "type": "string"
     },
     "perbaikan": {
      "type": "string"
     },
     "contoh": {}
    }
   }
  }
 }
}
