Skip to content
Syncore

Αναφορά API

REST API για πελάτες του Syncore. Κάθε token ανήκει σε έναν χρήστη και βλέπει μόνο τα δεδομένα της δικής του επιχείρησης. Τα tokens δημιουργούνται στο Προφίλ με δικαιώματα (abilities). Όριο αιτημάτων ανά λεπτό ανάλογα με το πλάνο, και προαιρετικά χαμηλότερο όριο ανά token (429 με Retry-After όταν ξεπεραστεί).

Όλα τα endpoints, όπως περιγράφονται στο openapi.json. Βάση: https://app.syncore.gr/api/v1 · Authorization: Bearer <token> · v1.0.0 · openapi.json

Products

get /api/v1/products Λίστα προϊόντων products:read

Παράμετροι

  • page query · integer
  • per_page query · integer max 100
  • search query · string — SKU ή όνομα
  • sku query · string — SKUs χωρισμένα με κόμμα
  • supplier_id query · integer
  • enabled query · integer [0, 1]
  • stock_status query · string [in_stock, low_stock, out_of_stock]

Απαντήσεις

  • 200 OK
    Παράδειγμα
    {
        "data": [
            {
                "id": 1,
                "sku": "string",
                "ean": "string",
                "name": "string",
                "brand": "string",
                "supplier": {
                    "id": 1,
                    "name": "string"
                },
                "base_price": 19.9,
                "final_price": 19.9,
                "manual_price": true,
                "enabled": true,
                "supplier_stock": 1,
                "variant_count": 1,
                "updated_at": "2026-10-29T10:00:00+02:00"
            }
        ],
        "meta": {
            "current_page": 1,
            "per_page": 1,
            "total": 1,
            "last_page": 1
        },
        "links": {}
    }
  • 403 Το token δεν έχει το απαιτούμενο δικαίωμα
  • 429 Ξεπεράστηκε το όριο αιτημάτων· δες Retry-After

get /api/v1/products/{id} Ένα προϊόν products:read

Παράμετροι

  • id path · integer υποχρεωτικό

Απαντήσεις

  • 200 OK
    Παράδειγμα
    {
        "data": {
            "id": 1,
            "sku": "string",
            "ean": "string",
            "name": "string",
            "brand": "string",
            "supplier": {
                "id": 1,
                "name": "string"
            },
            "base_price": 19.9,
            "final_price": 19.9,
            "manual_price": true,
            "enabled": true,
            "supplier_stock": 1,
            "variant_count": 1,
            "updated_at": "2026-10-29T10:00:00+02:00"
        }
    }
  • 404 Δεν βρέθηκε (ή ανήκει σε άλλη επιχείρηση)

patch /api/v1/products/{id} Ενεργό / χειροκίνητη τιμή products:write (+ prices:write για manual_price)

Παράμετροι

  • id path · integer υποχρεωτικό

Σώμα αιτήματος (JSON)

  • enabled boolean
  • manual_price number|null — null = επιστροφή στους κανόνες τιμών
Παράδειγμα
{
    "enabled": true,
    "manual_price": 19.9
}

Απαντήσεις

  • 200 OK
  • 403 Το token δεν έχει το απαιτούμενο δικαίωμα
  • 404 Δεν βρέθηκε (ή ανήκει σε άλλη επιχείρηση)
  • 422 Λάθος δεδομένα: {message, errors}

Inventory

get /api/v1/inventory Δικό σου απόθεμα inventory:read

Παράμετροι

  • page query · integer
  • per_page query · integer max 100
  • search query · string

Απαντήσεις

  • 200 OK
    Παράδειγμα
    {
        "data": [
            {
                "product_id": 1,
                "sku": "string",
                "name": "string",
                "quantity": 1,
                "reserved": 1,
                "last_sync_at": "2026-10-29T10:00:00+02:00"
            }
        ],
        "meta": {
            "current_page": 1,
            "per_page": 1,
            "total": 1,
            "last_page": 1
        }
    }

put /api/v1/inventory/{sku} Ορισμός αποθέματος για ένα SKU inventory:write

Παράμετροι

  • sku path · string υποχρεωτικό

Σώμα αιτήματος (JSON)

  • quantity integer υποχρεωτικό min 0
  • notes string
Παράδειγμα
{
    "quantity": 1,
    "notes": "string"
}

Απαντήσεις

  • 200 OK
  • 404 Δεν βρέθηκε (ή ανήκει σε άλλη επιχείρηση)
  • 422 Λάθος δεδομένα: {message, errors}

