Μετάβαση στο κύριο περιεχόμενο

E-Commerce API

Διαχειριστείτε τον κατάλογο προϊόντων σας, παρακολουθήστε παραγγελίες, εποπτεύστε τη δραστηριότητα καλαθιών και αναλύστε τα τμήματα RFM των πελατών σας.

Όλα τα endpoints αυτής της σελίδας είναι σχετικά ως προς το βασικό URL: https://api-eu1.joryio.com - δείτε Επισκόπηση API.

Σύμβαση ονομασίας ID

Το Joryio χρησιμοποιεί μια σαφή σύμβαση ονομασίας για τα αναγνωριστικά:

Τα δικά σας ID (χρησιμοποιήστε τα κατά τη δημιουργία/καταγραφή δεδομένων)

ΠεδίοΠεριγραφήΠαράδειγμα
productIdΤο δικό σας αναγνωριστικό προϊόντος (SKU, ID προϊόντος από την πλατφόρμα e-commerce σας)"SKU-12345"
orderIdΤο δικό σας αναγνωριστικό παραγγελίας (αριθμός παραγγελίας από την πλατφόρμα σας)"ORD-2024-001"
userIdΤο δικό σας αναγνωριστικό χρήστη"user-123"

ID του Joryio (επιστρέφονται στις αποκρίσεις του API)

ΠεδίοΠεριγραφήΠότε να το χρησιμοποιήσετε
idΤο εσωτερικό ID του Joryio για προϊόντα/παραγγελίεςΕπιστρέφεται στις αποκρίσεις του API· χρησιμοποιήστε το για ενημερώσεις/διαγραφές
joryioUserIdΤο εσωτερικό ID χρήστη του Joryio (το 24-hex id που επιστρέφεται στις αποκρίσεις του user API)Εναλλακτικό του userId όταν θέλετε αναφορά μέσω του ID του Joryio

Ευέλικτη ταυτοποίηση χρήστη

Κατά τη δημιουργία παραγγελιών ή την καταγραφή συμβάντων, μπορείτε να ταυτοποιήσετε χρήστες με οποιοδήποτε από τα δύο:

  • userId - Το δικό σας αναγνωριστικό χρήστη (το συνηθέστερο)
  • joryioUserId - Το εσωτερικό ID χρήστη του Joryio
// Using your user ID (recommended)
{ "orderId": "ORD-001", "userId": "user-123", ... }

// Using Joryio's internal user ID
{ "orderId": "ORD-001", "joryioUserId": "66a1f2c3d4e5f6a7b8c9d0e1", ... }

Έλεγχος ταυτότητας

Όλα τα αιτήματα απαιτούν έλεγχο ταυτότητας JWT:

Authorization: Bearer your_jwt_token
Content-Type: application/json
X-Workspace-Id: your_workspace_id

Κατάλογος προϊόντων

Δημιουργία προϊόντος

Δημιουργήστε ένα νέο προϊόν στον κατάλογό σας.

POST /catalog/products

Σώμα αιτήματος:

ΠεδίοΤύποςΑπαιτείταιΠεριγραφή
productIdstringΝαιΤο δικό σας μοναδικό αναγνωριστικό προϊόντος (SKU, ID προϊόντος)
namestringΝαιΌνομα προϊόντος
pricenumberΝαιΤιμή προϊόντος
descriptionstringΌχιΠεριγραφή προϊόντος
compareAtPricenumberΌχιΑρχική τιμή (για εκπτώσεις)
currencystringΌχιΚωδικός νομίσματος (προεπιλογή: USD)
categoriesstring[]ΌχιΚατηγορίες προϊόντος
tagsstring[]ΌχιΕτικέτες προϊόντος
brandstringΌχιΌνομα επωνυμίας
imageUrlstringΌχιURL κύριας εικόνας προϊόντος
urlstringΌχιURL σελίδας προϊόντος
inStockbooleanΌχιΔιαθεσιμότητα αποθέματος (προεπιλογή: true)
skustringΌχιΜονάδα διατήρησης αποθέματος (SKU)
variantsobject[]ΌχιΠαραλλαγές προϊόντος
customFieldsobjectΌχιΠροσαρμοσμένα γνωρίσματα

Παράδειγμα αιτήματος:

