API e-Bupot untuk Sistem Payroll: Integrasi e-Bupot Unifikasi dan e-Bupot 21/26 (BP21, BPA1, BPA2)

Diagram alur payroll ke validate, create bukti potong, lalu Coretax DJP lewat PJAP Sipajak, dengan status kembali

Terbit: 5 November 2026 · Diperbarui: 5 November 2026 · Ditulis oleh Tim Pajak Sipajak

API e-Bupot untuk payroll adalah antarmuka yang membuat sistem penggajian menerbitkan bukti potong PPh langsung ke modul eBupot DJP, tanpa input ulang di portal. Sistem mengirim data penghasilan per penerima, menjalankan validasi, membuat bukti potong BP21, BPA1, atau BPA2, lalu menyimpan nomor dan status bukti potong untuk rekonsiliasi SPT Masa.

Ringkasan Eksekutif

  • PER-11/PJ/2025 mewajibkan pemotong PPh 21/26 membuat bukti potong, menyerahkannya ke pihak yang dipotong, dan melaporkannya lewat SPT Masa PPh 21/26. Pemotong PPh Unifikasi punya tiga kewajiban yang sama lewat SPT Masa PPh Unifikasi.
  • Bukti potong berbentuk dokumen elektronik yang dibuat lewat modul eBupot. Modul ini mencakup Portal Wajib Pajak dan aplikasi lain yang terintegrasi dengan sistem DJP.
  • PPh 21 yang dipotong disetor paling lambat tanggal 15 bulan berikutnya dan dilaporkan paling lama 20 hari setelah Masa Pajak berakhir (PMK 81/2024).
  • Di API e-Bupot Sipajak, alur payroll memakai operasi validate, create, update, dan cancel, plus verify-document untuk mengecek status di DJP.
  • Error bisnis DJP di modul e-Bupot kembali sebagai HTTP 400, jadi sistem payroll perlu memisahkan error data dari error jaringan.

Fakta Singkat

  • Definisi: API e-Bupot adalah endpoint yang membuat, mengubah, membatalkan, dan mengecek bukti potong PPh dari sistem lain, misalnya payroll atau ERP.
  • Dasar hukum: PER-11/PJ/2025 (Pasal 4–7, 11, 14–15, 18) dan PMK 81/2024 (Pasal 94, 100, dan 171).
  • Berlaku sejak: PMK 81/2024 berlaku 1 Januari 2025. PER-11/PJ/2025 berlaku sejak ditetapkan pada 22 Mei 2025.
  • Siapa terdampak: pemotong PPh 21/26 (pemberi kerja) dan pemotong atau pemungut PPh Unifikasi.
  • Sistem terkait: Coretax DJP (modul eBupot), sistem payroll atau HRIS, ERP bagian utang usaha, dan API e-Bupot Sipajak versi /v2/.
  • Terakhir diverifikasi: 5 November 2026.

Apa itu API e-Bupot untuk sistem payroll?

API e-Bupot untuk sistem payroll adalah sekumpulan endpoint yang menerima data pemotongan dari aplikasi penggajian dan meneruskannya ke DJP sebagai bukti potong elektronik. Hasilnya berupa nomor bukti potong dan ID dari DJP yang disimpan kembali di payroll, sehingga tim pajak tidak mengetik ulang data per pegawai di portal.

Dasar teknisnya ada di PER-11/PJ/2025 Pasal 6 ayat (3). Modul eBupot adalah modul di Portal Wajib Pajak atau laman atau aplikasi lain yang terintegrasi dengan sistem administrasi DJP. Modul ini dipakai untuk membuat, membetulkan, dan membatalkan bukti potong.

Sipajak adalah Penyedia Jasa Aplikasi Perpajakan (PJAP) resmi yang terdaftar dan diawasi DJP, menyediakan API pajak end-to-end, platform, dan solusi white-label. Sipajak juga tercatat di profil PJAP DJP dengan layanan penyediaan aplikasi pembuatan dan penyaluran bukti pemotongan elektronik. Jadi kamu bisa memakai layanan bukti potong elektronik PJAP resmi Sipajak sebagai jalur payroll ke DJP. Kalau kamu baru mengenal konsepnya, baca dulu cara kerja API pajak Indonesia.