post /api/v1/inventory/bulk Μαζική ενημέρωση (έως 500) inventory:write

Σώμα αιτήματος (JSON)

  • items array<object> υποχρεωτικό max items 500
    • sku string υποχρεωτικό
    • quantity integer υποχρεωτικό min 0
Παράδειγμα
{
    "items": [
        {
            "sku": "string",
            "quantity": 1
        }
    ]
}

Απαντήσεις

  • 200 updated / failed / not_found λίστες SKU

Orders

get /api/v1/orders Λίστα παραγγελιών orders:read

Παράμετροι

  • page query · integer
  • per_page query · integer max 100
  • status query · string [pending, processing, shipped, completed, cancelled, refunded]
  • source_channel query · string
  • search query · string
  • placed_from query · string
  • placed_to query · string
  • updated_since query · string

Απαντήσεις

  • 200 OK

post /api/v1/orders Νέα παραγγελία από το δικό σου κατάστημα (idempotent στο external_ref) orders:write

Σώμα αιτήματος (JSON)

  • external_ref string υποχρεωτικό — ο κωδικός της παραγγελίας στο κατάστημά σου
  • order_number string
  • currency string default EUR
  • shipping_cost number
  • payment_method string
  • notes string
  • placed_at string
  • customer object
    • name string
    • email string
    • phone string
  • shipping_address object
  • billing_address object
  • items array<object> υποχρεωτικό max items 500
    • sku string υποχρεωτικό
    • name string
    • quantity integer υποχρεωτικό min 1
    • unit_price number υποχρεωτικό
Παράδειγμα
{
    "external_ref": "string",
    "order_number": "string",
    "currency": "string",
    "shipping_cost": 19.9,
    "payment_method": "string",
    "notes": "string",
    "placed_at": "2026-10-29T10:00:00+02:00",
    "customer": {
        "name": "string",
        "email": "string",
        "phone": "string"
    },
    "shipping_address": {
        "key": "string"
    },
    "billing_address": {
        "key": "string"
    },
    "items": [
        {
            "sku": "string",
            "name": "string",
            "quantity": 1,
            "unit_price": 19.9
        }
    ]
}

Απαντήσεις

  • 201 Δημιουργήθηκε
  • 200 Υπήρχε ήδη (ίδιο external_ref)
  • 422 Λάθος δεδομένα: {message, errors}

get /api/v1/orders/{id} Μία παραγγελία με γραμμές orders:read

Παράμετροι

  • id path · integer υποχρεωτικό

Απαντήσεις

  • 200 OK
    Παράδειγμα
    {
        "data": {
            "id": 1,
            "order_number": "string",
            "external_ref": "string",
            "source_channel": "string",
            "status": "pending",
            "currency": "string",
            "subtotal": 19.9,
            "shipping_cost": 19.9,
            "total_amount": 19.9,
            "customer": {
                "name": "string",
                "email": "string",
                "phone": "string"
            },
            "items": [
                {
                    "product_id": 1,
                    "sku": "string",
                    "name": "string",
                    "quantity": 1,
                    "unit_price": 19.9,
                    "total_price": 19.9
                }
            ]
        }
    }
  • 404 Δεν βρέθηκε (ή ανήκει σε άλλη επιχείρηση)

patch /api/v1/orders/{id}/status Αλλαγή κατάστασης (επόμενο βήμα ή ακύρωση) orders:write

pending → processing → shipped → completed· cancelled από κάθε μη τελική κατάσταση. Άλλη μετάβαση: 422 με allowed.

Παράμετροι

  • id path · integer υποχρεωτικό

Σώμα αιτήματος (JSON)

  • status string υποχρεωτικό ["processing", "shipped", "completed", "cancelled"]
Παράδειγμα
{
    "status": "processing"
}

Απαντήσεις

  • 200 OK
  • 404 Δεν βρέθηκε (ή ανήκει σε άλλη επιχείρηση)
  • 422 Λάθος δεδομένα: {message, errors}

post /api/v1/orders/{id}/shipment Αποστολή με μεταφορική και αριθμό αποστολής orders:write

Η παραγγελία γίνεται shipped και η μεταφορική/αριθμός αποστολής στέλνονται (στην ουρά) στο κανάλι προέλευσης (Skroutz, Shopflix, eMAG, Trendyol, Temu, TikTok Shop). Η πρόοδος φαίνεται στο shipment.push_status (pending, success, failed, skipped). Επανάληψη με τα ίδια στοιχεία ξαναδοκιμάζει μόνο αν δεν έχει πετύχει.