curl -X POST https://api-eu1.joryio.com/catalog/products \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"productId": "SKU-12345",
"name": "Classic Blue T-Shirt",
"price": 29.99,
"compareAtPrice": 39.99,
"currency": "USD",
"categories": ["Clothing", "T-Shirts"],
"tags": ["sale", "bestseller"],
"brand": "Acme Apparel",
"imageUrl": "https://example.com/images/blue-tshirt.jpg",
"url": "https://example.com/products/blue-tshirt",
"inStock": true,
"sku": "BTS-001-BL",
"variants": [
{
"id": "var-s",
"name": "Small",
"sku": "BTS-001-BL-S",
"price": 29.99,
"inStock": true,
"options": { "size": "S", "color": "Blue" }
},
{
"id": "var-m",
"name": "Medium",
"sku": "BTS-001-BL-M",
"price": 29.99,
"inStock": true,
"options": { "size": "M", "color": "Blue" }
}
]
}'

Απόκριση:

{
"id": "prod_abc123",
"productId": "SKU-12345",
"name": "Classic Blue T-Shirt",
"price": 29.99,
"createdAt": "2024-01-20T10:00:00.000Z"
}

Μαζικό upsert προϊόντων (σώμα-πίνακας)

Δεν υπάρχει ξεχωριστό endpoint μαζικών λειτουργιών: το POST /catalog/products δέχεται είτε ένα μεμονωμένο αντικείμενο προϊόντος είτε έναν σκέτο πίνακα JSON με αντικείμενα προϊόντων (χωρίς αντικείμενο-περιτύλιγμα). Η μορφή πίνακα δημιουργεί ή ενημερώνει έως 500 προϊόντα σε ένα αίτημα, με upsert βάσει productId.

POST /catalog/products

Σώμα αιτήματος:

Ένας πίνακας JSON (μέγιστο 500 στοιχεία· κενός πίνακας ή περισσότερα από 500 επιστρέφει 400). Κάθε στοιχείο ακολουθεί την ίδια μορφή με τη μορφή μεμονωμένου αντικειμένου, συμπεριλαμβανομένου του προαιρετικού πεδίου source ανά προϊόν.

Κάθε στοιχείο περνά από πλήρη επικύρωση. Ένα μη έγκυρο στοιχείο αναφέρεται στο failed με τον δείκτη του στον πίνακα - δεν γίνεται ποτέ σιωπηλά αποδεκτό - και τα υπόλοιπα έγκυρα στοιχεία εξακολουθούν να γίνονται upsert.

[
{ "productId": "SKU-001", "name": "Product 1", "price": 19.99 },
{ "productId": "SKU-002", "name": "Product 2", "price": 29.99, "source": "shopify" }
]

Απόκριση:

Σε αντίθεση με τη μορφή αντικειμένου (που επιστρέφει το προϊόν που δημιουργήθηκε), η μορφή πίνακα επιστρέφει μια συγκεντρωτική σύνοψη:

{
"processed": 2,
"upserted": 2,
"failed": []
}
ΠεδίοΠεριγραφή
processedΠλήθος στοιχείων που παραλήφθηκαν στον πίνακα του αιτήματος
upsertedΠροϊόντα που πραγματικά δημιουργήθηκαν ή ενημερώθηκαν
failedΑποτυχίες ανά στοιχείο: index (θέση στον πίνακα του αιτήματος), productId / sku (όταν υπάρχουν στο στοιχείο), reason

Λίστα προϊόντων

Ερώτημα προϊόντων με φιλτράρισμα και σελιδοποίηση.

GET /catalog/products

Παράμετροι query:

ΠαράμετροςΤύποςΠεριγραφή
searchstringΑναζήτηση βάσει ονόματος, περιγραφής ή SKU
categoriesstring[]Φιλτράρισμα βάσει κατηγοριών
tagsstring[]Φιλτράρισμα βάσει ετικετών
brandstringΦιλτράρισμα βάσει επωνυμίας
inStockbooleanΦιλτράρισμα βάσει κατάστασης αποθέματος
minPricenumberΕλάχιστη τιμή
maxPricenumberΜέγιστη τιμή
limitnumberΑποτελέσματα ανά σελίδα (προεπιλογή: 50)
offsetnumberΜετατόπιση σελιδοποίησης
sortBystringΠεδίο ταξινόμησης: name, price, createdAt, updatedAt
sortOrderstringasc ή desc

Παράδειγμα:

