Pređi na sadržaj

Referenca

Fiskalni dokumenti

Sinhrono izdavanje računa za promet, kopije, prikazi računa, elektronski dnevnik i izveštaj o prometu.

8 operacija

Izdaj račun za promet

post/v1/fiscal-documents

Scope fiscal:writeZahteva Idempotency-Key

Glavni poziv. Šaljete stavke, plaćanja, kasira i po potrebi kupca; BokaPOS potpiše zahtev bezbednosnim elementom prodajnog mesta, pošalje ga V-PFR-u i vraća 201 tek kada je potpisani odgovor trajno sačuvan. Refundacije, avansi, predračun i obuka imaju svoje tokove i ovde se odbijaju.

Beleške iz ugovora (OpenAPI, engleski)

Accepts a business-level command and succeeds only after a signed V-PFR result has been durably recorded. A 503 response is not a fiscal receipt and may be retried with the same Idempotency-Key. Refund commands are rejected here and must use a server-managed workflow. Advance, Proforma, and Training chains must use their dedicated workflow APIs. An optional unitPriceBeforeDiscount is a Boka-local immutable display/audit fact; unitPrice is always the final reduced gross price sent to V-PFR. No discount field is invented in the supplier request. Repeating the identical command under the same Idempotency-Key after a 201 answers 200 with the stored document and never fiscalizes a second time; only the first 201 with fiscalized=true is the issuing of a receipt.

Telo zahteva application/json

createFiscalDocument: Telo zahteva
PoljeTipOpis
taxpayerIdobaveznouuid
businessPremiseIdobaveznouuid
clientReferenceobaveznostringCaller-owned order, invoice, or transaction reference.
invoiceTypeobaveznoInvoiceType

NORMALPROFORMACOPYTRAININGADVANCEVrednosti

transactionTypeobaveznoTransactionType

SALEREFUNDVrednosti

cashierobaveznoCashier
idobaveznostring
displayNameopcionostring
buyeropcionoBuyer
idopcionostringOfficial prefix and value, for example 10:123456789.
optionalFieldopcionostringOfficial buyer-cost-center prefix and value where applicable.
referenceopcionoReferenceTarget

Jedna od varijanti: BokaDocumentReference | ExternalFiscalReference

BokaDocumentReference
sourceobaveznoconst "BOKA"
fiscalDocumentIdobaveznouuid
ExternalFiscalReference
sourceobaveznoconst "EXTERNAL"
pfrNumberobaveznostring
pfrTimeobaveznodate-time
invoiceTypeobaveznoInvoiceType

NORMALPROFORMACOPYTRAININGADVANCEVrednosti

transactionTypeobaveznoTransactionType

SALEREFUNDVrednosti

transactionOccurredAtopcionodate-timeAccepted only for an Advance Sale containing a wire-transfer payment, where the official earlier-payment ESIR-time rule applies; it never overrides PFR time.
itemsobaveznoarray<LineItem>

min 1 items

catalogProductIdopcionouuidOptional; arbitrary inline items are permitted.
nameobaveznostring

min 1max 2048

unitOfMeasureopcionostringRequired on every item except the codebook advance literals (10: Аванс (Ђ) and siblings), which are prescribed verbatim without a unit. The API refuses any other item without one (422, Items.UnitOfMeasure) and composes it into the signed item name as name/unit.

min 1max 50

quantityobaveznonumberV-PFR Decimal(14,3).

>= 0.001<= 99999999999.999step 0.001

unitPriceobaveznonumberFinal gross unit price sent to V-PFR as Decimal(28,4). Boka applies the mandated fiscal rounding rules.

>= 0step 0.01

unitPriceBeforeDiscountopciononumberOptional Boka-local immutable gross unit price before discount. When present it must be greater than unitPrice; it is displayed outside the exact PFR journal and is never sent as a supplier field.

>= 0step 0.0001

gtinopcionostring

min 8max 14

taxLabelsobaveznoarray<string>

min 1 itemsunique

paymentsobaveznoarray<Payment>

min 1 items

typeobaveznoPaymentType

OTHERCASHCARDCHECKWIRE_TRANSFERVOUCHERINSTANT_PAYMENTVrednosti

amountobaveznonumberAt most two decimals (the V-PFR rejects more with validation code 2804); the field type on the wire is Decimal(28,4).

>= 0step 0.01

commercialFooteropcionostringNon-fiscal text rendered only in the permitted area outside the fiscal boundary.
metadataopcionoobjectNon-fiscal caller metadata; never sent as a substitute for a mandated field.

Primer

POST /v1/fiscal-documents
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"
  }
}'

Odgovori

createFiscalDocument: Odgovori
200 OKIdempotent replay of the already fiscalized document under the same Idempotency-Key; no new receipt was issuedFiscalDocument
201 CreatedFiscalized documentFiscalDocument
409 ConflictThe key was already used with different canonical contentIdempotencyConflict
422 Unprocessable ContentThe command violates a Boka or fiscal ruleErrorCode
503 Service UnavailableNo fiscal receipt was issued because V-PFR was unavailable or its outcome requires reconciliationFiscalDocument
201 Created
{
  "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"
}
409 Conflict
{
  "code": "IDEMPOTENCY_KEY_REUSED_WITH_DIFFERENT_REQUEST",
  "operationId": "9f8e7d6c-5b4a-4321-8765-0fedcba98761"
}
422 Unprocessable Content · application/problem+json
{
  "type": "https://tools.ietf.org/html/rfc9110#section-15.5.21",
  "title": "One or more validation errors occurred.",
  "status": 422,
  "errors": {
    "totals": [
      "The item and payment totals must match after the mandated two-decimal currency rounding."
    ]
  }
}
503 Service Unavailable
{
  "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": "NOT_FISCALIZED",
  "fiscalized": false,
  "failureCode": "PFR_SUBMISSION_FAULT",
  "retryable": true,
  "pfr": null,
  "receipt": null,
  "createdAt": "2026-09-01T08:15:31.902Z",
  "updatedAt": "2026-09-01T08:15:32.611Z"
}

Primeri

buyer