Παράμετροι

  • id path · integer υποχρεωτικό

Σώμα αιτήματος (JSON)

  • courier string υποχρεωτικό max length 64
  • tracking_number string υποχρεωτικό max length 128
Παράδειγμα
{
    "courier": "string",
    "tracking_number": "string"
}

Απαντήσεις

  • 200 OK
  • 404 Δεν βρέθηκε (ή ανήκει σε άλλη επιχείρηση)
  • 422 Λάθος δεδομένα: {message, errors}

Suppliers

get /api/v1/suppliers Οι προμηθευτές σου suppliers:read

Απαντήσεις

  • 200 OK

Channels

get /api/v1/channels Κανάλια πώλησης channels:read

Απαντήσεις

  • 200 OK

get /api/v1/feeds Διευθύνσεις feeds ανά κανάλι feeds:read

Απαντήσεις

  • 200 OK

Price rules

get /api/v1/price-rules Κανόνες τιμών prices:read

Παράμετροι

  • page query · integer
  • per_page query · integer max 100

Απαντήσεις

  • 200 OK

post /api/v1/price-rules Νέος κανόνας prices:write

Σώμα αιτήματος (JSON)

  • name string
  • description string
  • rule_type integer [1, 2, 3] — 1 ποσοστό, 2 σταθερό ποσό, 3 σταθερή τιμή
  • value number min 0
  • price_rule_scope integer [1, 2, 3, 4] — 1 όλα, 2 προμηθευτής, 3 κατηγορία, 4 προϊόν
  • global_supplier_id integer
  • global_category_id integer
  • global_product_id integer
  • rule_conditions boolean
  • price_comparison integer [1, 2] — 1 μικρότερη από, 2 μεγαλύτερη από
  • price_threshold number
  • is_enabled boolean
Παράδειγμα
{
    "name": "string",
    "description": "string",
    "rule_type": 1,
    "value": 19.9,
    "price_rule_scope": 1,
    "global_supplier_id": 1,
    "global_category_id": 1,
    "global_product_id": 1,
    "rule_conditions": true,
    "price_comparison": 1,
    "price_threshold": 19.9,
    "is_enabled": true
}

Απαντήσεις

  • 201 Δημιουργήθηκε
  • 422 Λάθος δεδομένα: {message, errors}

get /api/v1/price-rules/{id} Ένας κανόνας prices:read

Παράμετροι

  • id path · integer υποχρεωτικό

Απαντήσεις

  • 200 OK
  • 404 Δεν βρέθηκε (ή ανήκει σε άλλη επιχείρηση)

patch /api/v1/price-rules/{id} Αλλαγή (μερική) prices:write

Παράμετροι

  • id path · integer υποχρεωτικό

Σώμα αιτήματος (JSON)

  • name string
  • description string
  • rule_type integer [1, 2, 3] — 1 ποσοστό, 2 σταθερό ποσό, 3 σταθερή τιμή
  • value number min 0
  • price_rule_scope integer [1, 2, 3, 4] — 1 όλα, 2 προμηθευτής, 3 κατηγορία, 4 προϊόν
  • global_supplier_id integer
  • global_category_id integer
  • global_product_id integer
  • rule_conditions boolean
  • price_comparison integer [1, 2] — 1 μικρότερη από, 2 μεγαλύτερη από
  • price_threshold number
  • is_enabled boolean
Παράδειγμα
{
    "name": "string",
    "description": "string",
    "rule_type": 1,
    "value": 19.9,
    "price_rule_scope": 1,
    "global_supplier_id": 1,
    "global_category_id": 1,
    "global_product_id": 1,
    "rule_conditions": true,
    "price_comparison": 1,
    "price_threshold": 19.9,
    "is_enabled": true
}

Απαντήσεις

  • 200 OK
  • 404 Δεν βρέθηκε (ή ανήκει σε άλλη επιχείρηση)
  • 422 Λάθος δεδομένα: {message, errors}

delete /api/v1/price-rules/{id} Διαγραφή prices:write

Παράμετροι

  • id path · integer υποχρεωτικό

Απαντήσεις

  • 204 Διαγράφηκε
  • 404 Δεν βρέθηκε (ή ανήκει σε άλλη επιχείρηση)

Prices

get /api/v1/prices Τελικές τιμές πώλησης prices:read

Παράμετροι

  • page query · integer
  • per_page query · integer max 100
  • sku query · string — SKUs χωρισμένα με κόμμα
  • supplier_id query · integer