Bukti potong apa saja yang dibuat sistem payroll?

Sistem payroll membuat tiga formulir bukti potong PPh 21 utama menurut PER-11/PJ/2025 Pasal 6 dan 7: BPA1, BPA2, dan BP21. Tabel berikut memetakan formulir itu ke endpoint API e-Bupot Sipajak.

Formulir (PER-11/PJ/2025)Untuk siapaKapan dibuatEndpoint Sipajak
BPA1Pegawai tetap dan pensiunan yang menerima uang pensiun berkalaSetiap Masa Pajak terakhir/v2/ebupot/create-a1-a2, fgJnsBupot "A1"
BPA2PNS, anggota TNI, anggota Polri, pejabat negara, dan pensiunannyaSetiap Masa Pajak terakhir/v2/ebupot/create-a1-a2, fgJnsBupot "A2"
BP21Penerima penghasilan selain kedua kelompok di atas, Wajib Pajak dalam negeriPer transaksi atau per 1 Masa Pajak/v2/ebupot/create-bpu-a0-21, fgJnsBupot "21"
BPPU (Unifikasi)Wajib Pajak dalam negeri dan bentuk usaha tetap yang dipotong atau dipungut PPh Pasal 4 ayat (2), 15, 22, atau 23 (Pasal 18 ayat (1))Dilaporkan lewat SPT Masa PPh Unifikasi/v2/ebupot/create-bpu-a0-21, fgJnsBupot "BPU"

Masa Pajak terakhir adalah masa Desember, masa saat pegawai tetap berhenti bekerja, atau masa saat pensiunan berhenti menerima uang pensiun (Pasal 7 ayat (1) huruf g). BPA1 dan BPA2 wajib diberikan ke penerima paling lama 1 bulan setelah Masa Pajak terakhir berakhir. BP21 diberikan setiap kali dibuat (Pasal 7 ayat (2) dan (3)).

Satu BPA1 atau BPA2 berlaku untuk satu penerima, satu kode objek pajak, dan satu Tahun Pajak atau Bagian Tahun Pajak (Pasal 7 ayat (4)). Untuk memilih kode objek yang tepat, lihat penjelasan kode objek pajak pada formulir BPA1, BPA2, dan BP21.

Pemotongan bulanan pegawai tetap di luar masa terakhir tercatat di Formulir L-IA, yaitu daftar pemotongan bulanan yang menjadi lampiran SPT Masa PPh 21/26 (Pasal 11 ayat (1)). Artikel DJP tentang masa Desember 2025 juga menegaskan bahwa untuk pegawai tetap di masa itu kamu cukup menerbitkan BPA1 atau BPA2.

Apa beda API e-Bupot Unifikasi dan e-Bupot 21/26?

e-Bupot 21/26 menangani PPh 21 dan PPh 26 atas pekerjaan, jasa, atau kegiatan orang pribadi, sedangkan e-Bupot Unifikasi menangani PPh Pasal 4 ayat (2), 15, 22, 23, dan 26 lainnya. Di perusahaan, data e-Bupot 21/26 biasanya datang dari payroll, sementara data Unifikasi datang dari pembayaran vendor di ERP.

Aspeke-Bupot 21/26e-Bupot Unifikasi
Jenis PPhPPh 21 dan PPh 26 atas pekerjaan, jasa, atau kegiatan orang pribadiPPh Pasal 4 ayat (2), 15, 22, 23, dan 26 selain atas pekerjaan orang pribadi
FormulirBPA1, BPA2, BP21, BP26BPPU (dalam negeri dan BUT), BPNR (luar negeri)
Dilaporkan lewatSPT Masa PPh 21/26SPT Masa PPh Unifikasi
Sumber data umumPayroll atau HRISUtang usaha atau pembayaran vendor di ERP
Keluarga endpoint Sipajaka1-a2 (BPA1, BPA2) dan bpu-a0-21 dengan fgJnsBupot "21" (BP21)bpu-a0-21 dengan fgJnsBupot "BPU" (BPPU) dan bpnr-26 (BPNR)

Kedua jenis memakai pola yang sama di API: validate, create, update, cancel. Perbedaannya ada di objek detail dan beberapa nama field, dibahas di bagian berikutnya.