POST /v1/fiscal-documents
curl -X POST "https://api.bokapos.rs/v1/fiscal-documents" \
  -H "Authorization: Bearer $BOKAPOS_TOKEN" \
  -H "Idempotency-Key: order-4128-sale-1" \
  -H "Content-Type: application/json" \
  -d '{
  "taxpayerId": "3f9c2a8e-6b1d-4e5a-9c47-1d2b8e6f0a11",
  "businessPremiseId": "b7d4e2c1-9a3f-4c8e-8f21-6e5a0c9d3b22",
  "clientReference": "ORDER-4128",
  "invoiceType": "NORMAL",
  "transactionType": "SALE",
  "cashier": {
    "id": "web-shop"
  },
  "buyer": {
    "id": "10:106952811"
  },
  "items": [
    {
      "name": "Godišnja licenca",
      "unitOfMeasure": "kom",
      "quantity": 2,
      "unitPrice": 12000,
      "taxLabels": [
        "F"
      ]
    },
    {
      "name": "Instalacija",
      "unitOfMeasure": "h",
      "quantity": 1.5,
      "unitPrice": 4000,
      "unitPriceBeforeDiscount": 5000,
      "taxLabels": [
        "F"
      ]
    }
  ],
  "payments": [
    {
      "type": "WIRE_TRANSFER",
      "amount": 20000
    },
    {
      "type": "CARD",
      "amount": 10000
    }
  ],
  "commercialFooter": "Hvala na kupovini. Reklamacije: podrska@primer.rs"
}'
201 Created
{
  "id": "8e7d6c5b-4a39-4210-8765-fedcba987650",
  "taxpayerId": "3f9c2a8e-6b1d-4e5a-9c47-1d2b8e6f0a11",
  "businessPremiseId": "b7d4e2c1-9a3f-4c8e-8f21-6e5a0c9d3b22",
  "idempotencyKey": "order-4128-sale-1",
  "clientReference": "ORDER-4128",
  "invoiceType": "NORMAL",
  "transactionType": "SALE",
  "cashierId": "web-shop",
  "buyerId": "10:106952811",
  "buyerDetails": {
    "legalName": "PRIMER DOO BEOGRAD",
    "taxIdentifier": "106952811",
    "registrationNumber": "20712345",
    "address": "Bulevar kralja Aleksandra 1",
    "city": "Beograd",
    "source": "nbs-jrr",
    "resolvedAt": "2026-09-01T08:20:11.004Z"
  },
  "status": "FISCALIZED",
  "fiscalized": true,
  "failureCode": null,
  "retryable": false,
  "pfr": {
    "invoiceNumber": "JWX4K9PL-JWX4K9PL-1043",
    "sdcTime": "2026-09-01T10:15:32.483+02:00",
    "requestedBy": "JWX4K9PL",
    "signedBy": "JWX4K9PL",
    "transactionTypeCounter": 898,
    "totalCounter": 1043,
    "invoiceCounterExtension": "ПП",
    "totalAmount": 30000,
    "totalTax": 2972.973,
    "verificationUrl": "https://sandbox.suf.purs.gov.rs/v/?vl=A0pXWDRLOVBMSldYNEs5UEwSBAAAEAQAAKCLPAAAAAAAAAABnAqJa1EAAAA...",
    "journal": "============ ФИСКАЛНИ РАЧУН ============\n...\nПФР број рачуна:      JWX4K9PL-JWX4K9PL-1043\nБројач рачуна:                898/1043ПП\n========================================\n======== КРАЈ ФИСКАЛНОГ РАЧУНА ========="
  },
  "receipt": {
    "textUrl": "/v1/fiscal-documents/8e7d6c5b-4a39-4210-8765-fedcba987650/representations/official-text",
    "jsonUrl": "/v1/fiscal-documents/8e7d6c5b-4a39-4210-8765-fedcba987650/representations/canonical-json",
    "pdfA4Url": "/v1/fiscal-documents/8e7d6c5b-4a39-4210-8765-fedcba987650/representations/pdf-a4",
    "pdf80mmUrl": "/v1/fiscal-documents/8e7d6c5b-4a39-4210-8765-fedcba987650/representations/pdf-80mm",
    "pdf58mmUrl": "/v1/fiscal-documents/8e7d6c5b-4a39-4210-8765-fedcba987650/representations/pdf-58mm",
    "previewImageUrl": "/v1/fiscal-documents/8e7d6c5b-4a39-4210-8765-fedcba987650/representations/preview-png",
    "qrImageUrl": "/v1/fiscal-documents/8e7d6c5b-4a39-4210-8765-fedcba987650/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"
}
Odgovor: FiscalDocument

Opisi polja su preuzeti iz OpenAPI ugovora i na engleskom su; nazivi polja i vrednosti su isti u oba jezika.

createFiscalDocument: Odgovor
PoljeTipOpis
idobaveznouuid
taxpayerIdobaveznouuid
businessPremiseIdobaveznouuid
idempotencyKeyobaveznostring
clientReferenceobaveznostring
invoiceTypeobaveznoInvoiceType

NORMALPROFORMACOPYTRAININGADVANCEVrednosti

transactionTypeobaveznoTransactionType

SALEREFUNDVrednosti

cashierIdobaveznostring
buyerIdopcionostring| null (može biti null)
buyerDetailsopcionoFiscalBuyerDetails| null (može biti null)The buyer's company-registry facts stored with the document at reservation and printed under the buyer identification. Null when the buyer is not a domestic company (prefixes 10, 12, 14 with a valid PIB) or the register could not answer at issuance.
legalNameobaveznostring

max 350

taxIdentifierobaveznostring

pattern ^[0-9]{9}$

registrationNumberopcionostring| null (može biti null)

pattern ^[0-9]{8}$

addressopcionostring| null (može biti null)

max 300

cityopcionostring| null (može biti null)

max 100

sourceobaveznostring

nbs-jrrVrednosti

resolvedAtobaveznodate-time
statusobaveznoFiscalDocumentStatus

RECEIVEDVALIDATEDSUBMITTINGFISCALIZEDREJECTEDNOT_FISCALIZEDOUTCOME_UNKNOWNRECONCILINGVrednosti

fiscalizedobaveznoboolean
failureCodeopcionostring| null (može biti null)
pfrRejectionopcionoobject| null (može biti null)Present only on a single-document read of a REJECTED operation. The V-PFR's own validation result, bounded to the property path of the caller's request and the supplier's numeric codes (2310 invalid tax label; 2800 to 2808 required, length, range, value, format and list-size validation). Lists never carry it.
itemsobaveznoarray<object>

max 10 items

propertyobaveznostring

max 120

codesobaveznoarray<string>

max 5 items

retryableobaveznoboolean
pfropcionoPfrResult| null (može biti null)
invoiceNumberobaveznostring
sdcTimeobaveznodate-time
requestedByobaveznostring
signedByobaveznostring
transactionTypeCounteropcionointeger| null (može biti null)V-PFR transaction-type counter (the left half of the printed counter). Null when the stored receipt does not carry it; the printed counter is always in the journal text.
totalCounteropcionointeger| null (može biti null)V-PFR total counter (the right half of the printed counter and the last segment of invoiceNumber). Null under the same condition as transactionTypeCounter.
invoiceCounterExtensionopcionostring| null (može biti null)Official Cyrillic invoice/transaction type pair printed after the counter (ПП, ПР, АП, АР, КП, КР, ОП, ОР, РП, РР). Null under the same condition as transactionTypeCounter.
totalAmountobaveznonumber
totalTaxopciononumber| null (može biti null)Sum of the V-PFR signed tax amounts of the document (the printed "Укупан износ пореза" before its two-decimal display rounding). Null under the same condition as transactionTypeCounter.
verificationUrlobaveznouri
journalobaveznostring
receiptopcionoReceiptRepresentations| null (može biti null)
textUrlobaveznouri-reference
jsonUrlobaveznouri-reference
pdfA4Urlobaveznouri-reference
pdf80mmUrlobaveznouri-reference
pdf58mmUrlobaveznouri-reference
previewImageUrlobaveznouri-reference
qrImageUrlobaveznouri-reference
verificationUrlobaveznouri
preferredPaperFormatobaveznostringImmutable preferred print/PDF format captured when this fiscal operation was reserved.

80mm58mma4Vrednosti

referenceopcionoResolvedReference
fiscalDocumentIdopcionouuid
pfrNumberobaveznostring
pfrTimeobaveznodate-time
createdAtobaveznodate-time
updatedAtobaveznodate-time

Pretraži dnevnik

get/v1/fiscal-documents

Scope fiscal:read

Elektronski dnevnik organizacije: svaki pokušaj izdavanja, uključujući odbijene i one sa nepoznatim ishodom. Filtrira se po obvezniku, prodajnom mestu, statusu, vrsti, vremenu, referenci, PFR broju, kasiru i kupcu; stranice se nižu preko cursor-a.

Beleške iz ugovora (OpenAPI, engleski)

Returns durable fiscal-operation state ordered by createdAt and id, both descending. createdFrom and pfrFrom are inclusive; createdTo and pfrTo are exclusive. The opaque cursor continues the same ordering. A journal entry whose fiscalized value is false is not a fiscal receipt. Scoped to the caller's environment: a machine credential never sees documents of the other environment, and fetching one by id is 404.

Parametri

listFiscalDocuments: Parametri
PoljeGdeTipOpis
taxpayerIdopcionoqueryuuid
businessPremiseIdopcionoqueryuuid
fiscalDocumentIdopcionoqueryuuid
statusopcionoqueryFiscalDocumentStatus

RECEIVEDVALIDATEDSUBMITTINGFISCALIZEDREJECTEDNOT_FISCALIZEDOUTCOME_UNKNOWNRECONCILINGVrednosti

invoiceTypeopcionoqueryInvoiceType

NORMALPROFORMACOPYTRAININGADVANCEVrednosti

transactionTypeopcionoqueryTransactionType

SALEREFUNDVrednosti

createdFromopcionoquerydate-timeInclusive lower bound for durable operation creation time. Any RFC 3339 offset is accepted (Z, +00:00, +02:00) and compared as an instant.
createdToopcionoquerydate-timeExclusive upper bound for durable operation creation time. Any RFC 3339 offset is accepted and compared as an instant.
pfrFromopcionoquerydate-timeInclusive lower bound for authoritative PFR signing time; excludes entries with no PFR receipt. Any RFC 3339 offset is accepted and compared as an instant.
pfrToopcionoquerydate-timeExclusive upper bound for authoritative PFR signing time; excludes entries with no PFR receipt. Any RFC 3339 offset is accepted and compared as an instant.
idempotencyKeyopcionoquerystring

max 200

clientReferenceopcionoquerystring

max 200

pfrNumberopcionoquerystring

max 500

cashierIdopcionoquerystring

max 500

buyerIdopcionoquerystring

max 500

searchopcionoquerystringCase-insensitive contains search across safe identifiers only; raw PFR payload, journal, metadata, and secrets are excluded.

max 200

cursoropcionoquerystringOpaque keyset cursor returned by the preceding journal page.

max 200

pageSizeopcionoqueryinteger

>= 1<= 200default 50

Primer

GET /v1/fiscal-documents
curl -X GET "https://api.bokapos.rs/v1/fiscal-documents?businessPremiseId=b7d4e2c1-9a3f-4c8e-8f21-6e5a0c9d3b22&status=FISCALIZED&createdFrom=2026-09-01T00%3A00%3A00Z&pageSize=50" \
  -H "Authorization: Bearer $BOKAPOS_TOKEN"

Odgovori

listFiscalDocuments: Odgovori
200 OKPage of fiscal documentsFiscalDocumentPage
400 Bad RequestThe command violates a Boka or fiscal ruleErrorCode
422 Unprocessable ContentThe command violates a Boka or fiscal ruleErrorCode
200 OK
{
  "items": [
    {
      "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"
    }
  ],
  "nextCursor": "eyJjcmVhdGVkQXQiOiIyMDI2LTA5LTAxVDA4OjE1OjMyLjQ4M1oiLCJpZCI6IjlmOGU3ZDZjIn0"
}

Pošaljite `nextCursor` kao `cursor` za sledeću stranicu; `null` znači kraj.

Odgovor: FiscalDocumentPage

Opisi polja su preuzeti iz OpenAPI ugovora i na engleskom su; nazivi polja i vrednosti su isti u oba jezika.

listFiscalDocuments: Odgovor
PoljeTipOpis
itemsobaveznoarray<FiscalDocument>
idobaveznouuid
taxpayerIdobaveznouuid
businessPremiseIdobaveznouuid
idempotencyKeyobaveznostring
clientReferenceobaveznostring
invoiceTypeobaveznoInvoiceType

NORMALPROFORMACOPYTRAININGADVANCEVrednosti

transactionTypeobaveznoTransactionType

SALEREFUNDVrednosti

cashierIdobaveznostring
buyerIdopcionostring| null (može biti null)
buyerDetailsopcionoFiscalBuyerDetails| null (može biti null)The buyer's company-registry facts stored with the document at reservation and printed under the buyer identification. Null when the buyer is not a domestic company (prefixes 10, 12, 14 with a valid PIB) or the register could not answer at issuance.
legalNameobaveznostring

max 350

taxIdentifierobaveznostring

pattern ^[0-9]{9}$

registrationNumberopcionostring| null (može biti null)

pattern ^[0-9]{8}$

addressopcionostring| null (može biti null)

max 300

cityopcionostring| null (može biti null)

max 100

sourceobaveznostring

nbs-jrrVrednosti

resolvedAtobaveznodate-time
statusobaveznoFiscalDocumentStatus

RECEIVEDVALIDATEDSUBMITTINGFISCALIZEDREJECTEDNOT_FISCALIZEDOUTCOME_UNKNOWNRECONCILINGVrednosti

fiscalizedobaveznoboolean
failureCodeopcionostring| null (može biti null)
pfrRejectionopcionoobject| null (može biti null)Present only on a single-document read of a REJECTED operation. The V-PFR's own validation result, bounded to the property path of the caller's request and the supplier's numeric codes (2310 invalid tax label; 2800 to 2808 required, length, range, value, format and list-size validation). Lists never carry it.
itemsobaveznoarray<object>

max 10 items

propertyobaveznostring

max 120

codesobaveznoarray<string>

max 5 items

retryableobaveznoboolean
pfropcionoPfrResult| null (može biti null)
invoiceNumberobaveznostring
sdcTimeobaveznodate-time
requestedByobaveznostring
signedByobaveznostring
transactionTypeCounteropcionointeger| null (može biti null)V-PFR transaction-type counter (the left half of the printed counter). Null when the stored receipt does not carry it; the printed counter is always in the journal text.
totalCounteropcionointeger| null (može biti null)V-PFR total counter (the right half of the printed counter and the last segment of invoiceNumber). Null under the same condition as transactionTypeCounter.
invoiceCounterExtensionopcionostring| null (može biti null)Official Cyrillic invoice/transaction type pair printed after the counter (ПП, ПР, АП, АР, КП, КР, ОП, ОР, РП, РР). Null under the same condition as transactionTypeCounter.
totalAmountobaveznonumber
totalTaxopciononumber| null (može biti null)Sum of the V-PFR signed tax amounts of the document (the printed "Укупан износ пореза" before its two-decimal display rounding). Null under the same condition as transactionTypeCounter.
verificationUrlobaveznouri
journalobaveznostring
receiptopcionoReceiptRepresentations| null (može biti null)
textUrlobaveznouri-reference
jsonUrlobaveznouri-reference
pdfA4Urlobaveznouri-reference
pdf80mmUrlobaveznouri-reference
pdf58mmUrlobaveznouri-reference
previewImageUrlobaveznouri-reference
qrImageUrlobaveznouri-reference
verificationUrlobaveznouri
preferredPaperFormatobaveznostringImmutable preferred print/PDF format captured when this fiscal operation was reserved.

80mm58mma4Vrednosti

referenceopcionoResolvedReference
fiscalDocumentIdopcionouuid
pfrNumberobaveznostring
pfrTimeobaveznodate-time
createdAtobaveznodate-time
updatedAtobaveznodate-time
nextCursorobaveznostring| null (može biti null)

Izvezi dnevnik (CSV)

get/v1/fiscal-documents/export

Scope fiscal:read

Isti filteri kao pretraga, rezultat je deterministički CSV do 10.000 redova bez sirovih PFR podataka. Ako se poklopi više redova, zahtev pada u celini, pa suzite period.

Beleške iz ugovora (OpenAPI, engleski)

Applies the same tenant-scoped filters and descending createdAt/id ordering as the electronic journal. The export contains at most 10,000 safe projection rows and never includes the raw fiscal command, caller metadata, complete PFR response, official journal text, verification URL, signature data, or secret material. Text cells that could be interpreted as spreadsheet formulas are neutralized. If more than 10,000 rows match, the request fails without returning a partial file.

Parametri

exportFiscalDocuments: Parametri
PoljeGdeTipOpis
taxpayerIdopcionoqueryuuid
businessPremiseIdopcionoqueryuuid
fiscalDocumentIdopcionoqueryuuid
statusopcionoqueryFiscalDocumentStatus

RECEIVEDVALIDATEDSUBMITTINGFISCALIZEDREJECTEDNOT_FISCALIZEDOUTCOME_UNKNOWNRECONCILINGVrednosti

invoiceTypeopcionoqueryInvoiceType

NORMALPROFORMACOPYTRAININGADVANCEVrednosti

transactionTypeopcionoqueryTransactionType

SALEREFUNDVrednosti

createdFromopcionoquerydate-timeInclusive lower bound for durable operation creation time. Any RFC 3339 offset is accepted (Z, +00:00, +02:00) and compared as an instant.
createdToopcionoquerydate-timeExclusive upper bound for durable operation creation time. Any RFC 3339 offset is accepted and compared as an instant.
pfrFromopcionoquerydate-timeInclusive lower bound for authoritative PFR signing time; excludes entries with no PFR receipt. Any RFC 3339 offset is accepted and compared as an instant.
pfrToopcionoquerydate-timeExclusive upper bound for authoritative PFR signing time; excludes entries with no PFR receipt. Any RFC 3339 offset is accepted and compared as an instant.
idempotencyKeyopcionoquerystring

max 200

clientReferenceopcionoquerystring

max 200

pfrNumberopcionoquerystring

max 500

cashierIdopcionoquerystring

max 500

buyerIdopcionoquerystring

max 500

searchopcionoquerystringCase-insensitive contains search across safe identifiers only; raw PFR payload, journal, metadata, and secrets are excluded.

max 200

Primer

GET /v1/fiscal-documents/export
curl -X GET "https://api.bokapos.rs/v1/fiscal-documents/export?businessPremiseId=b7d4e2c1-9a3f-4c8e-8f21-6e5a0c9d3b22&createdFrom=2026-09-01T00%3A00%3A00Z&createdTo=2026-10-01T00%3A00%3A00Z" \
  -H "Authorization: Bearer $BOKAPOS_TOKEN" \
  --output dnevnik-2026-09.csv

Odgovori

exportFiscalDocuments: Odgovori
200 OKComplete filtered journal CSV in stable descending order

Zaglavlja odgovora: Boka-Export-Schema-Version=boka-fiscal-journal-csv-v2, Content-Disposition

422 Unprocessable ContentInvalid filters or more than 10,000 matching rowsErrorCode
200 OK · text/csv
schemaVersion,fiscalDocumentId,taxpayerId,businessPremiseId,idempotencyKey,clientReference,invoiceType,transactionType,cashierId,buyerId,status,fiscalized,failureCode,pfrInvoiceNumber,pfrTime,createdAt,updatedAt,retryable,esirNumber,issuingSoftwareVersion,issuingReceiptRepresentationVersion,issuingBuildCommit
boka-fiscal-journal-csv-v2,9f8e7d6c-5b4a-4321-8765-0fedcba98761,3f9c2a8e-6b1d-4e5a-9c47-1d2b8e6f0a11,b7d4e2c1-9a3f-4c8e-8f21-6e5a0c9d3b22,order-4127-sale-1,ORDER-4127,NORMAL,SALE,web-shop,,FISCALIZED,true,,JWX4K9PL-JWX4K9PL-1042,2026-09-01T08:15:32.483Z,2026-09-01T08:15:31.902Z,2026-09-01T08:15:32.611Z,false,,1.0.0,boka-receipt-representation-v21,1f0d454e8b2c9a7d6f5e4c3b2a1908f7e6d5c4b3

Zaglavlje `Boka-Export-Schema-Version: boka-fiscal-journal-csv-v2` označava verziju formata.

Odgovor: ErrorCode

Opisi polja su preuzeti iz OpenAPI ugovora i na engleskom su; nazivi polja i vrednosti su isti u oba jezika.

exportFiscalDocuments: Odgovor
PoljeTipOpis
codeobaveznostring
messageopcionostring

Izdaj kopiju

post/v1/fiscal-documents/{fiscalDocumentId}/copies

Scope fiscal:writeZahteva Idempotency-Key

Zvanična Копија računa za promet ili avans, izgrađena na serveru iz sačuvanog originala i potpisana kao novi dokument. Kopija refundacije nosi liniju za potpis kupca. Predračun, obuka i kopija se ne mogu kopirati.

Beleške iz ugovora (OpenAPI, engleski)

Issues a Copy (Копија Продаја or Копија Рефундација) of a fiscalized Normal or Advance document. The copy is built on the server from the stored original: the same items, payments, buyer identification and stored buyer lines, referenced to the original's PFR number and time, with the cashier given here. It is signed by the V-PFR as a new document and prints ОВО НИЈЕ ФИСКАЛНИ РАЧУН; a Копија Рефундација prints the customer signature line. Copy, Proforma and Training documents cannot be copied (422 COPY_SOURCE_NOT_COPYABLE), nor can a document that is not fiscalized (422 COPY_SOURCE_NOT_FISCALIZED). Same idempotency and outcome rules as createFiscalDocument.

Parametri

createFiscalDocumentCopy: Parametri
PoljeGdeTipOpis
fiscalDocumentIdobaveznopathuuid

Telo zahteva application/json

createFiscalDocumentCopy: Telo zahteva
PoljeTipOpis
cashierobaveznoCashier
idobaveznostring
displayNameopcionostring
clientReferenceopcionostring| null (može biti null)Defaults to COPY- followed by the original's client reference.

max 200

Primer

POST /v1/fiscal-documents/{fiscalDocumentId}/copies
curl -X POST "https://api.bokapos.rs/v1/fiscal-documents/9f8e7d6c-5b4a-4321-8765-0fedcba98761/copies" \
  -H "Authorization: Bearer $BOKAPOS_TOKEN" \
  -H "Idempotency-Key: order-4127-copy-1" \
  -H "Content-Type: application/json" \
  -d '{
  "cashier": {
    "id": "web-shop"
  }
}'

