Skip to content
Syncore

API reference

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

Every endpoint, as described in openapi.json. Base URL: https://app.syncore.gr/api/v1 · Authorization: Bearer <token> · v1.0.0 · openapi.json

Products

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

Parameters

  • 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]

Responses

  • 200 OK
    Example
    {
        "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

Parameters

  • id path · integer required

Responses

  • 200 OK
    Example
    {
        "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)

Parameters

  • id path · integer required

Request body (JSON)

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

Responses

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

Inventory

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

Parameters

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

Responses

  • 200 OK
    Example
    {
        "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

Parameters

  • sku path · string required

Request body (JSON)

  • quantity integer required min 0
  • notes string
Example
{
    "quantity": 1,
    "notes": "string"
}

Responses

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

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

Request body (JSON)

  • items array<object> required max items 500
    • sku string required
    • quantity integer required min 0
Example
{
    "items": [
        {
            "sku": "string",
            "quantity": 1
        }
    ]
}

Responses

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

Orders

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

Parameters

  • 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

Responses

  • 200 OK

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

Request body (JSON)

  • external_ref string required — ο κωδικός της παραγγελίας στο κατάστημά σου
  • 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> required max items 500
    • sku string required
    • name string
    • quantity integer required min 1
    • unit_price number required
Example
{
    "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
        }
    ]
}

Responses

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

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

Parameters

  • id path · integer required

Responses

  • 200 OK
    Example
    {
        "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.

Parameters

  • id path · integer required

Request body (JSON)

  • status string required ["processing", "shipped", "completed", "cancelled"]
Example
{
    "status": "processing"
}

Responses

  • 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). Επανάληψη με τα ίδια στοιχεία ξαναδοκιμάζει μόνο αν δεν έχει πετύχει.

Parameters

  • id path · integer required

Request body (JSON)

  • courier string required max length 64
  • tracking_number string required max length 128
Example
{
    "courier": "string",
    "tracking_number": "string"
}

Responses

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

Suppliers

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

Responses

  • 200 OK

Channels

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

Responses

  • 200 OK

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

Responses

  • 200 OK

Price rules

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

Parameters

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

Responses

  • 200 OK

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

Request body (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
Example
{
    "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
}

Responses

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

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

Parameters

  • id path · integer required

Responses

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

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

Parameters

  • id path · integer required

Request body (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
Example
{
    "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
}

Responses

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

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

Parameters

  • id path · integer required

Responses

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

Prices

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

Parameters

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

Responses

  • 200 OK
    Example
    {
        "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

Parameters

  • 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

Responses

  • 200 OK
    Example
    {
        "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

Parameters

  • id path · integer required

Responses

  • 200 OK
    Example
    {
        "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

Responses

  • 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.

Request body (JSON)

  • url string required — δημόσια https διεύθυνση
  • events array<string> required
Example
{
    "url": "https://example.com/path",
    "events": [
        "order.created"
    ]
}

Responses

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

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

Parameters

  • id path · integer required

Responses

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

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

Parameters

  • id path · integer required

Responses

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