/api/v1/reports/sales-summary
Requires authentication
Rate limited by the `api-global` limiter
v1
Send a bearer token, plus the X-Client-Id and X-Client-Secret headers in the Authorization header.
Totalet e shitjeve për një periudhë: numri i faturave, bruto, neto, TVSH-ja dhe vlera mesatare e faturës, të ndara njëherësh sipas mënyrës së pagesës, tipit të faturës, shkallës së TVSH-së dhe ditës.
Përdoreni për rakordim periodik ose për një panel shitjesh. Për një ditë të vetme të arkës
përdorni GET /reports/cash-register.
Totalet mbajnë vetëm faturat e paanuluara. cancelled mban numrin dhe vlerën e faturave të
anuluara në periudhë, kështu që nuk ju duhet një thirrje e dytë për t'i kontrolluar.
Me categories, si listë id-sh ose 1,2, raporti mbledh vetëm rreshtat e produkteve të atyre
kategorive dhe një faturë numërohet kur ka të paktën një rresht prej tyre; 0 merr produktet pa
kategori.
URL-ja e plotë: https://fature.al/api/v1/reports/sales-summary
Query parameters
| Name | Tipi | E detyrueshme | Përshkrimi |
|---|---|---|---|
| from | string<date> | yes | Data e fillimit, `YYYY-MM-DD`, e përfshirë. E detyrueshme. |
| to | string<date> | yes | Data e mbarimit, `YYYY-MM-DD`, e përfshirë. E detyrueshme. Kur është para `from`, të dyja ndërrohen vend. |
| categories | array, nullable | no | Kategoritë e produkteve që merr raporti, si listë id-sh ose `1,2`; `0` merr produktet pa kategori. Pa të merren të gjitha. |
Përgjigjet
200 Përmbledhja e shitjeve të periudhës te `data`: `totals`, ndarjet sipas mënyrës së pagesës, tipit të faturës, shkallës së TVSH-së dhe ditës, dhe `cancelled`; ndarjet janë bosh kur periudha nuk ka shitje.
| Field | Tipi | Përshkrimi |
|---|---|---|
| status | boolean | |
| data | object | |
| data.period | object | Periudha e konfirmuar e raportit |
| data.period.from | string | Data e fillimit, `YYYY-MM-DD`, përfshirëse |
| data.period.to | string | Data e mbarimit, `YYYY-MM-DD`, përfshirëse |
| data.totals | object | Totalet e periudhës mbi faturat e paanuluara |
| data.totals.invoices | integer | Numri i faturave të paanuluara në periudhë |
| data.totals.gross | number | Vlera bruto (me TVSH) e faturave, në lekë |
| data.totals.net | number | Vlera neto (pa TVSH), në lekë |
| data.totals.vat | number | TVSH-ja gjithsej, në lekë |
| data.totals.avg_invoice | number | Vlera mesatare bruto e një fature: `gross` pjesëtuar me `invoices`; `0` kur nuk ka fatura |
| data.totals.currency | string | Monedha e shumave, gjithmonë `ALL` |
| data.by_payment_method | array | Shitjet sipas mënyrës së pagesës që i shleu, nga bruto më e madhe. Një faturë e paguar me disa mënyra hyn te secila vetëm me pjesën e vet |
| data.by_payment_method[].method | string | Kodi i mënyrës së pagesës, ai i CIS-it: `BANKNOTE`, `CARD`, `CHECK`, `SVOUCHER`, `COMPANY` te faturat cash; `ACCOUNT`, `TRANSFER`, `COMPENSATION`, `FACTORING`, `KIND`, `WAIVER`, `OTHER` te faturat jo-cash dhe e-faturat. `OTHER` edhe kur fatura nuk mban mënyrë pagese |
| data.by_payment_method[].count | integer | Sa fatura u shlyen, plotësisht ose pjesërisht, me këtë mënyrë |
| data.by_payment_method[].gross | number | Shuma bruto e shlyer me këtë mënyrë, në lekë |
| data.by_payment_method[].net | number | Pjesa neto (pa TVSH), në lekë. Te faturat e ndara ndahet në përpjesëtim me bruton |
| data.by_payment_method[].vat | number | Pjesa e TVSH-së, në lekë, e ndarë po njësoj |
| data.by_type | array | Shitjet sipas tipit të faturës, nga bruto më e madhe |
| data.by_type[].type | string | Tipi i faturës: `CASH` faturë cash, `NONCASH` faturë jo-cash, `EINVOICE` e-faturë |
| data.by_type[].count | integer | Numri i faturave të paanuluara të këtij tipi |
| data.by_type[].gross | number | Vlera bruto e tyre, në lekë |
| data.by_vat_rate | array | Shumat e rreshtave të faturave sipas shkallës së TVSH-së, nga shkalla më e lartë te më e ulëta; rreshtat e përjashtuar dalin veçmas, me `exempt_type` |
| data.by_vat_rate[].rate | number | Shkalla e TVSH-së në përqind, siç është në rreshtin e faturës: `20`, `10`, `6` ose `0` |
| data.by_vat_rate[].net | number | Vlera neto (pa TVSH) e rreshtave, në lekë |
| data.by_vat_rate[].vat | number | TVSH-ja e rreshtave, në lekë |
| data.by_vat_rate[].gross | number | Vlera bruto (me TVSH) e rreshtave, në lekë |
| data.by_vat_rate[].exempt_type | string, nullable | Lloji i përjashtimit nga TVSH-ja, kodi i CIS-it: `TYPE_1`, `TYPE_2`, `TAX_FREE` ose `EXPORT_OF_GOODS`; te faturat e sjella nga CIS-i mund të vijë edhe `MARGIN_SCHEME`. Çelësi është i pranishëm vetëm te rreshtat e përjashtuar; te rreshtat e tatueshëm mungon fare, nuk vjen null |
| data.by_day | array | Një pikë për çdo ditë me shitje, në rend kronologjik; ditët pa shitje nuk dalin. Bosh kur `from` dhe `to` janë e njëjta ditë |
| data.by_day[].date | string | Data, `YYYY-MM-DD` |
| data.by_day[].count | integer | Numri i faturave të paanuluara të ditës |
| data.by_day[].gross | number | Vlera bruto e tyre, në lekë |
| data.cancelled | object | Faturat e anuluara të periudhës, që nuk hyjnë në asnjë nga shumat e mësipërme |
| data.cancelled.count | integer | Sa fatura cash, jo-cash dhe e-fatura me datë brenda periudhës janë anuluar |
| data.cancelled.gross | number | Vlera bruto e tyre, në lekë. Nuk ka nevojë të zbritet nga `totals`: ato mbajnë vetëm faturat e paanuluara |
401 Unauthenticated
| Field | Tipi | Përshkrimi |
|---|---|---|
| message | string |
403 Përdoruesi nuk ka të drejtën e raporteve. Një operator merr në raport vetëm faturat e veta.
| Field | Tipi | Përshkrimi |
|---|---|---|
| status | boolean | Gjithmonë false. Një përgjigje e suksesshme mban `status: true` dhe objektin `data` |
| message | string | Përshkrimi i gabimit. Bosh kur dështimi nuk mban ndonjë mesazh të vetin |
| errors | array | Mesazhe për t'u shfaqur te përdoruesi ose për t'u ruajtur në log. Mungon kur nuk ka gjë për të shtuar përtej `message` |
422 `from` ose `to` mungon, ose nuk është në formatin `YYYY-MM-DD`. Kjo përgjigje përdor fushën `success`, jo `status`, dhe `errors` është objekt sipas fushës.
| Field | Tipi | Përshkrimi |
|---|---|---|
| success | boolean | Gjithmonë false |
| message | string | Një rresht përmbledhës, i njëjtë për çdo dështim validimi |
| errors | object | Fushat që nuk kaluan validimin, secila me mesazhet e veta. Çelësat me pikë tregojnë brenda objekteve dhe elementëve të array-ve, p.sh. `lines.0.quantity` |
429 Kufiri i kërkesave u arrit. Nga kufiri i përgjithshëm përgjigja mban vetëm `message` dhe header-in `Retry-After`; nga kufiri i endpoint-it mban formatin standard të gabimit.
| Field | Tipi | Përshkrimi |
|---|---|---|
| status | boolean | Gjithmonë false. Një përgjigje e suksesshme mban `status: true` dhe objektin `data` |
| message | string | Përshkrimi i gabimit. Bosh kur dështimi nuk mban ndonjë mesazh të vetin |
| errors | array | Mesazhe për t'u shfaqur te përdoruesi ose për t'u ruajtur në log. Mungon kur nuk ka gjë për të shtuar përtej `message` |
Shembull kërkese
curl -X GET 'https://fature.al/api/v1/reports/sales-summary?from=2026-01-01&to=2026-01-31' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'X-Client-Id: YOUR_CLIENT_ID' \
-H 'X-Client-Secret: YOUR_CLIENT_SECRET' \
-H 'Accept: application/json'
use Illuminate\Support\Facades\Http;
$response = Http::withHeaders([
'Authorization' => 'Bearer YOUR_TOKEN',
'X-Client-Id' => 'YOUR_CLIENT_ID',
'X-Client-Secret' => 'YOUR_CLIENT_SECRET',
'Accept' => 'application/json',
])->get('https://fature.al/api/v1/reports/sales-summary?from=2026-01-01&to=2026-01-31');
$data = $response->json();
use GuzzleHttp\Client;
$client = new Client();
$response = $client->request('GET', 'https://fature.al/api/v1/reports/sales-summary?from=2026-01-01&to=2026-01-31', [
'headers' => [
'Authorization' => 'Bearer YOUR_TOKEN',
'X-Client-Id' => 'YOUR_CLIENT_ID',
'X-Client-Secret' => 'YOUR_CLIENT_SECRET',
'Accept' => 'application/json',
],
]);
$data = json_decode((string) $response->getBody(), true);
const response = await fetch('https://fature.al/api/v1/reports/sales-summary?from=2026-01-01&to=2026-01-31', {
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_TOKEN',
'X-Client-Id': 'YOUR_CLIENT_ID',
'X-Client-Secret': 'YOUR_CLIENT_SECRET',
'Accept': 'application/json'
}
});
const data = await response.json();
Shembull përgjigjeje
{
"status": true,
"data": {
"period": {
"from": "2026-09-01",
"to": "2026-09-13"
},
"totals": {
"invoices": 412,
"gross": 1845250,
"net": 1537708.33,
"vat": 307541.67,
"avg_invoice": 4478.76,
"currency": "ALL"
},
"by_payment_method": [
{
"method": "BANKNOTE",
"count": 318,
"gross": 1210400,
"net": 1008666.67,
"vat": 201733.33
}
],
"by_type": [
{
"type": "CASH",
"count": 351,
"gross": 1402100
}
],
"by_vat_rate": [
{
"rate": 20,
"net": 1250000,
"vat": 250000,
"gross": 1500000,
"exempt_type": "TAX_FREE"
}
],
"by_day": [
{
"date": "2026-09-05",
"count": 38,
"gross": 152300
}
],
"cancelled": {
"count": 7,
"gross": 23150
}
}
}
{
"message": "Unauthenticated."
}
{
"status": false,
"message": "Te dhenat jo te sakta.",
"errors": [
"errors"
]
}
{
"success": false,
"message": "Te dhena jo te sakta",
"errors": []
}
{
"status": false,
"message": "Te dhenat jo te sakta.",
"errors": [
"errors"
]
}