Odgovori

createFiscalDocumentCopy: Odgovori
200 OKIdempotent replay of the already fiscalized copy under the same Idempotency-Key; no new document was issuedFiscalDocument
201 CreatedFiscalized copyFiscalDocument
404 Not FoundThe original does not exist in this organization (code FISCAL_DOCUMENT_NOT_FOUND)
409 ConflictThe key was already used with different canonical contentIdempotencyConflict
422 Unprocessable ContentThe command violates a Boka or fiscal ruleErrorCode
503 Service UnavailableNo fiscal receipt was issued because V-PFR was unavailable or its outcome requires reconciliationFiscalDocument
201 Created
{
  "id": "b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e",
  "taxpayerId": "3f9c2a8e-6b1d-4e5a-9c47-1d2b8e6f0a11",
  "businessPremiseId": "b7d4e2c1-9a3f-4c8e-8f21-6e5a0c9d3b22",
  "idempotencyKey": "order-4127-copy-1",
  "clientReference": "COPY-ORDER-4127",
  "invoiceType": "COPY",
  "transactionType": "SALE",
  "cashierId": "web-shop",
  "buyerId": null,
  "buyerDetails": null,
  "status": "FISCALIZED",
  "fiscalized": true,
  "failureCode": null,
  "retryable": false,
  "pfr": {
    "invoiceNumber": "JWX4K9PL-JWX4K9PL-1044",
    "sdcTime": "2026-09-01T10:15:32.483+02:00",
    "requestedBy": "JWX4K9PL",
    "signedBy": "JWX4K9PL",
    "transactionTypeCounter": 899,
    "totalCounter": 1044,
    "invoiceCounterExtension": "КП",
    "totalAmount": 8990,
    "totalTax": 890.9009,
    "verificationUrl": "https://sandbox.suf.purs.gov.rs/v/?vl=A0pXWDRLOVBMSldYNEs5UEwSBAAAEAQAAKCLPAAAAAAAAAABnAqJa1EAAAA...",
    "journal": "============ ФИСКАЛНИ РАЧУН ============\n...\nПФР број рачуна:      JWX4K9PL-JWX4K9PL-1044\nБројач рачуна:                899/1044КП\n========================================\n======== КРАЈ ФИСКАЛНОГ РАЧУНА ========="
  },
  "receipt": {
    "textUrl": "/v1/fiscal-documents/b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e/representations/official-text",
    "jsonUrl": "/v1/fiscal-documents/b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e/representations/canonical-json",
    "pdfA4Url": "/v1/fiscal-documents/b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e/representations/pdf-a4",
    "pdf80mmUrl": "/v1/fiscal-documents/b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e/representations/pdf-80mm",
    "pdf58mmUrl": "/v1/fiscal-documents/b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e/representations/pdf-58mm",
    "previewImageUrl": "/v1/fiscal-documents/b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e/representations/preview-png",
    "qrImageUrl": "/v1/fiscal-documents/b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e/representations/qr-svg",
    "verificationUrl": "https://sandbox.suf.purs.gov.rs/v/?vl=A0pXWDRLOVBMSldYNEs5UEwSBAAAEAQAAKCLPAAAAAAAAAABnAqJa1EAAAA...",
    "preferredPaperFormat": "a4"
  },
  "reference": {
    "fiscalDocumentId": "9f8e7d6c-5b4a-4321-8765-0fedcba98761",
    "pfrNumber": "JWX4K9PL-JWX4K9PL-1042",
    "pfrTime": "2026-09-01T10:15:32.483+02:00"
  },
  "createdAt": "2026-09-01T08:15:31.902Z",
  "updatedAt": "2026-09-01T08:15:32.611Z"
}
Odgovor: FiscalDocument