Bagaimana sistem payroll terhubung ke e-Bupot lewat API?

Sistem payroll terhubung ke e-Bupot lewat enam langkah: siapkan data per penerima, petakan ke field API, validasi, buat bukti potong, cek statusnya, lalu laporkan di SPT Masa. Di API e-Bupot Sipajak, langkah itu dipetakan ke endpoint validate, create, dan verify-document per jenis bukti potong.

  1. Tarik data payroll final per Masa Pajak: identitas penerima (NPWP atau NIK), status PTKP, komponen penghasilan, dan PPh yang dihitung engine payroll.
  2. Petakan ke field API: npwpPemotong, idTku, masaPajak "01" sampai "12", tglPemotongan berformat DDMMYYYY, fgNpwpNik, dan objek detail sesuai jenis bukti potong.
  3. Panggil endpoint validate. Validate menjalankan validasi DJP yang sama dengan create, tetapi tidak menyimpan bukti potong.
  4. Panggil create dengan fgTransaction "NEW". Simpan nomorBupot dan idBupot dari respons sebagai kunci di tabel payroll.
  5. Cek status BP21 dan BPPU dengan /v2/ebupot/verify-document. Untuk BPA1 dan BPA2, dokumentasi Sipajak mengarahkan pengecekan lewat laporan rekonsiliasi akhir tahun, karena verify-document belum punya nilai fgJnsBupot untuk A1/A2.
  6. Laporkan bukti potong ke DJP lewat SPT Masa PPh 21/26 atau SPT Masa PPh Unifikasi (PER-11/PJ/2025 Pasal 4 ayat (1) huruf c dan Pasal 15 ayat (1) huruf c).

Daftar endpoint, field, dan contoh payload lengkap ada di dokumentasi API e-Bupot Sipajak. Kalau ERP kamu juga mengirim faktur ke Coretax, baca juga integrasi ERP ke Coretax DJP lewat API.

Kenapa NITKU wajib ada di setiap bukti potong?

NITKU wajib ada karena PER-11/PJ/2025 Pasal 5 ayat (2) meminta pemotong memakai NPWP dan Nomor Identitas Tempat Kegiatan Usaha (NITKU) untuk membuat bukti potong PPh 21/26. Kalau perusahaan punya tempat usaha terpisah, setiap bukti potong mencantumkan NITKU tempat yang mengurus administrasi pembayaran penghasilan (ayat (3)).

Di API Sipajak, NITKU dikirim lewat field idTku: NPWP ditambah 6 digit akhiran cabang. Payroll multi-cabang perlu tabel pemetaan dari setiap unit penggajian ke idTku yang benar.

Field apa yang berbeda antara BP21 dan BPA1?

BP21 dan BPA1 memakai keluarga endpoint yang berbeda, dan DJP memakai penulisan field yang tidak seragam. Sipajak meneruskan perbedaan itu apa adanya, jadi mapping payroll harus mengikuti tabel ini.

Aspekbpu-a0-21 (BP21, BPPU)a1-a2 (BPA1, BPA2)
Pemilih jenisfgJnsBupot "21" atau "BPU" plus satu objek dataDetil*fgJnsBupot "A1" atau "A2" plus dataDetilBupotA1 atau dataDetilBupotA2
Format NIK22 digit untuk entitas, 16 digit untuk orang pribadi16 digit
Tipe tahunPajakstringinteger
Nama field pasal dan statuspasalPPh, statusPPh (P besar)pasalPph, statusPph (p kecil)
Isi respons createSekitar 7 field, antara lain nomorBupot, idBupot, pphDipotong16 field, termasuk pph21Terutang dan pph21KurangLebihBayar hasil hitungan DJP
Cek statusverify-documentLaporan rekonsiliasi akhir tahun

Contoh kerangka request validate BP21 di staging (data fiktif, field detail dipersingkat):

POST /v2/ebupot/validate-bpu-a0-21
Host: staging-gateway-integration.sipajak.com
Authorization: Basic <base64(username:password)>
npwp: 1234567890123000
Content-Type: application/json

