---
title: "Lësho e-faturë"
operation_id: "api.v1.invoice.e-invoice"
method: POST
path: "/api/v1/invoice/e-invoice"
group: "Faturat"
api_version: "v1"
authenticated: true
canonical: "https://fature.al/api-reference/endpoints/api-v1-invoice-e-invoice.html"
---

# Lësho e-faturë

Pjesë e dokumentacionit [fature.al API](/api-reference/index.html).

## POST /api/v1/invoice/e-invoice

Lëshon një faturë elektronike drejt një biznesi: fiskalizohet te CIS-i dhe dërgohet në
platformën qendrore të e-faturave, e cila ia dorëzon blerësit si dokument UBL.

Përdoreni kur blerësi është biznes me NIPT dhe fatura duhet t'i mbërrijë elektronikisht. Për
një shitje me pagesë të mëvonshme që nuk shkon në platformën e e-faturave përdorni
`POST /invoice/noncash`.

### Blerësi

`client` është i detyrueshëm: `client.id` i tipit `NUIS` (ose `VAT` dhe `TAX` për një biznes
të huaj), `client.name`, dhe `client.address` me `client.city`, ose në kërkesë ose të ruajtura
më parë te klienti në fature.al. Kur mungon një e dhënë, kërkesa refuzohet me `400` dhe
`errors` thotë saktë çfarë duhet plotësuar. Çdo rresht kërkon `unit_code`.

### Lloji i dokumentit

`doc_type` është lloji i dokumentit dhe `process` profili i tij në UBL. Të dyja janë të
detyrueshme; për një faturë të zakonshme dërgoni `380` dhe `P1`. Validimi pranon edhe llojet
e tjera të dokumentit dhe profilet e standardit UBL, të listuara te fushat e kërkesës:

| Dokumenti | `doc_type` | `process` | Kërkon `original_invoice_iic` |
| --- | --- | --- | --- |
| Faturë shitjeje | `380` | `P1` | Jo |
| Notë krediti | `381` | `P9` | **Po** |
| Notë debiti | `383` | `P9` | **Po** |

Nota e kreditit dhe nota e debitit korrigjojnë një faturë tjetër: `original_invoice_iic` është
`iic`-ja që ju ktheu ajo faturë, shkon si BillingReference në dokumentin UBL dhe si referencë
korrigjimi te CIS-i, dhe pa të kërkesa refuzohet me `422`. Për të kthyer një faturë të plotë
përdorni anulimin, jo një notë krediti: ai e shënon origjinalin si të kthyer.

### Zbritja

Zbritja mbi të gjithë faturën dërgohet me `invoice_discount_type` dhe `invoice_discount_value`
bashkë; zbritja e një rreshti me `lines[].discount`, si përqindje mbi çmimin e njësisë, me
`price` të plotë dhe `total` tashmë të ulur. Të dyja mund të jenë në të njëjtën faturë, dhe
rregullat e plota janë te fushat e kërkesës. Në dokumentin UBL zbritja del si
AllowanceCharge, me një zë për çdo normë TVSH-je.

### Pas lëshimit

Përgjigja mban `iic`, `fic`, `eic` dhe `pdf`. Kur CIS-i nuk arrihet, fatura ruhet dhe `fic`
është `null` derisa fiskalizimi të përfundojë vetë. Kur platforma e e-faturave nuk arrihet
por fatura u fiskalizua, `eic` mungon derisa dërgimi të përsëritet.

URL-ja e plotë: `https://fature.al/api/v1/invoice/e-invoice`

Versioni i API-t: `v1`.

Identifikimi: i detyrueshëm (bearer token, plus the `X-Client-Id` and `X-Client-Secret` headers).

### Fushat e body-t

