API dokumentacija
BokaPOS API
Jedan HTTP poziv, jedan fiskalni račun. Vaš web shop, ERP ili platforma pošalje stavke i plaćanja, BokaPOS ih fiskalizuje preko V-PFR-a Poreske uprave i vrati broj računa, verifikacioni link, PDF i QR kod. Ovde je sve što integratoru treba: brzi start, pravila, tokovi i referenca svake operacije.
Brzi start
Od pristupnih podataka do prvog fiskalizovanog računa u sandboxu, korak po korak.
Autentifikacija i okruženja
OAuth 2.0 client credentials, jedna adresa za sandbox i produkciju, scope-ovi.
Konvencije
Idempotencija, statusi dokumenta, iznosi, vreme, reference, načini plaćanja, kupac.
Referenca operacija
Svaka operacija sa parametrima, telom, odgovorima i primerom u pet jezika.
Šta API radi
- Izdaje fiskalne račune za prodaju na daljinu: promet (prodaja), refundacija, avans, predračun, obuka i kopija, sa svim referencama koje propisi traže.
- Vraća kompletan paket računa: PFR broj, vreme i brojač, verifikacioni link Poreske uprave, zvanični tekst žurnala, PDF u A4, 80 mm i 58 mm, PNG pregled i QR kod.
- Čuva elektronski dnevnik svake operacije, uključujući odbijene i nepoznate ishode, sa pretragom, izvozom i izveštajem o prometu.
- Vodi složene tokove umesto vas: refundacija sa automatskom kopijom kod gotovine, lanac avansa sa zatvaranjem, predračun sa referencom. Vi šaljete poslovni zahtev, BokaPOS sastavlja fiskalne dokumente.
- Šalje račun kupcu e-poštom sa platforme, ako je uključen modul E-mail.
- Ne izmišlja: račun postoji tek kada V-PFR vrati potpisan odgovor i BokaPOS ga trajno sačuva. Nema lažnog uspeha, nema tihog ponavljanja.
Brzi start: prvi račun u sandboxu
01
Zatražite sandbox pristup
Javite se na office@bokagroup.rs ili preko kontakt stranice. BokaPOS otvara organizaciju, dodeljuje sandbox bezbednosni element i izdaje client id (
boka-sbx-...) i tajnu. Tajna se prikazuje jednom; sačuvajte je u tajnama servera, nikad u kodu ili pregledaču. Sandbox je besplatan.02
Uzmite token
OAuth 2.0 client credentials na
https://auth.bokapos.rs/realms/boka/protocol/openid-connect/token. Token važi 300 sekundi; keširajte ga i obnovite pre isteka.03
Proverite pristup
GET /v1/runtimevraća vašu organizaciju, client id i da li je fiskalni adapter spreman.04
Pronađite obveznika i prodajno mesto
GET /v1/taxpayers, paGET /v1/taxpayers/{taxpayerId}/business-premises. Ta dva identifikatora idu u svaki fiskalni zahtev; sačuvajte ih u konfiguraciji.05
Pročitajte poreske oznake
GET /v1/tax-ratessa oba identifikatora. Oznake iz odgovora su jedine koje račun sme da nosi. Sandbox i produkcija imaju različit skup, pa ih nikad ne ugrađujte u kod.06
Izdajte račun
POST /v1/fiscal-documentssaIdempotency-Keyzaglavljem. Odgovor 201 safiscalized: trueje fiskalni račun; sve ostalo nije.07
Preuzmite PDF i link
Iz odgovora uzmite
pfr.verificationUrlireceipt.pdfA4Urli sačuvajteiddokumenta uz porudžbinu.
1. Token
curl -X POST "https://auth.bokapos.rs/realms/boka/protocol/openid-connect/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials" \
-d "client_id=$BOKAPOS_CLIENT_ID" \
-d "client_secret=$BOKAPOS_CLIENT_SECRET"{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6...",
"expires_in": 300,
"token_type": "Bearer",
"scope": "tenant:read operations:read catalogue:read catalogue:write fiscal:read fiscal:write refund:write proforma-training:write advance:write advance:close configuration:read security-elements:read"
}Svaki sledeći poziv nosi Authorization: Bearer <access_token>. U primerima ispod token je u promenljivoj okruženja BOKAPOS_TOKEN.
2. Provera pristupa
curl -X GET "https://api.bokapos.rs/v1/runtime" \
-H "Authorization: Bearer $BOKAPOS_TOKEN"{
"manufacturer": "BOKA GROUP DOO",
"productName": "BokaPOS",
"esirNumber": "",
"softwareVersion": "1.0.0",
"buildCommit": "1f0d454e8b2c9a7d6f5e4c3b2a1908f7e6d5c4b3",
"instanceId": "api-bokapos-rs",
"organizationId": "7c1e9a4b-2d3f-4e5a-b6c7-8d9e0f1a2b3c",
"clientId": "boka-sbx-k7m2p9x4q1wz",
"fiscalEndpointsEnabled": true,
"pfrAdapter": "configured"
}3. Obveznik i prodajno mesto
curl -X GET "https://api.bokapos.rs/v1/taxpayers" \
-H "Authorization: Bearer $BOKAPOS_TOKEN"curl -X GET "https://api.bokapos.rs/v1/taxpayers/3f9c2a8e-6b1d-4e5a-9c47-1d2b8e6f0a11/business-premises" \
-H "Authorization: Bearer $BOKAPOS_TOKEN"{
"items": [
{
"id": "b7d4e2c1-9a3f-4c8e-8f21-6e5a0c9d3b22",
"taxpayerId": "3f9c2a8e-6b1d-4e5a-9c47-1d2b8e6f0a11",
"puIdentifier": "1234567",
"name": "Web shop",
"commerceMode": "distance",
"environment": "sandbox",
"paymentMode": "all",
"status": "active",
"createdAt": "2026-08-21T09:05:00.000Z",
"updatedAt": "2026-08-21T09:05:00.000Z"
}
]
}4. Poreske oznake
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"{
"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"
}
]
}Sandbox Poreske uprave nosi generički test skup oznaka. U produkciji dobijate zvanične srpske oznake (na primer Ђ 20%, Е 10%, Г 0%, А bez PDV-a). Nikad ne ugrađujte oznake u kod.
5. Prvi račun
curl -X POST "https://api.bokapos.rs/v1/fiscal-documents" \
-H "Authorization: Bearer $BOKAPOS_TOKEN" \
-H "Idempotency-Key: order-4127-sale-1" \
-H "Content-Type: application/json" \
-d '{
"taxpayerId": "3f9c2a8e-6b1d-4e5a-9c47-1d2b8e6f0a11",
"businessPremiseId": "b7d4e2c1-9a3f-4c8e-8f21-6e5a0c9d3b22",
"clientReference": "ORDER-4127",
"invoiceType": "NORMAL",
"transactionType": "SALE",
"cashier": {
"id": "web-shop",
"displayName": "Web shop"
},
"items": [
{
"name": "Bluetooth slušalice",
"unitOfMeasure": "kom",
"quantity": 1,
"unitPrice": 8990,
"gtin": "8606012345678",
"taxLabels": [
"F"
]
}
],
"payments": [
{
"type": "CARD",
"amount": 8990
}
],
"metadata": {
"orderId": "4127",
"channel": "web"
}
}'{
"id": "9f8e7d6c-5b4a-4321-8765-0fedcba98761",
"taxpayerId": "3f9c2a8e-6b1d-4e5a-9c47-1d2b8e6f0a11",
"businessPremiseId": "b7d4e2c1-9a3f-4c8e-8f21-6e5a0c9d3b22",
"idempotencyKey": "order-4127-sale-1",
"clientReference": "ORDER-4127",
"invoiceType": "NORMAL",
"transactionType": "SALE",
"cashierId": "web-shop",
"buyerId": null,
"buyerDetails": null,
"status": "FISCALIZED",
"fiscalized": true,
"failureCode": null,
"retryable": false,
"pfr": {
"invoiceNumber": "JWX4K9PL-JWX4K9PL-1042",
"sdcTime": "2026-09-01T10:15:32.483+02:00",
"requestedBy": "JWX4K9PL",
"signedBy": "JWX4K9PL",
"transactionTypeCounter": 897,
"totalCounter": 1042,
"invoiceCounterExtension": "ПП",
"totalAmount": 8990,
"totalTax": 890.9009,
"verificationUrl": "https://sandbox.suf.purs.gov.rs/v/?vl=A0pXWDRLOVBMSldYNEs5UEwSBAAAEAQAAKCLPAAAAAAAAAABnAqJa1EAAAA...",
"journal": "============ ФИСКАЛНИ РАЧУН ============\n115711881\nBOKA GROUP DOO\nBokaPOS sandbox\nРоза Луксембург 16\nБеоград-Раковица\nКасир: web-shop\nЕСИР број: 1656/1.0.0\n-------------ПРОМЕТ ПРОДАЈА-------------\nАртикли\n========================================\nНазив Цена Кол. Укупно\nBluetooth slušalice/kom (F)\n 8.990,00 1 8.990,00\n----------------------------------------\nУкупан износ: 8.990,00\nПлатна картица: 8.990,00\n========================================\nОзнака Име Стопа Порез\nF ECAL 11,00% 890,90\n----------------------------------------\nУкупан износ пореза: 890,90\n========================================\nПФР време: 01.09.2026. 10:15:32\nПФР број рачуна: JWX4K9PL-JWX4K9PL-1042\nБројач рачуна: 897/1042ПП\n========================================\n======== КРАЈ ФИСКАЛНОГ РАЧУНА ========="
},
"receipt": {
"textUrl": "/v1/fiscal-documents/9f8e7d6c-5b4a-4321-8765-0fedcba98761/representations/official-text",
"jsonUrl": "/v1/fiscal-documents/9f8e7d6c-5b4a-4321-8765-0fedcba98761/representations/canonical-json",
"pdfA4Url": "/v1/fiscal-documents/9f8e7d6c-5b4a-4321-8765-0fedcba98761/representations/pdf-a4",
"pdf80mmUrl": "/v1/fiscal-documents/9f8e7d6c-5b4a-4321-8765-0fedcba98761/representations/pdf-80mm",
"pdf58mmUrl": "/v1/fiscal-documents/9f8e7d6c-5b4a-4321-8765-0fedcba98761/representations/pdf-58mm",
"previewImageUrl": "/v1/fiscal-documents/9f8e7d6c-5b4a-4321-8765-0fedcba98761/representations/preview-png",
"qrImageUrl": "/v1/fiscal-documents/9f8e7d6c-5b4a-4321-8765-0fedcba98761/representations/qr-svg",
"verificationUrl": "https://sandbox.suf.purs.gov.rs/v/?vl=A0pXWDRLOVBMSldYNEs5UEwSBAAAEAQAAKCLPAAAAAAAAAABnAqJa1EAAAA...",
"preferredPaperFormat": "a4"
},
"createdAt": "2026-09-01T08:15:31.902Z",
"updatedAt": "2026-09-01T08:15:32.611Z"
}6. PDF računa
curl -X GET "https://api.bokapos.rs/v1/fiscal-documents/9f8e7d6c-5b4a-4321-8765-0fedcba98761/representations/pdf-a4" \
-H "Authorization: Bearer $BOKAPOS_TOKEN" \
--output racun-ORDER-4127.pdfIsti dokument ima sedam prikaza (tekst, JSON, QR, PDF za tri formata papira, PNG). Pogledajte Prikazi i dostava računa.
Šta dalje
Račun za promet
Sva polja zahteva, popusti, kupac (B2B), više načina plaćanja, kopija računa.
Refundacija
Potpuna i delimična, po liniji izvornog računa, sa kopijom kod gotovine.
Avans
Uplate pre isporuke, storno pogrešnog avansa, zatvaranje konačnim računom.
Predračun i obuka
Ponuda bez poreskog efekta i test računi, sa pravilima referenci.
Dnevnik i izveštaji
Pretraga, izvoz, izveštaj o prometu, stanje operacije, sertifikati, licenca.
Prelazak u produkciju
Sertifikat, licenca, produkcioni kredencijal i kontrolna lista.
Šta se radi u portalu, a ne kroz API
API kredencijal ima fiksan skup ovlašćenja: fiskalizacija, katalog, čitanje obveznika, prodajnih mesta, sertifikata i licence. Sledeće radnje su namerno izvan API-ja i rade se u portalu cloud.bokapos.rs (vlasnik ili administrator organizacije) ili ih obavlja BokaPOS administracija:
- kreiranje obveznika i prodajnih mesta (PIB i identifikator poslovnog prostora su nepromenljivi),
- otpremanje i aktivacija produkcionog bezbednosnog elementa (sertifikata),
- izdavanje i opoziv API kredencijala,
- brendiranje računa (logo, kontakt, zahvalnica) i podešavanja dostave e-poštom,
- korisnici i uloge, dnevnik aktivnosti, pretplata i fakture.