/api/partner/v1/wolt/events
Requires authentication
Rate limited by the `api-global` limiter
Send a bearer token, plus the X-Client-Id and X-Client-Secret headers in the Authorization header.
Boshti i integrimit. Thirreni këtë endpoint në mënyrë periodike me next_cursor-in e fundit
që keni marrë, dhe merrni me radhë ngjarjet e ciklit të porosive të njësisë (venue). Feed-i
vetëm shtohet, ndaj asgjë nuk humbet gjatë kohës që sistemi juaj nuk punon; dorëzimi është
të paktën një herë (at-least-once), ndaj trajtojeni çiftin (order_id, type) si idempotent.
Çdo ngjarje mban te order një snapshot të shkurtër të porosisë në atë çast.
URL-ja e plotë: https://fature.al/api/partner/v1/wolt/events
Query parameters
| Name | Tipi | E detyrueshme | Përshkrimi |
|---|---|---|---|
| since | integer | no | Cursor-i nga i cili vazhdohet; dërgoni next_cursor-in e mëparshëm. Parazgjedhja është 0, fillimi i historikut të ruajtur. Defaults to `0`. |
| limit | integer | no | Numri më i madh i ngjarjeve që kthehen, 1-200. Defaults to `50`. |
| types | string | no | Llojet e ngjarjeve që përfshihen, të ndara me presje, p.sh. order.received,order.ready. |
Përgjigjet
200 Ngjarjet pas `since` te `events`, nga më e vjetra te më e reja, me `next_cursor` dhe `has_more`; `events` është bosh kur nuk ka asgjë të re.
| Field | Tipi | Përshkrimi |
|---|---|---|
| status | boolean | |
| data | object | |
| data.events | array | Ngjarjet me id më të madhe se `since`, të renditura sipas id-së në rritje, deri në `limit` copë dhe vetëm të llojeve te `types` kur e keni dërguar. Bosh kur nuk ka asgjë të re pas cursor-it |
| data.events[].id | integer | Id-ja e ngjarjes, gjithmonë rritëse; është cursor-i i feed-it: dërgoni më të madhen që keni parë si `since` |
| data.events[].type | string | Lloji i ngjarjes: `order.received`, `order.accepted`, `order.in_production`, `order.preorder_confirmed`, `order.ready`, `order.picked_up`, `order.courier_at_customer`, `order.delivered`, `order.rejected`, `order.cancelled`, `order.fiscalized`, `order.fiscalization_failed` ose `order.updated` (një ndryshim statusi që nuk ka lloj të vetin) |
| data.events[].order_id | integer | Id-ja në fature.al e porosisë për të cilën është ngjarja; e njëjta me `order.id` |
| data.events[].wolt_order_id | string | Id-ja e porosisë te Wolt |
| data.events[].status | string, nullable | Statusi i porosisë në çastin e ngjarjes, me të njëjtat vlera si `order.status` |
| data.events[].occurred_at | string, nullable | Kur u regjistrua ngjarja në fature.al (ISO-8601 me offset-in e orës lokale) |
| data.events[].order | object | Snapshot i shkurtër i porosisë ashtu siç ishte kur u regjistrua ngjarja; për gjendjen e tanishme thirrni `GET /wolt/orders/{id}` |
| data.events[].order.id | integer | Id-ja e porosisë në fature.al; përdoreni si `{id}` në endpoint-et e porosisë dhe të veprimeve |
| data.events[].order.wolt_order_id | string | Id-ja e porosisë te Wolt |
| data.events[].order.display_number | any | Numri i porosisë që Wolt i tregon klientit (`order_number`); `null` kur Wolt nuk e ka dërguar ende |
| data.events[].order.status | string | Statusi i porosisë, siç vjen nga Wolt: `received`, `acknowledged`, `preorder_confirmed`, `production`, `ready`, `picked_up`, `courier_at_customer`, `delivered`, `rejected`, `refunded`, `cancelled`, ... |
| data.events[].order.fiscal_state | string | Gjendja fiskale, e nxjerrë nga fatura: `pending` (pa faturë), `deferred` (fatura pret CIS-in), `fiscalised` (e regjistruar në CIS) ose `failed` (lëshimi dështoi dhe porosia mbeti pa faturë) |
| data.events[].order.total_amount | number | Totali i paguar nga klienti, në monedhën e porosisë (`currency`), në njësi të plota (lekë, jo qindarka) |
| data.events[].order.currency | string | Kodi i monedhës së porosisë sipas ISO 4217; `ALL` kur Wolt nuk dërgon monedhë |
| data.events[].order.received_at | any | Kur fature.al e regjistroi porosinë nga Wolt (ISO-8601 me offset-in e orës lokale) |
| data.events[].order.pickup_at | any | Koha e premtuar Wolt-it gjatë pranimit (ISO-8601 me offset-in e orës lokale): kur do të jetë gati porosia te një porosi marketplace, ose kur do t'i dorëzohet klientit te një porosi self-delivery. `null` kur gjatë pranimit nuk u premtua kohë |
| data.events[].order.delivery_type | any | Lloji i dorëzimit sipas Wolt (`delivery.type`): `homedelivery` me korrier, `takeaway` klienti e merr vetë, `eatin` konsumim në vend; `null` kur Wolt nuk e dërgon |
| data.events[].order.self_delivery | boolean | `true` kur njësia e dorëzon porosinë me korrierin e vet dhe jo me një korrier të Wolt |
| data.events[].order.branch | any | Emri i njësisë së biznesit që mban lidhjen Wolt; `null` kur lidhja nuk ka njësi |
| data.events[].order.invoice | any | Referenca e faturës fiskale të lidhur, ose `null` sa kohë nuk është lëshuar faturë |
| data.next_cursor | string | Cursor-i për thirrjen e radhës: id-ja e ngjarjes së fundit në këtë faqe, ose vetë `since` që dërguat kur faqja është bosh. Ruajeni dhe dërgojeni si `since` në thirrjen tjetër. Vjen si string edhe pse është numër |
| data.has_more | boolean | `true` kur pas `next_cursor` ka ende ngjarje, pra kur feed-i mbante më shumë se `limit`; vazhdoni menjëherë me `since=next_cursor`. `false` kur jeni në fund të feed-it |
401 Unauthenticated
| Field | Tipi | Përshkrimi |
|---|---|---|
| message | string |
403 Kompania nuk e ka modulin Wolt, përdoruesi i token-it nuk ka të drejtën Wolt, ose token-i nuk zgjidhet në një njësi të vetme aktive.
| Field | Tipi | Përshkrimi |
|---|---|---|
| status | boolean | Gjithmonë `false` |
| message | string | Shpjegim i përkthyer; ruajeni në log, por mos vendosni sipas tij |
| code | string | Arsyeja e qëndrueshme, e lexueshme nga makina: `unauthenticated` (token-i mungon ose nuk vlen), `wolt_not_enabled` (kompania nuk e ka modulin Wolt), `forbidden` (përdoruesi i token-it nuk ka të drejtën Wolt), `no_venue` (token-i nuk zgjidhet në një njësi të vetme aktive), `order_not_found` (nuk ka porosi të tillë për këtë njësi), `invalid_transition` (veprimi nuk lejohet për statusin aktual të porosisë), `invalid_data` (body i kërkesës nuk kaloi validimin), `action_failed` (veprimi dështoi nga ana jonë), `wolt_upstream_error` (Wolt e refuzoi veprimin ose nuk u përgjigj), `idempotency_key_required` (header-i `Idempotency-Key` mungon), `idempotency_in_progress` (një thirrje me të njëjtin çelës është ende në proces) |
429 Kufiri i kërkesave u arrit: 180 lexime në minutë për token. Riprovoni pas numrit të sekondave në header-in Retry-After.
| Field | Tipi | Përshkrimi |
|---|---|---|
| message | string |
Shembull kërkese
curl -X GET 'https://fature.al/api/partner/v1/wolt/events' \
-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/partner/v1/wolt/events');
$data = $response->json();
use GuzzleHttp\Client;
$client = new Client();
$response = $client->request('GET', 'https://fature.al/api/partner/v1/wolt/events', [
'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/partner/v1/wolt/events', {
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": {
"events": [
{
"id": 10421,
"type": "order.ready",
"order_id": 8801,
"wolt_order_id": "66e1f3a2b4c5d6e7f8a9b0c1",
"status": "ready",
"occurred_at": "2026-09-14T12:24:10+02:00",
"order": {
"id": 8801,
"wolt_order_id": "66e1f3a2b4c5d6e7f8a9b0c1",
"display_number": "A7",
"status": "ready",
"fiscal_state": "fiscalised",
"total_amount": 1550,
"currency": "ALL",
"received_at": "2026-09-14T12:05:31+02:00",
"pickup_at": "2026-09-14T12:30:00+02:00",
"delivery_type": "homedelivery",
"self_delivery": false,
"branch": "Blloku",
"invoice": "invoice"
}
}
],
"next_cursor": 10470,
"has_more": true
}
}
{
"message": "Unauthenticated."
}
{
"status": false,
"message": "Porosia nuk u gjet.",
"code": "order_not_found"
}
{
"message": "Hello there"
}