Analytics API
Το Analytics API παρέχει προγραμματιστική πρόσβαση στις δυνατότητες αναλυτικών στοιχείων προϊόντος, όπως ερωτήματα συμβάντων, funnels, ανάλυση διατήρησης (retention) και ανάλυση διαδρομών.
Όλα τα endpoints αυτής της σελίδας είναι σχετικά ως προς το βασικό URL: https://api-eu1.joryio.com/api - δείτε Επισκόπηση API.
Έλεγχος ταυτότητας
Όλα τα endpoints απαιτούν έλεγχο ταυτότητας μέσω κλειδιού API:
Authorization: Bearer YOUR_API_KEY
X-Workspace-Id: YOUR_WORKSPACE_ID
Εξερεύνηση συμβάντων
Λίστα συμβάντων
Λήψη σύνοψης όλων των καταγεγραμμένων συμβάντων.
GET /analytics/events
Παράμετροι query:
| Παράμετρος | Τύπος | Περιγραφή |
|---|---|---|
| startDate | string | Ημερομηνία έναρξης (YYYY-MM-DD) |
| endDate | string | Ημερομηνία λήξης (YYYY-MM-DD) |
| search | string | Φιλτράρισμα βάσει ονόματος συμβάντος |
| limit | number | Μέγιστα αποτελέσματα (προεπιλογή: 100) |
| channels | string | Προαιρετικό. Μέτρηση συμβάντων μηνυμάτων και in-app μόνο σε αυτά τα κανάλια, χωρισμένα με κόμμα - δείτε Φίλτρο καναλιών |
Απόκριση:
{
"events": [
{
"eventName": "signup_completed",
"totalCount": 15420,
"uniqueUsers": 12350,
"lastSeen": "2024-01-15T14:30:00Z"
}
],
"total": 45
}
Φίλτρο καναλιών
Τα GET /analytics/events, POST /analytics/events/trend και POST /analytics/events/query δέχονται προαιρετικό φίλτρο channels. Ισχύει μόνο για συμβάντα μηνυμάτων (message.*) και συμβάντα in-app (in_app.*): αυτά μετρώνται μόνο όταν το κανάλι τους είναι στη λίστα. Τα συμβάντα χωρίς κανάλι - αγορές, συνεδρίες, προσαρμοσμένα συμβάντα - μετρώνται πάντα, ό,τι κι αν λέει η λίστα.
- Κανάλια:
email,sms,whatsapp,push,viber,webhook,wallet,in_app,connector. Κάθε άλλη τιμή απορρίπτεται με400. - Το
GETδέχεται λίστα χωρισμένη με κόμμα (channels=email,sms)· οι διαδρομέςPOSTδέχονται πίνακα JSON ("channels": ["email", "sms"]). - Χωρίς την παράμετρο: κανένα φίλτρο - οι ίδιοι αριθμοί με πριν υπάρξει η παράμετρος. Κενό (
channels=ή[]): κανένα συμβάν μηνύματος ή in-app.
Όταν στέλνεται το channels, το GET /analytics/events επιστρέφει επίσης hiddenByChannel: τα συμβάντα μηνυμάτων και in-app που άφησε έξω το φίλτρο, ανά κανάλι.
{
"events": [],
"total": 45,
"hiddenByChannel": [{ "channel": "webhook", "count": 4012 }]
}
Λήψη τάσης συμβάντος
Λήψη πλήθους συμβάντων στον χρόνο.
POST /analytics/events/trend
Δέχεται το προαιρετικό φίλτρο channels - δείτε Φίλτρο καναλιών.
Σώμα αιτήματος:
{
"eventNames": ["signup_completed", "purchase_completed"],
"startDate": "2024-01-01",
"endDate": "2024-01-31",
"timeGranularity": "day"
}
Απόκριση:
[
{
"date": "2024-01-01",
"count": 523,
"uniqueUsers": 498
}
]
Λήψη ιδιοτήτων συμβάντος
Λίστα ιδιοτήτων για ένα συγκεκριμένο συμβάν.
GET /analytics/events/:eventName/properties
Απόκριση:
[
{
"propertyName": "plan_type",
"valueCount": 4
},
{
"propertyName": "source",
"valueCount": 12
}
]
Λήψη ανάλυσης ιδιότητας
Λήψη της κατανομής τιμών για μια ιδιότητα συμβάντος.
POST /analytics/events/property-breakdown
Σώμα αιτήματος:
{
"eventName": "purchase_completed",
"property": "payment_method",
"startDate": "2024-01-01",
"endDate": "2024-01-31"
}
Απόκριση:
{
"total": 5420,
"values": [
{ "value": "credit_card", "count": 3250, "percentage": 59.96 },
{ "value": "paypal", "count": 1520, "percentage": 28.04 },
{ "value": "bank_transfer", "count": 650, "percentage": 11.99 }
]
}
Ανάλυση funnel
Δημιουργία funnel
Αποθήκευση νέου ορισμού funnel.
POST /analytics/funnels
Σώμα αιτήματος:
{
"name": "Signup to Purchase",
"steps": [
{
"id": "step_1",
"order": 0,
"eventName": "signup_completed",
"filters": []
},
{
"id": "step_2",
"order": 1,
"eventName": "onboarding_completed",
"filters": []
},
{
"id": "step_3",
"order": 2,
"eventName": "purchase_completed",
"filters": []
}
],
"conversionWindowDays": 7
}
Λίστα funnels
GET /analytics/funnels
Ανάλυση funnel
Εκτέλεση ανάλυσης σε αποθηκευμένο funnel.
POST /analytics/funnels/:id/analyze
Σώμα αιτήματος:
{
"startDate": "2024-01-01",
"endDate": "2024-01-31",
"breakdown": {
"type": "event_property",
"property": "utm_source"
}
}
Απόκριση:
{
"totalUsers": 10000,
"overallConversion": 12.5,
"steps": [
{
"id": "step_1",
"order": 0,
"eventName": "signup_completed",
"enteredCount": 10000,
"conversionRate": 100,
"dropOffRate": 0
},
{
"id": "step_2",
"order": 1,
"eventName": "onboarding_completed",
"enteredCount": 6500,
"conversionRate": 65,
"dropOffRate": 35
},
{
"id": "step_3",
"order": 2,
"eventName": "purchase_completed",
"enteredCount": 1250,
"conversionRate": 19.23,
"dropOffRate": 80.77
}
],
"breakdown": [
{
"breakdownValue": "google",
"overallConversion": 15.2,
"steps": [...]
}
]
}
Γρήγορη ανάλυση funnel
Ανάλυση χωρίς αποθήκευση.
POST /analytics/funnels/quick-analysis
Ανάλυση διατήρησης
Ανάλυση διατήρησης
POST /analytics/retention/analyze
Σώμα αιτήματος:
{
"startEvent": "signup_completed",
"returnEvent": "session_started",
"startDate": "2024-01-01",
"endDate": "2024-01-31",
"timeUnit": "week",
"periods": 8
}
Απόκριση:
{
"timeUnit": "week",
"cohorts": [
{
"cohortDate": "2024-01-01",
"cohortSize": 1250,
"periods": [
{ "period": 0, "retained": 1250, "retentionRate": 100 },
{ "period": 1, "retained": 562, "retentionRate": 44.96 },
{ "period": 2, "retained": 375, "retentionRate": 30.0 }
]
}
],
"overallRetention": [100, 45.2, 31.5, 25.8, 22.1, 19.5, 17.8, 16.2]
}
Εξαγωγή διατήρησης
POST /analytics/retention/export
Επιστρέφει δεδομένα CSV.
Σύγκριση διατήρησης τμημάτων
Εκτελεί την ίδια ανάλυση διατήρησης σε 1 έως 10 αποθηκευμένα τμήματα και επιστρέφει μία γραμμή ανά τμήμα, ώστε να συγκριθούν οι καμπύλες τους. Αντικατέστησε το POST /analytics/retention/compare-cohorts, το οποίο δεν υπάρχει πλέον.
POST /analytics/retention/compare-segments
Σώμα αιτήματος:
{
"segmentIds": ["seg_9f2a", "seg_71bc"],
"startDate": "2024-01-01",
"endDate": "2024-01-31",
"entryEvent": "signup_completed",
"returnEvent": "session_started",
"timeUnit": "week",
"periods": 8
}
| Πεδίο | Υποχρεωτικό | Περιγραφή |
|---|---|---|
segmentIds | ναι | Από 1 έως 10 αναγνωριστικά τμημάτων. |
startDate, endDate | ναι | Το παράθυρο από το οποίο διαβάζονται τα συμβάντα εισόδου. |
entryEvent | όχι | Η ενέργεια που εντάσσει έναν χρήστη σε κοόρτη. |
returnEvent | όχι | Η ενέργεια που μετρά ως επιστροφή. |
timeUnit | όχι | day, week ή month. |
periods | όχι | Πόσες περίοδοι να παρακολουθηθούν. |
Απόκριση:
[
{
"segmentId": "seg_9f2a",
"segmentName": "Power users",
"retention": { "timeUnit": "week", "cohorts": [], "overallRetention": [] },
"resolvedUsers": 4820,
"analyzedUsers": 4820,
"truncated": false
},
{
"segmentId": "seg_71bc",
"segmentName": "All customers",
"retention": { "timeUnit": "week", "cohorts": [], "overallRetention": [] },
"resolvedUsers": 480000,
"analyzedUsers": 50000,
"truncated": true
}
]
| Πεδίο | Περιγραφή |
|---|---|
resolvedUsers | Το πραγματικό μέγεθος του τμήματος - κάθε μέλος στο οποίο αναλύθηκε. |
analyzedUsers | Από πόσα μέλη υπολογίστηκε το retention. Ίσο με το resolvedUsers εκτός αν το τμήμα ξεπέρασε το όριο. |
truncated | true όταν το τμήμα ξεπέρασε το όριο των 50.000 μελών, οπότε το retention περιγράφει ένα ντετερμινιστικό τυχαίο δείγμα analyzedUsers μελών - ποτέ τα πρώτα N, που θα ήταν μεροληπτικά. Δηλώστε και τους δύο αριθμούς όπου εμφανίζετε τα ποσοστά. |
error | Υπάρχει όταν αυτό ακριβώς το τμήμα δεν μπόρεσε να αναλυθεί. Οι υπόλοιπες γραμμές επιστρέφονται κανονικά και η γραμμή που απέτυχε δεν φέρει ποσοστά - μην την εμφανίσετε ως 0%. |
Ανάλυση διαδρομών
Ανάλυση διαδρομών
POST /analytics/paths/analyze
Σώμα αιτήματος:
{
"startDate": "2024-01-01",
"endDate": "2024-01-31",
"startEvent": "landing_page_view",
"direction": "forward",
"maxSteps": 5,
"minPathCount": 10,
"minPathPercent": 0.5,
"maxBranchesPerStep": 5,
"excludeEvents": ["heartbeat", "scroll"]
}
Απόκριση:
{
"totalUsers": 25000,
"totalPaths": 342,
"paths": [
{
"path": ["landing_page_view", "signup_started", "signup_completed"],
"count": 3250,
"percentage": 13.0
}
],
"sankey": {
"nodes": [
{ "id": "landing_page_view_0", "name": "landing_page_view" }
],
"links": [
{ "source": "landing_page_view_0", "target": "signup_started_1", "value": 5200 }
]
}
}
Dashboards
Δημιουργία dashboard
POST /analytics/dashboards
Σώμα αιτήματος:
{
"name": "Executive Dashboard",
"description": "Key metrics overview",
"widgets": [
{
"id": "widget-1",
"type": "metric",
"title": "Active Users",
"config": {
"eventName": "session_started",
"metric": "unique_users"
},
"layout": { "x": 0, "y": 0, "width": 3, "height": 2 }
}
]
}
Λίστα dashboards
GET /analytics/dashboards
Λήψη dashboard
GET /analytics/dashboards/:id
Ενημέρωση dashboard
PUT /analytics/dashboards/:id
Διαγραφή dashboard
DELETE /analytics/dashboards/:id
Αναλυτικά στοιχεία σε πραγματικό χρόνο
Λήψη ενεργών χρηστών
GET /analytics/realtime/active-users
Απόκριση:
{
"count": 1523,
"trend": 5.2
}
Ζωντανή ροή συμβάντων (SSE)
GET /analytics/realtime/events/stream
Επιστρέφει ροή Server-Sent Events με ζωντανά συμβάντα.
Προσαυξητικότητα
Δύο τελικά σημεία απαντούν σε ερωτήσεις που οι συνήθεις αναφορές δεν μπορούν: προκάλεσαν κάτι τα μηνύματα και στέλνω υπερβολικά πολλά. Και τα δύο στηρίζονται στην καθολική ομάδα ελέγχου - ένα τυχαία επιλεγμένο τμήμα επαφών που εξαιρείται από κάθε μάρκετινγκ, ώστε να υπάρχει κάτι έντιμο για σύγκριση.
Προσαύξηση έναντι καθολικής ομάδας ελέγχου
GET /analytics/global-holdout?startDate=2026-08-01&endDate=2026-08-31
Μετατροπές και έσοδα για όσους έλαβαν μάρκετινγκ στην περίοδο, έναντι της τυχαία εξαιρεθείσας ομάδας.
Το αποτέλεσμα τυλίγεται σε έναν φάκελο uplift. Είναι { "uplift": null } όταν δεν εκτελείται καθολική ομάδα ελέγχου - δεν υπάρχει σημείο σύγκρισης, και ένα αμέτρητο αποτέλεσμα δεν είναι μηδέν.
Απόκριση:
{
"uplift": {
"treatmentRecipients": 41280,
"treatmentConverters": 1650,
"treatmentRevenue": 82560,
"treatmentRevenuePerRecipient": 2.0,
"controlRecipients": 4600,
"controlConverters": 138,
"controlRevenue": 6900,
"controlRevenuePerRecipient": 1.5,
"incrementalRevenue": 20640,
"upliftPct": 33.3,
"significance": {
"controlRate": 0.03,
"treatmentRate": 0.04,
"pValue": 0.002,
"significant": true,
"controlInterval": [0.0255, 0.0353],
"treatmentInterval": [0.0381, 0.0419],
"reason": "significant",
"minConvertersPerArm": 10
},
"currency": "EUR",
"mixedCurrency": false,
"windowHours": 168
}
}
Το significance.significant ελέγχει το ΠΟΣΟΣΤΟ μετατροπής, όχι τα έσοδα: τα έσοδα ανά παραλήπτη είναι συνεχή και με βαριά ουρά, και ένας έλεγχος αναλογίας πάνω τους παράγει αριθμούς που φαίνονται βέβαιοι χωρίς να σημαίνουν τίποτα. Αντιμετωπίστε το incrementalRevenue ((treatmentRevenuePerRecipient - controlRevenuePerRecipient) x treatmentRecipients) ως εκτίμηση της οποίας η αξιοπιστία προέρχεται από το significance.significant, όχι από τη δική της ακρίβεια. Το significance είναι null όταν κάποιο σκέλος δεν έχει παραλήπτες· το reason λέει γιατί ένα αποτέλεσμα δεν είναι ακόμη σημαντικό (not_enough_conversions, no_difference_detected). Το upliftPct είναι null όταν το σκέλος ελέγχου δεν απέφερε έσοδα. Το windowHours είναι το παράθυρο συμπεριφοράς στο οποίο μετρήθηκαν και τα δύο σκέλη (προεπιλογή 168), και το mixedCurrency είναι true όταν οι αγορές εκτείνονται σε περισσότερα από ένα νομίσματα - δεν εφαρμόζεται μετατροπή συναλλάγματος.
Συχνότητα μηνυμάτων
GET /analytics/message-frequency?startDate=2026-08-01&endDate=2026-08-31
Μετατροπές ανά αριθμό μηνυμάτων που έλαβε ένα άτομο, χωρισμένες κατά το αν ήταν ήδη ενεργό πριν από την περίοδο.
Απόκριση:
{
"buckets": [
{ "bucket": "0", "tier": "engaged", "people": 2300, "buyers": 69, "purchaseRate": 3.0, "converters": 69, "conversionRate": 3.0,
"revenue": 3450, "revenuePerPerson": 1.5, "randomised": true },
{ "bucket": "1", "tier": "engaged", "people": 8100, "buyers": 405, "purchaseRate": 5.0, "converters": 405, "conversionRate": 5.0,
"revenue": 20250, "revenuePerPerson": 2.5 },
{ "bucket": "6-9", "tier": "engaged", "people": 1200, "buyers": 48, "purchaseRate": 4.0, "converters": 48, "conversionRate": 4.0,
"revenue": 4800, "revenuePerPerson": 4.0 }
],
"anchored": true,
"currency": "EUR",
"mixedCurrency": false,
"priorWindowDays": 90
}
Οι κάδοι είναι 0, 1, 2, 3, 4-5, 6-9, 10+. Το tier είναι engaged ή quiet, με βάση ανοίγματα και κλικ στις priorWindowDays πριν από την περίοδο - ποτέ εντός της, κάτι που θα ήταν κυκλικό.
Δύο πεδία καθορίζουν πώς επιτρέπεται να διαβαστούν οι αριθμοί:
- Το
randomisedεμφανίζεται μόνο σε κάδο0που χτίστηκε από την καθολική ομάδα ελέγχου. Ένα μηδέν φτιαγμένο με οποιονδήποτε άλλο τρόπο είναι άτομα που έτυχε να μη λάβουν τίποτα, και δεν έλαβαν για λόγους που τα κάνουν επίσης λιγότερο πιθανό να αγοράσουν. - Το
anchoredείναιtrueόταν υπάρχει τέτοιο μηδέν. Όταν είναιfalseδεν υπάρχει καθόλου κάδος0, σκόπιμα: μια επινοημένη βάση θα βρισκόταν ακριβώς στο σημείο έναντι του οποίου μετριέται κάθε άλλος αριθμός.
Διαβάστε την καμπύλη γνωρίζοντας ότι η μεροληψία κινείται προς μία κατεύθυνση. Όσοι λαμβάνουν περισσότερα μηνύματα είναι εξαρχής πιο ενεργοί, οπότε η γραμμή σπρώχνεται προς τα πάνω ό,τι κι αν ισχύει. Μια ανοδική γραμμή δεν αποδεικνύει τίποτα, ενώ μια γραμμή που ισιώνει ή πέφτει σε υψηλότερες συχνότητες είναι αξιόπιστη - εμφανίστηκε παρά τη μεροληψία που δρα εναντίον της.
Το converters μετρά παραγγελίες σε κάθε νόμισμα· το revenue αθροίζει μόνο το κυρίαρχο, που ονομάζεται στο currency. Όταν το mixedCurrency είναι true, η στήλη χρημάτων είναι ένα τμήμα και όχι άθροισμα με συναλλαγματικές ισοτιμίες.
Τα buyers και purchaseRate είναι αγορές (παραγγελίες), όχι μετατροπές: η καμπύλη καλύπτει όλο τον χώρο εργασίας, οπότε δεν υπάρχει στόχος καμπάνιας ή διαδρομής να μετρηθεί. Τα converters και conversionRate είναι τα ίδια δύο νούμερα με τα παλιά τους ονόματα, που διατηρούνται για τους υπάρχοντες πελάτες.
Απόδοση περιεχομένου
GET /analytics/content-performance?startDate=2026-08-01&endDate=2026-08-31&channel=email
Ποσοστά ανοίγματος, κλικ και αγοράς μετά την αποστολή κατά το τι είναι το μήνυμα - τόνος, τύπος προσφοράς, κάλεσμα σε δράση, μήκος, εξατομίκευση, εικόνες και θέμα - σε κάθε πρότυπο, παραλλαγή καμπάνιας και μήνυμα διαδρομής. Το channel είναι προαιρετικό.
Απόκριση:
{
"startDate": "2026-08-01",
"endDate": "2026-08-31",
"channel": null,
"minReached": 100,
"conversionWindowHours": 168,
"taxonomyVersion": "t1",
"totals": { "sent": 18400, "reached": 12100, "labelledSent": 17900, "unlabelledSent": 500, "identities": 42, "labelledIdentities": 40, "noGoalSent": 2300 },
"fields": {
"tone": [
{ "value": "friendly", "sent": 9100, "reached": 6000, "opened": 2520, "clicked": 420, "converted": 150, "goalReached": 5000, "bought": 180, "openRate": 42.0, "clickRate": 7.0, "conversionRate": 3.0, "purchaseRate": 3.0 },
{ "value": "urgent", "sent": 2200, "reached": 1500, "opened": 720, "clicked": 150, "converted": 0, "goalReached": 0, "bought": 60, "openRate": 48.0, "clickRate": 10.0, "conversionRate": null, "purchaseRate": 4.0 },
{ "value": "premium", "sent": 90, "reached": 80, "opened": 30, "clicked": 4, "converted": 1, "goalReached": 80, "bought": 1, "openRate": null, "clickRate": null, "conversionRate": null, "purchaseRate": null }
],
"offerType": [ "..." ],
"ctaType": [ "..." ]
},
"mergeFields": {
"version": "m2",
"measuredSent": 17400,
"pendingSent": 500,
"buckets": [
{
"field": "user.first_name", "placement": "subject", "usage": "merge", "channels": ["email"],
"with": { "sent": 6100, "reached": 4200, "opened": 1932, "clicked": 315, "converted": 120, "goalReached": 3800, "bought": 130, "openRate": 46.0, "clickRate": 7.5, "conversionRate": 3.16, "purchaseRate": 3.1 },
"without": { "sent": 8800, "reached": 5900, "opened": 2242, "clicked": 354, "converted": 140, "goalReached": 5200, "bought": 160, "openRate": 38.0, "clickRate": 6.0, "conversionRate": 2.69, "purchaseRate": 2.71 }
}
],
"other": null
}
}
Το fields έχει μία λίστα ανά ετικέτα (tone, urgency, offerType, ctaType, lengthBand, personalizationDepth, imageryPresent, primaryTopic), ταξινομημένη κατά άτομα που προσεγγίστηκαν. Τα ποσοστά μετρούν μοναδικά άτομα, χωρίς bots· τα openRate και clickRate είναι μέρος των ατόμων στα οποία παραδόθηκε το μήνυμα (push: επί του reached· in-app: επί των εμφανίσεων) - ο ίδιος κανόνας με τα ποσοστά καμπανιών (δείτε Πώς υπολογίζονται τα ποσοστά ανοίγματος και κλικ). Ένα ποσοστό είναι null κάτω από minReached άτομα, και σε κανάλι που δεν μπορεί να το μετρήσει (το push δεν έχει ανοίγματα). Τα conversionRate και purchaseRate περιγράφονται παρακάτω. Το totals.unlabelledSent είναι κίνηση της οποίας το περιεχόμενο δεν έχει ακόμη ετικέτα· το POST /ai/content/backfill (dashboard) επισημαίνει υπάρχον περιεχόμενο.
Τα conversionRate και converted είναι ο δικός στόχος μετατροπής κάθε μηνύματος - ο στόχος της καμπάνιας ή της διαδρομής του, μετρημένος με το παράθυρο και το μοντέλο απόδοσης αυτού του στόχου και πιστωμένος στην παραλλαγή ή στο μήνυμα της διαδρομής που πιστώνει το μοντέλο - επί του goalReached, των ατόμων που προσέγγισαν μηνύματα με στόχο. Μια γραμμή όπου κανένα μήνυμα δεν έχει στόχο έχει conversionRate: null, και ένα πρότυπο που στάλθηκε μόνο του δεν μετρά ποτέ ως μετατροπή. Το totals.noGoalSent είναι η κίνηση χωρίς στόχο. Τα purchaseRate και bought είναι το νούμερο παραγγελιών: αγορά από το ίδιο άτομο εντός conversionWindowHours μετά την αποστολή, ένα απλό παράθυρο όποιος κι αν είναι ο στόχος. Μέχρι τις 2026-10-14 το conversionRate ήταν αυτό το ποσοστό αγοράς.
Το mergeFields συγκρίνει το περιεχόμενο ανά πεδίο συγχώνευσης: ένας κάδος ανά όνομα πεδίου, placement (subject, preheader, title, body, cta, link - διεύθυνση συνδέσμου· οι μεταβλητές {{n}} του WhatsApp μετρούν ως το πεδίο στο οποίο είναι δεμένες) και usage (merge = εμφανίζεται, conditional = μόνο αποφασίζει τι εμφανίζεται), με τις ίδιες μετρήσεις και ποσοστά για τις αποστολές με ετικέτες που το χρησιμοποιούν (with) και για τις αποστολές με ετικέτες στα ίδια channels που δεν το χρησιμοποιούν (without). Το όριο minReached ισχύει για κάθε πλευρά. Μόνο ονόματα πεδίων, ποτέ τιμές. Εμφανίζονται έως 100 συνδυασμοί, πρώτα αυτοί με τα περισσότερα άτομα· οι υπόλοιποι αθροίζονται στο other και δεν χάνονται. Το pendingSent είναι κίνηση με ετικέτες της οποίας τα πεδία συγχώνευσης δεν έχουν διαβαστεί ακόμη· δεν ανήκει σε καμία πλευρά. Η σύγκριση είναι συσχέτιση, όχι αιτία.
Αποκρίσεις σφαλμάτων
Όλα τα endpoints επιστρέφουν τυπικές αποκρίσεις σφαλμάτων:
{
"statusCode": 400,
"message": "Invalid date range",
"error": "Bad Request"
}
| Κωδικός κατάστασης | Περιγραφή |
|---|---|
| 400 | Λανθασμένο αίτημα / σφάλμα επικύρωσης |
| 401 | Μη εξουσιοδοτημένο |
| 403 | Απαγορευμένο |
| 404 | Ο πόρος δεν βρέθηκε |
| 500 | Εσωτερικό σφάλμα διακομιστή |