Check PTK & GTK Indonesian Teacher'ss

by RFour · Jul 27, 2026 ·javascript

Basically this checks the ptk and GTK stuff from uhh Indonesian teachers, I added this to my api, basically this gets a lot of infos from uhh stuff and easy to use, and uhh idk what to say, I added this because I saw someone using check ptk and GTK tool

PTKGTKTeacherLazy
simpkb.jsjavascript
1async function cari(body) {
2  const res = await fetch("https://app.simpkb.id/akun/ptk-solr", {
3    method: 'POST',
4    headers: {
5      'Accept': 'application/json, text/javascript, */*; q=0.01',
6      'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
7      'Origin': 'https://app.simpkb.id',
8      'Referer': 'https://app.simpkb.id/akun/ptk',
9      'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Mobile Safari/537.36',
10      'X-Requested-With': 'XMLHttpRequest'
11    },
12    body: new URLSearchParams(body).toString()
13  });
14  return res.json();
15}
16
17async function provinsi() {
18  const res = await fetch("https://app.simpkb.id/asset/js/configs/propinsi.json?version=202309261116", {
19    headers: {
20      'Accept': 'application/json',
21      'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36',
22      'X-Requested-With': 'XMLHttpRequest',
23      'Referer': 'https://app.simpkb.id/akun/ptk'
24    }
25  });
26  return res.json();
27}
28
29async function kota() {
30  const res = await fetch("https://app.simpkb.id/asset/js/configs/kota.json?version=202309261116", {
31    headers: {
32      'Accept': 'application/json',
33      'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36',
34      'X-Requested-With': 'XMLHttpRequest',
35      'Referer': 'https://app.simpkb.id/akun/ptk'
36    }
37  });
38  return res.json();
39}
40
41export async function simpkb(req) {
42  const { searchParams: sp } = new URL(req.url);
43  const keyword = sp.get('keyword');
44  const prov = sp.get('prov') || '';
45  const kab = sp.get('kab') || '';
46  const paspor = sp.get('paspor') || '';
47  const dapodik = sp.get('dapodik') || '';
48  const page = sp.get('page') || '1';
49  const mode = sp.get('mode') || 'cari';
50
51  if (mode === 'provinsi') {
52    try {
53      const data = await provinsi();
54      return { status: true, data };
55    } catch (err) {
56      return { error: err.message };
57    }
58  }
59
60  if (mode === 'kota') {
61    try {
62      const data = await kota();
63      return { status: true, data };
64    } catch (err) {
65      return { error: err.message };
66    }
67  }
68
69  if (!keyword) {
70    return {
71      error: "keyword nya mana",
72      usage: {
73        cari: "/simpkb?keyword=Novy",
74        filter: "/simpkb?keyword=Novy&prov=15&kab=1502&dapodik=1&paspor=1",
75        semua: "/simpkb?keyword=Novy&prov=15&kab=1502",
76        provinsi: "/simpkb?mode=provinsi",
77        kota: "/simpkb?mode=kota"
78      },
79      params: {
80        keyword: "nama guru/ptk",
81        prov: "kode provinsi (dari /simpkb?mode=provinsi)",
82        kab: "kode kabupaten (dari /simpkb?mode=kota)",
83        dapodik: "0=belum terkoneksi, 1=sudah terkoneksi, kosong=semua",
84        paspor: "0=belum registrasi, 1=sudah registrasi, kosong=semua",
85        page: "halaman"
86      }
87    };
88  }
89
90  try {
91    const body = {
92      k_propinsi: prov,
93      k_kota: kab,
94      is_paspor: paspor,
95      is_dapodik: dapodik,
96      keyword,
97      page
98    };
99    const data = await cari(body);
100    return { status: true, params: { keyword, prov, kab, dapodik, paspor, page }, data };
101  } catch (err) {
102    return { error: err.message };
103  }
104}
raw