Opisi polja su preuzeti iz OpenAPI ugovora i na engleskom su; nazivi polja i vrednosti su isti u oba jezika.

createFiscalDocumentCopy: Odgovor
PoljeTipOpis
idobaveznouuid
taxpayerIdobaveznouuid
businessPremiseIdobaveznouuid
idempotencyKeyobaveznostring
clientReferenceobaveznostring
invoiceTypeobaveznoInvoiceType

NORMALPROFORMACOPYTRAININGADVANCEVrednosti

transactionTypeobaveznoTransactionType

SALEREFUNDVrednosti

cashierIdobaveznostring
buyerIdopcionostring| null (može biti null)
buyerDetailsopcionoFiscalBuyerDetails| null (može biti null)The buyer's company-registry facts stored with the document at reservation and printed under the buyer identification. Null when the buyer is not a domestic company (prefixes 10, 12, 14 with a valid PIB) or the register could not answer at issuance.
legalNameobaveznostring

max 350

taxIdentifierobaveznostring

pattern ^[0-9]{9}$

registrationNumberopcionostring| null (može biti null)

pattern ^[0-9]{8}$

addressopcionostring| null (može biti null)

max 300

cityopcionostring| null (može biti null)

max 100

sourceobaveznostring

nbs-jrrVrednosti

resolvedAtobaveznodate-time
statusobaveznoFiscalDocumentStatus