| Fusha | Tipi | E detyrueshme | Përshkrimi |
| --- | --- | --- | --- |
| `internalId` | string | po | Identifikuesi i faturës në sistemin tuaj, unik brenda kompanisë për vitin; shërben edhe si çelës idempotence. I detyrueshëm. |
| `payment_method` | string, nullable | jo | Mënyra e pagesës: `ACCOUNT`, `COMPENSATION`, `FACTORING`, `KIND`, `OTHER`, `TRANSFER` ose `WAIVER`. |
| `client` | object | po | Blerësi. I detyrueshëm: një e-faturë nuk lëshohet për klientin e rastit. Dërgoni `client.internal_id` për një klient të ruajtur në fature.al, ose `client.nuis`, `client.name` dhe `client.country` për një klient nga sistemi juaj. |
| `client.internal_id` | integer, nullable | jo | Id-ja e një klienti të ruajtur në fature.al. Kur e dërgoni, blerësi merret prej saj dhe fushat e tjera të `client` nuk lexohen. |
| `client.nuis` | string | jo | NIPT-i i blerësit. I detyrueshëm kur nuk dërgoni `client.internal_id`. |
| `client.name` | string | jo | Emri i blerësit. I detyrueshëm kur nuk dërgoni `client.internal_id`. |
| `client.address` | string, nullable | jo | Adresa e blerësit; shkon te CIS-i. Një klient i emëruar e kërkon, ose në këtë kërkesë ose të ruajtur më parë te klienti në fature.al. |
| `client.city` | string, nullable | jo | Qyteti i blerësit; shkon te CIS-i. Një klient i emëruar e kërkon, ose në këtë kërkesë ose të ruajtur më parë te klienti në fature.al. |
| `client.country` | string | jo | Shteti i blerësit, kod ISO 3166-1 alpha-3, p.sh. `ALB`, `RKS`, `ITA`. I detyrueshëm kur nuk dërgoni `client.internal_id`. |
| `lines` | array | po | Rreshtat e faturës, të paktën një. |
| `lines[].product_name` | string | po | Emri i produktit ose i shërbimit. |
| `lines[].product_code` | string | po | Kodi i produktit në katalogun tuaj. |
| `lines[].unit` | string | po | Njësia matëse, si tekst që lexon njeriu. |
| `lines[].unit_code` | string | po | Kodi fiskal i njësisë matëse, ai që mban dokumenti UBL, p.sh. `C62` njësi, `XPP` copë, `KGM` kg, `LTR` litër, `HUR` orë, `MTK` m². I detyrueshëm; nuk nxirret nga `unit`. Kuptimi i të 49 kodeve është te hyrja, "Kodet e njësive matëse". |
| `lines[].quantity` | number | po | Sasia. |
| `lines[].price` | number | po | Çmimi për njësi, me TVSH. |
| `lines[].total` | number | po | Totali i rreshtit, me TVSH. |
| `lines[].discount` | number, min 0, max 100, nullable | jo | Zbritja e rreshtit, në përqindje mbi çmimin e njësisë, nga 0 deri në 100. Opsionale: pa të, ose me vlerë bosh, rreshti kalon siç e dërgoni. `price` mbetet çmimi i plotë i njësisë, ndërsa `total` dërgohet tashmë i ulur: `price` herë `quantity`, me zbritjen e hequr. Një `total` që nuk përputhet me atë shifër e refuzon kërkesën me `400`, dhe `errors` thotë cili rresht dhe cila vlerë pritej. |
| `lines[].vat` | integer, one of 0, 6, 10, 20, nullable | jo | Norma e TVSH-së në përqindje: `0`, `6`, `10` ose `20`. Validimi e lejon të mungojë, por dërgojeni në çdo rresht: pa të rreshti mbetet pa normë TVSH-je. Kur biznesi juaj nuk është në skemën e TVSH-së, rreshti regjistrohet me TVSH `0` dhe përjashtim `TAX_FREE`, sido që ta dërgoni këtë fushë; kërkesa nuk refuzohet. |
| `lines[].vat_exempt_type` | string, one of TYPE_1, TYPE_2, EXPORT_OF_GOODS, TAX_FREE, nullable | jo | Lloji i përjashtimit nga TVSH-ja, kur rreshti është i përjashtuar: `TYPE_1`, `TYPE_2`, `EXPORT_OF_GOODS` ose `TAX_FREE`. |
| `invoice_discount_type` | string, one of percent, amount, nullable | jo | Si lexohet `invoice_discount_value`: `percent` si përqindje, `amount` si vlerë fikse me TVSH. Zbritja zbatohet mbi të gjithë faturën: rreshtat ruhen siç i dërgoni dhe ulet vetëm totali. Punon vetëm në çift me `invoice_discount_value`. Njëra pa tjetrën injorohet në heshtje dhe fatura del pa zbritje. |
| `invoice_discount_value` | number, min 0, nullable | jo | Vlera e zbritjes, e lexuar sipas `invoice_discount_type`: përqindje deri në 100 kur tipi është `percent`; vlerë me TVSH në monedhën e faturës, deri në totalin e faturës, kur tipi është `amount`. Zeroja e lë faturën pa zbritje. Zbritja shpërndahet mbi grupet e TVSH-së sipas peshës së secilit në total dhe TVSH-ja rillogaritet mbi vlerën e ulur. Në dokumentin UBL del si AllowanceCharge, me një zë për çdo normë TVSH-je. |
| `bank_account` | integer, nullable | jo | Id-ja e një llogarie bankare të ruajtur në fature.al. |
| `bank_account_iban` | string, nullable | jo | IBAN-i i një llogarie të ruajtur në fature.al; llogaria gjendet me IBAN, në vend të `bank_account`. |
| `bankAccount` | object, nullable | jo | Llogaria bankare e plotë, kur nuk e keni ende në fature.al: `name`, `iban`, `currency`, `swift`, `holder`. Ruhet si llogari e kompanisë suaj; një IBAN që ekziston tashmë ripërdoret. |
| `bankAccount.name` | string, nullable | jo | Emri i bankës. |
| `bankAccount.iban` | string, nullable | jo | IBAN-i i llogarisë. |
| `bankAccount.currency` | string, nullable | jo | Monedha e llogarisë, kod ISO 4217. |
| `bankAccount.swift` | string, nullable | jo | Kodi SWIFT/BIC i bankës. |
| `bankAccount.notes` | string, nullable | jo | Shënime që shoqërojnë llogarinë në faturë. |
| `bankAccount.holder` | string, nullable | jo | Mbajtësi i llogarisë. |
| `currency` | string, nullable | jo | Monedha e faturës, kod ISO 4217; pa të merret `ALL`. |
| `exchange_rate` | number, nullable | jo | Sa lekë vlen një njësi e monedhës së faturës. Pa të, ose me vlerë jo pozitive, merret 1. Për monedha që vlejnë më pak se një lek, si JPY ose HUF, dërgoni vlerë nën 1. |
| `due_date` | string, nullable | jo | Afati i pagesës, `YYYY-MM-DD`. |
| `supply_start_date` | string, nullable | jo | Fillimi i periudhës së furnizimit, `YYYY-MM-DD`, për fatura që mbulojnë një interval. |
| `supply_end_date` | string, nullable | jo | Fundi i periudhës së furnizimit, `YYYY-MM-DD`. |
| `reverse_charge` | boolean, nullable | jo | Ngarkesa e kundërt: TVSH-ja deklarohet nga blerësi, jo nga shitësi. |
| `notes` | string, nullable | jo | Shënime që shfaqen në faturë. |
| `periodic_invoice` | boolean, nullable | jo | Shënon një faturë të një cikli të përsëritur faturimi. |
| `doc_type` | string | po | Lloji i dokumentit UBL: `380` faturë shitjeje, `381` notë krediti, `383` notë debiti. I detyrueshëm. Një notë kërkon `original_invoice_iic`; rreshtat që dërgoni janë rreshtat e korrigjimit, me vlera pozitive, dhe drejtimin e përcakton `doc_type`. Validimi pranon edhe kodet e tjera të standardit UBL, `80`, `82`, `84`, `384`, `386`, `388`, `393`, `394`, `395`, `575`, `623` dhe `780`, me kuptimin që u jep standardi. |
| `process` | string | po | Profili UBL i dokumentit (ProfileID): `P1` për një shitje, `P9` për një korrigjim. I detyrueshëm. Validimi pranon `P1` deri `P11`, sipas standardit UBL. |
| `original_invoice_iic` | string, nullable | po | `iic`-ja e faturës që ky dokument korrigjon, ajo që ju ktheu fatura origjinale. E detyrueshme kur `doc_type` është `381` ose `383` dhe e refuzuar me çdo lloj tjetër dokumenti. Origjinali duhet të jetë i të njëjtit lloj, i fiskalizuar, i paanuluar dhe ende i korrigjueshëm; për të kthyer një faturë të plotë përdorni anulimin, jo një notë krediti. Required depending on doc_type. |

