66 KiB
SPESIFIKASI API SoluTax IFS WIT V1.0
PT Sarana Prima Telematika
2026
DAFT ISI
- A. TUJUAN
- B. RUANG LINGKUP
- C. FITUR-FITUR
A. TUJUAN
Dokumen ini dibuat sebagai panduan pelanggan PT. Sarana Prima Telematika dalam mengembangkan API client SoluTax IFS WIT.
B. RUANG LINGKUP
API SoluTax IFS WIT yang dikembangkan oleh PT. Sarana Prima Telematika meliputi:
- Bukti Potong PPh 21 (Tidak Final / Final)
- Bukti Potong PPh A0 (Pegawai Tetap Bulanan)
- Bukti Potong PPh A1 (Pegawai Tetap Tahunan)
C. FITUR-FITUR
1. Token
Token digunakan untuk autentikasi menjalankan fungsi API IFS SoluTax WIT.
Api EndPoint: /auth/gettoken
Method: POST
Security: Basic auth
REQUEST
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|---|---|---|
| User | String | User untuk mendapatkan Token |
| Password | String | Password untuk mendapatkan Token |
RESPONSE
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|---|---|---|
| Data | Array | Berisi data hasil dari permintaan token yang terdiri dari elemen: |
| - Idpel = kode pelanggan | ||
| - adminName = nama user | ||
| - access_token = token | ||
| - expires_in = masa kadaluarsa token | ||
| Kodestatus | Number | Berisi kode hasil response permintaan token |
| Keterangan | String | Berisi penjelasan dari kodestatus hasil response |
| 0 = unauthorized | ||
| 1 = sukses |
Contoh Response: Berhasil
{
"kodestatus": 200,
"keterangan": "Berhasil",
"data": {
"idpel": 999,
"adminName": "admin",
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJUb2tlbi5Gb3IuVGhlLlNvbHVUYXguQXBpLldpdGhBdXRoIiwianRpIjoiMjVkMDYyYWItZmU3NS00NjYwLTgzYTQtNTJiZWZjMDA3NmYwIiwiaWF0IjoiMTc2NjczNzA0MiIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL25hbWVpZGVudGlmaWVyIjoiOTk5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvbmFtZSI6ImFkbWluIiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvZW1haWxhZGRyZXNzIjoiZGV2QHNvbHV0YXgiLCJleHAiOjE3NjY4MjM0NDIsImlzcyI6InNvbHV0YXguYXBpIiwiYXVkIjoic29sdXRheC5hcGkuY2xpZW50In0.N9TcJINUZQyZRrsBFt_sYGSTWstYe4f3d60OLcGwvvQ",
"expires_in": "27/12/2025 15.17.22"
}
}
Contoh Response: Gagal
{
"kodestatus": 401,
"keterangan": "Unauthorized",
"data": null
}
2. Bukti Potong PPh 21
A. Pengesahan Bukti Potong PPh 21
Digunakan untuk merekam dan mengesahkan bukti potong PPh Pasal 21 ke DJP. Apabila proses berhasil, DJP akan memberikan respons berupa nomor bukti potong dan ID bukti potong pengesahan.
Api EndPoint: /ifs/api/wit/bulanan/new
Method: POST
Header: Token
REQUEST
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|---|---|---|
| idPel | number | ID pelanggan yang mengirim request |
| requestID | string | ID unik request dari client |
| monthlyIncome | object | Objek data penghasilan bulanan |
| monthlyIncome: | ||
| npwpPemotong | string | NPWP pihak pemotong pajak |
| idTkuPemotong | string | ID TKU pihak pemotong |
| masaPajak | string | Masa pajak (bulan) |
| tahunPajak | number | Tahun pajak |
| npwpDipotong | string | NPWP/NIK pihak yang dipotong |
| idTkuDipotong | string | ID TKU pihak yang dipotong |
| Nama | string | Nama pihak yang dipotong |
| fgJnsBupot | string | Jenis Bukti Potong (21) |
| tglPemotongan | string (date) | Tanggal pemotongan pajak |
| npwpNikPenandatangan | string | NPWP/NIK penandatangan |
| namaPenandatangan | string | Nama penandatangan |
| passphrasePenandatangan | string | Passphrase tanda tangan elektronik |
| userId | string | User ID yang melakukan transaksi |
| dataBp21 | object | Objek detail Bukti Potong PPh Pasal 21 |
| dataBp21: | ||
| sertifikatInsentifDipotong | string | Jenis insentif pajak: |
| Kode | ||
| N/A | ||
| TaExAr21 | ||
| DTP | ||
| ETC | ||
| nomorSertifikatInsentif | string | Nomor sertifikat insentif (jika ada) |
| kodeObjekPajak | string | Kode objek pajak PPh 21 |
| statusPtkp | string | Status PTKP: |
| TK/0, TK/1, TK/2, TK/3 | ||
| K/0, K/1, K/2, K/3 | ||
| penghasilanKotorSebelumnya | number | Penghasilan kotor sebelumnya |
| penghasilanKotor | number | Penghasilan kotor bulan berjalan |
| normaPenghasilan | number | Persentase norma penghasilan |
| Tarif | number | Tarif PPh yang dikenakan |
| pphDipotong | number | Nilai PPh yang dipotong |
| dokReferensi | array | Daftar dokumen referensi |
| dokReferensi: | ||
| dokReferensi | string | Kode |
| ANNOUNCEMENT | ||
| COMMERCIALINVOICE | ||
| CONTRACT | ||
| CURRENTACCOUNT | ||
| DECREE | ||
| DEEDOFENGAGEMENT | ||
| DEEDOFGENERAL | ||
| OTHER | ||
| OTHERFACILITYDOC | ||
| PAYMENTPROOF | ||
| STATEMENTLETTER | ||
| TAXINVOICE | ||
| TAXREGULATIONDOC | ||
| TRADECONFIRMATION | ||
| nomorDokumen | string | Nomor Dokumen Referensi |
| tanggal_Dokumen | string (date) | Tanggal dokumen referensi |
Contoh Request
{
"idPel": 999,
"requestID": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
"monthlyIncome": {
"npwpPemotong": "1091031210912281",
"idTkuPemotong": "1091031210912281000000",
"masaPajak": "01",
"tahunPajak": 2025,
"npwpDipotong": "3171065903840003",
"idTkuDipotong": "3171065903840003000000",
"nama": "NAMA3171065903840003",
"fgJnsBupot": "21",
"tglPemotongan": "2025-01-01",
"npwpNikPenandatangan": "3174061502560010",
"namaPenandatangan": "NAMA3174061502560010",
"passphrasePenandatangan": "Pajak123@@",
"userId": "3174061502560010",
"dataBp21": {
"sertifikatInsentifDipotong": "DTP",
"nomorSertifikatInsentif": "",
"kodeObjekPajak": "21-100-35",
"statusPtkp": "TK/2",
"penghasilanKotorSebelumnya": 0,
"penghasilanKotor": 10000000,
"normaPenghasilan": 100,
"tarif": 1.5,
"pphDipotong": 150000,
"dokReferensi": [
{
"dokReferensi": "ANNOUNCEMENT",
"nomorDokumen": "Inv/Apr-008",
"tanggal_Dokumen": "2025-01-01"
}
]
}
}
}
RESPONSE
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|---|---|---|
| idPel | Number | ID pelanggan |
| responseID | String | ID unik respons dari sistem |
| taxSlipResponse | Object | Objek hasil pemrosesan bukti potong |
| taxSlipResponse: | ||
| Status | String | Status proses (1 = sukses, 0 = gagal) |
| statusCode | String | Kode status HTTP |
| statusMessage | String | Pesan status hasil pemrosesan |
| Result | Object | Detail hasil pembuatan bukti potong |
| Result: | ||
| nomorBupot | String | Nomor bukti potong elektronik |
| idBupot | String | ID unik bukti potong |
| Timestamp | string (datetime) | Waktu pemrosesan sistem (ISO 8601) |
Contoh Response: Berhasil
{
"idPel": 999,
"responseID": "9e44fc83-58b8-453e-a35d-ac1a259a9112",
"taxSlipResponse": {
"status": "1",
"statusCode": "200",
"statusMessage": "Success",
"result": {
"nomorBupot": "25000J24H",
"idBupot": "ecbbdc78-0caa-4e5d-89e6-ab1981eda38b",
"timestamp": "2026-01-06T02:04:16"
}
}
}
Contoh Response: Gagal
a. User ID tidak sesuai
{
"idPel": 999,
"responseID": "769915a2-c2c1-4d9b-b33c-b8ed1c9f94a7",
"taxSlipResponse": {
"status": "0",
"statusCode": "500",
"statusMessage": "Userid bukan PIC Wajib Pajak yang sah."
}
}
b. Token tidak valid
{
"status": "0",
"statusCode": "401",
"statusMessage": "Unauthorized: token validation error"
}
B. Penggantian Bukti Potong PPh 21
Digunakan untuk mengganti data Bukti Potong PPh 21 yang sudah berhasil disahkan DJP. Apabila proses berhasil, DJP akan memberikan respons berupa nomor bukti potong dan ID bukti potong pengesahan.
Api EndPoint: /ifs/api/wit/bulanan/edit
Method: POST
Header: Token
REQUEST
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|---|---|---|
| idPel | Number | ID pelanggan |
| requestID | String | ID unik permintaan |
| monthlyIncome | Object | Objek data penghasilan bulanan dan bukti potong |
| monthlyIncome: | ||
| npwpPemotong | String | NPWP pihak pemotong pajak |
| idTkuPemotong | String | ID TKU pemotong pajak |
| masaPajak | String | Masa pajak (format MM) |
| tahunPajak | Number | Tahun pajak |
| npwpDipotong | String | NPWP pihak yang dipotong pajaknya |
| idTkuDipotong | String | ID TKU pihak yang dipotong |
| Nama | String | Nama wajib pajak yang dipotong |
| nomorBupot | String | Nomor bukti potong hasil pengesahan |
| idBupot | String | ID bukti potong hasil pengesahan |
| fgJnsBupot | String | Flag jenis bukti potong (21/A0) |
| tglPemotongan | String (date) | Tanggal pemotongan pajak (YYYY-MM-DD) |
| npwpNikPenandatangan | String | NPWP/NIK penandatangan |
| namaPenandatangan | String | Nama penandatangan dokumen |
| passphrasePenandatangan | String | Passphrase untuk otorisasi penandatangan |
| userId | String | ID user pemroses data |
| dataBp21 | Object | Detail perhitungan PPh Pasal 21 |
| dataBp21: | ||
| sertifikatInsentifDipotong | String | Status kepemilikan sertifikat insentif |
| nomorSertifikatInsentif | String | Nomor sertifikat insentif |
| kodeObjekPajak | String | Kode objek pajak |
| statusPtkp | String | Status PTKP: |
| TK/0, TK/1, TK/2, TK/3 | ||
| K/0, K/1, K/2, K/3 | ||
| penghasilanKotorSebelumnya | String | Total penghasilan kotor sebelum periode berjalan |
| penghasilanKotor | String | Penghasilan kotor periode berjalan |
| normaPenghasilan | Number | Persentase norma penghasilan |
| Tarif | Number | Tarif pajak (%) |
| pphDipotong | Number | Nilai PPh yang dipotong |
| dokReferensi | Number | Daftar dokumen referensi pendukung |
| dokReferensi: | ||
| dokReferensi | Number | Kode |
| ANNOUNCEMENT | ||
| COMMERCIALINVOICE | ||
| CONTRACT | ||
| CURRENTACCOUNT | ||
| DECREE | ||
| DEEDOFENGAGEMENT | ||
| DEEDOFGENERAL | ||
| OTHER | ||
| OTHERFACILITYDOC | ||
| PAYMENTPROOF | ||
| STATEMENTLETTER | ||
| TAXINVOICE | ||
| TAXREGULATIONDOC | ||
| TRADECONFIRMATION | ||
| nomorDokumen | String | Nomor dokumen referensi |
| tanggal_Dokumen | String | Tanggal dokumen referensi |
Contoh Request
{
"idPel": 999,
"requestID": "3f2504e0-4f89-11d3-9a0c-0305e82c3302",
"monthlyIncome": {
"npwpPemotong": "1091031210912281",
"idTkuPemotong": "1091031210912281000000",
"masaPajak": "01",
"tahunPajak": 2025,
"npwpDipotong": "3171065903840003",
"idTkuDipotong": "3171065903840003000000",
"nama": "NAMA3171065903840003",
"nomorBup00J28Eot": "250",
"idBupot": "0cd1d89b-1e31-4c8f-a548-7f51bd2e37a0",
"fgJnsBupot": "21",
"tglPemotongan": "2025-01-01",
"npwpNikPenandatangan": "3174061502560010",
"namaPenandatangan": "NAMA3174061502560010",
"passphrasePenandatangan": "Pajak123@@",
"userId": "3174061502560010",
"dataBp21": {
"sertifikatInsentifDipotong": "DTP",
"nomorSertifikatInsentif": "",
"kodeObjekPajak": "21-100-35",
"statusPtkp": "TK/2",
"penghasilanKotorSebelumnya": 0,
"penghasilanKotor": 10000000,
"normaPenghasilan": 100,
"tarif": 1.5,
"pphDipotong": 150000,
"dokReferensi": [
{
"dokReferensi": "ANNOUNCEMENT",
"nomorDokumen": "Inv/Apr-008",
"tanggal_Dokumen": "2025-01-01"
}
]
}
}
}
RESPONSE
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|---|---|---|
| idPel | number | ID pelanggan |
| responseID | String | ID unik respons dari sistem |
| taxSlipResponse | Object | Objek hasil pemrosesan bukti potong |
| Status | String | Status proses (1 = sukses, 0 = gagal) |
| statusCode | String | Kode status HTTP |
| statusMessage | String | Pesan status hasil pemrosesan |
| Result | Object | Detail hasil pembuatan/pembaruan bukti potong |
| Result: | ||
| nomorBupot | String | Nomor bukti potong elektronik |
| idBupot | String | ID unik bukti potong |
| Timestamp | string (datetime) | Waktu pemrosesan sistem (ISO 8601) |
Contoh Response: Berhasil
{
"idPel": 999,
"responseID": "2ba73950-f37a-4bf9-8247-df15f89aa488",
"taxSlipResponse": {
"status": "1",
"statusCode": "200",
"statusMessage": "Success",
"result": {
"nomorBupot": "25000J28E",
"idBupot": "1656ead9-038b-40b6-a37b-c8328ff57dc8",
"timestamp": "2026-01-06T19:35:51"
}
}
}
Contoh Response: Gagal
a. User ID tidak sesuai
{
"idPel": 999,
"responseID": "769915a2-c2c1-4d9b-b33c-b8ed1c9f94a7",
"taxSlipResponse": {
"status": "0",
"statusCode": "500",
"statusMessage": "Userid bukan PIC Wajib Pajak yang sah."
}
}
b. Token tidak valid
{
"status": "0",
"statusCode": "401",
"statusMessage": "Unauthorized: token validation error"
}
C. Pembatalan Bukti Potong PPh 21
Fungsi ini digunakan untuk membatalkan bukti potong PPh 21.
Api EndPoint: /ifs/api/wit/cancel
Method: POST
Header: Token
REQUEST
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|---|---|---|
| idPel | number | ID pelanggan yang mengirim request |
| requestID | string | ID unik request dari client |
| taxSlipCancel | object | Objek permintaan pembatalan bukti potong |
| taxSlipCancel: | ||
| npwpPemotong | string | NPWP pihak pemotong pajak |
| tahunPajak | number | Tahun pajak bukti potong |
| nomorBupot | string | Nomor Bukti Potong yang akan dibatalkan |
| idBupot | string | ID unik Bukti Potong dalam sistem |
| fgJnsBupot | string | Flag jenis Bukti Potong (21) |
| tglPembatalan | string (date) | Tanggal pembatalan bukti potong |
| userId | string | User ID yang melakukan pembatalan |
| npwpNikPenandatangan | string | NPWP/NIK penandatangan pembatalan |
| passphrasePenandatangan | string | Passphrase tanda tangan elektronik |
Contoh Request
{
"idPel": 999,
"requestID": "3f2504e0-4f89-11d3-9a0c-0305e82c3303",
"taxSlipCancel": {
"npwpPemotong": "1091031210912281",
"tahunPajak": 2025,
"nomorBupot": "25000J28F",
"idBupot": "c0042abf-7cb2-49c9-9489-032db5fb4811",
"fgJnsBupot": "21",
"tglPembatalan": "2025-01-01",
"userId": "3174061502560010",
"npwpNikPenandatangan": "3174061502560010",
"passphrasePenandatangan": "Pajak123@@"
}
}
RESPONSE
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|---|---|---|
| idPel | number | ID pelanggan atau identitas unik pemohon |
| responseID | string (GUID) | ID unik response dalam format GUID untuk tracking request |
| taxSlipResponse | object | Objek hasil response terkait tax slip |
| Status | string | Status proses (1 = sukses, 0 gagal) |
| statusCode | string | Kode status response (contoh: "200" = berhasil) |
| statusMessage | string | Pesan status yang menjelaskan hasil proses |
Contoh Response: Berhasil
{
"idPel": 999,
"responseID": "ce726d7f-2c48-4589-8676-ec1bc37869d4",
"taxSlipResponse": {
"status": "1",
"statusCode": "200",
"statusMessage": "Success"
}
}
Contoh Response: Gagal
a. User ID tidak sesuai
{
"idPel": 999,
"responseID": "769915a2-c2c1-4d9b-b33c-b8ed1c9f94a7",
"taxSlipResponse": {
"status": "0",
"statusCode": "500",
"statusMessage": "Userid bukan PIC Wajib Pajak yang sah."
}
}
b. Token tidak valid
{
"status": "0",
"statusCode": "401",
"statusMessage": "Unauthorized: token validation error"
}
D. Periksa Status Bukti Potong PPh 21
Fungsi ini digunakan untuk periksa status hasil pengesahan, perubahan atau pembatalan bukti potong PPh 21.
Api EndPoint: /ifs/api/wit/status
Method: POST
Header: Token
REQUEST
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|---|---|---|
| idPel | Number | ID pelanggan |
| requestID | String | ID unik permintaan |
| taxSlipVerification | Object | Objek data verifikasi bukti potong |
| taxSlipVerification: | ||
| npwpPemotong | String | NPWP pihak pemotong pajak |
| tahunPajak | Number | Tahun pajak |
| noBupot | String | Nomor bukti potong |
| idBupot | String | ID unik bukti potong |
| fgJnsBupot | String | Flag jenis bukti potong (21) |
Contoh Request
{
"idPel": 999,
"requestID": "3f2504e0-4f89-11d3-9a0c-0305e82c3305",
"taxSlipVerification": {
"npwpPemotong": "1091031210912281",
"tahunPajak": 2025,
"noBupot": "25000J24H",
"idBupot": "ecbbdc78-0caa-4e5d-89e6-ab1981eda38b",
"fgJnsBupot": "21"
}
}
RESPONSE
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|---|---|---|
| idPel | number | ID pelanggan |
| responseID | string | ID unik respons dari sistem |
| printedTaxSlipResponse | object | Objek hasil verifikasi bukti potong |
| Status | string | Status proses (1 = sukses, 0 = gagal) |
| statusCode | string | Kode status HTTP |
| statusMessage | string | Pesan status hasil verifikasi |
| Result | object | Detail hasil verifikasi bukti potong |
| Result: | ||
| npwpPemotong | string | NPWP/ID penerima penghasilan |
| statusBupot | string | Status bukti potong: |
| Pengesahan: NORMAL-DONE | ||
| Penggantian: AMENDED | ||
| Pembatalan: CANCELLED-Done | ||
| kodeObjekPajak | string | Kode objek pajak |
| pphDipotong | number | Nilai PPh yang dipotong |
| Timestamp | string (datetime) | Waktu proses verifikasi sistem |
Contoh Response: Berhasil
{
"idPel": 999,
"responseID": "3c8fe213-fb73-49c3-896b-40e975dc2697",
"printedTaxSlipResponse": {
"status": "1",
"statusCode": "200",
"statusMessage": "Success",
"result": {
"npwpPemotong": "1091031210912281",
"statusBupot": "NORMAL-DONE",
"kodeObjekPajak": "21-100-35",
"pphDipotong": 200000,
"timestamp": "2026-01-22 08:57:58"
}
}
}
Contoh Response: Gagal
a. NPWP tidak valid/tidak sesuai
{
"idPel": 999,
"responseID": "5c49882a-3bd5-4ab3-b614-b2dff9c3de97",
"taxSlipVerificationResponse": {
"status": "0",
"statusCode": "BadRequest",
"statusMessage": "{\"status\":\"0\",\"statusCode\":\"401\",\"statusMessage\":\"Unauthorized\",\"result\":null}"
}
}
b. Token tidak valid
{
"status": "0",
"statusCode": "401",
"statusMessage": "Unauthorized: token validation error"
}
E. Unduh PDF Bukti Potong PPh 21
Fungsi ini digunakan untuk mengunduh PDF Bukti Potong PPh 21 yang telah disahkan oleh DJP baik itu untuk bukti potong pengesahan, penggantian maupun pembatalan.
Api EndPoint: /ifs/api/wit/pdf
Method: POST
Header: Token
REQUEST
| Nama Field | Tipe Data | Deskripsi |
|---|---|---|
| idPel | Number | ID pelanggan |
| requestID | String | ID unik permintaan |
| taxSlipVerification | Object | Objek data verifikasi bukti potong |
| taxSlipVerification: | ||
| npwpPemotong | String | NPWP pihak pemotong pajak |
| tahunPajak | Number | Tahun pajak |
| noBupot | String | Nomor bukti potong |
| idBupot | String | ID unik bukti potong |
| fgJnsBupot | String | Flag jenis bukti potong (21) |
Contoh Request
{
"idPel": 999,
"requestID": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
"taxSlipVerification": {
"npwpPemotong": "1091031210912281",
"tahunPajak": 2025,
"noBupot": "25000J24H",
"idBupot": "ecbbdc78-0caa-4e5d-89e6-ab1981eda38b",
"fgJnsBupot": "21"
}
}
RESPONSE
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|---|---|---|
| idPel | number | ID pelanggan |
| responseID | String | ID unik respons dari sistem |
| printedTaxSlipResponse | Object | Objek hasil proses cetak bukti potong |
| Status | String | Status proses (1 = sukses, 0 = gagal) |
| statusCode | String | Kode status sistem |
| statusMessage | String | Pesan status hasil proses |
| result | Object | Detail hasil proses cetak bukti potong |
| result: | ||
| npwpPemotong | String | NPWP pihak pemotong pajak |
| statusBupot | string | Status bukti potong: |
| Pengesahan: NORMAL-DONE | ||
| Penggantian: AMENDED | ||
| Pembatalan: CANCELLED-Done | ||
| kodeObjekPajak | String | Kode objek pajak |
| pphDipotong | number | Nilai PPh yang dipotong |
| timestamp | string (datetime) | Waktu proses sistem |
| data | string | PDF dalam format base64string |
| nomorBuktiPotong | String | Nomor bukti potong |
Contoh Response: Berhasil
{
"idPel": 999,
"responseID": "ccc618cc-67de-472e-860a-cc95e1b778ad",
"printedTaxSlipResponse": {
"status": "1",
"statusCode": "200",
"statusMessage": "Berhasil mengunduh cetakan bukti potong",
"result": {
"npwpPemotong": "1091031210912281",
"statusBupot": "NORMAL-DONE",
"kodeObjekPajak": "21-100-35",
"pphDipotong": 200000,
"timestamp": "2026-01-06 02:11:41",
"data": "JVBERi0xLjcNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvU...RhcnR4cmVmDQozMzQ1Mw0KJSVFT0Y=",
"nomorBuktiPotong": "25000J24H"
}
}
}
Contoh Response: Gagal
a. NPWP tidak valid/tidak sesuai
{
"idPel": 999,
"responseID": "5c49882a-3bd5-4ab3-b614-b2dff9c3de97",
"taxSlipVerificationResponse": {
"status": "0",
"statusCode": "BadRequest",
"statusMessage": "{\"status\":\"0\",\"statusCode\":\"401\",\"statusMessage\":\"Unauthorized\",\"result\":null}"
}
}
b. Token tidak valid
{
"status": "0",
"statusCode": "401",
"statusMessage": "Unauthorized: token validation error"
}
3. Bukti Potong PPh A0
A. Pengesahan Bukti Potong PPh A0
Digunakan untuk merekam dan mengesahkan bukti potong PPh Pasal A0 baru ke DJP. Apabila proses berhasil, DJP akan memberikan respons berupa nomor bukti potong dan ID bukti potong pengesahan.
Api EndPoint: /ifs/api/wit/bulanan/new
Method: POST
Header: Token
REQUEST
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|---|---|---|
| idPel | number | ID pelanggan yang mengirim request |
| requestID | string | ID unik request dari client |
| monthlyIncome | object | Objek data penghasilan bulanan |
| monthlyIncome: | ||
| npwpPemotong | string | NPWP pihak pemotong pajak |
| idTkuPemotong | string | ID TKU pihak pemotong |
| masaPajak | string | Masa pajak (bulan) |
| tahunPajak | number | Tahun pajak |
| npwpDipotong | string | NPWP/NIK pihak yang dipotong |
| idTkuDipotong | string | ID TKU pihak yang dipotong |
| Nama | string | Nama pihak yang dipotong |
| fgJnsBupot | string | Flag jenis Bukti Potong (A0) |
| tglPemotongan | string (date) | Tanggal pemotongan pajak |
| npwpNikPenandatangan | string | NPWP/NIK penandatangan |
| namaPenandatangan | string | Nama penandatangan |
| passphrasePenandatangan | string | Passphrase tanda tangan elektronik |
| userId | string | User ID yang melakukan transaksi |
| dataBpA0 | object | Objek detail Bukti Potong PPh 21 jenis A0 |
| dataBpA0: | ||
| foreignEmployee | string | Status pegawai: |
| Nilai | ||
| Resident | ||
| Foreign | ||
| passportNo | string | Nomor paspor (wajib jika pegawai asing) |
| countryCode | string | Kode negara pegawai |
| statusPtkp | string | Status PTKP: |
| TK/0, TK/1, TK/2, TK/3 | ||
| K/0, K/1, K/2, K/3 | ||
| posisiJabatan | string | Posisi atau jabatan pegawai |
| sertifikatInsentifDipotong | string | Jenis insentif pajak: |
| Kode | ||
| N/A | ||
| TaExAr21 | ||
| DTP | ||
| ETC | ||
| nomorSertifikatInsentif | string | Nomor sertifikat insentif (jika ada) |
| kodeObjekPajak | string | Kode objek pajak PPh 21 |
| penghasilanKotor | number | Total penghasilan bruto |
| Tarif | number | Tarif PPh yang dikenakan (%) |
| pphDipotong | number | Nilai PPh yang dipotong |
Contoh Request
{
"idPel": 999,
"requestID": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
"monthlyIncome": {
"npwpPemotong": "1091031210912281",
"idTkuPemotong": "1091031210912281000000",
"masaPajak": "01",
"tahunPajak": 2025,
"npwpDipotong": "3171065903840003",
"idTkuDipotong": "3171065903840003000000",
"nama": "NAMA3171065903840003",
"fgJnsBupot": "A0",
"tglPemotongan": "2025-01-01",
"npwpNikPenandatangan": "3174061502560010",
"namaPenandatangan": "NAMA3174061502560010",
"passphrasePenandatangan": "Pajak123@@",
"userId": "3174061502560010",
"dataBpA0": {
"foreignEmployee": "Resident",
"passportNo": "",
"countryCode": "IDN",
"statusPtkp": "TK/2",
"posisiJabatan": "Staf",
"sertifikatInsentifDipotong": "N/A",
"nomorSertifikatInsentif": "",
"kodeObjekPajak": "21-100-01",
"penghasilanKotor": 14240688,
"tarif": 5,
"pphDipotong": 712034
}
}
}
RESPONSE
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|---|---|---|
| idPel | Number | ID pelanggan yang mengirim request |
| responseID | String | ID unik response yang dihasilkan oleh sistem |
| taxSlipResponse | Object | Objek utama response bukti potong |
| Status | String | Status proses (1 = berhasil, 0 = gagal) |
| statusCode | String | Kode status hasil proses (mengacu HTTP Status Code) |
| statusMessage | String | Pesan hasil proses dari sistem |
| Result | Object | Objek hasil pembuatan bukti potong |
| Result: | ||
| nomorBupot | String | Nomor Bukti Potong yang dihasilkan |
| idBupot | String | ID unik Bukti Potong dalam sistem |
| Timestamp | string (ISO 8601 datetime) | Waktu sistem saat proses berhasil dilakukan |
Contoh Response: Berhasil
{
"idPel": 999,
"responseID": "6cac173d-d7f7-4f8a-9071-8acc8cdf6fbf",
"taxSlipResponse": {
"status": "1",
"statusCode": "200",
"statusMessage": "Success",
"result": {
"nomorBupot": "25000J28F",
"idBupot": "c0042abf-7cb2-49c9-9489-032db5fb4811",
"timestamp": "2026-01-06T20:09:59"
}
}
}
Contoh Response: Gagal
a. User ID tidak sesuai
{
"idPel": 999,
"responseID": "769915a2-c2c1-4d9b-b33c-b8ed1c9f94a7",
"taxSlipResponse": {
"status": "0",
"statusCode": "500",
"statusMessage": "Userid bukan PIC Wajib Pajak yang sah."
}
}
b. Token tidak valid
{
"status": "0",
"statusCode": "401",
"statusMessage": "Unauthorized: token validation error"
}
B. Penggantian Bukti Potong PPh A0
Digunakan untuk merubah data Bukti Potong PPh A0 yang sudah berhasil disahkan DJP. Apabila proses berhasil, DJP akan memberikan respons berupa nomor bukti potong dan ID bukti potong pengesahan.
Api EndPoint: /ifs/api/wit/bulanan/edit
Method: POST
Header: Token
REQUEST
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|---|---|---|
| idPel | number | ID pelanggan yang mengirim request |
| requestID | string | ID unik request dari client |
| monthlyIncome | object | Objek data penghasilan bulanan |
| monthlyIncome: | ||
| npwpPemotong | string | NPWP pihak pemotong pajak |
| idTkuPemotong | string | ID TKU pihak pemotong |
| masaPajak | string | Masa pajak (bulan) |
| tahunPajak | number | Tahun pajak |
| npwpDipotong | string | NPWP/NIK pihak yang dipotong |
| idTkuDipotong | string | ID TKU pihak yang dipotong |
| Nama | string | Nama pihak yang dipotong |
| nomorBupot | string | Nomor Bukti Potong hasil pengesahan |
| idBupot | string | ID Bukti Potong hasil pengesahan |
| fgJnsBupot | string | Flag jenis Bukti Potong (A0) |
| tglPemotongan | string (date) | Tanggal pemotongan pajak |
| npwpNikPenandatangan | string | NPWP/NIK penandatangan |
| namaPenandatangan | string | Nama penandatangan |
| passphrasePenandatangan | string | Passphrase tanda tangan elektronik |
| userId | string | User ID yang melakukan transaksi |
| dataBpA0 | object | Objek detail Bukti Potong PPh A0 |
| dataBpA0: | ||
| foreignEmployee | string | Status Pegawai: |
| Nilai | ||
| Resident | ||
| Foreign | ||
| passportNo | string | Nomor paspor (wajib jika pegawai asing) |
| countryCode | string | Kode negara pegawai untuk Resident diisi (IDN) |
| statusPtkp | string | Status PTKP: |
| TK/0, TK/1, TK/2, TK/3 | ||
| K/0, K/1, K/2, K/3 | ||
| posisiJabatan | string | Posisi atau jabatan pegawai |
| sertifikatInsentifDipotong | string | Jenis insentif pajak: |
| Kode | ||
| N/A | ||
| TaExAr21 | ||
| DTP | ||
| ETC | ||
| nomorSertifikatInsentif | number | Nomor sertifikat insentif (jika ada) |
| kodeObjekPajak | number | Kode objek pajak PPh 21 |
| penghasilanKotor | number | Total penghasilan bruto |
| Tarif | number | Tarif PPh yang dikenakan (%) |
| pphDipotong | number | Nilai PPh yang dipotong |
Contoh Request
{
"idPel": 999,
"requestID": "REQ-002",
"monthlyIncome": {
"npwpPemotong": "1091031210912281",
"idTkuPemotong": "1091031210912281000000",
"masaPajak": "01",
"tahunPajak": 2025,
"npwpDipotong": "3171065903840003",
"idTkuDipotong": "3171065903840003000000",
"nama": "NAMA3171065903840003",
"nomorBupot": "25000J28F",
"idBupot": "c0042abf-7cb2-49c9-9489-032db5fb4811",
"fgJnsBupot": "A0",
"tglPemotongan": "2025-01-01",
"npwpNikPenandatangan": "3174061502560010",
"namaPenandatangan": "NAMA3174061502560010",
"passphrasePenandatangan": "Pajak123@@",
"userId": "3174061502560010",
"dataBpA0": {
"foreignEmployee": "Resident",
"passportNo": "",
"countryCode": "",
"statusPtkp": "TK/2",
"posisiJabatan": "Staf",
"sertifikatInsentifDipotong": "N/A",
"nomorSertifikatInsentif": "",
"kodeObjekPajak": "21-100-01",
"penghasilanKotor": 14240688,
"tarif": 5,
"pphDipotong": 712034
}
}
}
RESPONSE
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|---|---|---|
| idPel | number | ID pelanggan yang menerima response |
| responseID | String | ID unik response yang dihasilkan sistem |
| taxSlipResponse | Object | Objek utama response bukti potong |
| status | String | Status proses (1 = berhasil, 0 = gagal) |
| statusCode | String | Kode status hasil proses (mengacu HTTP Status Code) |
| statusMessage | String | Pesan hasil proses dari sistem |
| result | Object | Objek hasil proses bukti potong |
| result: | ||
| nomorBupot | String | Nomor Bukti Potong yang dihasilkan |
| idBupot | String | ID unik Bukti Potong dalam sistem |
| Timestamp | string (ISO 8601 datetime) | Waktu sistem saat proses berhasil |
Contoh Response: Berhasil
{
"idPel": 999,
"responseID": "ffe979d9-b47f-4ff5-a80a-975900becc6a",
"taxSlipResponse": {
"status": "1",
"statusCode": "200",
"statusMessage": "Success",
"result": {
"nomorBupot": "25000J28F",
"idBupot": "0342d22e-f5bc-404a-9f33-7c52b9e10917",
"timestamp": "2026-01-06T20:29:41"
}
}
}
Contoh Response: Gagal
a. User ID tidak sesuai
{
"idPel": 999,
"responseID": "769915a2-c2c1-4d9b-b33c-b8ed1c9f94a7",
"taxSlipResponse": {
"status": "0",
"statusCode": "500",
"statusMessage": "Userid bukan PIC Wajib Pajak yang sah."
}
}
b. Token tidak valid
{
"status": "0",
"statusCode": "401",
"statusMessage": "Unauthorized: token validation error"
}
C. Pembatalan Bukti Potong PPh A0
Fungsi ini digunakan untuk membatalkan bukti potong PPh A0.
Api EndPoint: /ifs/api/wit/cancel
Method: POST
Header: Token
REQUEST
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|---|---|---|
| idPel | number | ID pelanggan yang mengirim request |
| requestID | String | ID unik request dari client |
| taxSlipCancel | object | Objek permintaan pembatalan bukti potong |
| taxSlipCancel: | ||
| npwpPemotong | String | NPWP pihak pemotong pajak |
| tahunPajak | number | Tahun pajak bukti potong |
| nomorBupot | String | Nomor Bukti Potong yang akan dibatalkan |
| idBupot | String | ID unik Bukti Potong dalam sistem |
| fgJnsBupot | String | Flag jenis Bukti Potong (A0) |
| tglPembatalan | string (date) | Tanggal pembatalan bukti potong |
| userId | String | User ID yang melakukan pembatalan |
| npwpNikPenandatangan | String | NPWP/NIK penandatangan pembatalan |
| passphrasePenandatangan | String | Passphrase tanda tangan elektronik |
Contoh Request
{
"idPel": 999,
"requestID": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
"taxSlipCancel": {
"npwpPemotong": "1091031210912281",
"tahunPajak": 2025,
"nomorBupot": "25000J28F",
"idBupot": "c0042abf-7cb2-49c9-9489-032db5fb4811",
"fgJnsBupot": "A0",
"tglPembatalan": "2025-01-01",
"userId": "3174061502560010",
"npwpNikPenandatangan": "3174061502560010",
"passphrasePenandatangan": "Pajak123@@"
}
}
RESPONSE
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|---|---|---|
| idPel | number / integer | ID pelanggan atau identitas unik pemohon |
| responseID | string (GUID) | ID unik response dalam format GUID untuk tracking request |
| taxSlipResponse | object | Objek hasil response terkait tax slip |
| status | string | Status proses (1 = sukses, 0 gagal) |
| statusCode | string | Kode status response (contoh: "200" = berhasil) |
| statusMessage | string | Pesan status yang menjelaskan hasil proses |
Contoh Response: Berhasil
{
"idPel": 999,
"responseID": "ce726d7f-2c48-4589-8676-ec1bc37869d4",
"taxSlipResponse": {
"status": "1",
"statusCode": "200",
"statusMessage": "Success"
}
}
Contoh Response: Gagal
a. User ID tidak sesuai
{
"idPel": 999,
"responseID": "769915a2-c2c1-4d9b-b33c-b8ed1c9f94a7",
"taxSlipResponse": {
"status": "0",
"statusCode": "500",
"statusMessage": "Userid bukan PIC Wajib Pajak yang sah."
}
}
b. Token tidak valid
{
"status": "0",
"statusCode": "401",
"statusMessage": "Unauthorized: token validation error"
}
D. Periksa Status Bukti Potong PPh A0
Fungsi ini digunakan untuk periksa status hasil pengesahan, perubahan atau pembatalan bukti potong PPh A0.
Api EndPoint: /ifs/api/wit/status
Method: POST
Header: Token
REQUEST
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|---|---|---|
| idPel | Number | ID pelanggan |
| requestID | String | ID unik permintaan |
| taxSlipVerification | Object | Objek data verifikasi bukti potong |
| taxSlipVerification: | ||
| npwpPemotong | String | NPWP pihak pemotong pajak |
| tahunPajak | Number | Tahun pajak |
| noBupot | String | Nomor bukti potong |
| idBupot | String | ID unik bukti potong |
| fgJnsBupot | String | Flag jenis bukti potong (A0) |
Contoh Request
{
"idPel": 999,
"requestID": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
"taxSlipVerification": {
"npwpPemotong": "1091031210912281",
"tahunPajak": 2025,
"noBupot": "25000J24H",
"idBupot": "ecbbdc78-0caa-4e5d-89e6-ab1981eda38b",
"fgJnsBupot": "A0"
}
}
RESPONSE
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|---|---|---|
| idPel | number | ID pelanggan |
| responseID | string | ID unik respons dari sistem |
| printedTaxSlipResponse | object | Objek hasil verifikasi bukti potong |
| Status | string | Status proses (1 = sukses, 0 = gagal) |
| statusCode | string | Kode status HTTP |
| statusMessage | string | Pesan status hasil verifikasi |
| Result | object | Detail hasil verifikasi bukti potong |
| Result: | ||
| npwpPemotong | string | NPWP/ID penerima penghasilan |
| statusBupot | string | Status bukti potong: |
| Pengesahan: NORMAL-DONE | ||
| Penggantian: AMENDED | ||
| Pembatalan: CANCELLED-Done | ||
| kodeObjekPajak | string | Kode objek pajak |
| pphDipotong | number | Nilai PPh yang dipotong |
| Timestamp | string (datetime) | Waktu proses verifikasi sistem |
Contoh Response: Berhasil
{
"idPel": 999,
"responseID": "3c8fe213-fb73-49c3-896b-40e975dc2697",
"printedTaxSlipResponse": {
"status": "1",
"statusCode": "200",
"statusMessage": "Success",
"result": {
"npwpPemotong": "1091031210912281",
"statusBupot": "NORMAL-DONE",
"kodeObjekPajak": "21-100-35",
"pphDipotong": 200000,
"timestamp": "2026-01-22 08:57:58"
}
}
}
Contoh Response: Gagal
a. NPWP tidak valid/tidak sesuai
{
"idPel": 999,
"responseID": "5c49882a-3bd5-4ab3-b614-b2dff9c3de97",
"taxSlipVerificationResponse": {
"status": "0",
"statusCode": "BadRequest",
"statusMessage": "{\"status\":\"0\",\"statusCode\":\"401\",\"statusMessage\":\"Unauthorized\",\"result\":null}"
}
}
b. Token tidak valid
{
"status": "0",
"statusCode": "401",
"statusMessage": "Unauthorized: token validation error"
}
E. Unduh PDF Bukti Potong PPh A0
Fungsi ini digunakan untuk mengunduh PDF Bukti Potong PPh A0 yang telah disahkan oleh DJP baik itu untuk bukti potong pengesahan, penggantian maupun pembatalan.
Api EndPoint: /ifs/api/wit/pdf
Method: POST
Header: Token
REQUEST
| Nama Field | Tipe Data | Deskripsi |
|---|---|---|
| idPel | Number | ID pelanggan |
| requestID | String | ID unik permintaan |
| taxSlipVerification | Object | Objek data verifikasi bukti potong |
| taxSlipVerification: | ||
| npwpPemotong | String | NPWP pihak pemotong pajak |
| tahunPajak | Number | Tahun pajak |
| noBupot | String | Nomor bukti potong |
| idBupot | String | ID unik bukti potong |
| fgJnsBupot | String | Flag jenis bukti potong (A0) |
Contoh Request
{
"idPel": 999,
"requestID": "3c8fe213-fb73-49c3-896b-40e975d77777",
"taxSlipVerification": {
"npwpPemotong": "1091031210912281",
"tahunPajak": 2025,
"noBupot": "25000J24H",
"idBupot": "ecbbdc78-0caa-4e5d-89e6-ab1981eda38b",
"fgJnsBupot": "A0"
}
}
RESPONSE
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|---|---|---|
| idPel | number | ID pelanggan |
| responseID | string | ID unik respons dari sistem |
| printedTaxSlipResponse | object | Objek hasil proses cetak bukti potong |
| Status | string | Status proses (1 = sukses, 0 = gagal) |
| statusCode | string | Kode status sistem |
| statusMessage | string | Pesan status hasil proses |
| result | object | Detail hasil proses cetak bukti potong |
| result: | ||
| npwpPemotong | string | NPWP pihak pemotong pajak |
| statusBupot | string | Status bukti potong: |
| Pengesahan: NORMAL-DONE | ||
| Penggantian: AMENDED | ||
| Pembatalan: CANCELLED-Done | ||
| kodeObjekPajak | string | Kode objek pajak |
| pphDipotong | number | Nilai PPh yang dipotong |
| Timestamp | string (datetime) | Waktu proses sistem |
| Data | string | PDF dalam format base64string |
| nomorBuktiPotong | string | Nomor bukti potong |
Contoh Response: Berhasil
{
"idPel": 999,
"responseID": "ccc618cc-67de-472e-860a-cc95e1b778ad",
"printedTaxSlipResponse": {
"status": "1",
"statusCode": "200",
"statusMessage": "Berhasil mengunduh cetakan bukti potong",
"result": {
"npwpPemotong": "1091031210912281",
"statusBupot": "NORMAL-DONE",
"kodeObjekPajak": "21-100-35",
"pphDipotong": 200000,
"timestamp": "2026-01-06 02:11:41",
"data": "JVBERi0xLjcNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvU...RhcnR4cmVmDQozMzQ1Mw0KJSVFT0Y=",
"nomorBuktiPotong": "25000J24H"
}
}
}
Contoh Response: Gagal
a. NPWP tidak valid/tidak sesuai
{
"idPel": 999,
"responseID": "5c49882a-3bd5-4ab3-b614-b2dff9c3de97",
"taxSlipVerificationResponse": {
"status": "0",
"statusCode": "BadRequest",
"statusMessage": "{\"status\":\"0\",\"statusCode\":\"401\",\"statusMessage\":\"Unauthorized\",\"result\":null}"
}
}
b. Token tidak valid
{
"status": "0",
"statusCode": "401",
"statusMessage": "Unauthorized: token validation error"
}
4. Bukti Potong PPh A1
A. Pengesahan Bukti Potong PPh A1
Digunakan untuk merekam dan mengesahkan bukti potong PPh Pasal A1 baru ke DJP. Apabila proses berhasil, DJP akan memberikan respons berupa nomor bukti potong dan ID bukti potong pengesahan.
Api EndPoint: /ifs/api/wit/tahunan/new
Method: POST
Header: Token
REQUEST
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|---|---|---|
| idPel | number | ID pelanggan yang mengirim request |
| requestID | string | ID unik request dari client |
| yearlyIncome | object | Objek data penghasilan tahunan (Bukti Potong A1) |
| yearlyIncome: | ||
| Alamat | string | Alamat lengkap penerima penghasilan |
| blnPenghasilanDisetahunkan | number | Jumlah bulan penghasilan yang disetahunkan |
| fgPemberiKerjaSelanjutnya | string | Status pemberi kerja selanjutnya (Yes/No) |
| fgStatusPemotonganPph | string | Status |
| FullYear | ||
| PartialYear | ||
| Annualized | ||
| idTku | string | ID TKU pihak pemotong |
| jnsKelamin | string | Jenis kelamin penerima penghasilan (M/F) |
| kodeObjekPajak | string | Kode objek pajak PPh 21 |
| masaPajakAwal | string | Masa pajak awal |
| masaPajakAkhir | string | Masa pajak akhir |
| Nama | string | Nama penerima penghasilan |
| namaPenandatangan | string | Nama penandatangan bukti potong |
| nominalPtkp | number | Nominal PTKP |
| Npwp | string | NPWP/NIK penerima penghasilan |
| npwpNikPenandatangan | string | NPWP/NIK penandatangan |
| npwpPemotong | string | NPWP pihak pemotong |
| passphrasePenandatangan | string | Passphrase tanda tangan elektronik |
| pkpSetahunDisetahunkan | number | PKP setahun yang disetahunkan |
| pph21DapatDikreditkan | number | PPh 21 yang dapat dikreditkan |
| pph21DariBupotSebelumnya | number | PPh 21 dari bukti potong sebelumnya |
| pph21KurangLebihBayar | number | Nilai kurang/lebih bayar PPh 21 |
| pph21SetahunDisetahunkan | number | Total PPh 21 setahun disetahunkan |
| pph21Terutang | number | PPh 21 terutang |
| pph21WithheldDtp | number | PPh 21 yang ditanggung pemerintah |
| statusPtkp | string | Status PTKP: |
| TK/0, TK/1, TK/2, TK/3 | ||
| K/0, K/1, K/2, K/3 | ||
| tahunPajak | number | Tahun pajak |
| tglPemotongan | string (date) | Tanggal pemotongan |
| totalPenghasilanBruto | number | Total penghasilan bruto |
| totalPenghasilanNeto | number | Total penghasilan neto |
| totalPenghasilanNetoDariBupotSebelumnya | number | Penghasilan neto dari bukti potong sebelumnya |
| totalPenghasilanNetoPph21 | number | Total penghasilan neto objek PPh 21 |
| totalPengurang | number | Total pengurang penghasilan |
| userId | string | User ID yang melakukan transaksi |
| dataBpA1 | object | Objek detail Bukti Potong PPh 21 jenis A1 |
| dataBpA1: | ||
| fgKaryawanAsing | string | Status Pegawai: |
| Nilai | ||
| Resident | ||
| Foreign | ||
| passport | string | Nomor paspor (jika karyawan asing) |
| kdNegara | string | Kode negara karyawan. Untuk pegawai dalam negeri diisi IDN |
| posisiJabatan | string | Posisi atau jabatan |
| gajiPensiun | number | Penghasilan dari gaji/pensiun |
| tunjanganPPh | number | Tunjangan PPh |
| tunjanganPPhGrossUp | string | Status gross up PPh (Yes/No) |
| tunjanganLainnyaLembur | number | Tunjangan lainnya dan lembur |
| honorarium | number | Penghasilan honorarium |
| premiAsuransi | number | Premi asuransi |
| Natura | number | Penghasilan natura |
| tantiemBonus | number | Tantiem atau bonus |
| biayaJabatan | number | Biaya jabatan |
| iuranPensiun | number | Iuran pensiun |
| Zakat | number | Zakat yang dibayarkan |
| fgFasilitas | string | Jenis Fasilitas: |
| Kode | ||
| N/A | ||
| TaExAr21 | ||
| DTP | ||
| ETC |
Contoh Request
{
"idPel": 999,
"requestID": "a1b2c3d4-1234-4abc-9def-001122334455",
"yearlyIncome": {
"alamat": "JL MATRAMAN DALAM I NO.32, RT002/RW008, PEGANGSAAN, MENTENG, KOTA ADM. JAKARTA PUSAT, DKI JAKARTA, 10320",
"blnPenghasilanDisetahunkan": 5,
"fgPemberiKerjaSelanjutnya": "No",
"fgStatusPemotonganPph": "Annualized",
"idTku": "0717166367077000000000",
"jnsKelamin": "F",
"kodeObjekPajak": "21-100-01",
"masaPajakAwal": "01",
"masaPajakAkhir": "05",
"nama": "NAMA3171064907980002",
"namaPenandatangan": "NAMA3174061502560010",
"nominalPtkp": 67500000,
"npwp": "3171064907980002",
"npwpNikPenandatangan": "3174061502560010",
"npwpPemotong": "0717166367077000",
"passphrasePenandatangan": "Pajak123@@",
"pkpSetahunDisetahunkan": 0,
"pph21DapatDikreditkan": 0,
"pph21DariBupotSebelumnya": 0,
"pph21KurangLebihBayar": 0,
"pph21SetahunDisetahunkan": 0,
"pph21Terutang": 0,
"pph21WithheldDtp": 0,
"statusPtkp": "TK/3",
"tahunPajak": 2025,
"tglPemotongan": "2025-06-30",
"totalPenghasilanBruto": 102500000,
"totalPenghasilanNeto": 97250000,
"totalPenghasilanNetoDariBupotSebelumnya": 0,
"totalPenghasilanNetoPph21": 97250000,
"totalPengurang": 6000000,
"userId": "3174061502560010",
"dataBpA1": {
"fgKaryawanAsing": "Resident",
"passport": "",
"kdNegara": "IDN",
"posisiJabatan": "Staff",
"gajiPensiun": 85000000,
"tunjanganPPh": 0,
"tunjanganPPhGrossUp": "No",
"tunjanganLainnyaLembur": 17500000,
"honorarium": 0,
"premiAsuransi": 0,
"Natura": 0,
"tantiemBonus": 0,
"biayaJabatan": 6000000,
"iuranPensiun": 0,
"Zakat": 0,
"fgFasilitas": "N/A"
}
}
}
RESPONSE
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|---|---|---|
| idPel | Number | ID pelanggan |
| responseID | String | ID unik response |
| taxSlipResponse | Object | Objek response bukti potong |
| Status | String | Status proses (1=sukses, 0=gagal) |
| statusCode | String | Kode status HTTP |
| statusMessage | String | Pesan status |
| Result | Object | Detail hasil |
| Result: | ||
| nomorBupot | String | Nomor bukti potong |
| idBupot | String | ID bukti potong |
| timestamp | String | Timestamp |
Contoh Response: Berhasil
{
"idPel": 999,
"responseID": "d4c3b2a1-5678-4def-9012-34567890abcd",
"taxSlipResponse": {
"status": "1",
"statusCode": "200",
"statusMessage": "Success",
"result": {
"nomorBupot": "25000J29A",
"idBupot": "f1e2d3c4-5678-4abc-9def-0123456789ab",
"timestamp": "2026-01-15T10:30:00"
}
}
}
Contoh Response: Gagal
a. User ID tidak sesuai
{
"idPel": 999,
"responseID": "769915a2-c2c1-4d9b-b33c-b8ed1c9f94a7",
"taxSlipResponse": {
"status": "0",
"statusCode": "500",
"statusMessage": "Userid bukan PIC Wajib Pajak yang sah."
}
}
b. Token tidak valid
{
"status": "0",
"statusCode": "401",
"statusMessage": "Unauthorized: token validation error"
}
B. Penggantian Bukti Potong PPh A1
Digunakan untuk merubah data Bukti Potong PPh A1 yang sudah disahkan DJP.
Api EndPoint: /ifs/api/wit/tahunan/edit
Method: POST
Header: Token
REQUEST
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|---|---|---|
| idPel | number | ID pelanggan |
| requestID | string | ID unik request |
| yearlyIncome | object | Objek data penghasilan tahunan |
| yearlyIncome: | ||
| Alamat | string | Alamat lengkap |
| blnPenghasilanDisetahunkan | number | Jumlah bulan penghasilan |
| fgPemberiKerjaSelanjutnya | string | Status pemberi kerja (Yes/No) |
| fgStatusPemotonganPph | string | Status pemotongan |
| idTku | string | ID TKU |
| jnsKelamin | string | Jenis kelamin (M/F) |
| kodeObjekPajak | string | Kode objek pajak |
| masaPajakAwal | string | Masa pajak awal |
| masaPajakAkhir | string | Masa pajak akhir |
| Nama | string | Nama penerima |
| namaPenandatangan | string | Nama penandatangan |
| nominalPtkp | number | Nominal PTKP |
| Npwp | string | NPWP |
| npwpNikPenandatangan | string | NPWP penandatangan |
| npwpPemotong | string | NPWP pemotong |
| passphrasePenandatangan | string | Passphrase |
| pkpSetahunDisetahunkan | number | PKP setahun |
| pph21DapatDikreditkan | number | PPh dapat dikreditkan |
| pph21DariBupotSebelumnya | number | PPh dari bupot sebelumnya |
| pph21KurangLebihBayar | number | Kurang/lebih bayar |
| pph21SetahunDisetahunkan | number | PPh setahun disetahunkan |
| pph21Terutang | number | PPh terutang |
| pph21WithheldDtp | number | PPh DTP |
| statusPtkp | string | Status PTKP |
| tahunPajak | number | Tahun pajak |
| tglPemotongan | string | Tanggal pemotongan |
| totalPenghasilanBruto | number | Total penghasilan bruto |
| totalPenghasilanNeto | number | Total penghasilan neto |
| totalPenghasilanNetoDariBupotSebelumnya | number | Neto dari sebelumnya |
| totalPenghasilanNetoPph21 | number | Neto objek PPh 21 |
| totalPengurang | number | Total pengurang |
| userId | string | User ID |
| nomorBupot | string | Nomor bupot yang diganti |
| idBupot | string | ID bupot |
| dataBpA1 | object | Detail bukti potong A1 |
| dataBpA1: | ||
| fgKaryawanAsing | string | Status karyawan (Resident/Foreign) |
| passport | string | Nomor paspor |
| kdNegara | string | Kode negara |
| posisiJabatan | string | Jabatan |
| gajiPensiun | number | Gaji/pensiun |
| tunjanganPPh | number | Tunjangan PPh |
| tunjanganPPhGrossUp | string | Gross up (Yes/No) |
| tunjanganLainnyaLembur | number | Tunjangan lain/lembur |
| honorarium | number | Honorarium |
| premiAsuransi | number | Premi asuransi |
| Natura | number | Natura |
| tantiemBonus | number | Bonus/tantiem |
| biayaJabatan | number | Biaya jabatan |
| iuranPensiun | number | Iuran pensiun |
| Zakat | number | Zakat |
| fgFasilitas | string | Jenis fasilitas |
Contoh Request
{
"idPel": 999,
"requestID": "b2c3d4e5-1234-4abc-9def-001122334456",
"yearlyIncome": {
"alamat": "JL MATRAMAN DALAM I NO.32, RT002/RW008, PEGANGSAAN, MENTENG, KOTA ADM. JAKARTA PUSAT, DKI JAKARTA, 10320",
"blnPenghasilanDisetahunkan": 5,
"fgPemberiKerjaSelanjutnya": "No",
"fgStatusPemotonganPph": "Annualized",
"idTku": "0717166367077000000000",
"jnsKelamin": "F",
"kodeObjekPajak": "21-100-01",
"masaPajakAwal": "01",
"masaPajakAkhir": "05",
"nama": "NAMA3171064907980002",
"namaPenandatangan": "NAMA3174061502560010",
"nominalPtkp": 67500000,
"npwp": "3171064907980002",
"npwpNikPenandatangan": "3174061502560010",
"npwpPemotong": "0717166367077000",
"passphrasePenandatangan": "Pajak123@@",
"pkpSetahunDisetahunkan": 0,
"pph21DapatDikreditkan": 0,
"pph21DariBupotSebelumnya": 0,
"pph21KurangLebihBayar": 0,
"pph21SetahunDisetahunkan": 0,
"pph21Terutang": 0,
"pph21WithheldDtp": 0,
"statusPtkp": "TK/3",
"tahunPajak": 2025,
"tglPemotongan": "2025-06-30",
"totalPenghasilanBruto": 102500000,
"totalPenghasilanNeto": 97250000,
"totalPenghasilanNetoDariBupotSebelumnya": 0,
"totalPenghasilanNetoPph21": 97250000,
"totalPengurang": 6000000,
"userId": "3174061502560010",
"nomorBupot": "25000J29A",
"idBupot": "f1e2d3c4-5678-4abc-9def-0123456789ab",
"dataBpA1": {
"fgKaryawanAsing": "Resident",
"passport": "",
"kdNegara": "IDN",
"posisiJabatan": "Staff",
"gajiPensiun": 85000000,
"tunjanganPPh": 0,
"tunjanganPPhGrossUp": "No",
"tunjanganLainnyaLembur": 17500000,
"honorarium": 0,
"premiAsuransi": 0,
"Natura": 0,
"tantiemBonus": 0,
"biayaJabatan": 6000000,
"iuranPensiun": 0,
"Zakat": 0,
"fgFasilitas": "N/A"
}
}
}
RESPONSE
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|---|---|---|
| idPel | Number | ID pelanggan |
| responseID | String | ID unik response |
| taxSlipResponse | Object | Objek response |
| Status | String | Status proses |
| statusCode | String | Kode status HTTP |
| statusMessage | String | Pesan status |
| Result | Object | Detail hasil |
| Result: | ||
| nomorBupot | String | Nomor bukti potong |
| idBupot | String | ID bukti potong |
| timestamp | String | Timestamp |
Contoh Response: Berhasil
{
"idPel": 999,
"responseID": "e5f4a3b2-6789-4cba-9fed-1234567890cd",
"taxSlipResponse": {
"status": "1",
"statusCode": "200",
"statusMessage": "Success",
"result": {
"nomorBupot": "25000J29A",
"idBupot": "a1b2c3d4-5678-4abc-9def-0123456789ab",
"timestamp": "2026-01-15T11:00:00"
}
}
}
Contoh Response: Gagal
a. User ID tidak sesuai
{
"idPel": 999,
"responseID": "769915a2-c2c1-4d9b-b33c-b8ed1c9f94a7",
"taxSlipResponse": {
"status": "0",
"statusCode": "500",
"statusMessage": "Userid bukan PIC Wajib Pajak yang sah."
}
}
b. Token tidak valid
{
"status": "0",
"statusCode": "401",
"statusMessage": "Unauthorized: token validation error"
}
C. Pembatalan Bukti Potong PPh A1
Fungsi ini digunakan untuk membatalkan bukti potong PPh A1.
Api EndPoint: /ifs/api/wit/cancel
Method: POST
Header: Token
REQUEST
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|---|---|---|
| idPel | number | ID pelanggan |
| requestID | string | ID unik request |
| taxSlipCancel | object | Objek pembatalan |
| taxSlipCancel: | ||
| npwpPemotong | string | NPWP pemotong |
| tahunPajak | number | Tahun pajak |
| nomorBupot | string | Nomor bupot |
| idBupot | string | ID bupot |
| fgJnsBupot | string | Flag jenis bukti potong (A1) |
| tglPembatalan | string | Tanggal pembatalan |
| userId | string | User ID |
| npwpNikPenandatangan | string | NPWP penandatangan |
| passphrasePenandatangan | string | Passphrase |
Contoh Request
{
"idPel": 999,
"requestID": "c3d4e5f6-1234-4abc-9def-001122334457",
"taxSlipCancel": {
"npwpPemotong": "0717166367077000",
"tahunPajak": 2025,
"nomorBupot": "25000J29A",
"idBupot": "f1e2d3c4-5678-4abc-9def-0123456789ab",
"fgJnsBupot": "A1",
"tglPembatalan": "2025-07-01",
"userId": "3174061502560010",
"npwpNikPenandatangan": "3174061502560010",
"passphrasePenandatangan": "Pajak123@@"
}
}
RESPONSE
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|---|---|---|
| idPel | number | ID pelanggan |
| responseID | string (GUID) | ID unik response |
| taxSlipResponse | object | Objek response |
| status | string | Status proses (1=sukses, 0=gagal) |
| statusCode | string | Kode status |
| statusMessage | string | Pesan status |
Contoh Response: Berhasil
{
"idPel": 999,
"responseID": "f6e5d4c3-7896-4cba-9fed-2345678901de",
"taxSlipResponse": {
"status": "1",
"statusCode": "200",
"statusMessage": "Success"
}
}
Contoh Response: Gagal
a. User ID tidak sesuai
{
"idPel": 999,
"responseID": "769915a2-c2c1-4d9b-b33c-b8ed1c9f94a7",
"taxSlipResponse": {
"status": "0",
"statusCode": "500",
"statusMessage": "Userid bukan PIC Wajib Pajak yang sah."
}
}
b. Token tidak valid
{
"status": "0",
"statusCode": "401",
"statusMessage": "Unauthorized: token validation error"
}
D. Periksa Status Bukti Potong PPh A1
Fungsi ini digunakan untuk periksa status bukti potong PPh A1.
Api EndPoint: /ifs/api/wit/status
Method: POST
Header: Token
REQUEST
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|---|---|---|
| idPel | Number | ID pelanggan |
| requestID | String | ID unik permintaan |
| taxSlipVerification | Object | Objek verifikasi |
| taxSlipVerification: | ||
| npwpPemotong | String | NPWP pemotong |
| tahunPajak | Number | Tahun pajak |
| noBupot | String | Nomor bukti potong |
| idBupot | String | ID bukti potong |
| fgJnsBupot | String | Flag jenis bukti potong (A1) |
Contoh Request
{
"idPel": 999,
"requestID": "d4e5f6a7-1234-4abc-9def-001122334458",
"taxSlipVerification": {
"npwpPemotong": "0717166367077000",
"tahunPajak": 2025,
"noBupot": "25000J29A",
"idBupot": "f1e2d3c4-5678-4abc-9def-0123456789ab",
"fgJnsBupot": "A1"
}
}
RESPONSE
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|---|---|---|
| idPel | number | ID pelanggan |
| responseID | string | ID unik respons |
| printedTaxSlipResponse | object | Objek response |
| Status | string | Status proses |
| statusCode | string | Kode status HTTP |
| statusMessage | string | Pesan status |
| Result | object | Detail hasil verifikasi |
| Result: | ||
| npwpPemotong | string | NPWP pemotong |
| statusBupot | string | Status bukti potong |
| kodeObjekPajak | string | Kode objek pajak |
| pphDipotong | number | Nilai PPh dipotong |
| Timestamp | string | Timestamp verifikasi |
Contoh Response: Berhasil
{
"idPel": 999,
"responseID": "a7b6c5d4-8901-4def-9fed-3456789012ef",
"printedTaxSlipResponse": {
"status": "1",
"statusCode": "200",
"statusMessage": "Success",
"result": {
"npwpPemotong": "0717166367077000",
"statusBupot": "NORMAL-DONE",
"kodeObjekPajak": "21-100-01",
"pphDipotong": 5950000,
"timestamp": "2026-01-22 09:15:30"
}
}
}
Contoh Response: Gagal
a. NPWP tidak valid/tidak sesuai
{
"idPel": 999,
"responseID": "5c49882a-3bd5-4ab3-b614-b2dff9c3de97",
"taxSlipVerificationResponse": {
"status": "0",
"statusCode": "BadRequest",
"statusMessage": "{\"status\":\"0\",\"statusCode\":\"401\",\"statusMessage\":\"Unauthorized\",\"result\":null}"
}
}
b. Token tidak valid
{
"status": "0",
"statusCode": "401",
"statusMessage": "Unauthorized: token validation error"
}
E. Unduh PDF Bukti Potong PPh A1
Fungsi ini digunakan untuk mengunduh PDF Bukti Potong PPh A1.
Api EndPoint: /ifs/api/wit/pdf
Method: POST
Header: Token
REQUEST
| Nama Field | Tipe Data | Deskripsi |
|---|---|---|
| idPel | Number | ID pelanggan |
| requestID | String | ID unik permintaan |
| taxSlipVerification | Object | Objek verifikasi |
| taxSlipVerification: | ||
| npwpPemotong | String | NPWP pemotong |
| tahunPajak | Number | Tahun pajak |
| noBupot | String | Nomor bukti potong |
| idBupot | String | ID bukti potong |
| fgJnsBupot | String | Flag jenis bukti potong (A1) |
Contoh Request
{
"idPel": 999,
"requestID": "e5f6a7b8-1234-4abc-9def-001122334459",
"taxSlipVerification": {
"npwpPemotong": "0717166367077000",
"tahunPajak": 2025,
"noBupot": "25000J29A",
"idBupot": "f1e2d3c4-5678-4abc-9def-0123456789ab",
"fgJnsBupot": "A1"
}
}
RESPONSE
| NAMA FIELD | TIPE DATA | DESKRIPSI |
|---|---|---|
| idPel | number | ID pelanggan |
| responseID | string | ID unik respons |
| printedTaxSlipResponse | Object | Objek response |
| Status | string | Status proses |
| statusCode | string | Kode status |
| statusMessage | string | Pesan status |
| result | Object | Detail hasil |
| result: | ||
| npwpPemotong | string | NPWP pemotong |
| statusBupot | string | Status bukti potong |
| kodeObjekPajak | string | Kode objek pajak |
| pphDipotong | number | Nilai PPh dipotong |
| timestamp | string | Timestamp |
| data | string | PDF dalam format base64 |
| nomorBuktiPotong | string | Nomor bukti potong |
Contoh Response: Berhasil
{
"idPel": 999,
"responseID": "b8a9c8d7-9012-4efb-9fed-4567890123fg",
"printedTaxSlipResponse": {
"status": "1",
"statusCode": "200",
"statusMessage": "Berhasil mengunduh cetakan bukti potong",
"result": {
"npwpPemotong": "0717166367077000",
"statusBupot": "NORMAL-DONE",
"kodeObjekPajak": "21-100-01",
"pphDipotong": 5950000,
"timestamp": "2026-01-22 09:30:00",
"data": "JVBERi0xLjcNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFI+Pg0KZW5kb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMyAwIFI+DQplbmRvYmoNCjQgMCBvYmoNClBERiAvVGFiaW5kZXIgMQ0KZW5kb2JqDQp4CmVuZHN0cmVhbQplbmRvYmoNCnRyYWlsZXINCjw8L1R5cGUvWE9iamVjdC9SZXNvdXJjZXMgMiAwIFI+Pg0Kc3RhcnR4cmVmDQo0NTANCiUlRU9G",
"nomorBuktiPotong": "25000J29A"
}
}
}
Contoh Response: Gagal
a. NPWP tidak valid/tidak sesuai
{
"idPel": 999,
"responseID": "5c49882a-3bd5-4ab3-b614-b2dff9c3de97",
"taxSlipVerificationResponse": {
"status": "0",
"statusCode": "BadRequest",
"statusMessage": "{\"status\":\"0\",\"statusCode\":\"401\",\"statusMessage\":\"Unauthorized\",\"result\":null}"
}
}
b. Token tidak valid
{
"status": "0",
"statusCode": "401",
"statusMessage": "Unauthorized: token validation error"
}
Catatan Penting
-
Autentikasi: Semua endpoint (kecuali Token) memerlukan token autentikasi pada header request.
-
Format Tanggal: Format tanggal yang digunakan adalah
YYYY-MM-DD. -
Format NPWP: NPWP harus terdiri dari 15 digit tanpa tanda baca.
-
Error Handling: Jika request gagal, response akan berisi
status: 0denganstatusCodedanstatusMessageyang menjelaskan penyebab kegagalan. -
Token Kadaluarsa: Token memiliki masa berlaku. Jika token kadaluarsa, request akan ditolak dengan status
401 Unauthorized. -
Base64 Encoding: Response untuk endpoint unduh PDF akan mengembalikan data PDF dalam format Base64 string.
Dokumen ini dibuat oleh PT Sarana Prima Telematika - 2026