Files
solutax_api/spesifikasi.md
2026-03-04 13:40:32 +07:00

66 KiB

SPESIFIKASI API SoluTax IFS WIT V1.0

PT Sarana Prima Telematika

2026


DAFT ISI


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:

  1. Bukti Potong PPh 21 (Tidak Final / Final)
  2. Bukti Potong PPh A0 (Pegawai Tetap Bulanan)
  3. 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

  1. Autentikasi: Semua endpoint (kecuali Token) memerlukan token autentikasi pada header request.

  2. Format Tanggal: Format tanggal yang digunakan adalah YYYY-MM-DD.

  3. Format NPWP: NPWP harus terdiri dari 15 digit tanpa tanda baca.

  4. Error Handling: Jika request gagal, response akan berisi status: 0 dengan statusCode dan statusMessage yang menjelaskan penyebab kegagalan.

  5. Token Kadaluarsa: Token memiliki masa berlaku. Jika token kadaluarsa, request akan ditolak dengan status 401 Unauthorized.

  6. Base64 Encoding: Response untuk endpoint unduh PDF akan mengembalikan data PDF dalam format Base64 string.


Dokumen ini dibuat oleh PT Sarana Prima Telematika - 2026