RECEIVEDVALIDATEDSUBMITTINGFISCALIZEDREJECTEDNOT_FISCALIZEDOUTCOME_UNKNOWNRECONCILINGVrednosti

fiscalizedobaveznoboolean
failureCodeopcionostring| null (može biti null)
pfrRejectionopcionoobject| null (može biti null)Present only on a single-document read of a REJECTED operation. The V-PFR's own validation result, bounded to the property path of the caller's request and the supplier's numeric codes (2310 invalid tax label; 2800 to 2808 required, length, range, value, format and list-size validation). Lists never carry it.
itemsobaveznoarray<object>

max 10 items

propertyobaveznostring

max 120

codesobaveznoarray<string>

max 5 items

retryableobaveznoboolean
pfropcionoPfrResult| null (može biti null)
invoiceNumberobaveznostring
sdcTimeobaveznodate-time
requestedByobaveznostring
signedByobaveznostring
transactionTypeCounteropcionointeger| null (može biti null)V-PFR transaction-type counter (the left half of the printed counter). Null when the stored receipt does not carry it; the printed counter is always in the journal text.
totalCounteropcionointeger| null (može biti null)V-PFR total counter (the right half of the printed counter and the last segment of invoiceNumber). Null under the same condition as transactionTypeCounter.
invoiceCounterExtensionopcionostring| null (može biti null)Official Cyrillic invoice/transaction type pair printed after the counter (ПП, ПР, АП, АР, КП, КР, ОП, ОР, РП, РР). Null under the same condition as transactionTypeCounter.
totalAmountobaveznonumber
totalTaxopciononumber| null (može biti null)Sum of the V-PFR signed tax amounts of the document (the printed "Укупан износ пореза" before its two-decimal display rounding). Null under the same condition as transactionTypeCounter.
verificationUrlobaveznouri
journalobaveznostring
receiptopcionoReceiptRepresentations| null (može biti null)
textUrlobaveznouri-reference
jsonUrlobaveznouri-reference
pdfA4Urlobaveznouri-reference
pdf80mmUrlobaveznouri-reference
pdf58mmUrlobaveznouri-reference
previewImageUrlobaveznouri-reference
qrImageUrlobaveznouri-reference
verificationUrlobaveznouri
preferredPaperFormatobaveznostringImmutable preferred print/PDF format captured when this fiscal operation was reserved.

80mm58mma4Vrednosti

referenceopcionoResolvedReference
fiscalDocumentIdopcionouuid
pfrNumberobaveznostring
pfrTimeobaveznodate-time
createdAtobaveznodate-time
updatedAtobaveznodate-time

Pročitaj dokument

get/v1/fiscal-documents/{fiscalDocumentId}

Scope fiscal:read

Stanje jednog dokumenta sa PFR podacima i linkovima ka prikazima. Odbijen dokument ovde nosi i pfrRejection sa putanjom polja i šifrom V-PFR-a, što lista nikad ne vraća.

Parametri

getFiscalDocument: Parametri
PoljeGdeTipOpis
fiscalDocumentIdobaveznopathuuid

Primer

GET /v1/fiscal-documents/{fiscalDocumentId}
curl -X GET "https://api.bokapos.rs/v1/fiscal-documents/9f8e7d6c-5b4a-4321-8765-0fedcba98761" \
  -H "Authorization: Bearer $BOKAPOS_TOKEN"

Odgovori

getFiscalDocument: Odgovori
200 OKFiscal documentFiscalDocument
404 Not FoundResource does not exist within the authenticated tenant scopeErrorCode
200 OK
{
  "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"
}

Primeri

rejected

GET /v1/fiscal-documents/{fiscalDocumentId}
curl -X GET "https://api.bokapos.rs/v1/fiscal-documents/1c2d3e4f-5a6b-4c7d-8e9f-0a1b2c3d4e5f" \
  -H "Authorization: Bearer $BOKAPOS_TOKEN"
200 OK
{
  "id": "1c2d3e4f-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
  "taxpayerId": "3f9c2a8e-6b1d-4e5a-9c47-1d2b8e6f0a11",
  "businessPremiseId": "b7d4e2c1-9a3f-4c8e-8f21-6e5a0c9d3b22",
  "idempotencyKey": "order-4129-sale-1",
  "clientReference": "ORDER-4129",
  "invoiceType": "NORMAL",
  "transactionType": "SALE",
  "cashierId": "web-shop",
  "buyerId": null,
  "buyerDetails": null,
  "status": "REJECTED",
  "fiscalized": false,
  "failureCode": "PFR_VALIDATION_REJECTED",
  "retryable": false,
  "pfr": null,
  "receipt": null,
  "createdAt": "2026-09-01T08:15:31.902Z",
  "updatedAt": "2026-09-01T08:15:32.611Z",
  "pfrRejection": {
    "items": [
      {
        "property": "items[0].unitPrice",
        "codes": [
          "2804"
        ]
      }
    ]
  }
}

Šifra 2804 (format) je ono što sandbox vraća za cenu sa više od dve decimale. Odbijen dokument nije račun; ispravite zahtev i pošaljite ga sa novim ključem.

Odgovor: FiscalDocument

Opisi polja su preuzeti iz OpenAPI ugovora i na engleskom su; nazivi polja i vrednosti su isti u oba jezika.

getFiscalDocument: Odgovor
PoljeTipOpis
idobaveznouuid
taxpayerIdobaveznouuid
businessPremiseIdobaveznouuid
idempotencyKeyobaveznostring
clientReferenceobaveznostring
invoiceTypeobaveznoInvoiceType

NORMALPROFORMACOPYTRAININGADVANCEVrednosti

transactionTypeobaveznoTransactionType

SALEREFUNDVrednosti

cashierIdobaveznostring
buyerIdopcionostring| null (može biti null)
buyerDetailsopcionoFiscalBuyerDetails| null (može biti null)The buyer's company-registry facts stored with the document at reservation and printed under the buyer identification. Null when the buyer is not a domestic company (prefixes 10, 12, 14 with a valid PIB) or the register could not answer at issuance.
legalNameobaveznostring

max 350

taxIdentifierobaveznostring

pattern ^[0-9]{9}$

registrationNumberopcionostring| null (može biti null)

pattern ^[0-9]{8}$

addressopcionostring| null (može biti null)

max 300

cityopcionostring| null (može biti null)

max 100

sourceobaveznostring

nbs-jrrVrednosti

resolvedAtobaveznodate-time
statusobaveznoFiscalDocumentStatus

RECEIVEDVALIDATEDSUBMITTINGFISCALIZEDREJECTEDNOT_FISCALIZEDOUTCOME_UNKNOWNRECONCILINGVrednosti

fiscalizedobaveznoboolean
failureCodeopcionostring| null (može biti null)
pfrRejectionopcionoobject| null (može biti null)Present only on a single-document read of a REJECTED operation. The V-PFR's own validation result, bounded to the property path of the caller's request and the supplier's numeric codes (2310 invalid tax label; 2800 to 2808 required, length, range, value, format and list-size validation). Lists never carry it.
itemsobaveznoarray<object>

max 10 items

propertyobaveznostring

max 120

codesobaveznoarray<string>

max 5 items

retryableobaveznoboolean
pfropcionoPfrResult| null (može biti null)
invoiceNumberobaveznostring
sdcTimeobaveznodate-time
requestedByobaveznostring
signedByobaveznostring
transactionTypeCounteropcionointeger| null (može biti null)V-PFR transaction-type counter (the left half of the printed counter). Null when the stored receipt does not carry it; the printed counter is always in the journal text.
totalCounteropcionointeger| null (može biti null)V-PFR total counter (the right half of the printed counter and the last segment of invoiceNumber). Null under the same condition as transactionTypeCounter.
invoiceCounterExtensionopcionostring| null (može biti null)Official Cyrillic invoice/transaction type pair printed after the counter (ПП, ПР, АП, АР, КП, КР, ОП, ОР, РП, РР). Null under the same condition as transactionTypeCounter.
totalAmountobaveznonumber
totalTaxopciononumber| null (može biti null)Sum of the V-PFR signed tax amounts of the document (the printed "Укупан износ пореза" before its two-decimal display rounding). Null under the same condition as transactionTypeCounter.
verificationUrlobaveznouri
journalobaveznostring
receiptopcionoReceiptRepresentations| null (može biti null)
textUrlobaveznouri-reference
jsonUrlobaveznouri-reference
pdfA4Urlobaveznouri-reference
pdf80mmUrlobaveznouri-reference
pdf58mmUrlobaveznouri-reference
previewImageUrlobaveznouri-reference
qrImageUrlobaveznouri-reference
verificationUrlobaveznouri
preferredPaperFormatobaveznostringImmutable preferred print/PDF format captured when this fiscal operation was reserved.