### Shembull kërkese

```bash
curl -X POST 'https://fature.al/api/v1/invoice/e-invoice' \
  -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 '{
    "internalId": "EINV-2026-000412",
    "payment_method": "TRANSFER",
    "client": {
        "internal_id": 8812,
        "nuis": "L62221018T",
        "name": "Ei3 Software Solution shpk",
        "address": "1 Example Street",
        "city": "Berlin",
        "country": "ALB"
    },
    "lines": [
        {
            "product_name": "Kafe",
            "product_code": "KAF-001",
            "unit": "cope",
            "unit_code": "C62",
            "quantity": 2,
            "price": 150,
            "total": 300,
            "discount": 10,
            "vat": 20,
            "vat_exempt_type": "EXPORT_OF_GOODS"
        }
    ],
    "invoice_discount_type": "percent",
    "invoice_discount_value": 10,
    "bank_account": 42,
    "bank_account_iban": "AL35202111090000000001234567",
    "bankAccount": {
        "name": "BKT",
        "iban": "AL35202111090000000001234567",
        "currency": "ALL",
        "swift": "NCBAALTX",
        "notes": "notes",
        "holder": "Ei3 Software Solution shpk"
    },
    "currency": "ALL",
    "exchange_rate": 100.5,
    "due_date": "2026-10-04",
    "supply_start_date": "2026-09-01",
    "supply_end_date": "2026-09-30",
    "reverse_charge": false,
    "notes": "Faleminderit per blerjen",
    "periodic_invoice": false,
    "doc_type": 380,
    "process": "P1",
    "original_invoice_iic": "8FE72E2ACD1C500A83F8C89B4E2E3E1D"
}'
```