Απαντήσεις

  • 200 OK
    Παράδειγμα
    {
        "data": [
            {
                "product_id": 1,
                "sku": "string",
                "base_price": 19.9,
                "final_price": 19.9,
                "manual_price": true,
                "price_rule_id": 1,
                "updated_at": "2026-10-29T10:00:00+02:00"
            }
        ],
        "meta": {
            "current_page": 1,
            "per_page": 1,
            "total": 1,
            "last_page": 1
        },
        "links": {}
    }

Invoices

get /api/v1/invoices Παραστατικά Oxygen (τιμολόγια, αποδείξεις, πιστωτικά) invoices:read

Παράμετροι

  • page query · integer
  • per_page query · integer max 100
  • status query · string [pending, issued, failed]
  • kind query · string [invoice, credit_note]
  • order_id query · integer

Απαντήσεις

  • 200 OK
    Παράδειγμα
    {
        "data": [
            {
                "id": 1,
                "order_id": 1,
                "kind": "invoice",
                "status": "pending",
                "document_type": "string",
                "mydata_type": "string",
                "number": "string",
                "mark": "string",
                "total": 19.9,
                "is_paid": true,
                "pdf_url": "https://example.com/path",
                "error": "string",
                "issued_at": "2026-10-29T10:00:00+02:00",
                "created_at": "2026-10-29T10:00:00+02:00"
            }
        ],
        "meta": {
            "current_page": 1,
            "per_page": 1,
            "total": 1,
            "last_page": 1
        },
        "links": {}
    }

get /api/v1/invoices/{id} Ένα παραστατικό (pdf_url: σύνδεσμος προβολής/PDF του Oxygen) invoices:read

Παράμετροι

  • id path · integer υποχρεωτικό

Απαντήσεις

  • 200 OK
    Παράδειγμα
    {
        "data": {
            "id": 1,
            "order_id": 1,
            "kind": "invoice",
            "status": "pending",
            "document_type": "string",
            "mydata_type": "string",
            "number": "string",
            "mark": "string",
            "total": 19.9,
            "is_paid": true,
            "pdf_url": "https://example.com/path",
            "error": "string",
            "issued_at": "2026-10-29T10:00:00+02:00",
            "created_at": "2026-10-29T10:00:00+02:00"
        }
    }
  • 404 Δεν βρέθηκε (ή ανήκει σε άλλη επιχείρηση)

Webhooks

get /api/v1/webhooks Webhook endpoints webhooks:manage

Απαντήσεις

  • 200 OK

post /api/v1/webhooks Νέο endpoint (το secret επιστρέφεται μία φορά) webhooks:manage

Κάθε αποστολή: POST JSON {id, event, created_at, data} με headers X-Syncore-Event, X-Syncore-Delivery, X-Syncore-Timestamp και X-Syncore-Signature = sha256=HEX(HMAC-SHA256(secret, timestamp + '.' + body)). Μη-2xx απάντηση ξαναδοκιμάζεται (1, 5, 30 λεπτά, 2 ώρες). stock.low: μία φορά όταν το απόθεμα πέφτει στο όριο χαμηλού αποθέματος (data: product_id, sku, quantity, quantity_before, reserved, threshold). feed.generated: data: channel, trigger, products_count, file_size, feed_url, generated_at.

Σώμα αιτήματος (JSON)

  • url string υποχρεωτικό — δημόσια https διεύθυνση
  • events array<string> υποχρεωτικό
Παράδειγμα
{
    "url": "https://example.com/path",
    "events": [
        "order.created"
    ]
}

Απαντήσεις

  • 201 Δημιουργήθηκε (περιέχει secret)
  • 422 Λάθος δεδομένα: {message, errors}

delete /api/v1/webhooks/{id} Διαγραφή endpoint webhooks:manage

Παράμετροι

  • id path · integer υποχρεωτικό

Απαντήσεις

  • 204 Διαγράφηκε
  • 404 Δεν βρέθηκε (ή ανήκει σε άλλη επιχείρηση)

post /api/v1/webhooks/{id}/rotate-secret Νέο secret υπογραφής (επιστρέφεται μία φορά· το παλιό παύει αμέσως) webhooks:manage

Παράμετροι

  • id path · integer υποχρεωτικό

Απαντήσεις

  • 200 OK (περιέχει secret)
  • 404 Δεν βρέθηκε (ή ανήκει σε άλλη επιχείρηση)