{
  "fgTransaction": "NEW",
  "noBupot": "",
  "idBupot": "",
  "revNo": "1",
  "npwpPemotong": "1234567890123000",
  "idTku": "1234567890123000000000",
  "masaPajak": "10",
  "tahunPajak": "2026",
  "tglPemotongan": "31102026",
  "fgNpwpNik": false,
  "nik": "9999000000000001",
  "nama": "Penerima A (fiktif)",
  "fgJnsBupot": "21",
  "dataDetilBp21": {
    "kodeObjekPajak": "<ambil dari GET /v1/ref-bp21/tax-codes>",
    "pphDipotong": 1250000
  },
  "npwpNikPenandatangan": "<NIK penandatangan>",
  "passphrasePenandatangan": "<dari secret manager, jangan di-log>"
}

Bagaimana cara menangani error API e-Bupot dari DJP?

Error API e-Bupot terbagi dua: error bisnis dari DJP dan error transport. Di modul e-Bupot Sipajak, error bisnis DJP kembali sebagai HTTP 400 dengan pesan di body.response.statusMessage. Kode 401, 403, 500, 502, dan 504 menandakan masalah kredensial, NPWP, server, atau DJP yang ditangani terpisah.

ResponsArtiTindakan di payroll
HTTP 200, data.status "1"BerhasilSimpan nomorBupot, idBupot, dan timestamp
HTTP 400, BadRequestExceptionError bisnis DJP, pesan di body.response.statusMessageTandai baris, tampilkan pesan ke tim pajak, jangan retry otomatis
HTTP 400, envelope validasi NestJSValidasi di sisi SipajakPerbaiki mapping field
HTTP 401Kredensial Basic Auth tidak validCek secret manager
HTTP 403Header npwp tidak ada atau NPWP belum terdaftar di kredensialDaftarkan NPWP lewat POST /v1/organization
HTTP 500, 502, 504Error server, error DJP, atau timeoutRetry dengan exponential backoff

Pola ini berbeda dari e-Faktur, yang mengembalikan error bisnis di dalam respons HTTP 200. Detailnya ada di pola soft-error di konvensi API Sipajak.

Pesan error DJP apa saja yang perlu dikenali?

  • "Wajib Pajak tidak ditemukan": NPWP atau NIK penerima belum terdaftar di DJP. Validasi identitas lewat VSWP sebelum mengirim batch.
  • "tanggal_Dokumen salah!": tanggal dokumen referensi tidak berformat DDMMYYYY (8 karakter tanpa pemisah).
  • "Tindakan tidak diizinkan karena Dokumen sedang dalam Proses Keberatan!": bukti potong sedang dalam proses keberatan, jadi operasi dikunci sampai prosesnya selesai.
  • "fgJnsBupot tidak valid": nilai fgJnsBupot tidak cocok dengan endpoint yang dipanggil.

Bagaimana retry tanpa membuat bukti potong ganda?

Retry aman dilakukan karena endpoint create di API Sipajak, seperti create-bpu-a0-21, idempoten berdasarkan natural key. Pengiriman ulang data yang sama ditolak DJP sebagai error bisnis, bukan dibuat dua kali. Belum ada header Idempotency-Key, jadi perlakukan error duplikat saat retry sebagai sukses, lalu konfirmasi dengan verify-document untuk BP21 dan BPPU.

Bagaimana mengoreksi atau membatalkan bukti potong dari payroll?

Koreksi bukti potong dilakukan dengan update atau cancel, karena PER-11/PJ/2025 Pasal 4 ayat (2) mengizinkan pemotong membetulkan, membatalkan, atau membuat bukti potong tambahan. Di API Sipajak, update memakai fgTransaction "EDIT" dengan noBupot dan idBupot asli, sedangkan cancel cukup mengirim identitas bukti potong dan tglPembatalan.

Setelah itu, verify-document menampilkan statusBupot sebagai gabungan status dokumen dan status tanda tangan. Contohnya "NORMAL-DONE" untuk bukti potong yang efektif dan sudah ditandatangani, atau "CANCELLED-DONE" untuk pembatalan yang selesai.

Kasus yang sering terjadi adalah NIK sementara. Artikel DJP tentang SPT PPh 21 masa Desember 2025 menjelaskan bahwa kamu akan mengalami kendala saat menerbitkan BPA1 atau BPA2 untuk pegawai yang bukti potongnya masih memakai NIK sementara. Langkahnya: registrasikan NIK pegawai di Coretax, batalkan semua bukti potong dengan NIK sementara, lalu terbitkan ulang dengan NIK yang terdaftar. DJP menyediakan sarana validasi dan registrasi NIK secara massal.