### Përgjigjet

**200**: Kur fatura refuzohet pas validimit, nga CIS-i ose gjatë ruajtjes, përgjigja kthehet me HTTP 200 dhe `status: false`; arsyeja është te `message`.

| Fusha | Tipi | Përshkrimi |
| --- | --- | --- |
| `status` | boolean |  |
| `data` | object |  |
| `data.invoice` | object |  |
| `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 |

```json
{
    "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"
        }
    }
}
```

**400**: Të dhëna të paplota ose të pavlefshme për fiskalizim. `errors` thotë saktë çfarë duhet plotësuar. Fatura nuk u ruajt; riprovoni me të njëjtin `internalId`.

| Fusha | 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` |

```json
{
    "status": false,
    "message": "Te dhenat jo te sakta.",
    "errors": [
        "errors"
    ]
}
```

**401**: Unauthenticated

| Fusha | Tipi | Përshkrimi |
| --- | --- | --- |
| `message` | string |  |

```json
{
    "message": "Unauthenticated."
}
```

**403**: Abonimi ka mbaruar, ose veprimi nuk lejohet për këtë llogari.

| Fusha | 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` |

```json
{
    "status": false,
    "message": "Te dhenat jo te sakta.",
    "errors": [
        "errors"
    ]
}
```

**409**: Një kërkesë me këtë `internalId` është ende në proces. Prisni pak dhe riprovoni, ose lexoni gjendjen me `POST /invoice/details/{internalId}`.

| Fusha | 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` |

```json
{
    "status": false,
    "message": "Te dhenat jo te sakta.",
    "errors": [
        "errors"
    ]
}
```

**422**: Të dhënat nuk kaluan validimin. Kjo përgjigje përdor fushën `success`, jo `status`, dhe `errors` është objekt sipas fushës. Vetëm `internalId` që mungon kthehet me formatin standard të gabimit.

| Fusha | 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` |

```json
{
    "success": false,
    "message": "Te dhena jo te sakta",
    "errors": []
}
```

**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.

| Fusha | 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` |

```json
{
    "status": false,
    "message": "Te dhenat jo te sakta.",
    "errors": [
        "errors"
    ]
}
```

**500**: Gabim i papritur në server.

| Fusha | 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` |

```json
{
    "status": false,
    "message": "Te dhenat jo te sakta.",
    "errors": [
        "errors"
    ]
}
```

**503**: Shërbimi i fiskalizimit nuk u arrit dhe fatura nuk u ruajt. Riprovoni me të njëjtin `internalId`.

| Fusha | 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` |

```json
{
    "status": false,
    "message": "Te dhenat jo te sakta.",
    "errors": [
        "errors"
    ]
}
```
