# Create / easy.affiliate REST-API (Orders)

## 📝 Einleitung
Um neue Orders automatisiert im easy.affiliate-System anzulegen, steht ein REST-konformer Webservice zur Verfügung. Über die HTTP-Methode **POST** können neue Transaktionen übermittelt werden. Jeder User erhält hierfür einen Authentifizierungs-Token und eine Login-ID, die im Frontend einsehbar sind.

---

## 🔐 Authentifizierung
Für den Zugriff sind folgende Header erforderlich:

| Header | Beschreibung | Typ |
| :--- | :--- | :--- |
| **Content-Type** | Muss auf `application/json` gesetzt sein | String |
| **X-Network-ID** | Netzwerk-ID: meist `-1` für mandantenübergreifende API | Integer |
| **X-Auth-Token** | Dein API-Token (im Frontend sichtbar) | String |
| **X-Auth-ID** | Deine Login-ID (im Frontend sichtbar) | Integer |

---

## 📩 Endpunkte

* **Admin:** `https://SUBDOMAIN.de/ws/V6/admin/JSON/Orders`
* **Advertiser:** `https://SUBDOMAIN.de/ws/V6/advertiser/JSON/Orders`

---

## 🧪 Beispiel (cURL)

```bash
curl -X POST \
  -H "Content-Type: application/json" \
  -H "X-Network-ID: -1" \
  -H "X-Auth-Token: ADMIN_APIUSER_TOKEN" \
  -H "X-Auth-ID: ADMIN_APIUSER_LOGIN_ID" \
  -d '[{
    "ordertoken": "testorder001",
    "campaign_id": 1,
    "trigger_id": 2,
    "status": 1,
    "turnover": 199.99,
    "commission": 20.00
  }]' \
  https://SUBDOMAIN.de/ws/V6/admin/JSON/Orders
```

---

### 🧾 Body-Parameter

| Parameter | Beschreibung | Datentyp | Pflichtfeld |
| :--- | :--- | :--- | :--- |
| **ordertoken** | Eindeutiger Identifier für die Order. Muss systemweit eindeutig sein. | String | ✅ Ja |
| **campaign_id** | ID der Kampagne, der die Order zugeordnet wird. | Integer | ✅ Ja |
| **trigger_id** | ID des Triggers, der bei Nutzung von `ordertoken` zwingend angegeben werden muss. | Integer | ✅ Ja |
| **status** | Status der Order: `0` = offen, `1` = bestätigt, `2` = storniert | Integer | ✅ Ja |
| **turnover** | Bestellwert in Kampagnenwährung | Float | ✅ Ja |
| **original_turnover** | Bestellwert in Fremdwährung | Float | Nein |
| **commission** | Provisionswert in Kampagnenwährung. Kann übergeben werden, falls selbst berechnet | Float | Nein |
| **cancel_reason** | Angabe eines Stornogrundes bei Status = 2 (storniert) | String | Nein |

---

### 📘 Hinweise

 **Wichtige Implementierungsdetails:**
* **ordertoken:** Muss **eindeutig** sein – idealerweise eine Kombination aus Zeitstempel, Shop-ID oder externer Ordernummer.
* **trigger_id:** Wenn du diese nicht kennst, frage im Frontend deine Kampagnenkonfiguration ab.
* **Bulk-Aktionen:** Du kannst auch mehrere Orders in einem Array auf einmal anlegen.
* **Updates:** Wird eine Order mit gleichem `ordertoken` bereits im System gefunden, kann ein `PUT-Request` genutzt werden, um sie zu aktualisieren.