80mm58mma4Vrednosti

referenceopcionoResolvedReference
fiscalDocumentIdopcionouuid
pfrNumberobaveznostring
pfrTimeobaveznodate-time
createdAtobaveznodate-time
updatedAtobaveznodate-time

Izveštaj o prometu

get/v1/fiscal-documents/turnover-report

Scope fiscal:read

Lokalni nepromenljivi zbir fiskalizovanih računa za promet i avans po PFR vremenu, sa prodajom i refundacijom kao odvojenim pozitivnim iznosima, po načinu plaćanja i po poreskoj oznaci. Nije zamena za izveštaje na SUF portalu.

Beleške iz ugovora (OpenAPI, engleski)

Aggregates only tenant-scoped FISCALIZED Normal (Promet) and Advance (Avans) receipts whose authoritative PFR signing time is within the inclusive pfrFrom and exclusive pfrTo bounds. Sale and Refund amounts remain separate positive totals; the API does not infer a net value. Payment data comes from the hash-verified canonical request and tax bases/tax amounts come from the hash-verified complete PFR response. This is a Boka-local immutable report, not the SUF portal daily report; it does not claim SUF-only knowledge about missing or scanned receipts.

Parametri

getTurnoverReport: Parametri
PoljeGdeTipOpis
taxpayerIdobaveznoqueryuuid
businessPremiseIdobaveznoqueryuuid
pfrFromobaveznoquerydate-timeInclusive lower bound for authoritative PFR signing time. Any RFC 3339 offset is accepted (Z, +00:00, +02:00) and compared as an instant.
pfrToobaveznoquerydate-timeExclusive upper bound for authoritative PFR signing time. Any RFC 3339 offset is accepted and compared as an instant.

Primer

GET /v1/fiscal-documents/turnover-report
curl -X GET "https://api.bokapos.rs/v1/fiscal-documents/turnover-report?taxpayerId=3f9c2a8e-6b1d-4e5a-9c47-1d2b8e6f0a11&businessPremiseId=b7d4e2c1-9a3f-4c8e-8f21-6e5a0c9d3b22&pfrFrom=2026-09-01T00%3A00%3A00%2B02%3A00&pfrTo=2026-09-02T00%3A00%3A00%2B02%3A00" \
  -H "Authorization: Bearer $BOKAPOS_TOKEN"

Odgovori

getTurnoverReport: Odgovori
200 OKImmutable local turnover reportTurnoverReport
404 Not FoundResource does not exist within the authenticated tenant scopeErrorCode
409 ConflictA selected receipt failed source-integrity validation or totals exceeded the supported decimal rangeErrorCode
422 Unprocessable ContentThe command violates a Boka or fiscal ruleErrorCode
200 OK
{
  "source": "BOKA_LOCAL_IMMUTABLE_PFR",
  "periodBasis": "PFR_SDC_TIME",
  "amountConvention": "SALE_REFUND_SEPARATE",
  "taxpayerId": "3f9c2a8e-6b1d-4e5a-9c47-1d2b8e6f0a11",
  "businessPremiseId": "b7d4e2c1-9a3f-4c8e-8f21-6e5a0c9d3b22",
  "pfrFrom": "2026-08-31T22:00:00Z",
  "pfrTo": "2026-09-01T22:00:00Z",
  "documentCount": 2,
  "firstDocument": {
    "fiscalDocumentId": "9f8e7d6c-5b4a-4321-8765-0fedcba98761",
    "pfrInvoiceNumber": "JWX4K9PL-JWX4K9PL-1042",
    "pfrTime": "2026-09-01T10:15:32.483+02:00"
  },
  "lastDocument": {
    "fiscalDocumentId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
    "pfrInvoiceNumber": "JWX4K9PL-JWX4K9PL-1045",
    "pfrTime": "2026-09-01T16:40:05.120+02:00"
  },
  "paymentTotals": [
    {
      "securityElementJid": "JWX4K9PL",
      "paymentType": "CARD",
      "saleAmount": 8990,
      "refundAmount": 8990
    }
  ],
  "taxTotals": [
    {
      "invoiceType": "NORMAL",
      "categoryType": 0,
      "label": "F",
      "rate": 11,
      "categoryName": "ECAL",
      "saleTaxableAmount": 8099.0991,
      "saleTaxAmount": 890.9009,
      "saleTotalAmount": 8990,
      "refundTaxableAmount": 8099.0991,
      "refundTaxAmount": 890.9009,
      "refundTotalAmount": 8990
    }
  ]
}
Odgovor: TurnoverReport

Opisi polja su preuzeti iz OpenAPI ugovora i na engleskom su; nazivi polja i vrednosti su isti u oba jezika.

getTurnoverReport: Odgovor
PoljeTipOpis
sourceobaveznoconst "BOKA_LOCAL_IMMUTABLE_PFR"
periodBasisobaveznoconst "PFR_SDC_TIME"
amountConventionobaveznoconst "SALE_REFUND_SEPARATE"
taxpayerIdobaveznouuid
businessPremiseIdobaveznouuid
pfrFromobaveznodate-timeInclusive authoritative PFR signing-time bound.
pfrToobaveznodate-timeExclusive authoritative PFR signing-time bound.
documentCountobaveznointeger

>= 0

firstDocumentobaveznoTurnoverBoundary| null (može biti null)
fiscalDocumentIdobaveznouuid
pfrInvoiceNumberobaveznostring
pfrTimeobaveznodate-time
lastDocumentobaveznoTurnoverBoundary| null (može biti null)
fiscalDocumentIdobaveznouuid
pfrInvoiceNumberobaveznostring
pfrTimeobaveznodate-time
paymentTotalsobaveznoarray<TurnoverPaymentTotal>
securityElementJidobaveznostring
paymentTypeobaveznoPaymentType

OTHERCASHCARDCHECKWIRE_TRANSFERVOUCHERINSTANT_PAYMENTVrednosti

saleAmountobaveznonumber

>= 0

refundAmountobaveznonumber

>= 0

taxTotalsobaveznoarray<TurnoverTaxTotal>
invoiceTypeobaveznostring

NORMALADVANCEVrednosti

categoryTypeobaveznointeger

>= 0<= 2

labelobaveznostring
rateobaveznonumber

>= 0

categoryNameobaveznostring
saleTaxableAmountobaveznonumberSum of the Boka-derived taxable base per label (see ReceiptCanonicalTaxItem.taxableAmountPerLabel) over the Sale documents in the period; four decimals, as the V-PFR tax amounts it is reconciled with.

>= 0

saleTaxAmountobaveznonumberSum of the V-PFR signed tax amounts for the label over the Sale documents in the period.

>= 0

saleTotalAmountobaveznonumberGross of the receipt lines carrying the label over the Sale documents in the period (taxable base plus tax).

>= 0

refundTaxableAmountobaveznonumberAs saleTaxableAmount

>= 0

refundTaxAmountobaveznonumberAs saleTaxAmount

>= 0

refundTotalAmountobaveznonumberAs saleTotalAmount

>= 0

Izvezi izveštaj o prometu (CSV)

get/v1/fiscal-documents/turnover-report/export

Scope fiscal:read

Isti izveštaj kao JSON verzija, u normalizovanom CSV-u sa redovima SUMMARY, FIRST_DOCUMENT, LAST_DOCUMENT, PAYMENT_TOTAL i TAX_TOTAL.

Beleške iz ugovora (OpenAPI, engleski)

Reuses the exact same hash-reverified BOKA_LOCAL_IMMUTABLE_PFR report result as the JSON operation. The normalized CSV contains SUMMARY, FIRST_DOCUMENT, LAST_DOCUMENT, PAYMENT_TOTAL, and TAX_TOTAL record types. Sale and Refund remain separate positive amounts. This is not a SUF portal report and contains no official receipt journal or raw PFR payload.

Parametri

exportTurnoverReport: Parametri
PoljeGdeTipOpis
taxpayerIdobaveznoqueryuuid
businessPremiseIdobaveznoqueryuuid
pfrFromobaveznoquerydate-timeInclusive lower bound for authoritative PFR signing time. Any RFC 3339 offset is accepted (Z, +00:00, +02:00) and compared as an instant.
pfrToobaveznoquerydate-timeExclusive upper bound for authoritative PFR signing time. Any RFC 3339 offset is accepted and compared as an instant.

