# API: események

> Események létrehozása, módosítása, lekérése, státuszváltása és törlése, eseményfoglalások módosítása és naptárütközés-ellenőrzés az API-val.

Az események végpontjaival eseményeket hozhatsz létre és módosíthatsz, beállíthatod az időszakokat és az ismétlődési szabályokat, kezelheted a munkavállalókat és a jegyeket, módosíthatod a foglalásokat és a státuszt, ellenőrizheted a törlés hatását, és törölhetsz.

Az API az Elite licenchez tartozik, használatához programozási ismeret kell. A hitelesítés az **Amelia** fejlécben küldött API-kulccsal történik ([részletek](https://hub.hellowp.io/hu/plugins/ameliabooking/fejlesztoknek-api-attekintes/)). Az alap útvonal: `{{az_oldalad_URL-je}}/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1`.

| Művelet | Metódus | Útvonal |
|---|---|---|
| Esemény létrehozása | `POST` | `/events` |
| Esemény módosítása | `POST` | `/events/{{esemeny_id}}` |
| Esemény státuszának módosítása | `POST` | `/events/status/{{esemeny_id}}` |
| Eseményfoglalás módosítása | `POST` | `/events/bookings/{{foglalas_id}}` |
| Egy esemény lekérése | `GET` | `/events/{{esemeny_id}}` |
| Események listázása | `GET` | `/events` |
| Naptárütközés ellenőrzése | `POST` | `/events/calendar` |
| Törölhetőség ellenőrzése | `GET` | `/events/effect/{{esemeny_id}}` |
| Eseményfoglalás törlése | `POST` | `/events/bookings/delete/{{foglalas_id}}` |
| Esemény törlése | `POST` | `/events/delete/{{esemeny_id}}` |

## Esemény létrehozása

Új eseményt hoz létre egy vagy több időszakkal, férőhellyel és árral. Beállíthatod a foglalás nyitását és zárását, a munkavállalókat, a címkéket, a jegyeket és az ismétlődést is.

**Kötelező tulajdonságok**

| Tulajdonság | Típus | Leírás |
|---|---|---|
| `name` | szöveg | Az esemény neve. |
| `periods` | tömb | Időszakobjektumok `periodStart` és `periodEnd` mezővel. |
| `maxCapacity` | egész | A résztvevők legnagyobb száma. |
| `price` | tizedes | Az esemény ára. |

**További tulajdonságok**

| Tulajdonság | Típus | Leírás |
|---|---|---|
| `show` | logikai | Megjelenjen-e a felületen. Alapérték: `false`. |
| `parentId` | egész | Ismétlődő eseménynél a szülő esemény azonosítója. |
| `bookingOpens` | szöveg | A foglalás nyitása, `ÉÉÉÉ-HH-NN óó:pp:mm` formában. |
| `bookingCloses` | szöveg | A foglalás zárása, ugyanebben a formában. |
| `bookingOpensRec` | szöveg | Az ismétlődő események foglalásnyitási szabálya: `same` vagy `calculate`. |
| `bookingClosesRec` | szöveg | Az ismétlődő események foglalászárási szabálya: `same` vagy `calculate`. |
| `recurring` | objektum | Az ismétlődés beállításai. |
| `bringingAnyone` | logikai | Lehet-e további személyt hozni. Alapérték: `false`. |
| `bookMultipleTimes` | logikai | Foglalhat-e egy vásárló többször. Alapérték: `false`. |
| `maxExtraPeople` | egész | Foglalásonként a legtöbb további személy. |
| `tags` | tömb | Címkeobjektumok `name` mezővel. |
| `providers` | tömb | Munkavállalói objektumok az azonosítókkal. |
| `description` | szöveg | Az esemény leírása. |
| `gallery` | tömb | A galéria képeinek útvonala. |
| `color` | szöveg | HEX színkód. |
| `locationId` | egész | Helyszínazonosító. |
| `customLocation` | szöveg | Egyéni helyszín szövege. |
| `settings` | szöveg | JSON-ként kódolt eseménybeállítások. Alapból az általános beállítások érvényesek. |
| `translations` | szöveg | JSON-ként kódolt fordítások a névhez és a leíráshoz. |
| `depositPayment` | szöveg | Az előleg típusa: `disabled`, `fixed` vagy `percentage`. |
| `deposit` | egész | Az előleg összege. |
| `depositPerPerson` | logikai | Az előleg szorzódjon-e a létszámmal. Alapérték: `false`. |
| `fullPayment` | logikai | Engedélyezze-e a teljes összeg kifizetését. Alapérték: `false`. |
| `customPricing` | logikai | Egyéni áras jegyek bekapcsolása. Alapérték: `false`. |
| `organizerId` | egész | A szervező munkavállaló azonosítója. |
| `closeAfterMin` | egész | Az esemény lezárása, ha elérte a minimumot. |
| `closeAfterMinBookings` | logikai | A minimum a foglalásokra vagy a foglalásonkénti személyekre vonatkozik. |
| `customTickets` | tömb | Jegyobjektumok. |
| `maxCustomCapacity` | egész | A jegytípusok együttes legnagyobb férőhelye. |

Kérés:

```bash
curl --location 'https://pelda.hu/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/events' \
--header 'Content-Type: application/json' \
--header 'Amelia: AZ_API_KULCSOD' \
--data '{
  "parentId": null,
  "name": "Wellness workshop",
  "periods": [
    { "periodStart": "2026-03-10 14:00:00", "periodEnd": "2026-03-10 22:30:00" }
  ],
  "bookingOpens": "2026-03-01 09:00:00",
  "bookingCloses": "2026-03-10 12:00:00",
  "bookingOpensRec": "same",
  "bookingClosesRec": "same",
  "recurring": {
    "monthlyRepeat": "each",
    "monthDate": null,
    "monthlyOnRepeat": null,
    "monthlyOnDay": null,
    "cycleInterval": 1,
    "cycle": "weekly",
    "order": null,
    "until": "2026-04-21 00:00:00"
  },
  "bringingAnyone": true,
  "bookMultipleTimes": true,
  "maxCapacity": 100,
  "maxExtraPeople": null,
  "price": 100,
  "tags": [ { "name": "workshop" } ],
  "providers": [ { "id": 1 }, { "id": 3 } ],
  "description": "Vezetett műhely gyakorlatokkal.",
  "gallery": [],
  "color": "#1788FB",
  "show": true,
  "locationId": 2,
  "customLocation": null,
  "applyGlobally": true,
  "translations": null,
  "deposit": 10,
  "depositPayment": "fixed",
  "depositPerPerson": true,
  "fullPayment": true,
  "customPricing": true,
  "organizerId": 1,
  "closeAfterMin": null,
  "closeAfterMinBookings": false,
  "customTickets": [
    { "name": "Standard ticket", "price": 10, "spots": 10, "enabled": true, "dateRanges": "[]" },
    { "name": "VIP ticket", "price": 20, "spots": 20, "enabled": true, "dateRanges": "[]" }
  ],
  "maxCustomCapacity": null
}'
```

A válasz az `events` tömbben tartalmazza a létrehozott eseményt (azonosító, időszakok, címkék, jegyek, munkavállalók, ismétlődés, státusz):

```json
{
  "message": "Successfully added new event.",
  "data": {
    "events": [
      {
        "id": 122,
        "name": "Wellness workshop",
        "price": 100,
        "periods": [
          { "id": 125, "eventId": 122, "periodStart": "2026-03-10 14:00:00", "periodEnd": "2026-03-10 22:30:00" }
        ],
        "status": "approved",
        "maxCapacity": 100,
        "show": true,
        "locationId": 2,
        "organizerId": 1,
        "type": "event"
      }
    ]
  }
}
```

## Esemény módosítása

Egy esemény adatait módosítja. Az `applyGlobally` mezővel a változtatást a következő ismétlődő eseményekre is érvényesítheted. Csak azokat a tulajdonságokat küldd el, amelyeket változtatni akarsz. A `providers` tömbben a hiányzó azonosítójú munkavállalók eltávolításra kerülnek az eseményről.

A tulajdonságok megegyeznek a létrehozásnál leírtakkal (mind opcionális), és kiegészülnek ezzel:

| Tulajdonság | Típus | Leírás |
|---|---|---|
| `applyGlobally` | logikai | A változtatás érvényesüljön-e a következő ismétlődő eseményekre is. Alapérték: `false`. |

```bash
curl --location 'https://pelda.hu/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/events/122' \
--header 'Content-Type: application/json' \
--header 'Amelia: AZ_API_KULCSOD' \
--data '{
  "name": "Wellness workshop updated",
  "applyGlobally": true,
  "customTickets": []
}'
```

A válasz az `events` objektumban csoportosítja a változásokat (`cloned`, `edited`, `added`, `deleted`, `rescheduled`).

## Esemény státuszának módosítása

Jóváhagy vagy elutasít egy eseményt, és a státuszváltást kiterjesztheti a következő ismétlődő eseményekre is.

| Tulajdonság | Típus | Kötelező | Leírás |
|---|---|---|---|
| `status` | szöveg | igen | `approved` (jóváhagyott) vagy `rejected` (elutasított). |
| `applyGlobally` | logikai | igen | A következő ismétlődő eseményekre is vonatkozzon-e. |

```bash
curl --location 'https://pelda.hu/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/events/status/122' \
--header 'Content-Type: application/json' \
--header 'Amelia: AZ_API_KULCSOD' \
--data '{ "applyGlobally": false, "status": "rejected" }'
```

## Eseményfoglalás módosítása

Egy meglévő eseményfoglalást módosít, az egyéni mezőket és a jegyadatokat is. Kötelező a `bookings` tömb (a módosítandó foglalásobjektumok).

```bash
curl --location 'https://pelda.hu/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/events/bookings/1145' \
--header 'Content-Type: application/json' \
--header 'Amelia: AZ_API_KULCSOD' \
--data '{
  "bookings": [
    {
      "customFields": {
        "7": { "label": "Address", "value": "", "type": "address" },
        "13": { "label": "file", "value": "", "type": "file" }
      },
      "persons": 1,
      "customerId": 10,
      "ticketsData": [
        { "id": 62, "eventTicketId": 39, "customerBookingId": 1145, "persons": 2, "price": 20 },
        { "id": 63, "eventTicketId": 38, "customerBookingId": 1145, "persons": 2, "price": 10 }
      ]
    }
  ],
  "couponCode": null,
  "createPaymentLinks": false
}'
```

A válasz tartalmazza a fizetés azonosítóját (`paymentId`) és azt, hogy a foglalás státusza változott-e (`bookingStatusChanged`).

## Esemény lekérése

Egyetlen esemény adatait adja vissza. Nincs további paraméter, az azonosító az útvonalban van.

```bash
curl --location 'https://pelda.hu/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/events/122' \
--header 'Amelia: AZ_API_KULCSOD'
```

## Események listázása

Az eseményeket keresőszóra, dátumtartományra, oldalra és vásárlóra szűrheted.

| Paraméter | Típus | Leírás |
|---|---|---|
| `search` | szöveg | Keresőszó. |
| `page` | egész | Oldalszám. |
| `dates` | tömb | Dátumtartomány: `dates[0]` a kezdő, `dates[1]` a záró nap, `ÉÉÉÉ-HH-NN` formában. |
| `customerId` | egész | Annak a vásárlónak az azonosítója, aki az eseményeket foglalta. |

```bash
curl --location 'https://pelda.hu/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/events&search=workshop&dates[0]=2026-05-01&dates[1]=2026-05-31&page=1' \
--header 'Amelia: AZ_API_KULCSOD'
```

A válasz az `events` tömbben adja a találatokat, a `count` mezőben a találatok számát.

## Naptárütközés ellenőrzése

Ellenőrzi a kiválasztott munkavállalók külső naptárait a megadott időszakokra. Segít kiszűrni az átfedéseket a csatlakoztatott Google vagy Outlook naptár eseményeivel, esemény létrehozásakor vagy módosításakor.

| Tulajdonság | Típus | Kötelező | Leírás |
|---|---|---|---|
| `providers` | tömb | igen | Az ellenőrzendő munkavállalók. |
| `periods` | tömb | igen | Az ellenőrzendő időszakok. |
| `eventIds` | tömb | nem | Azok az Amelia-események, amelyeket ki kell hagyni a naptárkeresésből. |
| `recurring` | objektum | nem | Az ismétlődés adatai az ütközésvizsgálathoz. |

```bash
curl --location 'https://pelda.hu/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/events/calendar' \
--header 'Content-Type: application/json' \
--header 'Amelia: AZ_API_KULCSOD' \
--data '{
  "providers": [ { "id": 1 } ],
  "periods": [
    { "id": null, "eventId": null, "periodStart": "2026-03-05 12:30:00", "periodEnd": "2026-03-05 23:30:00" }
  ],
  "eventIds": [82, 81],
  "recurring": { "cycle": null, "order": null, "until": null, "cycleInterval": null }
}'
```

Ütközés esetén a válasz `data.calendarConflict` értéke `true`.

## Törölhetőség ellenőrzése

Megmondja, törölhető-e az esemény. Ha nem, a válasz üzenete megadja az okot.

```bash
curl --location 'https://pelda.hu/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/events/effect/122' \
--header 'Amelia: AZ_API_KULCSOD'
```

Példaválasz, amikor a törlés nem engedélyezett: `"valid": false` és az üzenet: „Please cancel the event first before deleting it.” (előbb mondd le az eseményt).

## Eseményfoglalás törlése

Egy adott eseményfoglalást töröl. Nincs törzs, az azonosító az útvonalban áll.

```bash
curl --location --request POST 'https://pelda.hu/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/events/bookings/delete/1145' \
--header 'Amelia: AZ_API_KULCSOD'
```

## Esemény törlése

Töröl egy eseményt. Ismétlődő esemény esetén megadhatod, hogy a következőket is törölje.

| Tulajdonság | Típus | Leírás |
|---|---|---|
| `applyGlobally` | logikai | A következő ismétlődő események is törlődjenek-e. |

```bash
curl --location 'https://pelda.hu/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/events/delete/122' \
--header 'Content-Type: application/json' \
--header 'Amelia: AZ_API_KULCSOD' \
--data '{ "applyGlobally": false }'
```
