---
title: "Krijo produkt"
operation_id: "api.v1.products.create"
method: POST
path: "/api/v1/products"
group: "Produkte"
api_version: "v1"
authenticated: true
canonical: "https://fature.al/api-reference/endpoints/api-v1-products-create.html"
---

# Krijo produkt

Part of the [fature.al API](/api-reference/index.html) documentation.

## POST /api/v1/products

Krijon nje produkt te ri per kompanine tuaj.

- **`code` gjenerohet vete** nese nuk e dergoni, prandaj mund ta lini bosh dhe ta ruani ate qe
  ju kthehet.
- **`unit` nuk dergohet**: njesia matese derivohet nga `unit_code`, i cili eshte kodi qe mban
  dokumenti fiskal.
- `vat_rate` pranon `0`, `6`, `10` ose `20`. Per nje produkt te perjashtuar shtoni
  `vat_exempt_type`.

Produkti i krijuar ketu del menjehere ne `GET /products` dhe mund te perdoret ne rreshtat e
nje fature.

Full URL: `https://fature.al/api/v1/products`

API version: `v1`.

Authentication: required (bearer token).

### Body parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `code` | string, maxLength 255, nullable | no | Kodi unik i produktit. Gjenerohet vete nese mungon. |
| `name` | string, maxLength 255 | yes | Emri i produktit. |
| `description` | string, maxLength 255, nullable | no | Pershkrimi. Pa te merret emri. |
| `last_price` | number, min 0 | yes | Cmimi i shitjes. |
| `cost_price` | number, min 0, nullable | no | Cmimi i blerjes. |
| `vat_rate` | string, one of 0, 6, 10, 20 | yes | Shkalla e TVSH. |
| `currency` | string, maxLength 10, nullable | no | Monedha. Pa te merret ALL. |
| `service` | boolean | no | Sherbim (true) apo artikull inventarizues (false). Pa te merret true. |
| `id_category` | integer, nullable | no | ID e kategorise, nga GET /product/categories. |

### Example request

```bash
curl -X POST 'https://fature.al/api/v1/products' \
  -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 '{
    "code": "P001",
    "name": "Kafe Espresso",
    "description": "Kafe espresso e peshuar 18g",
    "last_price": 150,
    "cost_price": 80,
    "vat_rate": 20,
    "currency": "ALL",
    "service": true,
    "id_category": 3
}'
```

### Responses

**201** — Created

| Field | Type | Description |
| --- | --- | --- |
| `status` | boolean |  |
| `data` | object |  |
| `data.product` | object |  |
| `data.product.service` | boolean | True for a service, false for an article that is tracked in stock |
| `data.product.category` | object, nullable | The category resolved, or null when the product has none |
| `data.product.category.id` | integer |  |
| `data.product.category.name` | string |  |
| `data.product.category.color` | string, nullable | Hex colour used by the POS grid |
| `data.product.created_at` | string, nullable | Creation timestamp, ISO 8601 |

```json
{
    "status": true,
    "data": {
        "product": {
            "service": true,
            "category": {
                "id": 1,
                "name": "Jane Doe",
                "color": "color"
            },
            "created_at": "created at"
        }
    }
}
```

**403** — Abonimi ka mbaruar, ose veprimi nuk lejohet per kete llogari.

| Field | Type | Description |
| --- | --- | --- |
| `status` | boolean | Always false. A successful response carries `status: true` and a `data` object instead |
| `message` | string | The exception message. Empty when the failure carries no exception of its own |
| `errors` | array | Messages to show the operator or to log. Absent when the failure has nothing to add beyond `message` |

```json
{
    "status": true,
    "message": "Hello there",
    "errors": [
        "errors"
    ]
}
```

**409** — Ekziston tashme nje regjistrim me te njejtat te dhena.

| Field | Type | Description |
| --- | --- | --- |
| `status` | boolean | Always false. A successful response carries `status: true` and a `data` object instead |
| `message` | string | The exception message. Empty when the failure carries no exception of its own |
| `errors` | array | Messages to show the operator or to log. Absent when the failure has nothing to add beyond `message` |

```json
{
    "status": true,
    "message": "Hello there",
    "errors": [
        "errors"
    ]
}
```

**422** — Te dhenat nuk kaluan validimin. Kjo pergjigje perdor fushen `success`, jo `status`.

| Field | Type | Description |
| --- | --- | --- |
| `success` | boolean | Always false |
| `message` | string | A single summary line, the same for every validation failure |
| `errors` | object | The failing fields, each with the messages for it. Dotted keys point into nested objects and array items, e.g. `lines.0.quantity` |

```json
{
    "success": true,
    "message": "Hello there",
    "errors": []
}
```

**429** — Kufiri i kerkesave u arrit. Kufiri per endpoint kthen zarfin standard te gabimit; kufiri i pergjithshem kthen vetem `message` bashke me header-in `Retry-After`.

| Field | Type | Description |
| --- | --- | --- |
| `status` | boolean | Always false. A successful response carries `status: true` and a `data` object instead |
| `message` | string | The exception message. Empty when the failure carries no exception of its own |
| `errors` | array | Messages to show the operator or to log. Absent when the failure has nothing to add beyond `message` |

```json
{
    "status": true,
    "message": "Hello there",
    "errors": [
        "errors"
    ]
}
```

**500** — Gabim i papritur ne server.

| Field | Type | Description |
| --- | --- | --- |
| `status` | boolean | Always false. A successful response carries `status: true` and a `data` object instead |
| `message` | string | The exception message. Empty when the failure carries no exception of its own |
| `errors` | array | Messages to show the operator or to log. Absent when the failure has nothing to add beyond `message` |

```json
{
    "status": true,
    "message": "Hello there",
    "errors": [
        "errors"
    ]
}
```
