2201 lines
66 KiB
Markdown
2201 lines
66 KiB
Markdown
# SPESIFIKASI API SoluTax IFS WIT V1.0
|
|
|
|
**PT Sarana Prima Telematika**
|
|
|
|
**2026**
|
|
|
|
---
|
|
|
|
## DAFT ISI
|
|
|
|
- [A. TUJUAN](#a-tujuan)
|
|
- [B. RUANG LINGKUP](#b-ruang-lingkup)
|
|
- [C. FITUR-FITUR](#c-fitur-fitur)
|
|
- [1. Token](#1-token)
|
|
- [2. Bukti Potong PPh 21](#2-bukti-potong-pph-21)
|
|
- [A. Pengesahan Bukti Potong PPh 21](#a-pengesahan-bukti-potong-pph-21)
|
|
- [B. Penggantian Bukti Potong PPh 21](#b-penggantian-bukti-potong-pph-21)
|
|
- [C. Pembatalan Bukti Potong PPh 21](#c-pembatalan-bukti-potong-pph-21)
|
|
- [D. Periksa Status Bukti Potong PPh 21](#d-periksa-status-bukti-potong-pph-21)
|
|
- [E. Unduh PDF Bukti Potong PPh 21](#eunduh-pdf-bukti-potong-pph-21)
|
|
- [3. Bukti Potong PPh A0](#3-bukti-potong-pph-a0)
|
|
- [A. Pengesahan Bukti Potong PPh A0](#a-pengesahan-bukti-potong-pph-a0)
|
|
- [B. Penggantian Bukti Potong PPh A0](#b-penggantian-bukti-potong-pph-a0)
|
|
- [C. Pembatalan Bukti Potong PPh A0](#c-pembatalan-bukti-potong-pph-a0)
|
|
- [D. Periksa Status Bukti Potong PPh A0](#d-periksa-status-bukti-potong-pph-a0)
|
|
- [E. Unduh PDF Bukti Potong PPh A0](#eunduh-pdf-bukti-potong-pph-a0)
|
|
- [4. Bukti Potong PPh A1](#4-bukti-potong-pph-a1)
|
|
- [A. Pengesahan Bukti Potong PPh A1](#a-pengesahan-bukti-potong-pph-a1)
|
|
- [B. Penggantian Bukti Potong PPh A1](#b-penggantian-bukti-potong-pph-a1)
|
|
- [C. Pembatalan Bukti Potong PPh A1](#c-pembatalan-bukti-potong-pph-a1)
|
|
- [D. Periksa Status Bukti Potong PPh A1](#d-periksa-status-bukti-potong-pph-a1)
|
|
- [E. Unduh PDF Bukti Potong PPh A1](#eunduh-pdf-bukti-potong-pph-a1)
|
|
|
|
---
|
|
|
|
## 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
|
|
|
|
```json
|
|
{
|
|
"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
|
|
|
|
```json
|
|
{
|
|
"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 | Keterangan |
|
|
| | | N/A | Tanpa Fasilitas |
|
|
| | | TaExAr21 | Surat Keterangan Bebas (SKB) Pemotongan PPh Pasal 21 |
|
|
| | | DTP | PPh Ditanggung Pemerintah (DTP) |
|
|
| | | ETC | Fasilitas Lainnya |
|
|
| 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 | Keterangan |
|
|
| | | ANNOUNCEMENT | Pengumuman |
|
|
| | | COMMERCIALINVOICE | Surat Tagihan |
|
|
| | | CONTRACT | Kontrak |
|
|
| | | CURRENTACCOUNT | Jasa Giro |
|
|
| | | DECREE | Decree |
|
|
| | | DEEDOFENGAGEMENT | Akta Perjanjian |
|
|
| | | DEEDOFGENERAL | Akta RUPS |
|
|
| | | OTHER | Lainnya |
|
|
| | | OTHERFACILITYDOC | Dokumen Fasilitas Lainnya |
|
|
| | | PAYMENTPROOF | Bukti Pembayaran |
|
|
| | | STATEMENTLETTER | Surat Pernyataan |
|
|
| | | TAXINVOICE | Faktur Pajak |
|
|
| | | TAXREGULATIONDOC | Dokumen Perpajakan |
|
|
| | | TRADECONFIRMATION | Trade Confirmation |
|
|
| nomorDokumen | string | Nomor Dokumen Referensi |
|
|
| tanggal_Dokumen | string (date) | Tanggal dokumen referensi |
|
|
|
|
##### Contoh Request
|
|
|
|
```json
|
|
{
|
|
"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
|
|
|
|
```json
|
|
{
|
|
"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**
|
|
|
|
```json
|
|
{
|
|
"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**
|
|
|
|
```json
|
|
{
|
|
"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 | Keterangan |
|
|
| | | ANNOUNCEMENT | Pengumuman |
|
|
| | | COMMERCIALINVOICE | Surat Tagihan |
|
|
| | | CONTRACT | Kontrak |
|
|
| | | CURRENTACCOUNT | Jasa Giro |
|
|
| | | DECREE | Decree |
|
|
| | | DEEDOFENGAGEMENT | Akta Perjanjian |
|
|
| | | DEEDOFGENERAL | Akta RUPS |
|
|
| | | OTHER | Lainnya |
|
|
| | | OTHERFACILITYDOC | Dokumen Fasilitas Lainnya |
|
|
| | | PAYMENTPROOF | Bukti Pembayaran |
|
|
| | | STATEMENTLETTER | Surat Pernyataan |
|
|
| | | TAXINVOICE | Faktur Pajak |
|
|
| | | TAXREGULATIONDOC | Dokumen Perpajakan |
|
|
| | | TRADECONFIRMATION | Trade Confirmation |
|
|
| nomorDokumen | String | Nomor dokumen referensi |
|
|
| tanggal_Dokumen | String | Tanggal dokumen referensi |
|
|
|
|
##### Contoh Request
|
|
|
|
```json
|
|
{
|
|
"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
|
|
|
|
```json
|
|
{
|
|
"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**
|
|
|
|
```json
|
|
{
|
|
"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**
|
|
|
|
```json
|
|
{
|
|
"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
|
|
|
|
```json
|
|
{
|
|
"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
|
|
|
|
```json
|
|
{
|
|
"idPel": 999,
|
|
"responseID": "ce726d7f-2c48-4589-8676-ec1bc37869d4",
|
|
"taxSlipResponse": {
|
|
"status": "1",
|
|
"statusCode": "200",
|
|
"statusMessage": "Success"
|
|
}
|
|
}
|
|
```
|
|
|
|
##### Contoh Response: Gagal
|
|
|
|
**a. User ID tidak sesuai**
|
|
|
|
```json
|
|
{
|
|
"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**
|
|
|
|
```json
|
|
{
|
|
"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
|
|
|
|
```json
|
|
{
|
|
"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
|
|
|
|
```json
|
|
{
|
|
"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**
|
|
|
|
```json
|
|
{
|
|
"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**
|
|
|
|
```json
|
|
{
|
|
"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
|
|
|
|
```json
|
|
{
|
|
"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
|
|
|
|
```json
|
|
{
|
|
"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**
|
|
|
|
```json
|
|
{
|
|
"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**
|
|
|
|
```json
|
|
{
|
|
"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 | Keterangan |
|
|
| | | Resident | Pegawai dalam negeri |
|
|
| | | Foreign | Pegawai Asing |
|
|
| 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 | Keterangan |
|
|
| | | N/A | Tanpa Fasilitas |
|
|
| | | TaExAr21 | Surat Keterangan Bebas (SKB) Pemotongan PPh Pasal 21 |
|
|
| | | DTP | PPh Ditanggung Pemerintah (DTP) |
|
|
| | | ETC | Fasilitas Lainnya |
|
|
| 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
|
|
|
|
```json
|
|
{
|
|
"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
|
|
|
|
```json
|
|
{
|
|
"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**
|
|
|
|
```json
|
|
{
|
|
"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**
|
|
|
|
```json
|
|
{
|
|
"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 | Keterangan |
|
|
| | | Resident | Pegawai dalam negeri |
|
|
| | | Foreign | Pegawai Asing |
|
|
| 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 | Keterangan |
|
|
| | | N/A | Tanpa Fasilitas |
|
|
| | | TaExAr21 | Surat Keterangan Bebas (SKB) Pemotongan PPh Pasal 21 |
|
|
| | | DTP | PPh Ditanggung Pemerintah (DTP) |
|
|
| | | ETC | Fasilitas Lainnya |
|
|
| 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
|
|
|
|
```json
|
|
{
|
|
"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
|
|
|
|
```json
|
|
{
|
|
"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**
|
|
|
|
```json
|
|
{
|
|
"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**
|
|
|
|
```json
|
|
{
|
|
"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
|
|
|
|
```json
|
|
{
|
|
"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
|
|
|
|
```json
|
|
{
|
|
"idPel": 999,
|
|
"responseID": "ce726d7f-2c48-4589-8676-ec1bc37869d4",
|
|
"taxSlipResponse": {
|
|
"status": "1",
|
|
"statusCode": "200",
|
|
"statusMessage": "Success"
|
|
}
|
|
}
|
|
```
|
|
|
|
##### Contoh Response: Gagal
|
|
|
|
**a. User ID tidak sesuai**
|
|
|
|
```json
|
|
{
|
|
"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**
|
|
|
|
```json
|
|
{
|
|
"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
|
|
|
|
```json
|
|
{
|
|
"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
|
|
|
|
```json
|
|
{
|
|
"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**
|
|
|
|
```json
|
|
{
|
|
"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**
|
|
|
|
```json
|
|
{
|
|
"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
|
|
|
|
```json
|
|
{
|
|
"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
|
|
|
|
```json
|
|
{
|
|
"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**
|
|
|
|
```json
|
|
{
|
|
"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**
|
|
|
|
```json
|
|
{
|
|
"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 | Keterangan |
|
|
| | | FullYear | Setahun Penuh |
|
|
| | | PartialYear | Kurang dari Setahun |
|
|
| | | Annualized | Disetahunkan |
|
|
| 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 | Keterangan |
|
|
| | | Resident | Pegawai dalam negeri |
|
|
| | | Foreign | Pegawai Asing |
|
|
| 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 | Keterangan |
|
|
| | | N/A | Tanpa Fasilitas |
|
|
| | | TaExAr21 | Surat Keterangan Bebas (SKB) Pemotongan PPh Pasal 21 |
|
|
| | | DTP | PPh Ditanggung Pemerintah (DTP) |
|
|
| | | ETC | Fasilitas Lainnya |
|
|
|
|
##### Contoh Request
|
|
|
|
```json
|
|
{
|
|
"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
|
|
|
|
```json
|
|
{
|
|
"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**
|
|
|
|
```json
|
|
{
|
|
"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**
|
|
|
|
```json
|
|
{
|
|
"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
|
|
|
|
```json
|
|
{
|
|
"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
|
|
|
|
```json
|
|
{
|
|
"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**
|
|
|
|
```json
|
|
{
|
|
"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**
|
|
|
|
```json
|
|
{
|
|
"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
|
|
|
|
```json
|
|
{
|
|
"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
|
|
|
|
```json
|
|
{
|
|
"idPel": 999,
|
|
"responseID": "f6e5d4c3-7896-4cba-9fed-2345678901de",
|
|
"taxSlipResponse": {
|
|
"status": "1",
|
|
"statusCode": "200",
|
|
"statusMessage": "Success"
|
|
}
|
|
}
|
|
```
|
|
|
|
##### Contoh Response: Gagal
|
|
|
|
**a. User ID tidak sesuai**
|
|
|
|
```json
|
|
{
|
|
"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**
|
|
|
|
```json
|
|
{
|
|
"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
|
|
|
|
```json
|
|
{
|
|
"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
|
|
|
|
```json
|
|
{
|
|
"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**
|
|
|
|
```json
|
|
{
|
|
"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**
|
|
|
|
```json
|
|
{
|
|
"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
|
|
|
|
```json
|
|
{
|
|
"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
|
|
|
|
```json
|
|
{
|
|
"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**
|
|
|
|
```json
|
|
{
|
|
"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**
|
|
|
|
```json
|
|
{
|
|
"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*
|