Di sistem payroll, langkah itu berarti satu batch cancel diikuti satu batch create dengan fgNpwpNik false dan NIK yang benar. Bukti potong yang rapi juga dipakai karyawan saat mengisi SPT Tahunan, termasuk ketika mengajukan restitusi PPh orang pribadi.

Seperti apa contoh alur payroll untuk satu Masa Pajak?

Contoh (data fiktif). Perusahaan fiktif dengan NPWP 1234567890123000 dan satu NITKU 1234567890123000000000 memproses Masa Pajak Oktober 2026. Angka PPh di bawah adalah nilai hipotetis dari engine payroll, bukan hasil tarif tertentu.

  • Penerima A, konsultan lepas (bukan pegawai): BP21 lewat create-bpu-a0-21, fgJnsBupot "21".
  • Penerima B, pegawai tetap yang berhenti bekerja pada Oktober 2026: Oktober menjadi Masa Pajak terakhirnya, jadi payroll membuat BPA1 lewat create-a1-a2, fgJnsBupot "A1".
  • Vendor C, sewa ruang kantor dari bagian utang usaha: BPPU lewat create-bpu-a0-21, fgJnsBupot "BPU", dilaporkan di SPT Masa PPh Unifikasi.
KomponenNilai (Rp, hipotetis)
PPh 21 terutang penerima B, Januari–Oktober 20269.000.000
PPh 21 penerima B yang sudah dipotong Januari–September 20268.100.000
Selisih yang dipotong di BPA1 masa Oktober (9.000.000 − 8.100.000)900.000
PPh 21 di BP21 penerima A1.250.000
Total PPh 21 masa Oktober yang disetor (900.000 + 1.250.000)2.150.000
Total hasil API yang harus sama: pph21KurangLebihBayar (BPA1) + pphDipotong (BP21)2.150.000
PPh di BPPU vendor C (SPT Masa PPh Unifikasi, terpisah)1.000.000

Untuk masa Oktober 2026, PPh 21 dan PPh Unifikasi punya batas setor tanggal 15 November 2026. Karena tanggal itu hari Minggu, penyetoran dapat dilakukan paling lambat pada hari kerja berikutnya (PMK 81/2024 Pasal 94 ayat (2) dan Pasal 100). SPT Masa dilaporkan paling lama 20 November 2026, yaitu 20 hari setelah Masa Pajak berakhir (Pasal 171 ayat (1)).

Kalau pph21KurangLebihBayar dari DJP tidak sama dengan 900.000 versi payroll, hentikan pelaporan. Cek komponen penghasilan dan bukti potong sebelumnya (noBupotSebelumnya) untuk penerima B, karena respons BPA1 memuat hitungan akhir tahun versi DJP.

Untuk tim IT & finance

  • Simpan kredensial Basic Auth dan passphrasePenandatangan di secret manager. Jangan pernah menulis passphrase ke log atau pesan error.
  • Uji hanya di staging. Kredensial production diberikan setelah integrasi staging kamu terverifikasi, sesuai panduan memulai API Sipajak.
  • Kirim header npwp di setiap request, dan daftarkan NPWP tambahan ke kredensial sebelum dipakai.
  • Pakai format DDMMYYYY untuk tanggal di request. Timestamp respons memakai YYYY-MM-DD HH:mm:ss waktu Asia/Jakarta.
  • Ambil kode objek pajak, pasal, dan tarif dari katalog /v1/ref-{variant}, bukan dari nilai yang di-hardcode.
  • Jalankan validate sebelum create untuk setiap batch, dan simpan nomorBupot serta idBupot untuk update, cancel, dan verify.
  • Cocokkan total PPh di respons API dengan total setoran sebelum melapor: setor paling lambat tanggal 15 bulan berikutnya, lapor paling lama 20 hari setelah Masa Pajak berakhir.
  • Jadwalkan BPA1 atau BPA2 untuk masa Desember dan untuk pegawai yang berhenti bekerja, lalu kirim ke pegawai paling lama 1 bulan setelah Masa Pajak terakhir.
  • Rate limit belum dipublikasikan. Hubungi Sipajak sebelum go-live jika volume bukti potong kamu tinggi.