Primer

GET /v1/fiscal-documents/turnover-report/export
curl -X GET "https://api.bokapos.rs/v1/fiscal-documents/turnover-report/export?taxpayerId=3f9c2a8e-6b1d-4e5a-9c47-1d2b8e6f0a11&businessPremiseId=b7d4e2c1-9a3f-4c8e-8f21-6e5a0c9d3b22&pfrFrom=2026-09-01T00%3A00%3A00%2B02%3A00&pfrTo=2026-09-02T00%3A00%3A00%2B02%3A00" \
  -H "Authorization: Bearer $BOKAPOS_TOKEN" \
  --output promet-2026-09-01.csv

Odgovori

exportTurnoverReport: Odgovori
200 OKComplete normalized turnover-report CSV

Zaglavlja odgovora: Boka-Export-Schema-Version=boka-turnover-report-csv-v1, Content-Disposition

404 Not FoundResource does not exist within the authenticated tenant scopeErrorCode
409 ConflictA selected receipt failed source-integrity validation or totals exceeded the supported decimal rangeErrorCode
422 Unprocessable ContentThe command violates a Boka or fiscal ruleErrorCode
200 OK · text/csv
schemaVersion,recordType,source,periodBasis,amountConvention,taxpayerId,businessPremiseId,pfrFrom,pfrTo,documentCount,fiscalDocumentId,pfrInvoiceNumber,pfrTime,securityElementJid,paymentType,invoiceType,categoryType,taxLabel,taxRate,taxCategoryName,saleAmount,refundAmount,saleTaxableAmount,saleTaxAmount,saleTotalAmount,refundTaxableAmount,refundTaxAmount,refundTotalAmount
boka-turnover-report-csv-v1,SUMMARY,BOKA_LOCAL_IMMUTABLE_PFR,PFR_SDC_TIME,SALE_REFUND_SEPARATE,3f9c2a8e-6b1d-4e5a-9c47-1d2b8e6f0a11,b7d4e2c1-9a3f-4c8e-8f21-6e5a0c9d3b22,2026-08-31T22:00:00Z,2026-09-01T22:00:00Z,2,,,,,,,,,,,,,,,,,,
boka-turnover-report-csv-v1,FIRST_DOCUMENT,BOKA_LOCAL_IMMUTABLE_PFR,PFR_SDC_TIME,SALE_REFUND_SEPARATE,3f9c2a8e-6b1d-4e5a-9c47-1d2b8e6f0a11,b7d4e2c1-9a3f-4c8e-8f21-6e5a0c9d3b22,2026-08-31T22:00:00Z,2026-09-01T22:00:00Z,,9f8e7d6c-5b4a-4321-8765-0fedcba98761,JWX4K9PL-JWX4K9PL-1042,2026-09-01T08:15:32.483Z,,,,,,,,,,,,,,,
boka-turnover-report-csv-v1,PAYMENT_TOTAL,BOKA_LOCAL_IMMUTABLE_PFR,PFR_SDC_TIME,SALE_REFUND_SEPARATE,3f9c2a8e-6b1d-4e5a-9c47-1d2b8e6f0a11,b7d4e2c1-9a3f-4c8e-8f21-6e5a0c9d3b22,2026-08-31T22:00:00Z,2026-09-01T22:00:00Z,,,,,JWX4K9PL,CARD,,,,,,8990.00,8990.00,,,,,,
boka-turnover-report-csv-v1,TAX_TOTAL,BOKA_LOCAL_IMMUTABLE_PFR,PFR_SDC_TIME,SALE_REFUND_SEPARATE,3f9c2a8e-6b1d-4e5a-9c47-1d2b8e6f0a11,b7d4e2c1-9a3f-4c8e-8f21-6e5a0c9d3b22,2026-08-31T22:00:00Z,2026-09-01T22:00:00Z,,,,,,,NORMAL,0,F,11,ECAL,,,8099.0991,890.9009,8990.0000,8099.0991,890.9009,8990.0000
Odgovor: ErrorCode

Opisi polja su preuzeti iz OpenAPI ugovora i na engleskom su; nazivi polja i vrednosti su isti u oba jezika.

exportTurnoverReport: Odgovor
PoljeTipOpis
codeobaveznostring
messageopcionostring

Preuzmi prikaz računa

get/v1/fiscal-documents/{fiscalDocumentId}/representations/{representationFormat}

Scope fiscal:read

Sedam prikaza istog fiskalizovanog računa: zvanični tekst žurnala, kanonski JSON, QR kod (SVG), PDF u A4, 80 mm i 58 mm, i PNG pregled. Svaki se generiše iz nepromenljivog paketa i nosi ETag.

Beleške iz ugovora (OpenAPI, engleski)

Generates the selected representation only from a tenant-scoped FISCALIZED operation after rechecking the canonical request and complete original PFR response hashes. official-text is the exact stored supplier journal. canonical-json omits caller metadata and opaque encrypted/signature values. The direct PDF and PNG preview layouts keep the verification QR at 45 mm. Fixed media use only bundled local rendering resources and include no network-loaded content. No representation is generated for an unresolved, rejected, unavailable, corrupt, or non-fiscalized operation.

Parametri

getFiscalDocumentRepresentation: Parametri
PoljeGdeTipOpis
fiscalDocumentIdobaveznopathuuid
representationFormatobaveznopathstring

canonical-jsonofficial-textqr-svgpdf-a4pdf-80mmpdf-58mmpreview-pngVrednosti

Primer

GET /v1/fiscal-documents/{fiscalDocumentId}/representations/{representationFormat}
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.pdf

Odgovori

getFiscalDocumentRepresentation: Odgovori
200 OKSelected immutable receipt representationReceiptCanonicalPackage

Zaglavlja odgovora: ETag, Boka-Receipt-Representation-Version=boka-receipt-representation-v19, Boka-Receipt-Source-Sha256, Boka-Receipt-Branding-Sha256

404 Not FoundResource does not exist within the authenticated tenant scopeErrorCode
409 ConflictReceipt unavailable or stored source integrity validation failedErrorCode
200 OK · application/pdf
%PDF-1.7 ... (binarni sadržaj, A4 račun)

Primeri

text

GET /v1/fiscal-documents/{fiscalDocumentId}/representations/{representationFormat}
curl -X GET "https://api.bokapos.rs/v1/fiscal-documents/9f8e7d6c-5b4a-4321-8765-0fedcba98761/representations/official-text" \
  -H "Authorization: Bearer $BOKAPOS_TOKEN"
200 OK · text/plain
============ ФИСКАЛНИ РАЧУН ============
115711881
BOKA GROUP DOO
BokaPOS sandbox
Роза Луксембург 16
Београд-Раковица
Касир:                          web-shop
ЕСИР број:                    1656/1.0.0
-------------ПРОМЕТ ПРОДАЈА-------------
Артикли
========================================
Назив   Цена         Кол.         Укупно
Bluetooth slušalice/kom (F)
       8.990,00          1       8.990,00
----------------------------------------
Укупан износ:                   8.990,00
Платна картица:                 8.990,00
========================================
Ознака       Име      Стопа        Порез
F           ECAL   11,00%         890,90
----------------------------------------
Укупан износ пореза:              890,90
========================================
ПФР време:          01.09.2026. 10:15:32
ПФР број рачуна:      JWX4K9PL-JWX4K9PL-1042
Бројач рачуна:                 897/1042ПП
========================================
======== КРАЈ ФИСКАЛНОГ РАЧУНА =========

json

GET /v1/fiscal-documents/{fiscalDocumentId}/representations/{representationFormat}
curl -X GET "https://api.bokapos.rs/v1/fiscal-documents/9f8e7d6c-5b4a-4321-8765-0fedcba98761/representations/canonical-json" \
  -H "Authorization: Bearer $BOKAPOS_TOKEN"
