Current tax rates
get/v1/tax-rates
Scope configuration:read
A fresh query to the V-PFR with the exact security element of the premise. The labels it returns are the only ones a receipt may carry; BokaPOS has no built-in list and no fallback.
Contract notes (OpenAPI)
Performs a fresh authenticated PFR status fetch for the exact active premise security element. The response is not a cache authority and no built-in label or rate fallback exists.
Parameters
| Field | In | Type | Description |
|---|---|---|---|
taxpayerIdrequired | query | uuid | |
businessPremiseIdrequired | query | uuid |
Example
curl -X GET "https://api.bokapos.rs/v1/tax-rates?taxpayerId=3f9c2a8e-6b1d-4e5a-9c47-1d2b8e6f0a11&businessPremiseId=b7d4e2c1-9a3f-4c8e-8f21-6e5a0c9d3b22" \
-H "Authorization: Bearer $BOKAPOS_TOKEN"Responses
| 200 OK | Current fiscal tax configurationCurrentTaxConfiguration |
|---|---|
| 404 Not Found | Resource does not exist within the authenticated tenant scopeErrorCode |
| 409 Conflict | The requested resource conflicts with an existing tenant-scoped recordConflict |
| 422 Unprocessable Content | The command violates a Boka or fiscal ruleErrorCode |
| 503 Service Unavailable | A fresh authoritative PFR configuration could not be obtained |
{
"source": "PFR",
"environment": "sandbox",
"taxpayerId": "3f9c2a8e-6b1d-4e5a-9c47-1d2b8e6f0a11",
"businessPremiseId": "b7d4e2c1-9a3f-4c8e-8f21-6e5a0c9d3b22",
"currentTaxGroupId": 8,
"validFrom": "2022-05-01T00:00:00",
"fetchedAt": "2026-09-01T08:14:02.118Z",
"labels": [
{
"label": "F",
"category": "ECAL",
"categoryType": 0,
"rate": 11,
"activeFrom": "2022-05-01T00:00:00"
},
{
"label": "N",
"category": "N-TAX",
"categoryType": 0,
"rate": 0,
"activeFrom": "2022-05-01T00:00:00"
},
{
"label": "P",
"category": "PBL",
"categoryType": 2,
"rate": 0.5,
"activeFrom": "2022-05-01T00:00:00"
},
{
"label": "E",
"category": "STT",
"categoryType": 0,
"rate": 6,
"activeFrom": "2022-05-01T00:00:00"
},
{
"label": "T",
"category": "TOTL",
"categoryType": 1,
"rate": 2,
"activeFrom": "2022-05-01T00:00:00"
},
{
"label": "A",
"category": "VAT",
"categoryType": 0,
"rate": 10,
"activeFrom": "2022-05-01T00:00:00"
},
{
"label": "B",
"category": "VAT",
"categoryType": 0,
"rate": 0,
"activeFrom": "2022-05-01T00:00:00"
},
{
"label": "Ж",
"category": "VAT",
"categoryType": 0,
"rate": 19,
"activeFrom": "2022-05-01T00:00:00"
},
{
"label": "C",
"category": "VAT-EXCL",
"categoryType": 0,
"rate": 0,
"activeFrom": "2022-05-01T00:00:00"
}
]
}The Tax Administration sandbox carries a generic test label set. In production you get the official Serbian labels (for example Ђ 20%, Е 10%, Г 0%, А non-VAT). Never hard-code labels.
Response: CurrentTaxConfiguration
Field descriptions come from the OpenAPI contract; field names and values are identical in both languages.
| Field | Type | Description |
|---|---|---|
sourcerequired | string |
|
environmentrequired | string | Environment of the active security element the configuration was read with; sandbox unlocks the sandbox-only advance item names.
|
taxpayerIdrequired | uuid | |
businessPremiseIdrequired | uuid | |
currentTaxGroupIdrequired | integer | >= 0 |
validFromrequired | string | Supplier-provided current-group validity value preserved without inventing a timezone. |
fetchedAtrequired | date-time | |
labelsrequired | array<TaxLabel> | min 1 items |
labelrequired | string | |
categoryrequired | string | |
categoryTyperequired | integer | >= 0<= 2 |
raterequired | number | |
activeFromrequired | string | Supplier-provided current-group validity value preserved without inventing a timezone. |