curl "https://api-eu1.joryio.com/catalog/products?categories=T-Shirts&inStock=true&limit=20" \
-H "Authorization: Bearer $TOKEN"

Λήψη κατηγοριών

Λίστα όλων των κατηγοριών προϊόντων.

GET /catalog/categories

Λήψη επωνυμιών

Λίστα όλων των επωνυμιών προϊόντων.

GET /catalog/brands

Στατιστικά καταλόγου

Σύνολα και υγεία καταλόγου, υπολογισμένα σε όλα τα προϊόντα - ποτέ σε μία σελίδα.

GET /catalog/stats

Απάντηση:

{
"productCount": 8214,
"categoryCount": 37,
"brandCount": 12,
"outOfStockCount": 341,
"lowStockCount": 96,
"unclassifiedCount": 18,
"lowStockThreshold": 10
}
ΠεδίοΠεριγραφή
outOfStockCountΠροϊόντα με quantity 0, ή inStock: false όταν δεν παρακολουθείται ποσότητα
lowStockCountΠροϊόντα με quantity από 1 έως lowStockThreshold
unclassifiedCountΠροϊόντα χωρίς κατηγορία ή χωρίς μάρκα
lowStockThresholdΤο όριο μονάδων στο οποίο υπολογίστηκε το lowStockCount

Παραγγελίες

Δημιουργία παραγγελίας

Καταγράψτε μια νέα παραγγελία.

POST /orders

Σώμα αιτήματος:

ΠεδίοΤύποςΑπαιτείταιΠεριγραφή
orderIdstringΝαιΤο δικό σας ID παραγγελίας (αριθμός παραγγελίας από την πλατφόρμα σας)
userIdstringΈνα από τα δύοΤο δικό σας ID χρήστη-πελάτη
joryioUserIdstringΈνα από τα δύοΤο εσωτερικό ID χρήστη του Joryio (εναλλακτικό του userId)
totalnumberΝαιΣύνολο παραγγελίας
itemsobject[]ΝαιΓραμμές παραγγελίας
statusstringΌχιΚατάσταση παραγγελίας (προεπιλογή: pending)
currencystringΌχιΚωδικός νομίσματος
subtotalnumberΌχιΜερικό σύνολο πριν τις εκπτώσεις
discountnumberΌχιΠοσό έκπτωσης
shippingnumberΌχιΚόστος αποστολής
taxnumberΌχιΠοσό φόρου
totalRefundednumberΌχιΠοσό που επιστράφηκε μέχρι τώρα, στο νόμισμα της παραγγελίας (προεπιλογή 0). Για μερική επιστροφή στείλτε το μερικό ποσό με status: partiallyRefunded· για πλήρη επιστροφή ορίστε το στο total με status: refunded. Οι επιστροφές αφαιρούνται από τα αποδιδόμενα έσοδα.
couponCodestringΌχιΕφαρμοσμένο κουπόνι
shippingAddressobjectΌχιΔιεύθυνση αποστολής
campaignIdstringΌχιΚαμπάνια απόδοσης (attribution)
canvasIdstringΌχιCanvas απόδοσης (attribution)
sourcestringΌχιΠηγή παραγγελίας (email, sms, direct)
utmSourcestringΌχιUTM source
utmMediumstringΌχιUTM medium
utmCampaignstringΌχιUTM campaign
Ταυτοποίηση χρήστη

Πρέπει να παρέχεται είτε το userId είτε το joryioUserId. Χρησιμοποιήστε το userId με τα δικά σας αναγνωριστικά χρηστών (το συνηθέστερο). Χρησιμοποιήστε το joryioUserId όταν έχετε το εσωτερικό ID χρήστη του Joryio (το 24-hex id που επιστρέφεται στις αποκρίσεις του user API).

Δομή γραμμής παραγγελίας:

{
"productId": "prod_abc123",
"name": "Blue T-Shirt",
"sku": "BTS-001",
"quantity": 2,
"price": 29.99,
"total": 59.98,
"imageUrl": "https://example.com/image.jpg"
}

Παράδειγμα αιτήματος:

curl -X POST https://api-eu1.joryio.com/orders \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"orderId": "ORD-2024-001",
"userId": "user-123",
"total": 89.97,
"subtotal": 99.97,
"discount": 10.00,
"shipping": 5.99,
"tax": 4.99,
"currency": "USD",
"couponCode": "SAVE10",
"items": [
{
"productId": "prod_abc123",
"name": "Blue T-Shirt",
"quantity": 2,
"price": 29.99,
"total": 59.98
},
{
"productId": "prod_def456",
"name": "Black Jeans",
"quantity": 1,
"price": 49.99,
"total": 49.99
}
],
"source": "email",
"campaignId": "camp_xyz789"
}'