200 OK
{
  "schemaVersion": "boka-receipt-representation-v21",
  "sourceSha256": "5d41402abc4b2a76b9719d911017c592e99f0d3b4a7c1e6f8b2d9a0c3e5f7a1b",
  "canonicalRequestSha256": "9b74c9897bac770ffc029102a200c5de3a4b1c6d7e8f9a0b1c2d3e4f5a6b7c8d",
  "originalPfrResponseSha256": "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae",
  "fiscalDocumentId": "9f8e7d6c-5b4a-4321-8765-0fedcba98761",
  "taxpayerId": "3f9c2a8e-6b1d-4e5a-9c47-1d2b8e6f0a11",
  "businessPremiseId": "b7d4e2c1-9a3f-4c8e-8f21-6e5a0c9d3b22",
  "clientReference": "ORDER-4127",
  "invoiceType": "NORMAL",
  "transactionType": "SALE",
  "request": {
    "cashierId": "web-shop",
    "cashierDisplayName": "Web shop",
    "buyer": null,
    "items": [
      {
        "name": "Bluetooth slušalice",
        "unitOfMeasure": "kom",
        "quantity": 1,
        "unitPrice": 8990,
        "gtin": "8606012345678",
        "taxLabels": [
          "F"
        ]
      }
    ],
    "payments": [
      {
        "type": "CARD",
        "amount": 8990
      }
    ],
    "reference": null,
    "transactionOccurredAt": null,
    "commercialFooter": null
  },
  "pfr": {
    "invoiceNumber": "JWX4K9PL-JWX4K9PL-1042",
    "sdcTime": "2026-09-01T10:15:32.483+02:00",
    "requestedBy": "JWX4K9PL",
    "signedBy": "JWX4K9PL",
    "invoiceCounter": "897/1042ПП",
    "invoiceCounterExtension": "ПП",
    "totalCounter": 1042,
    "transactionTypeCounter": 897,
    "totalAmount": 8990,
    "taxGroupRevision": 8,
    "taxItems": [
      {
        "categoryType": 0,
        "label": "F",
        "amount": 890.9009,
        "rate": 11,
        "categoryName": "ECAL",
        "taxableAmountPerLabel": 8099.0991
      }
    ],
    "businessName": "BOKA GROUP DOO",
    "tin": "115711881",
    "locationName": "BokaPOS sandbox",
    "address": "Роза Луксембург 16",
    "district": "Београд-Раковица",
    "mrc": null,
    "verificationUrl": "https://sandbox.suf.purs.gov.rs/v/?vl=A0pXWDRLOVBMSldYNEs5UEwSBAAAEAQAAKCLPAAAAAAAAAABnAqJa1EAAAA...",
    "officialJournal": "============ ФИСКАЛНИ РАЧУН ============\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======== КРАЈ ФИСКАЛНОГ РАЧУНА =========",
    "officialJournalSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    "opaqueFiscalDataStored": true
  },
  "branding": null
}
Odgovor: ReceiptCanonicalPackage

Opisi polja su preuzeti iz OpenAPI ugovora i na engleskom su; nazivi polja i vrednosti su isti u oba jezika.

getFiscalDocumentRepresentation: Odgovor
PoljeTipOpis
schemaVersionobaveznoconst "boka-receipt-representation-v19"
sourceSha256obaveznostring

pattern ^[0-9a-f]{64}$

canonicalRequestSha256obaveznostring

pattern ^[0-9a-f]{64}$

originalPfrResponseSha256obaveznostring

pattern ^[0-9a-f]{64}$

fiscalDocumentIdobaveznouuid
taxpayerIdobaveznouuid
businessPremiseIdobaveznouuid
clientReferenceobaveznostring
invoiceTypeobaveznoInvoiceType

NORMALPROFORMACOPYTRAININGADVANCEVrednosti

transactionTypeobaveznoTransactionType

SALEREFUNDVrednosti

requestobaveznoReceiptCanonicalRequest
cashierIdobaveznostring
cashierDisplayNameopcionostring| null (može biti null)
buyeropcionoBuyer| null (može biti null)
idopcionostringOfficial prefix and value, for example 10:123456789.
optionalFieldopcionostringOfficial buyer-cost-center prefix and value where applicable.
itemsobaveznoarray<LineItem>

min 1 items

catalogProductIdopcionouuidOptional; arbitrary inline items are permitted.
nameobaveznostring

min 1max 2048

unitOfMeasureopcionostringRequired on every item except the codebook advance literals (10: Аванс (Ђ) and siblings), which are prescribed verbatim without a unit. The API refuses any other item without one (422, Items.UnitOfMeasure) and composes it into the signed item name as name/unit.

min 1max 50

quantityobaveznonumberV-PFR Decimal(14,3).

>= 0.001<= 99999999999.999step 0.001

unitPriceobaveznonumberFinal gross unit price sent to V-PFR as Decimal(28,4). Boka applies the mandated fiscal rounding rules.

>= 0step 0.01

unitPriceBeforeDiscountopciononumberOptional Boka-local immutable gross unit price before discount. When present it must be greater than unitPrice; it is displayed outside the exact PFR journal and is never sent as a supplier field.

>= 0step 0.0001

gtinopcionostring

min 8max 14

taxLabelsobaveznoarray<string>

min 1 itemsunique

paymentsobaveznoarray<Payment>

min 1 items

typeobaveznoPaymentType

OTHERCASHCARDCHECKWIRE_TRANSFERVOUCHERINSTANT_PAYMENTVrednosti

amountobaveznonumberAt most two decimals (the V-PFR rejects more with validation code 2804); the field type on the wire is Decimal(28,4).

>= 0step 0.01

referenceopcionoReceiptCanonicalReference| null (može biti null)
sourceobaveznostring

BOKAEXTERNALVrednosti

fiscalDocumentIdopcionouuid| null (može biti null)
pfrNumberopcionostring| null (može biti null)
pfrTimeopcionodate-time| null (može biti null)
transactionOccurredAtopcionodate-time| null (može biti null)
commercialFooteropcionostring| null (može biti null)Non-fiscal text rendered only outside the marked fiscal boundary.

max 2000

buyerDetailsopcionoFiscalBuyerDetails| null (može biti null)The buyer's company-registry facts stored with the operation; printed under the buyer identification in every representation. Absent or null when none were resolved.
legalNameobaveznostring

max 350

taxIdentifierobaveznostring

pattern ^[0-9]{9}$

registrationNumberopcionostring| null (može biti null)

pattern ^[0-9]{8}$

addressopcionostring| null (može biti null)

max 300

cityopcionostring| null (može biti null)

max 100

sourceobaveznostring

nbs-jrrVrednosti

resolvedAtobaveznodate-time
pfrobaveznoReceiptCanonicalPfr
invoiceNumberobaveznostring
sdcTimeobaveznodate-time
requestedByobaveznostring
signedByobaveznostring
invoiceCounterobaveznostring
invoiceCounterExtensionobaveznostring
totalCounterobaveznointeger
transactionTypeCounterobaveznointeger
totalAmountobaveznonumber
taxGroupRevisionobaveznointeger
taxItemsobaveznoarray<ReceiptCanonicalTaxItem>

min 1 items

categoryTypeobaveznointeger

>= 0<= 2

labelobaveznostring
amountobaveznonumber

>= 0

rateobaveznonumber

>= 0

categoryNameobaveznostring
taxableAmountPerLabelobaveznonumberBoka-derived, not signed by the V-PFR. The v3 Create Invoice response carries only label, categoryName, categoryType, rate and amount per tax item; the v4 protocol (deployed only in Eswatini) defines this field as the sum of the POS-supplied per-item taxable amounts. BokaPOS computes it the same way from the stored receipt lines: the gross of every line carrying the label, minus that label's V-PFR tax amount. For a single-label line this is exactly the official value; a line with several labels contributes its full gross to each of them.

>= 0

businessNameobaveznostring
tinobaveznostring
locationNameobaveznostring
addressobaveznostring
districtobaveznostring
mrcopcionostring| null (može biti null)
verificationUrlobaveznouri
officialJournalobaveznostring
officialJournalSha256obaveznostring

pattern ^[0-9a-f]{64}$

opaqueFiscalDataStoredobaveznoconst trueConfirms presence in the hashed original response without exposing opaque values.
brandingobaveznoReceiptCanonicalBranding| null (može biti null)
revisionIdobaveznouuid
contentSha256obaveznostring

pattern ^[0-9a-f]{64}$

businessPremiseIdopcionouuid| null (može biti null)
headerLogoAssetIdopcionouuid| null (može biti null)
headerLogoSha256opcionostring| null (može biti null)

pattern ^[0-9a-f]{64}$

footerLogoAssetIdopcionouuid| null (može biti null)
footerLogoSha256opcionostring| null (može biti null)

pattern ^[0-9a-f]{64}$

displayNameopcionostring| null (može biti null)
websiteopcionouri| null (može biti null)
phoneopcionostring| null (može biti null)
emailopcionoemail| null (može biti null)
thankYouSropcionostring| null (može biti null)
thankYouEnopcionostring| null (može biti null)
supportSropcionostring| null (može biti null)
supportEnopcionostring| null (može biti null)
preferredPaperFormatobaveznostring

80mm58mma4Vrednosti