Tentang Sipajak

Sipajak (PT Hexa Sarana Intermedia) adalah PJAP yang ditetapkan DJP melalui KEP-423/PJ/2021 tanggal 15 Oktober 2021, dengan layanan antara lain penyediaan aplikasi pembuatan dan penyaluran bukti pemotongan elektronik. Kami memulai setiap integrasi di staging dengan kredensial yang diberikan tim Sipajak, lalu membuka production setelah integrasi staging kamu terverifikasi.

Pertanyaan umum

Apakah API e-Bupot bisa dipakai untuk BPA1 dan BPA2?

Bisa. Di API Sipajak, BPA1 dan BPA2 memakai keluarga endpoint a1-a2 (validate, create, update, cancel) dengan fgJnsBupot "A1" atau "A2". Respons create memuat hitungan akhir tahun dari DJP, termasuk pph21Terutang dan pph21KurangLebihBayar.

Kapan BPA1 harus diberikan ke pegawai?

Paling lama 1 bulan setelah Masa Pajak terakhir berakhir (PER-11/PJ/2025 Pasal 7 ayat (2)). Masa Pajak terakhir adalah Desember, atau masa saat pegawai tetap berhenti bekerja.

Apakah NPWP atau NIK penerima perlu dicek dulu?

Sebaiknya ya. Pesan "Wajib Pajak tidak ditemukan" berarti NPWP atau NIK penerima belum terdaftar di DJP, jadi validasi lewat VSWP sebelum mengirim batch bukti potong.

Kenapa API e-Bupot mengembalikan HTTP 400?

Di modul e-Bupot, error bisnis DJP dikembalikan sebagai HTTP 400 dengan pesan di body.response.statusMessage. Perbaiki datanya dan jangan retry otomatis. Retry hanya untuk HTTP 500, 502, dan 504.

Apakah API Sipajak punya kalkulator PPh 21?

Ada. POST /calculation (untuk BP21) dan POST /calculation/bpa1 (untuk BPA1) menghitung secara lokal, tanpa memanggil DJP, tanpa menyimpan data, dan tanpa autentikasi. Cocokkan hasilnya dengan engine payroll kamu.

Mulai integrasi e-Bupot dari payroll kamu

Siap menghubungkan payroll ke e-Bupot? Minta Akses API di halaman developer Sipajak untuk mendapatkan kredensial staging.

Sumber & Dasar Hukum

  1. Peraturan Direktur Jenderal Pajak Nomor PER-11/PJ/2025 tentang Ketentuan Pelaporan PPh, PPN, PPnBM, dan Bea Meterai dalam Rangka Pelaksanaan Sistem Inti Administrasi Perpajakan, ditetapkan 22 Mei 2025: Pasal 3–7, 11, 14–15, 18, 147. Diakses 5 November 2026.
  2. Peraturan Menteri Keuangan Nomor 81 Tahun 2024 tentang Ketentuan Perpajakan dalam Rangka Pelaksanaan Sistem Inti Administrasi Perpajakan: Pasal 94 ayat (2), Pasal 100, Pasal 171 ayat (1)–(2), Pasal 484. Diakses 5 November 2026.
  3. Direktorat Jenderal Pajak, "Penting! Lima Hal yang Harus Diperhatikan Saat Lapor SPT PPh Pasal 21 Masa Desember 2025", 9 Januari 2026. Diakses 5 November 2026.
  4. Direktorat Jenderal Pajak, profil PJAP PT Hexa Sarana Intermedia (KEP-423/PJ/2021). Diakses 5 November 2026.
  5. Dokumentasi API Sipajak versi 1.8 (diperbarui 29 Desember 2025): modul e-Bupot, Memulai, dan Konvensi API. Diakses 5 November 2026.

Terbit: 5 November 2026 · Diperbarui: 5 November 2026 · Ditulis oleh Tim Pajak Sipajak

Artikel ini bersifat edukasi, bukan nasihat pajak. Untuk kasus spesifik, konsultasikan dengan konsultan pajak terdaftar.