Ολοκλήρωση παραγγελίας (fulfill)

Επισημάνετε μια παραγγελία ως απεσταλμένη.

POST /orders/:id/fulfill

Σώμα αιτήματος:

{
"trackingNumber": "1Z999AA10123456784",
"carrier": "UPS"
}

Ακύρωση παραγγελίας

Ακυρώστε μια παραγγελία.

POST /orders/:id/cancel

Σώμα αιτήματος:

{
"reason": "Customer requested cancellation"
}

Επιστροφή χρημάτων παραγγελίας

Επεξεργαστείτε μια επιστροφή χρημάτων.

POST /orders/:id/refund

Σώμα αιτήματος:

{
"refundAmount": 29.99,
"reason": "Product defective",
"partial": true
}

Στατιστικά παραγγελιών

Λήψη στατιστικών παραγγελιών για ένα εύρος ημερομηνιών.

GET /orders/stats?startDate=2024-01-01&endDate=2024-01-31

Απόκριση:

{
"totalOrders": 156,
"totalRevenue": 12450.50,
"averageOrderValue": 79.81,
"ordersByStatus": {
"pending": 5,
"processing": 12,
"shipped": 45,
"delivered": 90,
"cancelled": 4
}
}

Παρακολούθηση καλαθιών

Ενημέρωση καλαθιού

Καταγράψτε ή ενημερώστε το καλάθι ενός χρήστη.

PUT /carts

Σώμα αιτήματος:

{
"userId": "user_123",
"items": [
{
"productId": "prod_abc123",
"name": "Blue T-Shirt",
"price": 29.99,
"quantity": 2,
"total": 59.98,
"imageUrl": "https://example.com/image.jpg"
}
],
"value": 59.98,
"currency": "USD",
"checkoutUrl": "https://store.example.com/checkout?cart=abc123"
}

Προσθήκη στο καλάθι

Προσθέστε ένα προϊόν στο καλάθι ενός χρήστη.

POST /carts/add

Σώμα αιτήματος:

{
"userId": "user_123",
"item": {
"productId": "prod_abc123",
"name": "Blue T-Shirt",
"price": 29.99,
"quantity": 1,
"total": 29.99
}
}

Λήψη εγκαταλελειμμένων καλαθιών

Λίστα εγκαταλελειμμένων καλαθιών για καμπάνιες ανάκτησης.

GET /carts/abandoned

Παράμετροι query:

ΠαράμετροςΤύποςΠεριγραφή
minValuenumberΕλάχιστη αξία καλαθιού
abandonedMinutesAgonumberΜέγιστα λεπτά από την εγκατάλειψη
limitnumberΑποτελέσματα ανά σελίδα
offsetnumberΜετατόπιση σελιδοποίησης

Απόκριση:

{
"data": [
{
"id": "cart_123",
"userId": "user_456",
"items": [...],
"value": 149.99,
"abandonedAt": "2024-01-20T15:30:00.000Z",
"checkoutUrl": "https://store.example.com/checkout?cart=abc"
}
],
"total": 42,
"hasMore": true
}

Στατιστικά καλαθιών

Λήψη στατιστικών καλαθιών και εγκατάλειψης.

GET /carts/stats

Απόκριση:

{
"totalCarts": 1250,
"abandonedCarts": 312,
"recoveredCarts": 87,
"totalAbandonedValue": 45670.50,
"recoveryRate": 27.88
}

Ανάλυση RFM

Η ανάλυση RFM (Recency, Frequency, Monetary - πρόσφατη επαφή, συχνότητα, χρηματική αξία) τμηματοποιεί τους πελάτες βάσει της αγοραστικής τους συμπεριφοράς.

Λήψη δεδομένων RFM χρήστη

Λήψη βαθμολογιών RFM και τμήματος για έναν συγκεκριμένο χρήστη.

GET /rfm/user/:userId

Απόκριση:

{
"totalOrders": 12,
"totalSpent": 849.50,
"averageOrderValue": 70.79,
"firstOrderDate": "2023-06-15T10:00:00.000Z",
"lastOrderDate": "2024-01-18T14:30:00.000Z",
"daysSinceLastOrder": 2,
"hasActiveCart": false,
"rfmRecency": 5,
"rfmFrequency": 4,
"rfmMonetary": 4,
"rfmScore": "544",
"rfmSegment": "champions"
}

Λήψη κατανομής RFM

Λήψη της κατανομής πελατών στα τμήματα RFM.

GET /rfm/distribution

Απόκριση:

{
"champions": { "count": 150, "totalValue": 125000 },
"loyal": { "count": 320, "totalValue": 89000 },
"potential_loyalists": { "count": 180, "totalValue": 32000 },
"new_customers": { "count": 450, "totalValue": 28000 },
"at_risk": { "count": 95, "totalValue": 42000 },
"lost": { "count": 280, "totalValue": 15000 }
}

Τμήματα RFM

ΤμήμαΠεριγραφήΤυπικές βαθμολογίες RFM
ChampionsΟι καλύτεροι πελάτες: αγοράζουν συχνά, ξοδεύουν τα περισσότερα555, 554, 545
LoyalΣταθεροί πελάτες444, 443, 434
Potential LoyalistsΠρόσφατοι με μέση συχνότητα433, 343, 333
New CustomersΜόλις έκαναν την πρώτη τους αγορά511, 512, 411
PromisingΠρόσφατοι αλλά με χαμηλή συχνότητα422, 322, 312
Needs AttentionΜέσοι, με φθίνουσα αλληλεπίδραση332, 322, 233
About to SleepΚάτω από τον μέσο όρο, σε κίνδυνο211, 212, 221
At RiskΉταν πιστοί, δεν έχουν αγοράσει πρόσφατα144, 143, 244
Can't LoseΉταν οι καλύτεροι πελάτες, τώρα ανενεργοί155, 154, 255
HibernatingΧαμηλή αλληλεπίδραση, ανενεργοί για καιρό122, 121, 112
LostΧαμηλότερες βαθμολογίες, πιθανότατα χαμένοι111

Webhooks

Τα συμβάντα e-commerce εκπέμπουν webhooks που μπορούν να ενεργοποιήσουν ροές canvas:

ΣυμβάνΠεριγραφή
ecommerce.order.createdΝέα παραγγελία καταχωρήθηκε
ecommerce.order.fulfilledΗ παραγγελία απεστάλη
ecommerce.order.cancelledΗ παραγγελία ακυρώθηκε
ecommerce.order.refundedΈγινε επιστροφή χρημάτων παραγγελίας
ecommerce.order.status_changedΗ κατάσταση της παραγγελίας άλλαξε
ecommerce.cart.abandonedΤο καλάθι επισημάνθηκε ως εγκαταλελειμμένο
ecommerce.cart.recoveredΤο εγκαταλελειμμένο καλάθι ανακτήθηκε
ecommerce.cart.updatedΤο περιεχόμενο του καλαθιού άλλαξε

Αναζήτηση με τα δικά σας ID

Λήψη προϊόντος με το δικό σας ID προϊόντος

Ανακτήστε ένα προϊόν χρησιμοποιώντας το δικό σας αναγνωριστικό προϊόντος.

GET /catalog/products/by-product-id/:productId

Παράδειγμα:

curl "https://api-eu1.joryio.com/catalog/products/by-product-id/SKU-12345" \
-H "Authorization: Bearer $TOKEN"

Λήψη παραγγελίας με το δικό σας ID παραγγελίας

Ανακτήστε μια παραγγελία χρησιμοποιώντας το δικό σας αναγνωριστικό παραγγελίας.

GET /orders/by-order-id/:orderId

Παράδειγμα:

curl "https://api-eu1.joryio.com/orders/by-order-id/ORD-2024-001" \
-H "Authorization: Bearer $TOKEN"

Αποκρίσεις σφαλμάτων

{
"statusCode": 404,
"message": "Product SKU-12345 not found",
"error": "Not Found"
}
Κωδικός κατάστασηςΠεριγραφή
400Μη έγκυρο σώμα αιτήματος
401Απαιτείται έλεγχος ταυτότητας
403Ανεπαρκή δικαιώματα
404Ο πόρος δεν βρέθηκε
409Σύγκρουση (διπλότυπο εξωτερικό ID)
500Εσωτερικό σφάλμα διακομιστή