/api/v2/invoice/cancel/{id}
Requires authentication
Rate limited by the `api-global` limiter
v2
Send a bearer token, plus the X-Client-Id and X-Client-Secret headers in the Authorization header.
I njëjti anulim si te v1: pa body anulohet e gjithë fatura, me lines vetëm një pjesë e
saj, e mundur vetëm për faturat cash. Rregullat e plota janë te
POST /api/v1/invoice/cancel/{id}.
Përgjigja është dokumenti korrigjues, me iic dhe fic të vetat dhe me payment_methods
bashkë me të. Kur CIS-i nuk arrihet, anulimi ruhet me fic: null dhe fiskalizohet vetë më
vonë. Anulimet kanë kufirin e tyre të kërkesave: 30 në minutë dhe 600 në orë për token.
URL-ja e plotë: https://fature.al/api/v2/invoice/cancel/{id}
Ndryshuar që nga v1:
| What changed | v1 | v2 |
|---|---|---|
200 data.invoice.payment_methods |
— | array |
200 data.invoice.payment_methods[].type |
— | string |
200 data.invoice.payment_methods[].amount |
— | number |
200 data.invoice.payment_methods[].company_card |
— | string, nullable |
200 data.invoice.payment_methods[].vouchers |
— | array |
Path parameters
| Name | Tipi | E detyrueshme | Përshkrimi |
|---|---|---|---|
| id | integer | yes | Id-ja e faturës në fature.al. |
Body parameters
| Name | Tipi | E detyrueshme | Përshkrimi |
|---|---|---|---|
| lines | array | no | Rreshtat që anulohen. Pa të anulohet e gjithë fatura; me të anulohet vetëm pjesa e dërguar, e mundur vetëm për faturat cash. Çdo rresht duhet të ekzistojë në faturën origjinale me të njëjtin `product_code` dhe `product_name`, dhe sasia mund vetëm të ulet. Një faturë e lëshuar me zbritje mbi të gjithë faturën nuk pranon anulim të pjesshëm: dërgojeni kërkesën pa `lines`, që të anulohet e plotë. |
| lines[].product_name | string | yes | Emri i produktit, siç është në faturën origjinale. |
| lines[].product_code | string | yes | Kodi i produktit, siç është në faturën origjinale. |
| lines[].quantity | number | yes | Sasia që kthehet, më e madhe se 0 dhe jo më e madhe se ajo e faturës origjinale. |
| lines[].price | number, nullable | no | Çmimi për njësi, me TVSH. Duhet vetëm kur i njëjti produkt është faturuar në dy rreshta me çmime të ndryshme, që të dallohet cili rresht anulohet. |
Përgjigjet
200 Dokumenti korrigjues, me `iic` dhe `fic` të vetat; `fic` është `null` kur CIS-i nuk u arrit dhe fiskalizimi do të përfundojë vetë.
| Field | Tipi | Përshkrimi |
|---|---|---|
| status | boolean | |
| data | object | |
| data.invoice | object, or OrderInvoiceIssueResult, SummaryInvoiceIssueResult | |
| data.invoice.id | integer | Id-ja e faturës në fature.al. Ruajeni pranë `internalId` tuaj |
| data.invoice.number | string, nullable | Numri i faturës, si `12/2026` |
| data.invoice.iic | string, nullable | Kodi identifikues i faturës, IIC (NSLF) |
| data.invoice.fic | string, nullable | Kodi që kthen CIS-i kur regjistron faturën, FIC (NIVF). Null sa kohë fatura pret fiskalizimin e shtyrë |
| data.invoice.tcrCode | string, nullable | Kodi TCR i pajisjes fiskale që e lëshoi; null te faturat që nuk lëshohen nga një TCR |
| data.invoice.businessCode | string, nullable | Kodi i njësisë së biznesit nën të cilën u lëshua fatura |
| data.invoice.operatorCode | string, nullable | Kodi i operatorit që e lëshoi faturën |
| data.invoice.fiscalizedAt | string | Data dhe ora e krijimit të faturës, `YYYY-MM-DD HH:MM:SS`, orë lokale |
| data.invoice.verifyURL | string, nullable | URL-ja e verifikimit te administrata tatimore, ajo që hap kodi QR |
| data.invoice.pdf | string | URL-ja për të shkarkuar dokumentin. Te një e-faturë që ka tashmë EIC, tregon PDF-në zyrtare të platformës së e-faturave në vend të asaj të fature.al |
| data.invoice.eic | string, nullable | Kodi i e-faturës në platformën e e-faturave, EIC. Çelësi është i pranishëm vetëm te një e-faturë që e ka tashmë; te çdo faturë tjetër mungon fare, nuk vjen null |
| data.invoice.payment_methods | array | Një element për çdo mënyrë pagese, me shumën që u shlye me secilën. E njëjta listë që kthen `GET /invoice/{id}/details` |
| data.invoice.payment_methods[].type | string | Mënyra e pagesës, p.sh. `BANKNOTE` ose `CARD` |
| data.invoice.payment_methods[].amount | number | Shuma e shlyer me këtë mënyrë, me TVSH, në monedhën e faturës |
| data.invoice.payment_methods[].company_card | string, nullable | Numri i kartës së kompanisë; i plotësuar vetëm kur `type` është `COMPANY`, përndryshe null |
| data.invoice.payment_methods[].vouchers | array | Numrat serialë të tollonave; të plotësuar vetëm kur `type` është `SVOUCHER`, përndryshe listë bosh |
401 Unauthenticated
| Field | Tipi | Përshkrimi |
|---|---|---|
| message | string |
404 Fatura nuk u gjet, ose nuk i përket kompanisë suaj.
| 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 Fatura nuk mund të anulohet në gjendjen e saj aktuale, ose rreshtat e dërguar nuk përputhen me origjinalin. `errors` thotë pse.
| 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` |
429 Kufiri i anulimeve u arrit, ose një anulim tjetër i të njëjtit tip është ende në proces. Nga kufiri i anulimeve përgjigja mban vetëm `message` dhe header-in `Retry-After`.
| 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` |
500 Gabim i papritur në server, përfshirë rastin kur anulimi nuk u regjistrua dot te CIS-i.
| 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 POST 'https://fature.al/api/v2/invoice/cancel/403' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'X-Client-Id: YOUR_CLIENT_ID' \
-H 'X-Client-Secret: YOUR_CLIENT_SECRET' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"lines": [
{
"product_name": "Jane Doe",
"product_code": "product code",
"quantity": 2,
"price": 1999
}
]
}'
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',
'Content-Type' => 'application/json',
])->post('https://fature.al/api/v2/invoice/cancel/403', [
'lines' => [
[
'product_name' => 'Jane Doe',
'product_code' => 'product code',
'quantity' => 2,
'price' => 1999,
],
],
]);
$data = $response->json();
use GuzzleHttp\Client;
$client = new Client();
$response = $client->request('POST', 'https://fature.al/api/v2/invoice/cancel/403', [
'headers' => [
'Authorization' => 'Bearer YOUR_TOKEN',
'X-Client-Id' => 'YOUR_CLIENT_ID',
'X-Client-Secret' => 'YOUR_CLIENT_SECRET',
'Accept' => 'application/json',
'Content-Type' => 'application/json',
],
'json' => [
'lines' => [
[
'product_name' => 'Jane Doe',
'product_code' => 'product code',
'quantity' => 2,
'price' => 1999,
],
],
],
]);
$data = json_decode((string) $response->getBody(), true);
const response = await fetch('https://fature.al/api/v2/invoice/cancel/403', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_TOKEN',
'X-Client-Id': 'YOUR_CLIENT_ID',
'X-Client-Secret': 'YOUR_CLIENT_SECRET',
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"lines": [
{
"product_name": "Jane Doe",
"product_code": "product code",
"quantity": 2,
"price": 1999
}
]
})
});
const data = await response.json();
Shembull përgjigjeje
{
"status": true,
"data": {
"invoice": {
"id": 40323,
"number": "12/2026",
"iic": "3C7E9A1F52B84D0E6A2C4F8B1D9E7A35",
"fic": "2f6c1e8a-9b3d-4c7e-a5f1-0d8b6e4c2a91",
"tcrCode": "xb131xb131",
"businessCode": "bb123bb123",
"operatorCode": "aa123aa123",
"fiscalizedAt": "2026-09-13 10:15:00",
"verifyURL": "https://efiskalizimi-app.tatime.gov.al/invoice-check/#/verify?iic=3C7E9A1F52B84D0E6A2C4F8B1D9E7A35&tin=L81306019C&crtd=2026-09-13T10:15:00+02:00&prc=53190.00",
"pdf": "https://fature.al/api/v1/invoice/print/40323",
"eic": "9b4e2d1c-6f7a-4b3c-8d2e-1f0a9c8b7d65",
"payment_methods": [
{
"type": "ACCOUNT",
"amount": 540,
"company_card": "company card",
"vouchers": []
}
]
}
}
}
{
"message": "Unauthenticated."
}
{
"status": false,
"message": "Te dhenat jo te sakta.",
"errors": [
"errors"
]
}
{
"status": false,
"message": "Te dhenat jo te sakta.",
"errors": [
"errors"
]
}
{
"status": false,
"message": "Te dhenat jo te sakta.",
"errors": [
"errors"
]
}
{
"status": false,
"message": "Te dhenat jo te sakta.",
"errors": [
"errors"
]
}