Generate Payment Reference Numbers (PRNs) for remitting withholding taxes to KRA. Supports Income Tax (IT) Withholding, Rental Income Withholding, and VAT Withholding.
| Scope | Description |
|---|---|
kra:payments |
Generate PRNs for withholding taxes |
| Method | Endpoint | KRA Path | Description |
|---|---|---|---|
POST |
/api/kra/payments/it-withholding |
/generate/v1/prn/whtit |
Generate IT Withholding PRN |
POST |
/api/kra/payments/rental-withholding |
/generate/v1/prn/whtrental |
Generate Rental Withholding PRN |
POST |
/api/kra/payments/vat-withholding |
/generate/v1/prn/whtvat |
Generate VAT Withholding PRN |
A Payment Reference Number (PRN) is a unique identifier generated by KRA that must accompany every tax payment. PRNs are required when remitting withholding taxes to KRA via banks or mobile money.
All three withholding tax endpoints share the same request structure with two sections:
{
"transactionHeader": {
"withholderPin": "...",
"transactionUniqueNo": "...",
"noOfTransactions": 1,
"taxObligation": "...",
"taxPeriodFrom": "...",
"taxPeriodTo": "...",
"totalGrossAmount": 0,
"totalTaxAmount": 0
},
"transactionDetails": [
{
"payeePIN": "...",
"payeeName": "...",
"natureOfTransaction": "...",
"grossAmount": 0,
"taxRate": 0,
"taxAmount": 0,
"invoiceNumber": "...",
"invoiceDate": "..."
}
]
}
| Field | Type | Required | Description |
|---|---|---|---|
withholderPin |
string | Yes | KRA PIN of the entity withholding tax |
transactionUniqueNo |
string | Yes | Your unique reference for this batch |
noOfTransactions |
integer | Yes | Number of entries in transactionDetails |
taxObligation |
string | Auto | Tax obligation code (auto-set per endpoint) |
taxPeriodFrom |
string | Yes | Period start date (YYYY-MM-DD) |
taxPeriodTo |
string | Yes | Period end date (YYYY-MM-DD) |
totalGrossAmount |
number | Yes | Sum of all grossAmount in details |
totalTaxAmount |
number | Yes | Sum of all taxAmount in details |
| Field | Type | Required | Description |
|---|---|---|---|
payeePIN |
string | Yes | KRA PIN of the payee (person/entity being paid) |
payeeName |
string | Yes | Name of the payee |
natureOfTransaction |
string | Yes | Nature code (see reference tables below) |
grossAmount |
number | Yes | Gross payment amount before tax |
taxRate |
number | Yes | Withholding tax rate (%) |
taxAmount |
number | Yes | Calculated tax amount |
invoiceNumber |
string | No | Related invoice number |
invoiceDate |
string | No | Related invoice date (YYYY-MM-DD) |
Note: The
taxObligationfield is set automatically by Salami:WHTITfor IT,WHTRENTALfor Rental,WHTVATfor VAT. You can override it if needed.
Generate a PRN for withholding income tax.
Endpoint: POST /api/kra/payments/it-withholding
Required Scope: kra:payments
Auto-set: taxObligation = "WHTIT"
Request:
curl -X POST \
https://yourtenant.salami.dgl.co.ke/api/kra/payments/it-withholding \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"transactionHeader": {
"withholderPin": "P051234567A",
"transactionUniqueNo": "WHT-IT-2026-001",
"noOfTransactions": 2,
"taxObligation": "WHTIT",
"taxPeriodFrom": "2026-03-01",
"taxPeriodTo": "2026-03-31",
"totalGrossAmount": 350000.00,
"totalTaxAmount": 17500.00
},
"transactionDetails": [
{
"payeePIN": "A009876543B",
"payeeName": "CONSULTING FIRM LTD",
"natureOfTransaction": "WHT_MANAGEMENT_FEE",
"grossAmount": 200000.00,
"taxRate": 5,
"taxAmount": 10000.00,
"invoiceNumber": "INV-2026-0045",
"invoiceDate": "2026-03-15"
},
{
"payeePIN": "B001122334C",
"payeeName": "AUDIT PARTNERS LLP",
"natureOfTransaction": "WHT_PROFESSIONAL_FEE",
"grossAmount": 150000.00,
"taxRate": 5,
"taxAmount": 7500.00,
"invoiceNumber": "INV-2026-0046",
"invoiceDate": "2026-03-20"
}
]
}'
Response:
{
"success": true,
"data": {
"PRN": "KRA2026000123456",
"TransactionUniqueNo": "WHT-IT-2026-001",
"TaxObligation": "WHTIT",
"TotalGrossAmount": 350000.00,
"TotalTaxAmount": 17500.00,
"DueDate": "2026-04-20",
"Status": "Generated",
"GeneratedAt": "2026-03-29T12:00:00Z"
},
"message": "PRN generated successfully"
}
Generate a PRN for withholding tax on rental income.
Endpoint: POST /api/kra/payments/rental-withholding
Required Scope: kra:payments
Auto-set: taxObligation = "WHTRENTAL"
Request:
curl -X POST \
https://yourtenant.salami.dgl.co.ke/api/kra/payments/rental-withholding \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"transactionHeader": {
"withholderPin": "P051234567A",
"transactionUniqueNo": "WHT-RENT-2026-001",
"noOfTransactions": 1,
"taxObligation": "WHTRENTAL",
"taxPeriodFrom": "2026-03-01",
"taxPeriodTo": "2026-03-31",
"totalGrossAmount": 500000.00,
"totalTaxAmount": 37500.00
},
"transactionDetails": [
{
"payeePIN": "C005566778D",
"payeeName": "PROPERTY OWNER",
"natureOfTransaction": "WHT_RENTAL_INCOME",
"grossAmount": 500000.00,
"taxRate": 7.5,
"taxAmount": 37500.00,
"invoiceNumber": "RENT-MAR-2026",
"invoiceDate": "2026-03-01"
}
]
}'
Response:
{
"success": true,
"data": {
"PRN": "KRA2026000123457",
"TransactionUniqueNo": "WHT-RENT-2026-001",
"TaxObligation": "WHTRENTAL",
"TotalGrossAmount": 500000.00,
"TotalTaxAmount": 37500.00,
"DueDate": "2026-04-20",
"Status": "Generated",
"GeneratedAt": "2026-03-29T12:05:00Z"
},
"message": "PRN generated successfully"
}
Generate a PRN for VAT withholding.
Endpoint: POST /api/kra/payments/vat-withholding
Required Scope: kra:payments
Auto-set: taxObligation = "WHTVAT"
Request:
curl -X POST \
https://yourtenant.salami.dgl.co.ke/api/kra/payments/vat-withholding \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"transactionHeader": {
"withholderPin": "P051234567A",
"transactionUniqueNo": "WHT-VAT-2026-001",
"noOfTransactions": 1,
"taxObligation": "WHTVAT",
"taxPeriodFrom": "2026-03-01",
"taxPeriodTo": "2026-03-31",
"totalGrossAmount": 1160000.00,
"totalTaxAmount": 32000.00
},
"transactionDetails": [
{
"payeePIN": "A009876543B",
"payeeName": "SUPPLIER LTD",
"natureOfTransaction": "WHT_VAT_GENERAL",
"grossAmount": 1160000.00,
"taxRate": 2,
"taxAmount": 32000.00,
"invoiceNumber": "SUP-INV-2026-089",
"invoiceDate": "2026-03-18"
}
]
}'
Response:
{
"success": true,
"data": {
"PRN": "KRA2026000123458",
"TransactionUniqueNo": "WHT-VAT-2026-001",
"TaxObligation": "WHTVAT",
"TotalGrossAmount": 1160000.00,
"TotalTaxAmount": 32000.00,
"DueDate": "2026-04-20",
"Status": "Generated",
"GeneratedAt": "2026-03-29T12:10:00Z"
},
"message": "PRN generated successfully"
}
| Code | Description | Rate |
|---|---|---|
WHT_PROFESSIONAL_FEE |
Professional or management fees (resident) | 5% |
WHT_MANAGEMENT_FEE |
Management or technical fees (resident) | 5% |
WHT_TRAINING_FEE |
Training fees (resident) | 5% |
WHT_CONTRACTUAL_FEE |
Contractual fees (resident) | 3% |
WHT_COMMISSION |
Commission payments | 5% |
WHT_PENSION |
Pension payments | 5% |
WHT_INSURANCE_PREMIUM |
Insurance premium (non-resident) | 5% |
WHT_ROYALTY |
Royalty payments | 5% |
WHT_DIVIDEND_RESIDENT |
Dividends (resident) | 5% |
WHT_DIVIDEND_NON_RESIDENT |
Dividends (non-resident) | 15% |
WHT_INTEREST_RESIDENT |
Interest payments (resident) | 15% |
WHT_INTEREST_NON_RESIDENT |
Interest payments (non-resident) | 15% |
WHT_APPEARANCE_FEE |
Appearance/entertainment fees | 20% |
WHT_NATURAL_RESOURCE |
Natural resource income | 20% |
WHT_DEMURRAGE |
Demurrage charges | 20% |
WHT_OTHER |
Other withholding tax | Varies |
| Code | Description | Rate |
|---|---|---|
WHT_RENTAL_INCOME |
Rental income (residential/commercial) | 7.5% |
WHT_RENT_MACHINERY |
Machinery/equipment rental | 5% |
| Code | Description | Rate |
|---|---|---|
WHT_VAT_GENERAL |
General VAT withholding | 2% |
WHT_VAT_GOVERNMENT |
Government agency VAT withholding | 6% |
| Payment Type | Rate |
|---|---|
| Professional / Management fees | 5% |
| Contractual fees | 3% |
| Commission | 5% |
| Interest (bearer instruments) | 25% |
| Interest (other) | 15% |
| Dividends | 5% |
| Royalties | 5% |
| Rental income | 7.5% |
| Insurance commission | 5% |
| Payment Type | Rate |
|---|---|
| Professional / Management fees | 20% |
| Dividends | 15% |
| Interest | 15% |
| Royalties | 20% |
| Insurance premium | 5% |
| Appearance fees | 20% |
Disclaimer: Tax rates are subject to change by KRA. Always verify current rates at kra.go.ke.
{
"success": false,
"message": "Required fields missing: transactionHeader.withholderPin, transactionHeader.totalTaxAmount",
"error": "validation_error"
}
| Code | Description |
|---|---|
200 |
PRN generated successfully |
401 |
Invalid or missing Salami token |
403 |
Token lacks kra:payments scope |
422 |
Missing required fields |
502 |
KRA server error or timeout |
WHT-IT-YYYY-NNN)totalGrossAmount and totalTaxAmount in the header match the sum of detailsBack to: KRA Overview | KRA Compliance