Παραγγελίες
Οι παραγγελίες από όλα τα κανάλια σου (Skroutz, Shopflix, eMAG, Trendyol, Temu, TikTok Shop, WooCommerce, Shopify, …) και όσες δημιουργείς εσύ μέσω API.
| Endpoint | Ability |
|---|---|
GET /orders, GET /orders/{id} |
orders:read |
POST /orders |
orders:write |
PATCH /orders/{id}/status |
orders:write |
POST /orders/{id}/shipment |
orders:write |
Λίστα
curl -s "https://app.syncore.gr/api/v1/orders?status=pending&updated_since=2026-10-28T00:00:00Z" \
-H "Authorization: Bearer $SYNCORE_TOKEN"
Φίλτρα: status (pending, processing, shipped, completed, cancelled, refunded), source_channel, search (αριθμός / πελάτης), placed_from, placed_to, updated_since (ISO 8601), page, per_page.
Για συγχρονισμό, κράτα την ώρα του τελευταίου αιτήματος και ζήτα updated_since — ή χρησιμοποίησε τα webhooks order.created / order.updated.
Μία παραγγελία
GET /orders/{id} επιστρέφει την παραγγελία με τις γραμμές της:
{
"data": {
"id": 5001,
"order_number": "SK-240001",
"external_ref": null,
"source_channel": "skroutz",
"status": "processing",
"payment_status": "succeeded",
"payment_method": "card",
"currency": "EUR",
"subtotal": 39.8,
"shipping_cost": 3.5,
"total_amount": 43.3,
"customer": { "name": "Πελάτης Παράδειγμα", "email": "customer@example.com", "phone": "2100000000" },
"shipping_address": { "address": "Οδός 1", "city": "Αθήνα", "postcode": "10000" },
"billing_address": null,
"notes": null,
"shipment": {
"courier": null,
"tracking_number": null,
"shipped_at": null,
"push_status": null,
"push_error": null,
"pushed_at": null
},
"placed_at": "2026-10-29T09:40:00+02:00",
"created_at": "2026-10-29T09:41:00+02:00",
"updated_at": "2026-10-29T10:00:00+02:00",
"items": [
{ "id": 9001, "product_id": 1201, "sku": "ABC-1001", "name": "Παράδειγμα προϊόντος", "quantity": 2, "unit_price": 19.9, "total_price": 39.8 }
]
}
}
Νέα παραγγελία από το κατάστημά σου
POST /orders καταχωρεί παραγγελία του δικού σου καταστήματος (source_channel: "api"). Είναι idempotent στο external_ref: η ίδια τιμή ξανά επιστρέφει την υπάρχουσα παραγγελία με 200 αντί για 201.
curl -s -X POST "https://app.syncore.gr/api/v1/orders" \
-H "Authorization: Bearer $SYNCORE_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"external_ref": "SHOP-10045",
"order_number": "10045",
"currency": "EUR",
"shipping_cost": 3.5,
"payment_method": "cod",
"customer": { "name": "Πελάτης Παράδειγμα", "email": "customer@example.com", "phone": "2100000000" },
"shipping_address": { "address": "Οδός 1", "city": "Αθήνα", "postcode": "10000" },
"items": [ { "sku": "ABC-1001", "quantity": 2, "unit_price": 19.9 } ]
}'
Υποχρεωτικά: external_ref και items (1–500 γραμμές, καθεμία με sku, quantity ≥ 1, unit_price).
Αλλαγή κατάστασης
curl -s -X PATCH "https://app.syncore.gr/api/v1/orders/5001/status" \
-H "Authorization: Bearer $SYNCORE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"status": "processing"}'
Επιτρέπεται μόνο το επόμενο βήμα pending → processing → shipped → completed, ή cancelled από κάθε μη τελική κατάσταση. Άλλη μετάβαση απαντά 422 με errors.status = ["transition_not_allowed"] και allowed (τι επιτρέπεται τώρα).
Αποστολή (courier & αριθμός αποστολής)
POST /orders/{id}/shipment κάνει την παραγγελία shipped και στέλνει τη μεταφορική και τον αριθμό αποστολής (voucher) πίσω στο κανάλι προέλευσης — Skroutz, Shopflix, eMAG, Trendyol, Temu ή TikTok Shop.
curl -s -X POST "https://app.syncore.gr/api/v1/orders/5001/shipment" \
-H "Authorization: Bearer $SYNCORE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"courier": "ACS", "tracking_number": "1234567890"}'
Η αποστολή στο κανάλι γίνεται στην ουρά. Η πρόοδος φαίνεται στο shipment.push_status:
push_status |
Σημασία |
|---|---|
pending |
Στην ουρά |
success |
Το κανάλι το δέχτηκε |
failed |
Απέτυχε — δες shipment.push_error |
skipped |
Το κανάλι δεν χρειάζεται / δεν υποστηρίζει αποστολή στοιχείων |
Επανάληψη με τα ίδια στοιχεία ξαναδοκιμάζει μόνο αν δεν έχει ήδη πετύχει. Κάθε αλλαγή στέλνει webhook order.updated.