{
  "aboutHtml": "<p>Το Sora 2 είναι το μοντέλο παραγωγής βίντεο και ήχου της OpenAI για δυναμικά κλιπ από γραπτή περιγραφή σκηνής ή εικόνα αναφοράς. Παράγει την οπτική ακολουθία μαζί με συγχρονισμένη ομιλία, εφέ και ήχο περιβάλλοντος. Το βασικό προφίλ Sora 2 προορίζεται για οπτική εξερεύνηση, ανάπτυξη ιδεών, πρωτότυπα και πρόχειρο μοντάζ. Το Sora 2 Pro είναι χωριστή έκδοση για μεγαλύτερη οπτική πιστότητα και τελική επεξεργασία υψηλότερης ανάλυσης.</p><h4>Περιγράψτε ένα πλάνο που βλέπεται και ακούγεται</h4><p>Ο οδηγός prompting του κατασκευαστή οργανώνει ένα χρήσιμο brief γύρω από το κάδρο, το θέμα, τη δράση, το σκηνικό και το φως. Δώστε στη σκηνή συνεκτικό οπτικό ύφος και περιγράψτε την κίνηση σε σαφή στάδια. Μια πρωτότυπη ιδέα προϊόντος μπορεί να δείχνει ένα μικρό μηχανικό αντικείμενο που περιστρέφεται μία φορά σε πάγκο εργασίας, ενώ η κάμερα πλησιάζει αργά, με απαλό φως από παράθυρο και διακριτικό ήχο μοτέρ. Δηλώστε τι πρέπει να προσέξει ο θεατής και πώς τελειώνει η δράση.</p><p>Κρατήστε κατανοητές την κίνηση της κάμερας και τη δράση του θέματος σε κάθε πλάνο. Μια σύνθετη ακολουθία μπορεί να χωριστεί σε διακριτά τμήματα πλάνων, καθένα με δικό του κάδρο, δράση και φωτισμό. Διατηρήστε τις ίδιες λεπτομέρειες θέματος και παλέτα όταν πολλά κλιπ προορίζονται να αποτελέσουν μία ακολουθία. Ο οδηγός τονίζει ότι τα συντομότερα πλάνα γενικά ακολουθούν πιο αξιόπιστα τις οδηγίες και ότι επαναλαμβανόμενες παραγωγές με το ίδιο prompt δίνουν διαφορετικές λήψεις.</p><p>Η παρουσίαση του μοντέλου περιγράφει βελτιωμένη φυσική συμπεριφορά και συνέχεια μεταξύ πλάνων, σε ρεαλιστικό, κινηματογραφικό και anime ύφος. Πρόκειται για δυνατότητες που πρέπει να κατευθύνετε και να εξετάζετε. Ελέγξτε την κίνηση, την επαφή αντικειμένων, τις αναλογίες και τη συνέχεια, χωρίς να θεωρείτε ότι ένα πειστικό πρώτο καρέ εγγυάται συνεκτική ακολουθία. Αν μια δράση είναι ασαφής, απλοποιήστε την και δώστε της ορατή αρχή και τέλος.</p><h4>Κατευθύνετε χωριστά τον διάλογο και τον ήχο</h4><p>Προσδιορίστε τις ατάκες χωριστά από την οπτική περιγραφή και χρησιμοποιήστε σταθερές ετικέτες για τους ομιλητές. Κρατήστε τον διάλογο αρκετά σύντομο ώστε να χωρά στη δράση και στην επιθυμητή διάρκεια του κλιπ. Σε κινούμενο σχέδιο με δύο χαρακτήρες, εναλλάξτε μια σύντομη ερώτηση και απάντηση, αντί να ζητάτε να χωρέσει μακρύς λόγος σε σύντομο πλάνο. Ο οδηγός προειδοποιεί ότι ο σύνθετος, εκτενής διάλογος μπορεί να διαταράξει τον ρυθμό και τον συγχρονισμό.</p><p>Περιγράψτε το ηχητικό τοπίο της σκηνής: τον ήχο μιας μικρής κίνησης, την ατμόσφαιρα του χώρου ή τον ρυθμό ενός περιβαλλοντικού εφέ. Εξηγήστε ποιος ήχος πρέπει να συμπίπτει με τη δράση. Ακούστε την παραγόμενη ομιλία και τα εφέ μαζί με την εικόνα, ελέγχοντας την αντιστοίχιση ομιλητών, τις λέξεις και τον χρονισμό. Ο συγχρονισμένος ήχος αποτελεί μέρος του κλιπ και όχι χωριστή απάντηση κειμένου.</p><h4>Μέγεθος, διάρκεια και άνοιγμα καθοδηγούμενο από εικόνα</h4><p>Τα τεκμηριωμένα μεγέθη εξόδου του βασικού μοντέλου είναι 720×1280 κατακόρυφα και 1280×720 οριζόντια. Τα μεγέθη υψηλότερης ανάλυσης του προφίλ Pro δεν πρέπει να αποδίδονται στο βασικό Sora 2. Το μέγεθος και η διάρκεια είναι ρητές ρυθμίσεις του αιτήματος· η αναγραφή άλλου μεγέθους ή το αίτημα για μεγαλύτερη ταινία στο prompt δεν τις αλλάζει. Η αναφορά δημιουργίας περιλαμβάνει ρυθμίσεις κλιπ 4, 8 και 12 δευτερολέπτων, οπότε προετοιμάστε ένα σύντομο, καθορισμένο στάδιο δράσης. Η διευρυμένη ροή του παραγωγού τεκμηριώνει επίσης ρυθμίσεις 16 και 20 δευτερολέπτων.</p><p>Η εικόνα αναφοράς καθορίζει το πρώτο καρέ και το κείμενο περιγράφει τι ακολουθεί. Ο παραγωγός υποστηρίζει αναφορές JPEG, PNG και WebP και απαιτεί η εικόνα να έχει το επιλεγμένο μέγεθος βίντεο. Προετοιμάστε το θέμα, το περιβάλλον και τη σύνθεση σε αυτή την αρχική εικόνα και ζητήστε συγκεκριμένη κίνηση. Πρόκειται για αναφορά αρχικού καρέ και όχι εγγύηση διατήρησης κάθε λεπτομέρειας σε όλο το κλιπ.</p><h4>Επαναχρησιμοποιήσιμοι μη ανθρώπινοι χαρακτήρες</h4><p>Η διευρυμένη ροή του παραγωγού μπορεί να δημιουργήσει επαναχρησιμοποιήσιμο στοιχείο χαρακτήρα από σύντομο βίντεο αναφοράς ζώου, μασκότ ή αντικειμένου. Οι οδηγίες προετοιμασίας ζητούν κλιπ MP4 περίπου δύο έως τεσσάρων δευτερολέπτων, 720p έως 1080p, σε 16:9 ή 9:16. Η αντιστοίχιση αναλογίας διαστάσεων πηγής και εξόδου βοηθά να αποφευχθεί παραμορφωμένη εμφάνιση. Η παραγωγή μπορεί να αναφέρεται σε έως δύο χαρακτήρες.</p><p>Κρατήστε το αναγνωριστικό χαρακτήρα και αναφέρετε το όνομά του στο prompt· η απλή αποστολή του αναγνωριστικού δεν αποτελεί όλη την προετοιμασία του οδηγού. Τα στοιχεία χαρακτήρων μπορούν να συνοδεύουν παραγωγή από εικόνα, αλλά οι επεκτάσεις βίντεο δεν τα δέχονται. Ο παραγωγός αποκλείει από προεπιλογή μεταφορτώσεις χαρακτήρων με ανθρώπινη ομοιότητα και απορρίπτει εικόνες αναφοράς με ανθρώπινα πρόσωπα στην τεκμηριωμένη ροή API. Οι δυνατότητες προσωπικών χαρακτήρων της εφαρμογής Sora είναι χωριστή ροή προϊόντος.</p><h4>Συνεχίστε ή επεξεργαστείτε ολοκληρωμένο κλιπ</h4><p>Μια επέκταση λαμβάνει ολοκληρωμένο αρχικό βίντεο και prompt συνέχειας, χρησιμοποιώντας ολόκληρο το αρχικό κλιπ ως συμφραζόμενα για την κίνηση, την κατεύθυνση της κάμερας και τη συνέχεια της σκηνής. Ο οδηγός περιγράφει προσθήκες έως 20 δευτερολέπτων ανά επέκταση. Η τεκμηριωμένη είσοδος επέκτασης είναι βίντεο και κείμενο· πρόσθετες αναφορές χαρακτήρων ή εικόνων αποκλείονται από αυτήν τη λειτουργία. Περιγράψτε πώς συνεχίζεται η υπάρχουσα δράση, αντί να εισάγετε άσχετη σκηνή χωρίς μετάβαση.</p><p>Η επεξεργασία βίντεο στοχεύει σε σαφή αλλαγή υπάρχοντος κλιπ. Μια εστιασμένη αναθεώρηση μπορεί να αλλάζει το χρώμα αντικειμένου ή την παλέτα της σκηνής, διατηρώντας το υπόλοιπο πλάνο. Ο οδηγός του παραγωγού συνιστά μία σαφώς ορισμένη αλλαγή κάθε φορά και διακρίνει την επεξεργασία παραγόμενου βίντεο από τη μεταφόρτωση αυθαίρετου υλικού, η οποία έχει χωριστή προϋπόθεση επιλεξιμότητας. Κρατήστε την ολοκληρωμένη πηγή και προσδιορίστε την ακριβή ζητούμενη αναθεώρηση πριν από νέα επεξεργασία.</p><h4>Εργασίες απόδοσης και τελικό βίντεο</h4><p>Η τεκμηριωμένη ροή βίντεο του παραγωγού είναι ασύγχρονη: μια υποβληθείσα εργασία μπορεί να βρίσκεται σε ουρά ή σε εξέλιξη πριν ολοκληρωθεί ή αποτύχει. Η ολοκληρωμένη εργασία δίνει βίντεο MP4· οι μικρογραφίες και τα φύλλα καρέ υποστηρίζουν προεπισκόπηση και περιήγηση. Κρατήστε την ταυτότητα της εργασίας συνδεδεμένη με το prompt, τις αναφορές και τα επιστρεφόμενα αρχεία. Η αρχική απάντηση εργασίας δεν είναι το τελικό βίντεο προς αναπαραγωγή.</p><p>Η συνήθης ροή λήψης περιγράφει διάρκεια ζωής URL λήψης μίας ώρας. Η διευρυμένη μαζική ροή προετοιμάζει ανεξάρτητα αιτήματα απόδοσης JSON με σταθερά αναγνωριστικά στοιχείων, μεταφορτωμένες αναφορές και αποτέλεσμα αντιστοιχισμένο σε κάθε πλάνο· τα ολοκληρωμένα αρχεία της έχουν χωριστή περίοδο λήψης έως 24 ώρες. Αποθηκεύστε έγκαιρα το ολοκληρωμένο κλιπ και εξετάστε την πραγματική εικόνα και τον ήχο πριν το θεωρήσετε επιλεγμένη λήψη.</p><p>Οι τεκμηριωμένοι περιορισμοί περιεχομένου του API του παραγωγού απαιτούν υλικό κατάλληλο για κοινό κάτω των 18 και απορρίπτουν χαρακτήρες ή μουσική που προστατεύονται από πνευματικά δικαιώματα και την παραγωγή πραγματικών ανθρώπων. Προετοιμάστε ανάλογα τη σκηνή και τις αναφορές. Το άμεσο αποτέλεσμα του μοντέλου είναι βίντεο με ήχο, όχι παραγόμενες στατικές εικόνες, απόκριση εργαλείου συνομιλίας ή ταινία απεριόριστης διάρκειας. Διατηρήστε την ακριβή ταυτότητα του βασικού μοντέλου και το αποδεκτό αρχικό κλιπ όταν συνεχίζετε μια οπτική ιδέα.</p>",
  "aboutText": "Το Sora 2 είναι το μοντέλο παραγωγής βίντεο και ήχου της OpenAI για δυναμικά κλιπ από γραπτή περιγραφή σκηνής ή εικόνα αναφοράς. Παράγει την οπτική ακολουθία μαζί με συγχρονισμένη ομιλία, εφέ και ήχο περιβάλλοντος. Το βασικό προφίλ Sora 2 προορίζεται για οπτική εξερεύνηση, ανάπτυξη ιδεών, πρωτότυπα και πρόχειρο μοντάζ. Το Sora 2 Pro είναι χωριστή έκδοση για μεγαλύτερη οπτική πιστότητα και τελική επεξεργασία υψηλότερης ανάλυσης.\n\n### Περιγράψτε ένα πλάνο που βλέπεται και ακούγεται\n\nΟ οδηγός prompting του κατασκευαστή οργανώνει ένα χρήσιμο brief γύρω από το κάδρο, το θέμα, τη δράση, το σκηνικό και το φως. Δώστε στη σκηνή συνεκτικό οπτικό ύφος και περιγράψτε την κίνηση σε σαφή στάδια. Μια πρωτότυπη ιδέα προϊόντος μπορεί να δείχνει ένα μικρό μηχανικό αντικείμενο που περιστρέφεται μία φορά σε πάγκο εργασίας, ενώ η κάμερα πλησιάζει αργά, με απαλό φως από παράθυρο και διακριτικό ήχο μοτέρ. Δηλώστε τι πρέπει να προσέξει ο θεατής και πώς τελειώνει η δράση.\n\nΚρατήστε κατανοητές την κίνηση της κάμερας και τη δράση του θέματος σε κάθε πλάνο. Μια σύνθετη ακολουθία μπορεί να χωριστεί σε διακριτά τμήματα πλάνων, καθένα με δικό του κάδρο, δράση και φωτισμό. Διατηρήστε τις ίδιες λεπτομέρειες θέματος και παλέτα όταν πολλά κλιπ προορίζονται να αποτελέσουν μία ακολουθία. Ο οδηγός τονίζει ότι τα συντομότερα πλάνα γενικά ακολουθούν πιο αξιόπιστα τις οδηγίες και ότι επαναλαμβανόμενες παραγωγές με το ίδιο prompt δίνουν διαφορετικές λήψεις.\n\nΗ παρουσίαση του μοντέλου περιγράφει βελτιωμένη φυσική συμπεριφορά και συνέχεια μεταξύ πλάνων, σε ρεαλιστικό, κινηματογραφικό και anime ύφος. Πρόκειται για δυνατότητες που πρέπει να κατευθύνετε και να εξετάζετε. Ελέγξτε την κίνηση, την επαφή αντικειμένων, τις αναλογίες και τη συνέχεια, χωρίς να θεωρείτε ότι ένα πειστικό πρώτο καρέ εγγυάται συνεκτική ακολουθία. Αν μια δράση είναι ασαφής, απλοποιήστε την και δώστε της ορατή αρχή και τέλος.\n\n### Κατευθύνετε χωριστά τον διάλογο και τον ήχο\n\nΠροσδιορίστε τις ατάκες χωριστά από την οπτική περιγραφή και χρησιμοποιήστε σταθερές ετικέτες για τους ομιλητές. Κρατήστε τον διάλογο αρκετά σύντομο ώστε να χωρά στη δράση και στην επιθυμητή διάρκεια του κλιπ. Σε κινούμενο σχέδιο με δύο χαρακτήρες, εναλλάξτε μια σύντομη ερώτηση και απάντηση, αντί να ζητάτε να χωρέσει μακρύς λόγος σε σύντομο πλάνο. Ο οδηγός προειδοποιεί ότι ο σύνθετος, εκτενής διάλογος μπορεί να διαταράξει τον ρυθμό και τον συγχρονισμό.\n\nΠεριγράψτε το ηχητικό τοπίο της σκηνής: τον ήχο μιας μικρής κίνησης, την ατμόσφαιρα του χώρου ή τον ρυθμό ενός περιβαλλοντικού εφέ. Εξηγήστε ποιος ήχος πρέπει να συμπίπτει με τη δράση. Ακούστε την παραγόμενη ομιλία και τα εφέ μαζί με την εικόνα, ελέγχοντας την αντιστοίχιση ομιλητών, τις λέξεις και τον χρονισμό. Ο συγχρονισμένος ήχος αποτελεί μέρος του κλιπ και όχι χωριστή απάντηση κειμένου.\n\n### Μέγεθος, διάρκεια και άνοιγμα καθοδηγούμενο από εικόνα\n\nΤα τεκμηριωμένα μεγέθη εξόδου του βασικού μοντέλου είναι 720×1280 κατακόρυφα και 1280×720 οριζόντια. Τα μεγέθη υψηλότερης ανάλυσης του προφίλ Pro δεν πρέπει να αποδίδονται στο βασικό Sora 2. Το μέγεθος και η διάρκεια είναι ρητές ρυθμίσεις του αιτήματος· η αναγραφή άλλου μεγέθους ή το αίτημα για μεγαλύτερη ταινία στο prompt δεν τις αλλάζει. Η αναφορά δημιουργίας περιλαμβάνει ρυθμίσεις κλιπ 4, 8 και 12 δευτερολέπτων, οπότε προετοιμάστε ένα σύντομο, καθορισμένο στάδιο δράσης. Η διευρυμένη ροή του παραγωγού τεκμηριώνει επίσης ρυθμίσεις 16 και 20 δευτερολέπτων.\n\nΗ εικόνα αναφοράς καθορίζει το πρώτο καρέ και το κείμενο περιγράφει τι ακολουθεί. Ο παραγωγός υποστηρίζει αναφορές JPEG, PNG και WebP και απαιτεί η εικόνα να έχει το επιλεγμένο μέγεθος βίντεο. Προετοιμάστε το θέμα, το περιβάλλον και τη σύνθεση σε αυτή την αρχική εικόνα και ζητήστε συγκεκριμένη κίνηση. Πρόκειται για αναφορά αρχικού καρέ και όχι εγγύηση διατήρησης κάθε λεπτομέρειας σε όλο το κλιπ.\n\n### Επαναχρησιμοποιήσιμοι μη ανθρώπινοι χαρακτήρες\n\nΗ διευρυμένη ροή του παραγωγού μπορεί να δημιουργήσει επαναχρησιμοποιήσιμο στοιχείο χαρακτήρα από σύντομο βίντεο αναφοράς ζώου, μασκότ ή αντικειμένου. Οι οδηγίες προετοιμασίας ζητούν κλιπ MP4 περίπου δύο έως τεσσάρων δευτερολέπτων, 720p έως 1080p, σε 16:9 ή 9:16. Η αντιστοίχιση αναλογίας διαστάσεων πηγής και εξόδου βοηθά να αποφευχθεί παραμορφωμένη εμφάνιση. Η παραγωγή μπορεί να αναφέρεται σε έως δύο χαρακτήρες.\n\nΚρατήστε το αναγνωριστικό χαρακτήρα και αναφέρετε το όνομά του στο prompt· η απλή αποστολή του αναγνωριστικού δεν αποτελεί όλη την προετοιμασία του οδηγού. Τα στοιχεία χαρακτήρων μπορούν να συνοδεύουν παραγωγή από εικόνα, αλλά οι επεκτάσεις βίντεο δεν τα δέχονται. Ο παραγωγός αποκλείει από προεπιλογή μεταφορτώσεις χαρακτήρων με ανθρώπινη ομοιότητα και απορρίπτει εικόνες αναφοράς με ανθρώπινα πρόσωπα στην τεκμηριωμένη ροή API. Οι δυνατότητες προσωπικών χαρακτήρων της εφαρμογής Sora είναι χωριστή ροή προϊόντος.\n\n### Συνεχίστε ή επεξεργαστείτε ολοκληρωμένο κλιπ\n\nΜια επέκταση λαμβάνει ολοκληρωμένο αρχικό βίντεο και prompt συνέχειας, χρησιμοποιώντας ολόκληρο το αρχικό κλιπ ως συμφραζόμενα για την κίνηση, την κατεύθυνση της κάμερας και τη συνέχεια της σκηνής. Ο οδηγός περιγράφει προσθήκες έως 20 δευτερολέπτων ανά επέκταση. Η τεκμηριωμένη είσοδος επέκτασης είναι βίντεο και κείμενο· πρόσθετες αναφορές χαρακτήρων ή εικόνων αποκλείονται από αυτήν τη λειτουργία. Περιγράψτε πώς συνεχίζεται η υπάρχουσα δράση, αντί να εισάγετε άσχετη σκηνή χωρίς μετάβαση.\n\nΗ επεξεργασία βίντεο στοχεύει σε σαφή αλλαγή υπάρχοντος κλιπ. Μια εστιασμένη αναθεώρηση μπορεί να αλλάζει το χρώμα αντικειμένου ή την παλέτα της σκηνής, διατηρώντας το υπόλοιπο πλάνο. Ο οδηγός του παραγωγού συνιστά μία σαφώς ορισμένη αλλαγή κάθε φορά και διακρίνει την επεξεργασία παραγόμενου βίντεο από τη μεταφόρτωση αυθαίρετου υλικού, η οποία έχει χωριστή προϋπόθεση επιλεξιμότητας. Κρατήστε την ολοκληρωμένη πηγή και προσδιορίστε την ακριβή ζητούμενη αναθεώρηση πριν από νέα επεξεργασία.\n\n### Εργασίες απόδοσης και τελικό βίντεο\n\nΗ τεκμηριωμένη ροή βίντεο του παραγωγού είναι ασύγχρονη: μια υποβληθείσα εργασία μπορεί να βρίσκεται σε ουρά ή σε εξέλιξη πριν ολοκληρωθεί ή αποτύχει. Η ολοκληρωμένη εργασία δίνει βίντεο MP4· οι μικρογραφίες και τα φύλλα καρέ υποστηρίζουν προεπισκόπηση και περιήγηση. Κρατήστε την ταυτότητα της εργασίας συνδεδεμένη με το prompt, τις αναφορές και τα επιστρεφόμενα αρχεία. Η αρχική απάντηση εργασίας δεν είναι το τελικό βίντεο προς αναπαραγωγή.\n\nΗ συνήθης ροή λήψης περιγράφει διάρκεια ζωής URL λήψης μίας ώρας. Η διευρυμένη μαζική ροή προετοιμάζει ανεξάρτητα αιτήματα απόδοσης JSON με σταθερά αναγνωριστικά στοιχείων, μεταφορτωμένες αναφορές και αποτέλεσμα αντιστοιχισμένο σε κάθε πλάνο· τα ολοκληρωμένα αρχεία της έχουν χωριστή περίοδο λήψης έως 24 ώρες. Αποθηκεύστε έγκαιρα το ολοκληρωμένο κλιπ και εξετάστε την πραγματική εικόνα και τον ήχο πριν το θεωρήσετε επιλεγμένη λήψη.\n\nΟι τεκμηριωμένοι περιορισμοί περιεχομένου του API του παραγωγού απαιτούν υλικό κατάλληλο για κοινό κάτω των 18 και απορρίπτουν χαρακτήρες ή μουσική που προστατεύονται από πνευματικά δικαιώματα και την παραγωγή πραγματικών ανθρώπων. Προετοιμάστε ανάλογα τη σκηνή και τις αναφορές. Το άμεσο αποτέλεσμα του μοντέλου είναι βίντεο με ήχο, όχι παραγόμενες στατικές εικόνες, απόκριση εργαλείου συνομιλίας ή ταινία απεριόριστης διάρκειας. Διατηρήστε την ακριβή ταυτότητα του βασικού μοντέλου και το αποδεκτό αρχικό κλιπ όταν συνεχίζετε μια οπτική ιδέα.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "8a0505fabd1718e44983971aa36e1a2123b43d56374400c49ee972355642945d",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "el",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">sora-2</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Κλείσιμο\">×</button></div><div class=\"idline\"><span>Άλλα /</span><code>sora-2</code><button type=\"button\" id=\"copy-id\">Αντιγραφή ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Ενότητες κάρτας μοντέλου\"><button type=\"button\" data-card-jump=\"overview\">Εισαγωγή</button><button type=\"button\" data-card-jump=\"methods\">Είσοδοι και μέθοδοι</button><button type=\"button\" data-card-jump=\"pricing\">Τιμολόγηση</button><button type=\"button\" data-card-jump=\"examples\">Παραδείγματα</button><button type=\"button\" data-card-jump=\"results\">Αποτελέσματα</button><button type=\"button\" data-card-jump=\"aliases\">Εναλλακτικά ονόματα</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Μέθοδοι API\"><button type=\"button\" role=\"tab\" tabindex=\"-1\" aria-controls=\"card-method-content\" aria-selected=\"false\" id=\"card-method-tab-0\" data-card-method=\"Ultra|messages|/v1/messages|sora-2\">Messages</button><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-1\" data-card-method=\"Ultra|chat_completions|/v1/chat/completions|sora-2\">Chat Completions</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-1\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">Εισαγωγή</h3><p class=\"mdesc-full\">Το Sora 2 δημιουργεί βίντεο με συγχρονισμένο διάλογο, ηχητικά εφέ και ήχο περιβάλλοντος από κείμενο ή εικόνα αναφοράς. Το βασικό προφίλ υποστηρίζει οπτική εξερεύνηση και κλιπ ιδεών, με χωριστές ροές του παραγωγού για επαναχρησιμοποιήσιμους μη ανθρώπινους χαρακτήρες, συνέχεια και στοχευμένες επεξεργασίες βίντεο.</p><dl class=\"card-io\" data-card-io><div><dt>Αποδεκτές είσοδοι</dt><dd>Κείμενο</dd></div><div><dt>Αποτελέσματα</dt><dd>json · sse</dd></div></dl><details class=\"card-about\"><summary>Σχετικά με το μοντέλο</summary><p class=\"note-s\" data-model-method-boundary>Αυτή η περιγραφή καλύπτει τις δυνατότητες του μοντέλου. Οι είσοδοι, έξοδοι και επιλογές που διατίθενται στο Ailoot παρατίθενται παρακάτω για την επιλεγμένη μέθοδο.</p><div class=\"mabout\" id=\"m-about\"><p>Το Sora 2 είναι το μοντέλο παραγωγής βίντεο και ήχου της OpenAI για δυναμικά κλιπ από γραπτή περιγραφή σκηνής ή εικόνα αναφοράς. Παράγει την οπτική ακολουθία μαζί με συγχρονισμένη ομιλία, εφέ και ήχο περιβάλλοντος. Το βασικό προφίλ Sora 2 προορίζεται για οπτική εξερεύνηση, ανάπτυξη ιδεών, πρωτότυπα και πρόχειρο μοντάζ. Το Sora 2 Pro είναι χωριστή έκδοση για μεγαλύτερη οπτική πιστότητα και τελική επεξεργασία υψηλότερης ανάλυσης.</p><h4>Περιγράψτε ένα πλάνο που βλέπεται και ακούγεται</h4><p>Ο οδηγός prompting του κατασκευαστή οργανώνει ένα χρήσιμο brief γύρω από το κάδρο, το θέμα, τη δράση, το σκηνικό και το φως. Δώστε στη σκηνή συνεκτικό οπτικό ύφος και περιγράψτε την κίνηση σε σαφή στάδια. Μια πρωτότυπη ιδέα προϊόντος μπορεί να δείχνει ένα μικρό μηχανικό αντικείμενο που περιστρέφεται μία φορά σε πάγκο εργασίας, ενώ η κάμερα πλησιάζει αργά, με απαλό φως από παράθυρο και διακριτικό ήχο μοτέρ. Δηλώστε τι πρέπει να προσέξει ο θεατής και πώς τελειώνει η δράση.</p><p>Κρατήστε κατανοητές την κίνηση της κάμερας και τη δράση του θέματος σε κάθε πλάνο. Μια σύνθετη ακολουθία μπορεί να χωριστεί σε διακριτά τμήματα πλάνων, καθένα με δικό του κάδρο, δράση και φωτισμό. Διατηρήστε τις ίδιες λεπτομέρειες θέματος και παλέτα όταν πολλά κλιπ προορίζονται να αποτελέσουν μία ακολουθία. Ο οδηγός τονίζει ότι τα συντομότερα πλάνα γενικά ακολουθούν πιο αξιόπιστα τις οδηγίες και ότι επαναλαμβανόμενες παραγωγές με το ίδιο prompt δίνουν διαφορετικές λήψεις.</p><p>Η παρουσίαση του μοντέλου περιγράφει βελτιωμένη φυσική συμπεριφορά και συνέχεια μεταξύ πλάνων, σε ρεαλιστικό, κινηματογραφικό και anime ύφος. Πρόκειται για δυνατότητες που πρέπει να κατευθύνετε και να εξετάζετε. Ελέγξτε την κίνηση, την επαφή αντικειμένων, τις αναλογίες και τη συνέχεια, χωρίς να θεωρείτε ότι ένα πειστικό πρώτο καρέ εγγυάται συνεκτική ακολουθία. Αν μια δράση είναι ασαφής, απλοποιήστε την και δώστε της ορατή αρχή και τέλος.</p><h4>Κατευθύνετε χωριστά τον διάλογο και τον ήχο</h4><p>Προσδιορίστε τις ατάκες χωριστά από την οπτική περιγραφή και χρησιμοποιήστε σταθερές ετικέτες για τους ομιλητές. Κρατήστε τον διάλογο αρκετά σύντομο ώστε να χωρά στη δράση και στην επιθυμητή διάρκεια του κλιπ. Σε κινούμενο σχέδιο με δύο χαρακτήρες, εναλλάξτε μια σύντομη ερώτηση και απάντηση, αντί να ζητάτε να χωρέσει μακρύς λόγος σε σύντομο πλάνο. Ο οδηγός προειδοποιεί ότι ο σύνθετος, εκτενής διάλογος μπορεί να διαταράξει τον ρυθμό και τον συγχρονισμό.</p><p>Περιγράψτε το ηχητικό τοπίο της σκηνής: τον ήχο μιας μικρής κίνησης, την ατμόσφαιρα του χώρου ή τον ρυθμό ενός περιβαλλοντικού εφέ. Εξηγήστε ποιος ήχος πρέπει να συμπίπτει με τη δράση. Ακούστε την παραγόμενη ομιλία και τα εφέ μαζί με την εικόνα, ελέγχοντας την αντιστοίχιση ομιλητών, τις λέξεις και τον χρονισμό. Ο συγχρονισμένος ήχος αποτελεί μέρος του κλιπ και όχι χωριστή απάντηση κειμένου.</p><h4>Μέγεθος, διάρκεια και άνοιγμα καθοδηγούμενο από εικόνα</h4><p>Τα τεκμηριωμένα μεγέθη εξόδου του βασικού μοντέλου είναι 720×1280 κατακόρυφα και 1280×720 οριζόντια. Τα μεγέθη υψηλότερης ανάλυσης του προφίλ Pro δεν πρέπει να αποδίδονται στο βασικό Sora 2. Το μέγεθος και η διάρκεια είναι ρητές ρυθμίσεις του αιτήματος· η αναγραφή άλλου μεγέθους ή το αίτημα για μεγαλύτερη ταινία στο prompt δεν τις αλλάζει. Η αναφορά δημιουργίας περιλαμβάνει ρυθμίσεις κλιπ 4, 8 και 12 δευτερολέπτων, οπότε προετοιμάστε ένα σύντομο, καθορισμένο στάδιο δράσης. Η διευρυμένη ροή του παραγωγού τεκμηριώνει επίσης ρυθμίσεις 16 και 20 δευτερολέπτων.</p><p>Η εικόνα αναφοράς καθορίζει το πρώτο καρέ και το κείμενο περιγράφει τι ακολουθεί. Ο παραγωγός υποστηρίζει αναφορές JPEG, PNG και WebP και απαιτεί η εικόνα να έχει το επιλεγμένο μέγεθος βίντεο. Προετοιμάστε το θέμα, το περιβάλλον και τη σύνθεση σε αυτή την αρχική εικόνα και ζητήστε συγκεκριμένη κίνηση. Πρόκειται για αναφορά αρχικού καρέ και όχι εγγύηση διατήρησης κάθε λεπτομέρειας σε όλο το κλιπ.</p><h4>Επαναχρησιμοποιήσιμοι μη ανθρώπινοι χαρακτήρες</h4><p>Η διευρυμένη ροή του παραγωγού μπορεί να δημιουργήσει επαναχρησιμοποιήσιμο στοιχείο χαρακτήρα από σύντομο βίντεο αναφοράς ζώου, μασκότ ή αντικειμένου. Οι οδηγίες προετοιμασίας ζητούν κλιπ MP4 περίπου δύο έως τεσσάρων δευτερολέπτων, 720p έως 1080p, σε 16:9 ή 9:16. Η αντιστοίχιση αναλογίας διαστάσεων πηγής και εξόδου βοηθά να αποφευχθεί παραμορφωμένη εμφάνιση. Η παραγωγή μπορεί να αναφέρεται σε έως δύο χαρακτήρες.</p><p>Κρατήστε το αναγνωριστικό χαρακτήρα και αναφέρετε το όνομά του στο prompt· η απλή αποστολή του αναγνωριστικού δεν αποτελεί όλη την προετοιμασία του οδηγού. Τα στοιχεία χαρακτήρων μπορούν να συνοδεύουν παραγωγή από εικόνα, αλλά οι επεκτάσεις βίντεο δεν τα δέχονται. Ο παραγωγός αποκλείει από προεπιλογή μεταφορτώσεις χαρακτήρων με ανθρώπινη ομοιότητα και απορρίπτει εικόνες αναφοράς με ανθρώπινα πρόσωπα στην τεκμηριωμένη ροή API. Οι δυνατότητες προσωπικών χαρακτήρων της εφαρμογής Sora είναι χωριστή ροή προϊόντος.</p><h4>Συνεχίστε ή επεξεργαστείτε ολοκληρωμένο κλιπ</h4><p>Μια επέκταση λαμβάνει ολοκληρωμένο αρχικό βίντεο και prompt συνέχειας, χρησιμοποιώντας ολόκληρο το αρχικό κλιπ ως συμφραζόμενα για την κίνηση, την κατεύθυνση της κάμερας και τη συνέχεια της σκηνής. Ο οδηγός περιγράφει προσθήκες έως 20 δευτερολέπτων ανά επέκταση. Η τεκμηριωμένη είσοδος επέκτασης είναι βίντεο και κείμενο· πρόσθετες αναφορές χαρακτήρων ή εικόνων αποκλείονται από αυτήν τη λειτουργία. Περιγράψτε πώς συνεχίζεται η υπάρχουσα δράση, αντί να εισάγετε άσχετη σκηνή χωρίς μετάβαση.</p><p>Η επεξεργασία βίντεο στοχεύει σε σαφή αλλαγή υπάρχοντος κλιπ. Μια εστιασμένη αναθεώρηση μπορεί να αλλάζει το χρώμα αντικειμένου ή την παλέτα της σκηνής, διατηρώντας το υπόλοιπο πλάνο. Ο οδηγός του παραγωγού συνιστά μία σαφώς ορισμένη αλλαγή κάθε φορά και διακρίνει την επεξεργασία παραγόμενου βίντεο από τη μεταφόρτωση αυθαίρετου υλικού, η οποία έχει χωριστή προϋπόθεση επιλεξιμότητας. Κρατήστε την ολοκληρωμένη πηγή και προσδιορίστε την ακριβή ζητούμενη αναθεώρηση πριν από νέα επεξεργασία.</p><h4>Εργασίες απόδοσης και τελικό βίντεο</h4><p>Η τεκμηριωμένη ροή βίντεο του παραγωγού είναι ασύγχρονη: μια υποβληθείσα εργασία μπορεί να βρίσκεται σε ουρά ή σε εξέλιξη πριν ολοκληρωθεί ή αποτύχει. Η ολοκληρωμένη εργασία δίνει βίντεο MP4· οι μικρογραφίες και τα φύλλα καρέ υποστηρίζουν προεπισκόπηση και περιήγηση. Κρατήστε την ταυτότητα της εργασίας συνδεδεμένη με το prompt, τις αναφορές και τα επιστρεφόμενα αρχεία. Η αρχική απάντηση εργασίας δεν είναι το τελικό βίντεο προς αναπαραγωγή.</p><p>Η συνήθης ροή λήψης περιγράφει διάρκεια ζωής URL λήψης μίας ώρας. Η διευρυμένη μαζική ροή προετοιμάζει ανεξάρτητα αιτήματα απόδοσης JSON με σταθερά αναγνωριστικά στοιχείων, μεταφορτωμένες αναφορές και αποτέλεσμα αντιστοιχισμένο σε κάθε πλάνο· τα ολοκληρωμένα αρχεία της έχουν χωριστή περίοδο λήψης έως 24 ώρες. Αποθηκεύστε έγκαιρα το ολοκληρωμένο κλιπ και εξετάστε την πραγματική εικόνα και τον ήχο πριν το θεωρήσετε επιλεγμένη λήψη.</p><p>Οι τεκμηριωμένοι περιορισμοί περιεχομένου του API του παραγωγού απαιτούν υλικό κατάλληλο για κοινό κάτω των 18 και απορρίπτουν χαρακτήρες ή μουσική που προστατεύονται από πνευματικά δικαιώματα και την παραγωγή πραγματικών ανθρώπων. Προετοιμάστε ανάλογα τη σκηνή και τις αναφορές. Το άμεσο αποτέλεσμα του μοντέλου είναι βίντεο με ήχο, όχι παραγόμενες στατικές εικόνες, απόκριση εργαλείου συνομιλίας ή ταινία απεριόριστης διάρκειας. Διατηρήστε την ακριβή ταυτότητα του βασικού μοντέλου και το αποδεκτό αρχικό κλιπ όταν συνεχίζετε μια οπτική ιδέα.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Διαθέσιμα στο Ailoot · είσοδοι και μέθοδοι</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Chat Completions</b> <code>POST /v1/chat/completions</code></summary><dl class=\"method-capabilities\"><div><dt>Είσοδος</dt><dd><code>text</code></dd></div><div><dt>Έξοδος</dt><dd><code>json</code>, <code>sse</code></dd></div><div><dt>Μορφή εξόδου</dt><dd>JSON ή text/event-stream</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Πεδίο</th><th>Τύπος</th><th>Απαίτηση</th><th>Τιμές και όρια</th><th>Προεπιλογή</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Πεδίο\" scope=\"row\"><span class=\"card-cell-label\">Πεδίο</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Τύπος\" data-field-type><span class=\"card-cell-label\">Τύπος</span><code>string</code></td><td data-cell-label=\"Απαίτηση\"><span class=\"card-cell-label\">Απαίτηση</span>Υποχρεωτικό</td><td data-cell-label=\"Τιμές και όρια\"><span class=\"card-cell-label\">Τιμές και όρια</span><div>sora-2</div></td><td data-cell-label=\"Προεπιλογή\" data-default=\"unspecified\"><span class=\"card-cell-label\">Προεπιλογή</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Πεδίο\" scope=\"row\"><span class=\"card-cell-label\">Πεδίο</span><code class=\"card-field-name\">messages</code></th><td data-cell-label=\"Τύπος\" data-field-type><span class=\"card-cell-label\">Τύπος</span><code>message[]</code></td><td data-cell-label=\"Απαίτηση\"><span class=\"card-cell-label\">Απαίτηση</span>Υποχρεωτικό</td><td data-cell-label=\"Τιμές και όρια\"><span class=\"card-cell-label\">Τιμές και όρια</span></td><td data-cell-label=\"Προεπιλογή\" data-default=\"unspecified\"><span class=\"card-cell-label\">Προεπιλογή</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Πεδίο\" scope=\"row\"><span class=\"card-cell-label\">Πεδίο</span><code class=\"card-field-name\">messages[].role</code></th><td data-cell-label=\"Τύπος\" data-field-type><span class=\"card-cell-label\">Τύπος</span><code>string</code></td><td data-cell-label=\"Απαίτηση\"><span class=\"card-cell-label\">Απαίτηση</span>Υποχρεωτικό</td><td data-cell-label=\"Τιμές και όρια\"><span class=\"card-cell-label\">Τιμές και όρια</span></td><td data-cell-label=\"Προεπιλογή\" data-default=\"unspecified\"><span class=\"card-cell-label\">Προεπιλογή</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Πεδίο\" scope=\"row\"><span class=\"card-cell-label\">Πεδίο</span><code class=\"card-field-name\">messages[].content</code></th><td data-cell-label=\"Τύπος\" data-field-type><span class=\"card-cell-label\">Τύπος</span><code>string</code></td><td data-cell-label=\"Απαίτηση\"><span class=\"card-cell-label\">Απαίτηση</span>Υποχρεωτικό</td><td data-cell-label=\"Τιμές και όρια\"><span class=\"card-cell-label\">Τιμές και όρια</span></td><td data-cell-label=\"Προεπιλογή\" data-default=\"unspecified\"><span class=\"card-cell-label\">Προεπιλογή</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Πεδίο\" scope=\"row\"><span class=\"card-cell-label\">Πεδίο</span><code class=\"card-field-name\">stream</code></th><td data-cell-label=\"Τύπος\" data-field-type><span class=\"card-cell-label\">Τύπος</span><code>boolean</code></td><td data-cell-label=\"Απαίτηση\"><span class=\"card-cell-label\">Απαίτηση</span>Προαιρετικό</td><td data-cell-label=\"Τιμές και όρια\"><span class=\"card-cell-label\">Τιμές και όρια</span></td><td data-cell-label=\"Προεπιλογή\" data-default=\"known\"><span class=\"card-cell-label\">Προεπιλογή</span>false</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Συνδυασμοί υλικών εισόδου</summary><p class=\"note-s\"><b>owned_text_messages</b></p></details><details class=\"note-s\" data-method-contract><summary>Παράμετροι και κύκλος ζωής μεθόδου</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Παράμετρος</th><th>Σύμβαση</th></tr></thead><tbody><tr><th data-cell-label=\"Παράμετρος\" scope=\"row\"><span class=\"card-cell-label\">Παράμετρος</span><code>content_type</code></th><td data-cell-label=\"Σύμβαση\"><span class=\"card-cell-label\">Σύμβαση</span>application/json</td></tr><tr><th data-cell-label=\"Παράμετρος\" scope=\"row\"><span class=\"card-cell-label\">Παράμετρος</span><code>required</code></th><td data-cell-label=\"Σύμβαση\"><span class=\"card-cell-label\">Σύμβαση</span>model, messages</td></tr><tr><th data-cell-label=\"Παράμετρος\" scope=\"row\"><span class=\"card-cell-label\">Παράμετρος</span><code>material_types</code></th><td data-cell-label=\"Σύμβαση\"><span class=\"card-cell-label\">Σύμβαση</span>text</td></tr><tr><th data-cell-label=\"Παράμετρος\" scope=\"row\"><span class=\"card-cell-label\">Παράμετρος</span><code>messages</code></th><td data-cell-label=\"Σύμβαση\"><span class=\"card-cell-label\">Σύμβαση</span>πίνακας μηνυμάτων με role και content ως κυριολεκτική συμβολοσειρά</td></tr><tr><th data-cell-label=\"Παράμετρος\" scope=\"row\"><span class=\"card-cell-label\">Παράμετρος</span><code>file_material</code></th><td data-cell-label=\"Σύμβαση\"><span class=\"card-cell-label\">Σύμβαση</span>Πραγματικό υλικό UTF-8 μπορεί να εισαχθεί ως περιεχόμενο κυριολεκτικής συμβολοσειράς· δεν συνάγεται αναφορά σε αρχείο.</td></tr><tr><th data-cell-label=\"Παράμετρος\" scope=\"row\"><span class=\"card-cell-label\">Παράμετρος</span><code>optional_controls</code></th><td data-cell-label=\"Σύμβαση\"><span class=\"card-cell-label\">Σύμβαση</span>stream</td></tr></tbody></table></div><p>Κύκλος ζωής: <code>synchronous_json_or_sse</code></p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Τιμολόγηση</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Οι τιμολογιακές αναφορές δεν προσθέτουν επιλογές αιτήματος. Οι υποστηριζόμενες παράμετροι αναφέρονται στην επιλεγμένη μέθοδο.</p><dl data-price-conditions><dt>Γρήγορη λειτουργία</dt><dd>Δεν έχει οριστεί <span class=\"note-s\">Όταν επιλέγεται η γρήγορη λειτουργία</span></dd><dt>Λειτουργία flex</dt><dd>Δεν έχει οριστεί <span class=\"note-s\">Όταν επιλέγεται η λειτουργία flex</span></dd><dt>Μέγιστη προσπάθεια συλλογισμού</dt><dd>Δεν έχει οριστεί <span class=\"note-s\">Όταν η μέγιστη προσπάθεια συλλογισμού χρησιμοποιεί την προσαρμογή default</span></dd></dl></div><div data-declared-tariff-pricing><h4>Χρεώσεις Ailoot</h4><h4>Τιμές ανά διαμόρφωση</h4><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Διαμόρφωση</th><th>Πίνακας χρεώσεων</th><th>Χρέωση</th></tr></thead><tbody><tr><th data-cell-label=\"Διαμόρφωση\" scope=\"row\"><span class=\"card-cell-label\">Διαμόρφωση</span>Βασικές χρεώσεις ανά token</th><td data-cell-label=\"Πίνακας χρεώσεων\"><span class=\"card-cell-label\">Πίνακας χρεώσεων</span>Βασική χρέωση</td><td data-cell-label=\"Χρέωση\"><span class=\"card-cell-label\">Χρέωση</span><div><span>Είσοδος · Token εισόδου</span> <b>$0</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Έξοδος · Token εξόδου</span> <b>$0.2</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Είσοδος · Ανάγνωση από την κρυφή μνήμη</span> <b>$0</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Είσοδος · Εγγραφή στην κρυφή μνήμη</span> <b>$0</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Είσοδος · Εγγραφή στην κρυφή μνήμη, 1 ώρα</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div></td></tr></tbody></table></div></div><p class=\"note-s\">Το Ailoot δεσμεύει ένα εκτιμώμενο ποσό πριν από το αίτημα. Μετά το αποτέλεσμα, εκκαθαρίζει την τελική χρέωση βάσει της μετρημένης χρήσης. Η εκκαθάριση ροής χρησιμοποιεί την τελική καταγραφή χρήσης. <a href=\"/docs/el/billing/reserve/\">Πώς λειτουργούν η δέσμευση και η εκκαθάριση →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Παραδείγματα αιτημάτων</h3><h4>Ailoot Ultra · Chat Completions</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Παραλλαγές κώδικα\"><button class=\"cg-tab\" id=\"model-code-2605-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2605-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · πλήρης απόκριση JSON</button><button class=\"cg-tab\" id=\"model-code-2605-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2605-panel-1\" aria-selected=\"false\" tabindex=\"-1\">Python SDK · πλήρης απόκριση JSON</button><button class=\"cg-tab\" id=\"model-code-2605-tab-2\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2605-panel-2\" aria-selected=\"false\" tabindex=\"-1\">curl · διατηρήστε τη ροή SSE</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Αντιγραφή κώδικα\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-2605-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-2605-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;:&quot;sora-2&quot;,&quot;messages&quot;:[{&quot;role&quot;:&quot;user&quot;,&quot;content&quot;:&quot;hello&quot;}],&quot;stream&quot;:false}&#39;)\n\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nfrom pathlib import Path\nprint(Path(&quot;result.json&quot;).read_text(encoding=&quot;utf-8&quot;))\nPY_RESULT\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-2605-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-2605-tab-1\" hidden><pre data-lang=\"python\"><code>from openai import OpenAI\nimport os\n\nif not os.environ.get(&quot;AILOOT_API_KEY&quot;, &quot;&quot;).strip(): raise SystemExit(&quot;Set AILOOT_API_KEY before making a request&quot;)\nclient=OpenAI(base_url=&quot;https://api.ailoot.ai/v1&quot;,api_key=os.environ[&quot;AILOOT_API_KEY&quot;],max_retries=0)\nresult=client.chat.completions.create(model=&quot;sora-2&quot;, messages=[{&quot;role&quot;:&quot;user&quot;,&quot;content&quot;:&quot;hello&quot;}], stream=False)\nimport json\nfrom pathlib import Path\n\ndata = result.to_dict(mode=&quot;json&quot;)\nPath(&quot;result.json&quot;).write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding=&quot;utf-8&quot;)\nprint(json.dumps(data, ensure_ascii=False, indent=2))\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-2605-panel-2\" role=\"tabpanel\" aria-labelledby=\"model-code-2605-tab-2\" hidden><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;:&quot;sora-2&quot;,&quot;messages&quot;:[{&quot;role&quot;:&quot;user&quot;,&quot;content&quot;:&quot;hello&quot;}],&quot;stream&quot;:true}&#39;)\n\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o result.sse\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Λήψη και αποθήκευση αποτελεσμάτων</h3><h4>Ailoot Ultra · Chat Completions</h4><p class=\"note-s\">JSON ή text/event-stream</p><div class=\"card-result-process\" data-all-results><h5>Διατηρήστε όλα τα ολοκληρωμένα αποτελέσματα</h5><p class=\"note-s\">Διατηρήστε κάθε πλήρη απάντηση, αρχείο και τμήμα περιεχομένου που επιστρέφεται.</p><p class=\"note-s\">Διατηρήστε όλα τα byte JSON ή SSE, τις κεφαλίδες απόκρισης, τη χρήση που επιστρέφεται και όλα τα παρεχόμενα πεδία αποτελέσματος. Δεν δηλώνεται οικογένεια εξόδων ειδική για το μοντέλο.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Αν χρειάζεται έλεγχος της αρχικής απάντησης</h5><p class=\"note-s\">Διατηρήστε την αρχική απόκριση και την ταυτότητα της προσπάθειας· δεν συνάγεται περιοδικός έλεγχος νέας εργασίας ή επανυποβολή.</p></div><details class=\"card-about\" data-output-fields><summary>Πεδία απάντησης</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Πεδίο</th><th>Τύπος</th><th>Σημασία</th></tr></thead><tbody><tr><th data-cell-label=\"Πεδίο\" scope=\"row\"><span class=\"card-cell-label\">Πεδίο</span><code class=\"card-field-name\">complete response JSON</code></th><td data-cell-label=\"Τύπος\" data-field-type><span class=\"card-cell-label\">Τύπος</span>object</td><td data-cell-label=\"Σημασία\"><span class=\"card-cell-label\">Σημασία</span>Διατηρήστε κάθε πεδίο που επιστρέφεται, χωρίς να υποθέτετε οικογένεια αποτελεσμάτων ειδική για το μοντέλο.</td></tr><tr><th data-cell-label=\"Πεδίο\" scope=\"row\"><span class=\"card-cell-label\">Πεδίο</span><code class=\"card-field-name\">SSE data events</code></th><td data-cell-label=\"Τύπος\" data-field-type><span class=\"card-cell-label\">Τύπος</span>stream</td><td data-cell-label=\"Σημασία\"><span class=\"card-cell-label\">Σημασία</span>Διατηρήστε κάθε συμβάν και δείκτη τερματισμού που επιστρέφεται, χωρίς να επιλέγετε μόνο πεδία κειμένου.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Εναλλακτικά ονόματα</h3><h4>Εναλλακτικά ονόματα μοντέλου</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=sora-2&amp;route=Ultra&amp;caller=sora-2&amp;fmt=chat_completions\"><code>sora-2</code></a></span></p><h4>Εναλλακτικές διαδρομές μεθόδων</h4><p class=\"note-s\">Χρησιμοποιήστε τις διαδρομές μεθόδων που εμφανίζονται παραπάνω.</p><h4>Σχετικά ID μοντέλων</h4><p class=\"note-s\"><a href=\"#m=sora-2&amp;route=Ultra&amp;caller=sora-2&amp;fmt=chat_completions\"><code>sora-2</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "sora-2",
        "fmt": "chat_completions",
        "http": "POST",
        "path": "/v1/chat/completions",
        "request_model_id": "sora-2",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|chat_completions|/v1/chat/completions|sora-2",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "cache_read": 0,
        "cache_write": 0,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "authentication": {
              "api_key_source": "AILOOT_API_KEY",
              "header": "Authorization: Bearer"
            },
            "example_body": {
              "messages": [
                {
                  "content": "hello",
                  "role": "user"
                }
              ],
              "model": "sora-2",
              "stream": false
            },
            "hints": [
              "Supply owned text as messages[].content.",
              "Use stream:false for JSON or stream:true for SSE; keep the complete response."
            ],
            "ignored_fields": [],
            "lifecycle": {
              "cancel": null,
              "create": {
                "http": "POST",
                "path": "/v1/chat/completions"
              },
              "job_read": null,
              "mode": "synchronous_json_or_sse",
              "status_poll": null,
              "unknown": "Διατηρήστε την αρχική απόκριση και την ταυτότητα της προσπάθειας· δεν συνάγεται περιοδικός έλεγχος νέας εργασίας ή επανυποβολή."
            },
            "material_combinations": [
              {
                "alternatives": [
                  "message[] with literal string content"
                ],
                "mode": "owned_text_messages"
              }
            ],
            "outputs": {
              "all_results": "Διατηρήστε όλα τα byte JSON ή SSE, τις κεφαλίδες απόκρισης, τη χρήση που επιστρέφεται και όλα τα παρεχόμενα πεδία αποτελέσματος. Δεν δηλώνεται οικογένεια εξόδων ειδική για το μοντέλο.",
              "family": "protocol",
              "fields": [
                {
                  "description": "Διατηρήστε κάθε πεδίο που επιστρέφεται, χωρίς να υποθέτετε οικογένεια αποτελεσμάτων ειδική για το μοντέλο.",
                  "name": "complete response JSON",
                  "type": "object"
                },
                {
                  "description": "Διατηρήστε κάθε συμβάν και δείκτη τερματισμού που επιστρέφεται, χωρίς να επιλέγετε μόνο πεδία κειμένου.",
                  "name": "SSE data events",
                  "type": "stream"
                }
              ],
              "format": "JSON ή text/event-stream"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "sora-2"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages",
                "required": true,
                "type": "message[]"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].role",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].content",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": false,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "stream",
                "required": false,
                "type": "boolean"
              }
            ],
            "profile_binding": "Current d09 shared client interface only; model-specific provider output and acceptance are not claimed.",
            "request_schema": {
              "additionalProperties": false,
              "properties": {
                "messages": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "content": {
                        "oneOf": [
                          {
                            "type": "string"
                          },
                          {
                            "items": {
                              "oneOf": [
                                {
                                  "properties": {
                                    "text": {
                                      "type": "string"
                                    },
                                    "type": {
                                      "const": "text"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "text"
                                  ],
                                  "type": "object"
                                },
                                {
                                  "properties": {
                                    "image_url": {
                                      "properties": {
                                        "detail": {
                                          "type": "string"
                                        },
                                        "url": {
                                          "type": "string"
                                        }
                                      },
                                      "required": [
                                        "url"
                                      ],
                                      "type": "object"
                                    },
                                    "type": {
                                      "const": "image_url"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "image_url"
                                  ],
                                  "type": "object"
                                }
                              ]
                            },
                            "type": "array"
                          }
                        ]
                      },
                      "role": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "role",
                      "content"
                    ],
                    "type": "object"
                  },
                  "minItems": 1,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "sora-2"
                  ],
                  "type": "string"
                },
                "stream": {
                  "default": false,
                  "type": "boolean"
                }
              },
              "required": [
                "model",
                "messages"
              ],
              "type": "object"
            },
            "schema_template": {
              "messages": [
                {
                  "content": "hello",
                  "role": "user"
                }
              ],
              "model": "sora-2",
              "stream": false
            },
            "unsupported": [
              "Model-specific optional tools or structured-output controls are not part of this minimal profile.",
              "No image/audio/video request controls, dimensions or foreign model limits are inherited.",
              "No asynchronous media job route or manufacturer output capability is inferred."
            ]
          },
          "input": {
            "content_type": "application/json",
            "file_material": "Πραγματικό υλικό UTF-8 μπορεί να εισαχθεί ως περιεχόμενο κυριολεκτικής συμβολοσειράς· δεν συνάγεται αναφορά σε αρχείο.",
            "material_types": [
              "text"
            ],
            "messages": "πίνακας μηνυμάτων με role και content ως κυριολεκτική συμβολοσειρά",
            "optional_controls": [
              "stream"
            ],
            "required": [
              "model",
              "messages"
            ]
          },
          "lifecycle": {
            "cancel": null,
            "create": {
              "http": "POST",
              "path": "/v1/chat/completions"
            },
            "job_read": null,
            "mode": "synchronous_json_or_sse",
            "status_poll": null,
            "unknown": "Preserve the original response and attempt identity; no new job polling or resubmission is inferred."
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/chat/completions"
          },
          "operation_modes": [
            "request_response",
            "response_stream"
          ],
          "output": {
            "all_results": "Retain the complete JSON or SSE bytes, response headers, returned usage and all supplied result fields. No model-specific output family is asserted.",
            "family": "protocol",
            "format": "JSON or text/event-stream",
            "manufacturer_output_family": null
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Βασικές χρεώσεις ανά token",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.2000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\":\"sora-2\",\"messages\":[{\"role\":\"user\",\"content\":\"hello\"}],\"stream\":false}')\n\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nfrom pathlib import Path\nprint(Path(\"result.json\").read_text(encoding=\"utf-8\"))\nPY_RESULT\n",
            "label": "curl · complete JSON response",
            "language": "bash"
          },
          {
            "code": "from openai import OpenAI\nimport os\n\nif not os.environ.get(\"AILOOT_API_KEY\", \"\").strip(): raise SystemExit(\"Set AILOOT_API_KEY before making a request\")\nclient=OpenAI(base_url=\"https://api.ailoot.ai/v1\",api_key=os.environ[\"AILOOT_API_KEY\"],max_retries=0)\nresult=client.chat.completions.create(model=\"sora-2\", messages=[{\"role\":\"user\",\"content\":\"hello\"}], stream=False)\nimport json\nfrom pathlib import Path\n\ndata = result.to_dict(mode=\"json\")\nPath(\"result.json\").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding=\"utf-8\")\nprint(json.dumps(data, ensure_ascii=False, indent=2))\n",
            "label": "Python SDK · complete JSON response",
            "language": "python"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\":\"sora-2\",\"messages\":[{\"role\":\"user\",\"content\":\"hello\"}],\"stream\":true}')\n\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.sse\n",
            "label": "curl · preserve SSE stream",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "chat_completions",
        "hints": [
          "Supply owned text as messages[].content.",
          "Use stream:false for JSON or stream:true for SSE; keep the complete response."
        ],
        "http": "POST",
        "in": 0,
        "input": [
          "text"
        ],
        "label": "Chat Completions",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": 200,
        "output": [
          "json",
          "sse"
        ],
        "path": "/v1/chat/completions",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "token",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.2000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "request_model_id": "sora-2",
        "route_label": "Ultra",
        "status_reads": [],
        "tiers": [],
        "units": [
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0.2000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0.0002",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          }
        ]
      }
    },
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">sora-2</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Κλείσιμο\">×</button></div><div class=\"idline\"><span>Άλλα /</span><code>sora-2</code><button type=\"button\" id=\"copy-id\">Αντιγραφή ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Ενότητες κάρτας μοντέλου\"><button type=\"button\" data-card-jump=\"overview\">Εισαγωγή</button><button type=\"button\" data-card-jump=\"methods\">Είσοδοι και μέθοδοι</button><button type=\"button\" data-card-jump=\"pricing\">Τιμολόγηση</button><button type=\"button\" data-card-jump=\"examples\">Παραδείγματα</button><button type=\"button\" data-card-jump=\"results\">Αποτελέσματα</button><button type=\"button\" data-card-jump=\"aliases\">Εναλλακτικά ονόματα</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Μέθοδοι API\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|messages|/v1/messages|sora-2\">Messages</button><button type=\"button\" role=\"tab\" tabindex=\"-1\" aria-controls=\"card-method-content\" aria-selected=\"false\" id=\"card-method-tab-1\" data-card-method=\"Ultra|chat_completions|/v1/chat/completions|sora-2\">Chat Completions</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">Εισαγωγή</h3><p class=\"mdesc-full\">Το Sora 2 δημιουργεί βίντεο με συγχρονισμένο διάλογο, ηχητικά εφέ και ήχο περιβάλλοντος από κείμενο ή εικόνα αναφοράς. Το βασικό προφίλ υποστηρίζει οπτική εξερεύνηση και κλιπ ιδεών, με χωριστές ροές του παραγωγού για επαναχρησιμοποιήσιμους μη ανθρώπινους χαρακτήρες, συνέχεια και στοχευμένες επεξεργασίες βίντεο.</p><dl class=\"card-io\" data-card-io><div><dt>Αποδεκτές είσοδοι</dt><dd>Κείμενο</dd></div><div><dt>Αποτελέσματα</dt><dd>json · sse</dd></div></dl><details class=\"card-about\"><summary>Σχετικά με το μοντέλο</summary><p class=\"note-s\" data-model-method-boundary>Αυτή η περιγραφή καλύπτει τις δυνατότητες του μοντέλου. Οι είσοδοι, έξοδοι και επιλογές που διατίθενται στο Ailoot παρατίθενται παρακάτω για την επιλεγμένη μέθοδο.</p><div class=\"mabout\" id=\"m-about\"><p>Το Sora 2 είναι το μοντέλο παραγωγής βίντεο και ήχου της OpenAI για δυναμικά κλιπ από γραπτή περιγραφή σκηνής ή εικόνα αναφοράς. Παράγει την οπτική ακολουθία μαζί με συγχρονισμένη ομιλία, εφέ και ήχο περιβάλλοντος. Το βασικό προφίλ Sora 2 προορίζεται για οπτική εξερεύνηση, ανάπτυξη ιδεών, πρωτότυπα και πρόχειρο μοντάζ. Το Sora 2 Pro είναι χωριστή έκδοση για μεγαλύτερη οπτική πιστότητα και τελική επεξεργασία υψηλότερης ανάλυσης.</p><h4>Περιγράψτε ένα πλάνο που βλέπεται και ακούγεται</h4><p>Ο οδηγός prompting του κατασκευαστή οργανώνει ένα χρήσιμο brief γύρω από το κάδρο, το θέμα, τη δράση, το σκηνικό και το φως. Δώστε στη σκηνή συνεκτικό οπτικό ύφος και περιγράψτε την κίνηση σε σαφή στάδια. Μια πρωτότυπη ιδέα προϊόντος μπορεί να δείχνει ένα μικρό μηχανικό αντικείμενο που περιστρέφεται μία φορά σε πάγκο εργασίας, ενώ η κάμερα πλησιάζει αργά, με απαλό φως από παράθυρο και διακριτικό ήχο μοτέρ. Δηλώστε τι πρέπει να προσέξει ο θεατής και πώς τελειώνει η δράση.</p><p>Κρατήστε κατανοητές την κίνηση της κάμερας και τη δράση του θέματος σε κάθε πλάνο. Μια σύνθετη ακολουθία μπορεί να χωριστεί σε διακριτά τμήματα πλάνων, καθένα με δικό του κάδρο, δράση και φωτισμό. Διατηρήστε τις ίδιες λεπτομέρειες θέματος και παλέτα όταν πολλά κλιπ προορίζονται να αποτελέσουν μία ακολουθία. Ο οδηγός τονίζει ότι τα συντομότερα πλάνα γενικά ακολουθούν πιο αξιόπιστα τις οδηγίες και ότι επαναλαμβανόμενες παραγωγές με το ίδιο prompt δίνουν διαφορετικές λήψεις.</p><p>Η παρουσίαση του μοντέλου περιγράφει βελτιωμένη φυσική συμπεριφορά και συνέχεια μεταξύ πλάνων, σε ρεαλιστικό, κινηματογραφικό και anime ύφος. Πρόκειται για δυνατότητες που πρέπει να κατευθύνετε και να εξετάζετε. Ελέγξτε την κίνηση, την επαφή αντικειμένων, τις αναλογίες και τη συνέχεια, χωρίς να θεωρείτε ότι ένα πειστικό πρώτο καρέ εγγυάται συνεκτική ακολουθία. Αν μια δράση είναι ασαφής, απλοποιήστε την και δώστε της ορατή αρχή και τέλος.</p><h4>Κατευθύνετε χωριστά τον διάλογο και τον ήχο</h4><p>Προσδιορίστε τις ατάκες χωριστά από την οπτική περιγραφή και χρησιμοποιήστε σταθερές ετικέτες για τους ομιλητές. Κρατήστε τον διάλογο αρκετά σύντομο ώστε να χωρά στη δράση και στην επιθυμητή διάρκεια του κλιπ. Σε κινούμενο σχέδιο με δύο χαρακτήρες, εναλλάξτε μια σύντομη ερώτηση και απάντηση, αντί να ζητάτε να χωρέσει μακρύς λόγος σε σύντομο πλάνο. Ο οδηγός προειδοποιεί ότι ο σύνθετος, εκτενής διάλογος μπορεί να διαταράξει τον ρυθμό και τον συγχρονισμό.</p><p>Περιγράψτε το ηχητικό τοπίο της σκηνής: τον ήχο μιας μικρής κίνησης, την ατμόσφαιρα του χώρου ή τον ρυθμό ενός περιβαλλοντικού εφέ. Εξηγήστε ποιος ήχος πρέπει να συμπίπτει με τη δράση. Ακούστε την παραγόμενη ομιλία και τα εφέ μαζί με την εικόνα, ελέγχοντας την αντιστοίχιση ομιλητών, τις λέξεις και τον χρονισμό. Ο συγχρονισμένος ήχος αποτελεί μέρος του κλιπ και όχι χωριστή απάντηση κειμένου.</p><h4>Μέγεθος, διάρκεια και άνοιγμα καθοδηγούμενο από εικόνα</h4><p>Τα τεκμηριωμένα μεγέθη εξόδου του βασικού μοντέλου είναι 720×1280 κατακόρυφα και 1280×720 οριζόντια. Τα μεγέθη υψηλότερης ανάλυσης του προφίλ Pro δεν πρέπει να αποδίδονται στο βασικό Sora 2. Το μέγεθος και η διάρκεια είναι ρητές ρυθμίσεις του αιτήματος· η αναγραφή άλλου μεγέθους ή το αίτημα για μεγαλύτερη ταινία στο prompt δεν τις αλλάζει. Η αναφορά δημιουργίας περιλαμβάνει ρυθμίσεις κλιπ 4, 8 και 12 δευτερολέπτων, οπότε προετοιμάστε ένα σύντομο, καθορισμένο στάδιο δράσης. Η διευρυμένη ροή του παραγωγού τεκμηριώνει επίσης ρυθμίσεις 16 και 20 δευτερολέπτων.</p><p>Η εικόνα αναφοράς καθορίζει το πρώτο καρέ και το κείμενο περιγράφει τι ακολουθεί. Ο παραγωγός υποστηρίζει αναφορές JPEG, PNG και WebP και απαιτεί η εικόνα να έχει το επιλεγμένο μέγεθος βίντεο. Προετοιμάστε το θέμα, το περιβάλλον και τη σύνθεση σε αυτή την αρχική εικόνα και ζητήστε συγκεκριμένη κίνηση. Πρόκειται για αναφορά αρχικού καρέ και όχι εγγύηση διατήρησης κάθε λεπτομέρειας σε όλο το κλιπ.</p><h4>Επαναχρησιμοποιήσιμοι μη ανθρώπινοι χαρακτήρες</h4><p>Η διευρυμένη ροή του παραγωγού μπορεί να δημιουργήσει επαναχρησιμοποιήσιμο στοιχείο χαρακτήρα από σύντομο βίντεο αναφοράς ζώου, μασκότ ή αντικειμένου. Οι οδηγίες προετοιμασίας ζητούν κλιπ MP4 περίπου δύο έως τεσσάρων δευτερολέπτων, 720p έως 1080p, σε 16:9 ή 9:16. Η αντιστοίχιση αναλογίας διαστάσεων πηγής και εξόδου βοηθά να αποφευχθεί παραμορφωμένη εμφάνιση. Η παραγωγή μπορεί να αναφέρεται σε έως δύο χαρακτήρες.</p><p>Κρατήστε το αναγνωριστικό χαρακτήρα και αναφέρετε το όνομά του στο prompt· η απλή αποστολή του αναγνωριστικού δεν αποτελεί όλη την προετοιμασία του οδηγού. Τα στοιχεία χαρακτήρων μπορούν να συνοδεύουν παραγωγή από εικόνα, αλλά οι επεκτάσεις βίντεο δεν τα δέχονται. Ο παραγωγός αποκλείει από προεπιλογή μεταφορτώσεις χαρακτήρων με ανθρώπινη ομοιότητα και απορρίπτει εικόνες αναφοράς με ανθρώπινα πρόσωπα στην τεκμηριωμένη ροή API. Οι δυνατότητες προσωπικών χαρακτήρων της εφαρμογής Sora είναι χωριστή ροή προϊόντος.</p><h4>Συνεχίστε ή επεξεργαστείτε ολοκληρωμένο κλιπ</h4><p>Μια επέκταση λαμβάνει ολοκληρωμένο αρχικό βίντεο και prompt συνέχειας, χρησιμοποιώντας ολόκληρο το αρχικό κλιπ ως συμφραζόμενα για την κίνηση, την κατεύθυνση της κάμερας και τη συνέχεια της σκηνής. Ο οδηγός περιγράφει προσθήκες έως 20 δευτερολέπτων ανά επέκταση. Η τεκμηριωμένη είσοδος επέκτασης είναι βίντεο και κείμενο· πρόσθετες αναφορές χαρακτήρων ή εικόνων αποκλείονται από αυτήν τη λειτουργία. Περιγράψτε πώς συνεχίζεται η υπάρχουσα δράση, αντί να εισάγετε άσχετη σκηνή χωρίς μετάβαση.</p><p>Η επεξεργασία βίντεο στοχεύει σε σαφή αλλαγή υπάρχοντος κλιπ. Μια εστιασμένη αναθεώρηση μπορεί να αλλάζει το χρώμα αντικειμένου ή την παλέτα της σκηνής, διατηρώντας το υπόλοιπο πλάνο. Ο οδηγός του παραγωγού συνιστά μία σαφώς ορισμένη αλλαγή κάθε φορά και διακρίνει την επεξεργασία παραγόμενου βίντεο από τη μεταφόρτωση αυθαίρετου υλικού, η οποία έχει χωριστή προϋπόθεση επιλεξιμότητας. Κρατήστε την ολοκληρωμένη πηγή και προσδιορίστε την ακριβή ζητούμενη αναθεώρηση πριν από νέα επεξεργασία.</p><h4>Εργασίες απόδοσης και τελικό βίντεο</h4><p>Η τεκμηριωμένη ροή βίντεο του παραγωγού είναι ασύγχρονη: μια υποβληθείσα εργασία μπορεί να βρίσκεται σε ουρά ή σε εξέλιξη πριν ολοκληρωθεί ή αποτύχει. Η ολοκληρωμένη εργασία δίνει βίντεο MP4· οι μικρογραφίες και τα φύλλα καρέ υποστηρίζουν προεπισκόπηση και περιήγηση. Κρατήστε την ταυτότητα της εργασίας συνδεδεμένη με το prompt, τις αναφορές και τα επιστρεφόμενα αρχεία. Η αρχική απάντηση εργασίας δεν είναι το τελικό βίντεο προς αναπαραγωγή.</p><p>Η συνήθης ροή λήψης περιγράφει διάρκεια ζωής URL λήψης μίας ώρας. Η διευρυμένη μαζική ροή προετοιμάζει ανεξάρτητα αιτήματα απόδοσης JSON με σταθερά αναγνωριστικά στοιχείων, μεταφορτωμένες αναφορές και αποτέλεσμα αντιστοιχισμένο σε κάθε πλάνο· τα ολοκληρωμένα αρχεία της έχουν χωριστή περίοδο λήψης έως 24 ώρες. Αποθηκεύστε έγκαιρα το ολοκληρωμένο κλιπ και εξετάστε την πραγματική εικόνα και τον ήχο πριν το θεωρήσετε επιλεγμένη λήψη.</p><p>Οι τεκμηριωμένοι περιορισμοί περιεχομένου του API του παραγωγού απαιτούν υλικό κατάλληλο για κοινό κάτω των 18 και απορρίπτουν χαρακτήρες ή μουσική που προστατεύονται από πνευματικά δικαιώματα και την παραγωγή πραγματικών ανθρώπων. Προετοιμάστε ανάλογα τη σκηνή και τις αναφορές. Το άμεσο αποτέλεσμα του μοντέλου είναι βίντεο με ήχο, όχι παραγόμενες στατικές εικόνες, απόκριση εργαλείου συνομιλίας ή ταινία απεριόριστης διάρκειας. Διατηρήστε την ακριβή ταυτότητα του βασικού μοντέλου και το αποδεκτό αρχικό κλιπ όταν συνεχίζετε μια οπτική ιδέα.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Διαθέσιμα στο Ailoot · είσοδοι και μέθοδοι</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Anthropic Messages</b> <code>POST /v1/messages</code></summary><dl class=\"method-capabilities\"><div><dt>Είσοδος</dt><dd><code>text</code></dd></div><div><dt>Έξοδος</dt><dd><code>json</code>, <code>sse</code></dd></div><div><dt>Μορφή εξόδου</dt><dd>JSON ή SSE</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Πεδίο</th><th>Τύπος</th><th>Απαίτηση</th><th>Τιμές και όρια</th><th>Προεπιλογή</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Πεδίο\" scope=\"row\"><span class=\"card-cell-label\">Πεδίο</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Τύπος\" data-field-type><span class=\"card-cell-label\">Τύπος</span><code>string</code></td><td data-cell-label=\"Απαίτηση\"><span class=\"card-cell-label\">Απαίτηση</span>Υποχρεωτικό</td><td data-cell-label=\"Τιμές και όρια\"><span class=\"card-cell-label\">Τιμές και όρια</span><div>sora-2</div></td><td data-cell-label=\"Προεπιλογή\" data-default=\"unspecified\"><span class=\"card-cell-label\">Προεπιλογή</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Πεδίο\" scope=\"row\"><span class=\"card-cell-label\">Πεδίο</span><code class=\"card-field-name\">messages</code></th><td data-cell-label=\"Τύπος\" data-field-type><span class=\"card-cell-label\">Τύπος</span><code>message[]</code></td><td data-cell-label=\"Απαίτηση\"><span class=\"card-cell-label\">Απαίτηση</span>Υποχρεωτικό</td><td data-cell-label=\"Τιμές και όρια\"><span class=\"card-cell-label\">Τιμές και όρια</span></td><td data-cell-label=\"Προεπιλογή\" data-default=\"unspecified\"><span class=\"card-cell-label\">Προεπιλογή</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Πεδίο\" scope=\"row\"><span class=\"card-cell-label\">Πεδίο</span><code class=\"card-field-name\">messages[].role</code></th><td data-cell-label=\"Τύπος\" data-field-type><span class=\"card-cell-label\">Τύπος</span><code>string</code></td><td data-cell-label=\"Απαίτηση\"><span class=\"card-cell-label\">Απαίτηση</span>Υποχρεωτικό</td><td data-cell-label=\"Τιμές και όρια\"><span class=\"card-cell-label\">Τιμές και όρια</span><div>user, assistant</div></td><td data-cell-label=\"Προεπιλογή\" data-default=\"unspecified\"><span class=\"card-cell-label\">Προεπιλογή</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Πεδίο\" scope=\"row\"><span class=\"card-cell-label\">Πεδίο</span><code class=\"card-field-name\">messages[].content</code></th><td data-cell-label=\"Τύπος\" data-field-type><span class=\"card-cell-label\">Τύπος</span><code>string</code></td><td data-cell-label=\"Απαίτηση\"><span class=\"card-cell-label\">Απαίτηση</span>Υποχρεωτικό</td><td data-cell-label=\"Τιμές και όρια\"><span class=\"card-cell-label\">Τιμές και όρια</span></td><td data-cell-label=\"Προεπιλογή\" data-default=\"unspecified\"><span class=\"card-cell-label\">Προεπιλογή</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Πεδίο\" scope=\"row\"><span class=\"card-cell-label\">Πεδίο</span><code class=\"card-field-name\">max_tokens</code></th><td data-cell-label=\"Τύπος\" data-field-type><span class=\"card-cell-label\">Τύπος</span><code>integer</code></td><td data-cell-label=\"Απαίτηση\"><span class=\"card-cell-label\">Απαίτηση</span>Υποχρεωτικό</td><td data-cell-label=\"Τιμές και όρια\"><span class=\"card-cell-label\">Τιμές και όρια</span></td><td data-cell-label=\"Προεπιλογή\" data-default=\"unspecified\"><span class=\"card-cell-label\">Προεπιλογή</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Πεδίο\" scope=\"row\"><span class=\"card-cell-label\">Πεδίο</span><code class=\"card-field-name\">stream</code></th><td data-cell-label=\"Τύπος\" data-field-type><span class=\"card-cell-label\">Τύπος</span><code>boolean</code></td><td data-cell-label=\"Απαίτηση\"><span class=\"card-cell-label\">Απαίτηση</span>Προαιρετικό</td><td data-cell-label=\"Τιμές και όρια\"><span class=\"card-cell-label\">Τιμές και όρια</span></td><td data-cell-label=\"Προεπιλογή\" data-default=\"known\"><span class=\"card-cell-label\">Προεπιλογή</span>false</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Συνδυασμοί υλικών εισόδου</summary><p class=\"note-s\"><b>Κείμενο</b> · Κείμενο UTF-8</p><p class=\"note-s\"><code>Συμβολοσειρά messages[].content</code></p></details><details class=\"note-s\" data-method-contract><summary>Παράμετροι και κύκλος ζωής μεθόδου</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Παράμετρος</th><th>Σύμβαση</th></tr></thead><tbody><tr><th data-cell-label=\"Παράμετρος\" scope=\"row\"><span class=\"card-cell-label\">Παράμετρος</span><code>content_type</code></th><td data-cell-label=\"Σύμβαση\"><span class=\"card-cell-label\">Σύμβαση</span>application/json</td></tr><tr><th data-cell-label=\"Παράμετρος\" scope=\"row\"><span class=\"card-cell-label\">Παράμετρος</span><code>required</code></th><td data-cell-label=\"Σύμβαση\"><span class=\"card-cell-label\">Σύμβαση</span>model, messages, max_tokens</td></tr><tr><th data-cell-label=\"Παράμετρος\" scope=\"row\"><span class=\"card-cell-label\">Παράμετρος</span><code>optional_controls</code></th><td data-cell-label=\"Σύμβαση\"><span class=\"card-cell-label\">Σύμβαση</span>stream</td></tr><tr><th data-cell-label=\"Παράμετρος\" scope=\"row\"><span class=\"card-cell-label\">Παράμετρος</span><code>material_types</code></th><td data-cell-label=\"Σύμβαση\"><span class=\"card-cell-label\">Σύμβαση</span>text</td></tr><tr><th data-cell-label=\"Παράμετρος\" scope=\"row\"><span class=\"card-cell-label\">Παράμετρος</span><code>text_file_material</code></th><td data-cell-label=\"Σύμβαση\"><span class=\"card-cell-label\">Σύμβαση</span>Διαβάστε το πραγματικό έγγραφο UTF-8 και τοποθετήστε το κείμενό του στην υποδεικνυόμενη συμβολοσειρά εισόδου ή περιεχομένου του μηνύματος.</td></tr></tbody></table></div><p>Κύκλος ζωής: <code>synchronous_or_streamed</code></p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Τιμολόγηση</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Οι τιμολογιακές αναφορές δεν προσθέτουν επιλογές αιτήματος. Οι υποστηριζόμενες παράμετροι αναφέρονται στην επιλεγμένη μέθοδο.</p><dl data-price-conditions><dt>Γρήγορη λειτουργία</dt><dd>Δεν έχει οριστεί <span class=\"note-s\">Όταν επιλέγεται η γρήγορη λειτουργία</span></dd><dt>Λειτουργία flex</dt><dd>Δεν έχει οριστεί <span class=\"note-s\">Όταν επιλέγεται η λειτουργία flex</span></dd><dt>Μέγιστη προσπάθεια συλλογισμού</dt><dd>Δεν έχει οριστεί <span class=\"note-s\">Όταν η μέγιστη προσπάθεια συλλογισμού χρησιμοποιεί την προσαρμογή default</span></dd></dl></div><div data-declared-tariff-pricing><h4>Χρεώσεις Ailoot</h4><h4>Τιμές ανά διαμόρφωση</h4><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Διαμόρφωση</th><th>Πίνακας χρεώσεων</th><th>Χρέωση</th></tr></thead><tbody><tr><th data-cell-label=\"Διαμόρφωση\" scope=\"row\"><span class=\"card-cell-label\">Διαμόρφωση</span>Βασικές χρεώσεις ανά token</th><td data-cell-label=\"Πίνακας χρεώσεων\"><span class=\"card-cell-label\">Πίνακας χρεώσεων</span>Βασική χρέωση</td><td data-cell-label=\"Χρέωση\"><span class=\"card-cell-label\">Χρέωση</span><div><span>Είσοδος · Token εισόδου</span> <b>$0</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Έξοδος · Token εξόδου</span> <b>$0.2</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Είσοδος · Ανάγνωση από την κρυφή μνήμη</span> <b>$0</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Είσοδος · Εγγραφή στην κρυφή μνήμη</span> <b>$0</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Είσοδος · Εγγραφή στην κρυφή μνήμη, 1 ώρα</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div></td></tr></tbody></table></div></div><p class=\"note-s\">Το Ailoot δεσμεύει ένα εκτιμώμενο ποσό πριν από το αίτημα. Μετά το αποτέλεσμα, εκκαθαρίζει την τελική χρέωση βάσει της μετρημένης χρήσης. Η εκκαθάριση ροής χρησιμοποιεί την τελική καταγραφή χρήσης. <a href=\"/docs/el/billing/reserve/\">Πώς λειτουργούν η δέσμευση και η εκκαθάριση →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Παραδείγματα αιτημάτων</h3><h4>Ailoot Ultra · Anthropic Messages</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Παραλλαγές κώδικα\"><button class=\"cg-tab\" id=\"model-code-2606-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2606-panel-0\" aria-selected=\"true\" tabindex=\"0\">Πλήρες ελάχιστο σώμα JSON</button><button class=\"cg-tab\" id=\"model-code-2606-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2606-panel-1\" aria-selected=\"false\" tabindex=\"-1\">curl · χρησιμοποιήστε το έγγραφό σας σε UTF-8</button><button class=\"cg-tab\" id=\"model-code-2606-tab-2\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2606-panel-2\" aria-selected=\"false\" tabindex=\"-1\">Python · αποθηκεύστε το πλήρες αποτέλεσμα</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Αντιγραφή κώδικα\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-2606-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-2606-tab-0\"><pre data-lang=\"json\"><code>{\n  &quot;model&quot;: &quot;sora-2&quot;,\n  &quot;max_tokens&quot;: 128,\n  &quot;messages&quot;: [\n    {\n      &quot;role&quot;: &quot;user&quot;,\n      &quot;content&quot;: &quot;Summarize the incident report.&quot;\n    }\n  ],\n  &quot;stream&quot;: false\n}</code></pre></div><div class=\"cg-pane\" id=\"model-code-2606-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-2606-tab-1\" hidden><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}&quot;\nexport AILOOT_TEXT_FILE\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json, os\nfrom pathlib import Path\n\nsource_file = Path(os.environ[&#39;AILOOT_TEXT_FILE&#39;])\nif not source_file.is_file():\n    raise SystemExit(&#39;Set AILOOT_TEXT_FILE to your actual UTF-8 document&#39;)\ntext = source_file.read_text(encoding=&#39;utf-8&#39;)\nif not text.strip():\n    raise SystemExit(&#39;Choose a document containing text&#39;)\npayload = {&#39;model&#39;: &#39;sora-2&#39;, &#39;max_tokens&#39;: 128, &#39;messages&#39;: [{&#39;role&#39;: &#39;user&#39;, &#39;content&#39;: &#39;Summarize the incident report.&#39;}]}\npayload[&#39;messages&#39;][0][&#39;content&#39;] = &#39;Summarize this material and quote supporting source passages.\\n\\n&#39; + text\nPath(&#39;request.json&#39;).write_text(json.dumps(payload, ensure_ascii=False), encoding=&#39;utf-8&#39;)\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \\\n  -H &quot;x-api-key: $AILOOT_API_KEY&quot; -H &#39;anthropic-version: 2023-06-01&#39; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\n\nresult = json.loads(Path(&#39;result.json&#39;).read_text(encoding=&#39;utf-8&#39;))\nprint(json.dumps(result, ensure_ascii=False, indent=2))\nPY_RESULT\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-2606-panel-2\" role=\"tabpanel\" aria-labelledby=\"model-code-2606-tab-2\" hidden><pre data-lang=\"python\"><code>import json, os\nfrom pathlib import Path\n\nsource_file = Path(os.environ[&#39;AILOOT_TEXT_FILE&#39;])\nif not source_file.is_file():\n    raise SystemExit(&#39;Set AILOOT_TEXT_FILE to your actual UTF-8 document&#39;)\ntext = source_file.read_text(encoding=&#39;utf-8&#39;)\nif not text.strip():\n    raise SystemExit(&#39;Choose a document containing text&#39;)\npayload = {&#39;model&#39;: &#39;sora-2&#39;, &#39;max_tokens&#39;: 128, &#39;messages&#39;: [{&#39;role&#39;: &#39;user&#39;, &#39;content&#39;: &#39;Summarize the incident report.&#39;}]}\npayload[&#39;messages&#39;][0][&#39;content&#39;] = &#39;Summarize this material and quote supporting source passages.\\n\\n&#39; + text\nfrom urllib.request import Request, urlopen\nfrom urllib.error import HTTPError\n\napi_key = os.environ[&#39;AILOOT_API_KEY&#39;]\nif not api_key.strip():\n    raise SystemExit(&#39;Set AILOOT_API_KEY before making a request&#39;)\nheaders = {&#39;x-api-key&#39;: &#39;PLACEHOLDER_KEY&#39;, &#39;anthropic-version&#39;: &#39;2023-06-01&#39;, &#39;Content-Type&#39;: &#39;application/json&#39;}\nheaders[&#39;x-api-key&#39;] = api_key\nrequest = Request(&#39;https://api.ailoot.ai/v1/messages&#39;, data=json.dumps(payload, ensure_ascii=False).encode(&#39;utf-8&#39;), headers=headers, method=&#39;POST&#39;)\ntry:\n    with urlopen(request, timeout=120) as response:\n        raw = response.read()\n        Path(&#39;response-headers.txt&#39;).write_text(str(response.headers), encoding=&#39;utf-8&#39;)\nexcept HTTPError as error:\n    Path(&#39;result.json&#39;).write_bytes(error.read())\n    Path(&#39;response-headers.txt&#39;).write_text(str(error.headers), encoding=&#39;utf-8&#39;)\n    raise\nPath(&#39;result.json&#39;).write_bytes(raw)\nimport json\nfrom pathlib import Path\n\nresult = json.loads(Path(&#39;result.json&#39;).read_text(encoding=&#39;utf-8&#39;))\nprint(json.dumps(result, ensure_ascii=False, indent=2))\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Λήψη και αποθήκευση αποτελεσμάτων</h3><h4>Ailoot Ultra · Anthropic Messages</h4><p class=\"note-s\">JSON ή SSE</p><div class=\"card-result-process\" data-all-results><h5>Διατηρήστε όλα τα ολοκληρωμένα αποτελέσματα</h5><p class=\"note-s\">Διατηρήστε κάθε πλήρη απάντηση, αρχείο και τμήμα περιεχομένου που επιστρέφεται.</p><p class=\"note-s\">Διατηρήστε όλα τα μπλοκ περιεχομένου, τις υπογραφές συλλογιστικής και τα πραγματικά ID χρήσης εργαλείων. Συνθέστε όλες τις διαφορικές ενημερώσεις μπλοκ SSE· το πρώτο μπλοκ κειμένου δεν είναι η πλήρης έξοδος.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Αν χρειάζεται έλεγχος της αρχικής απάντησης</h5><p class=\"note-s\">Διατηρήστε τα ID αιτήματος/απάντησης και τις κεφαλίδες. Δεν παρέχεται γενικό URL ανάκτησης εργασιών κειμένου.</p></div><details class=\"card-about\" data-output-fields><summary>Πεδία απάντησης</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Πεδίο</th><th>Τύπος</th></tr></thead><tbody><tr><th data-cell-label=\"Πεδίο\" scope=\"row\"><span class=\"card-cell-label\">Πεδίο</span><code class=\"card-field-name\">id</code></th><td data-cell-label=\"Τύπος\" data-field-type><span class=\"card-cell-label\">Τύπος</span>string</td></tr><tr><th data-cell-label=\"Πεδίο\" scope=\"row\"><span class=\"card-cell-label\">Πεδίο</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Τύπος\" data-field-type><span class=\"card-cell-label\">Τύπος</span>string</td></tr><tr><th data-cell-label=\"Πεδίο\" scope=\"row\"><span class=\"card-cell-label\">Πεδίο</span><code class=\"card-field-name\">content[]</code></th><td data-cell-label=\"Τύπος\" data-field-type><span class=\"card-cell-label\">Τύπος</span>text|thinking|tool_use|other content block</td></tr><tr><th data-cell-label=\"Πεδίο\" scope=\"row\"><span class=\"card-cell-label\">Πεδίο</span><code class=\"card-field-name\">stop_reason</code></th><td data-cell-label=\"Τύπος\" data-field-type><span class=\"card-cell-label\">Τύπος</span>string|null</td></tr><tr><th data-cell-label=\"Πεδίο\" scope=\"row\"><span class=\"card-cell-label\">Πεδίο</span><code class=\"card-field-name\">usage</code></th><td data-cell-label=\"Τύπος\" data-field-type><span class=\"card-cell-label\">Τύπος</span>object</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Σφάλματα και επόμενα βήματα</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Απάντηση</th><th>Συνθήκη</th><th>Επόμενο βήμα</th></tr></thead><tbody><tr><th data-cell-label=\"Απάντηση\" scope=\"row\"><span class=\"card-cell-label\">Απάντηση</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Συνθήκη\"><span class=\"card-cell-label\">Συνθήκη</span>Μη έγκυρα υποχρεωτικά πεδία, μη έγκυρη αναπαράσταση υλικού ή μη έγκυρη τιμή παραμέτρου</td><td data-cell-label=\"Επόμενο βήμα\"><span class=\"card-cell-label\">Επόμενο βήμα</span>Διορθώστε τα υποδεικνυόμενα πεδία πριν από νέο αίτημα δημιουργίας.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Εναλλακτικά ονόματα</h3><h4>Εναλλακτικά ονόματα μοντέλου</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=sora-2&amp;route=Ultra&amp;caller=sora-2&amp;fmt=messages\"><code>sora-2</code></a></span></p><h4>Εναλλακτικές διαδρομές μεθόδων</h4><p class=\"note-s\">Χρησιμοποιήστε τις διαδρομές μεθόδων που εμφανίζονται παραπάνω.</p><h4>Σχετικά ID μοντέλων</h4><p class=\"note-s\"><a href=\"#m=sora-2&amp;route=Ultra&amp;caller=sora-2&amp;fmt=messages\"><code>sora-2</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "sora-2",
        "fmt": "messages",
        "http": "POST",
        "path": "/v1/messages",
        "request_model_id": "sora-2",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|messages|/v1/messages|sora-2",
      "ordinal": 1,
      "rawMethod": {
        "available": null,
        "cache_read": 0,
        "cache_write": 0,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "authentication": {
              "api_key_source": "AILOOT_API_KEY",
              "headers": [
                "Authorization: Bearer",
                "x-api-key",
                "anthropic-version"
              ],
              "version_example": "2023-06-01"
            },
            "errors": [
              {
                "code": null,
                "condition": "Μη έγκυρα υποχρεωτικά πεδία, μη έγκυρη αναπαράσταση υλικού ή μη έγκυρη τιμή παραμέτρου",
                "http_status": 400,
                "recovery": "Διορθώστε τα υποδεικνυόμενα πεδία πριν από νέο αίτημα δημιουργίας.",
                "type": "invalid_request_error"
              }
            ],
            "example_body": {
              "max_tokens": 128,
              "messages": [
                {
                  "content": "Summarize the incident report.",
                  "role": "user"
                }
              ],
              "model": "sora-2",
              "stream": false
            },
            "lifecycle": {
              "create": {
                "http": "POST",
                "path": "/v1/messages"
              },
              "job_read": null,
              "mode": "synchronous_or_streamed",
              "unknown": "Διατηρήστε τα ID αιτήματος/απάντησης και τις κεφαλίδες. Δεν παρέχεται γενικό URL ανάκτησης εργασιών κειμένου."
            },
            "material_combinations": [
              {
                "mode": "text",
                "representation": "Συμβολοσειρά messages[].content",
                "required_material": "Κείμενο UTF-8"
              }
            ],
            "operation_modes": [
              "synchronous_json",
              "streamed_SSE"
            ],
            "outputs": {
              "all_results": "Διατηρήστε όλα τα μπλοκ περιεχομένου, τις υπογραφές συλλογιστικής και τα πραγματικά ID χρήσης εργαλείων. Συνθέστε όλες τις διαφορικές ενημερώσεις μπλοκ SSE· το πρώτο μπλοκ κειμένου δεν είναι η πλήρης έξοδος.",
              "family": "protocol",
              "fields": [
                {
                  "description": null,
                  "name": "id",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "model",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "content[]",
                  "type": "text|thinking|tool_use|other content block"
                },
                {
                  "description": null,
                  "name": "stop_reason",
                  "type": "string|null"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "JSON ή SSE"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "sora-2"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages",
                "required": true,
                "type": "message[]"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "user",
                  "assistant"
                ],
                "enum_known": true,
                "name": "messages[].role",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].content",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "max_tokens",
                "required": true,
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": false,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "stream",
                "required": false,
                "type": "boolean"
              }
            ],
            "profile_binding": "Documented current stock Messages bridge; optional model capabilities are separate from this minimal text request.",
            "request_schema": {
              "additionalProperties": false,
              "properties": {
                "max_tokens": {
                  "minimum": 1,
                  "type": "integer"
                },
                "messages": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "content": {
                        "oneOf": [
                          {
                            "type": "string"
                          },
                          {
                            "items": {
                              "oneOf": [
                                {
                                  "properties": {
                                    "text": {
                                      "type": "string"
                                    },
                                    "type": {
                                      "const": "text"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "text"
                                  ],
                                  "type": "object"
                                },
                                {
                                  "properties": {
                                    "source": {
                                      "oneOf": [
                                        {
                                          "properties": {
                                            "type": {
                                              "const": "url"
                                            },
                                            "url": {
                                              "type": "string"
                                            }
                                          },
                                          "required": [
                                            "type",
                                            "url"
                                          ],
                                          "type": "object"
                                        },
                                        {
                                          "properties": {
                                            "data": {
                                              "type": "string"
                                            },
                                            "media_type": {
                                              "type": "string"
                                            },
                                            "type": {
                                              "const": "base64"
                                            }
                                          },
                                          "required": [
                                            "type",
                                            "media_type",
                                            "data"
                                          ],
                                          "type": "object"
                                        }
                                      ]
                                    },
                                    "type": {
                                      "const": "image"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "source"
                                  ],
                                  "type": "object"
                                }
                              ]
                            },
                            "type": "array"
                          }
                        ]
                      },
                      "role": {
                        "enum": [
                          "user",
                          "assistant"
                        ],
                        "type": "string"
                      }
                    },
                    "required": [
                      "role",
                      "content"
                    ],
                    "type": "object"
                  },
                  "minItems": 1,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "sora-2"
                  ],
                  "type": "string"
                },
                "stream": {
                  "default": false,
                  "type": "boolean"
                }
              },
              "required": [
                "model",
                "messages",
                "max_tokens"
              ],
              "type": "object"
            },
            "schema_template": {
              "max_tokens": 128,
              "messages": [
                {
                  "content": "Summarize the incident report.",
                  "role": "user"
                }
              ],
              "model": "sora-2",
              "stream": false
            },
            "unsupported": [
              "No query API key.",
              "Hosted/server-side tools and model-specific optional controls are not part of this minimal family example."
            ]
          },
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "optional_controls": [
              "stream"
            ],
            "required": [
              "model",
              "messages",
              "max_tokens"
            ],
            "text_file_material": "Διαβάστε το πραγματικό έγγραφο UTF-8 και τοποθετήστε το κείμενό του στην υποδεικνυόμενη συμβολοσειρά εισόδου ή περιεχομένου του μηνύματος."
          },
          "lifecycle": {
            "create": {
              "http": "POST",
              "path": "/v1/messages"
            },
            "job_read": null,
            "mode": "synchronous_or_streamed",
            "unknown": "Keep request/response IDs and headers. No generic text job retrieval URL is supplied."
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/messages"
          },
          "output": {
            "all_results": "Keep all content blocks, thinking signatures and actual tool-use IDs. Assemble all SSE block deltas; a first text block is not the complete output.",
            "family": "protocol",
            "format": "JSON or SSE"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Βασικές χρεώσεις ανά token",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.2000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "{\n  \"model\": \"sora-2\",\n  \"max_tokens\": 128,\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\": \"Summarize the incident report.\"\n    }\n  ],\n  \"stream\": false\n}",
            "label": "Complete minimal JSON body",
            "language": "json"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}\"\nexport AILOOT_TEXT_FILE\npython3 - <<'PY_REQUEST'\nimport json, os\nfrom pathlib import Path\n\nsource_file = Path(os.environ['AILOOT_TEXT_FILE'])\nif not source_file.is_file():\n    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')\ntext = source_file.read_text(encoding='utf-8')\nif not text.strip():\n    raise SystemExit('Choose a document containing text')\npayload = {'model': 'sora-2', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}\npayload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\\n\\n' + text\nPath('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \\\n  -H \"x-api-key: $AILOOT_API_KEY\" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\n\nresult = json.loads(Path('result.json').read_text(encoding='utf-8'))\nprint(json.dumps(result, ensure_ascii=False, indent=2))\nPY_RESULT\n",
            "label": "curl · use your UTF-8 document",
            "language": "bash"
          },
          {
            "code": "import json, os\nfrom pathlib import Path\n\nsource_file = Path(os.environ['AILOOT_TEXT_FILE'])\nif not source_file.is_file():\n    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')\ntext = source_file.read_text(encoding='utf-8')\nif not text.strip():\n    raise SystemExit('Choose a document containing text')\npayload = {'model': 'sora-2', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}\npayload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\\n\\n' + text\nfrom urllib.request import Request, urlopen\nfrom urllib.error import HTTPError\n\napi_key = os.environ['AILOOT_API_KEY']\nif not api_key.strip():\n    raise SystemExit('Set AILOOT_API_KEY before making a request')\nheaders = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}\nheaders['x-api-key'] = api_key\nrequest = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')\ntry:\n    with urlopen(request, timeout=120) as response:\n        raw = response.read()\n        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')\nexcept HTTPError as error:\n    Path('result.json').write_bytes(error.read())\n    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')\n    raise\nPath('result.json').write_bytes(raw)\nimport json\nfrom pathlib import Path\n\nresult = json.loads(Path('result.json').read_text(encoding='utf-8'))\nprint(json.dumps(result, ensure_ascii=False, indent=2))\n",
            "label": "Python · save the complete result",
            "language": "python"
          }
        ],
        "family": "anthropic",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "messages",
        "http": "POST",
        "in": 0,
        "input": [
          "text"
        ],
        "label": "Anthropic Messages",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": 200,
        "output": [
          "json",
          "sse"
        ],
        "path": "/v1/messages",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "token",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.2000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "request_model_id": "sora-2",
        "route_label": "Ultra",
        "status_reads": [],
        "tiers": [],
        "units": [
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0.2000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0.0002",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          }
        ]
      }
    }
  ],
  "model_id": "sora-2",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "4671c51a804b91a154ac03c787fb0394a7e4ffdfeccfb5c9e3503c37e775bc99",
    "input_html_sha256": "eed301449586fc61146040867483b190ec1c79df7d6e17b68bc8cb48faca3610",
    "private_audit_sha256": "3d85650cfecc04dcc51651a4555ef1c6ad485fd929b6b1e05723474ca10ed391",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/el/sora-2/",
    "description": "Το Sora 2 δημιουργεί βίντεο με συγχρονισμένο διάλογο, ηχητικά εφέ και ήχο περιβάλλοντος από κείμενο ή εικόνα αναφοράς. Το βασικό προφίλ υποστηρίζει οπτική εξερεύνηση και κλιπ ιδεών, με χωριστές ροές του παραγωγού για επαναχρησιμοποιήσιμους μη ανθρώπινους χαρακτήρες, συνέχεια και στοχευμένες επεξεργασίες βίντεο.",
    "locale": "el",
    "md_url": "https://ailoot.ai/models/el/sora-2/index.md",
    "title": "sora-2 — Ailoot",
    "url": "https://ailoot.ai/models/el/sora-2/"
  },
  "rawModel": {
    "about": "Το Sora 2 είναι το μοντέλο παραγωγής βίντεο και ήχου της OpenAI για δυναμικά κλιπ από γραπτή περιγραφή σκηνής ή εικόνα αναφοράς. Παράγει την οπτική ακολουθία μαζί με συγχρονισμένη ομιλία, εφέ και ήχο περιβάλλοντος. Το βασικό προφίλ Sora 2 προορίζεται για οπτική εξερεύνηση, ανάπτυξη ιδεών, πρωτότυπα και πρόχειρο μοντάζ. Το Sora 2 Pro είναι χωριστή έκδοση για μεγαλύτερη οπτική πιστότητα και τελική επεξεργασία υψηλότερης ανάλυσης.\n\n### Περιγράψτε ένα πλάνο που βλέπεται και ακούγεται\n\nΟ οδηγός prompting του κατασκευαστή οργανώνει ένα χρήσιμο brief γύρω από το κάδρο, το θέμα, τη δράση, το σκηνικό και το φως. Δώστε στη σκηνή συνεκτικό οπτικό ύφος και περιγράψτε την κίνηση σε σαφή στάδια. Μια πρωτότυπη ιδέα προϊόντος μπορεί να δείχνει ένα μικρό μηχανικό αντικείμενο που περιστρέφεται μία φορά σε πάγκο εργασίας, ενώ η κάμερα πλησιάζει αργά, με απαλό φως από παράθυρο και διακριτικό ήχο μοτέρ. Δηλώστε τι πρέπει να προσέξει ο θεατής και πώς τελειώνει η δράση.\n\nΚρατήστε κατανοητές την κίνηση της κάμερας και τη δράση του θέματος σε κάθε πλάνο. Μια σύνθετη ακολουθία μπορεί να χωριστεί σε διακριτά τμήματα πλάνων, καθένα με δικό του κάδρο, δράση και φωτισμό. Διατηρήστε τις ίδιες λεπτομέρειες θέματος και παλέτα όταν πολλά κλιπ προορίζονται να αποτελέσουν μία ακολουθία. Ο οδηγός τονίζει ότι τα συντομότερα πλάνα γενικά ακολουθούν πιο αξιόπιστα τις οδηγίες και ότι επαναλαμβανόμενες παραγωγές με το ίδιο prompt δίνουν διαφορετικές λήψεις.\n\nΗ παρουσίαση του μοντέλου περιγράφει βελτιωμένη φυσική συμπεριφορά και συνέχεια μεταξύ πλάνων, σε ρεαλιστικό, κινηματογραφικό και anime ύφος. Πρόκειται για δυνατότητες που πρέπει να κατευθύνετε και να εξετάζετε. Ελέγξτε την κίνηση, την επαφή αντικειμένων, τις αναλογίες και τη συνέχεια, χωρίς να θεωρείτε ότι ένα πειστικό πρώτο καρέ εγγυάται συνεκτική ακολουθία. Αν μια δράση είναι ασαφής, απλοποιήστε την και δώστε της ορατή αρχή και τέλος.\n\n### Κατευθύνετε χωριστά τον διάλογο και τον ήχο\n\nΠροσδιορίστε τις ατάκες χωριστά από την οπτική περιγραφή και χρησιμοποιήστε σταθερές ετικέτες για τους ομιλητές. Κρατήστε τον διάλογο αρκετά σύντομο ώστε να χωρά στη δράση και στην επιθυμητή διάρκεια του κλιπ. Σε κινούμενο σχέδιο με δύο χαρακτήρες, εναλλάξτε μια σύντομη ερώτηση και απάντηση, αντί να ζητάτε να χωρέσει μακρύς λόγος σε σύντομο πλάνο. Ο οδηγός προειδοποιεί ότι ο σύνθετος, εκτενής διάλογος μπορεί να διαταράξει τον ρυθμό και τον συγχρονισμό.\n\nΠεριγράψτε το ηχητικό τοπίο της σκηνής: τον ήχο μιας μικρής κίνησης, την ατμόσφαιρα του χώρου ή τον ρυθμό ενός περιβαλλοντικού εφέ. Εξηγήστε ποιος ήχος πρέπει να συμπίπτει με τη δράση. Ακούστε την παραγόμενη ομιλία και τα εφέ μαζί με την εικόνα, ελέγχοντας την αντιστοίχιση ομιλητών, τις λέξεις και τον χρονισμό. Ο συγχρονισμένος ήχος αποτελεί μέρος του κλιπ και όχι χωριστή απάντηση κειμένου.\n\n### Μέγεθος, διάρκεια και άνοιγμα καθοδηγούμενο από εικόνα\n\nΤα τεκμηριωμένα μεγέθη εξόδου του βασικού μοντέλου είναι 720×1280 κατακόρυφα και 1280×720 οριζόντια. Τα μεγέθη υψηλότερης ανάλυσης του προφίλ Pro δεν πρέπει να αποδίδονται στο βασικό Sora 2. Το μέγεθος και η διάρκεια είναι ρητές ρυθμίσεις του αιτήματος· η αναγραφή άλλου μεγέθους ή το αίτημα για μεγαλύτερη ταινία στο prompt δεν τις αλλάζει. Η αναφορά δημιουργίας περιλαμβάνει ρυθμίσεις κλιπ 4, 8 και 12 δευτερολέπτων, οπότε προετοιμάστε ένα σύντομο, καθορισμένο στάδιο δράσης. Η διευρυμένη ροή του παραγωγού τεκμηριώνει επίσης ρυθμίσεις 16 και 20 δευτερολέπτων.\n\nΗ εικόνα αναφοράς καθορίζει το πρώτο καρέ και το κείμενο περιγράφει τι ακολουθεί. Ο παραγωγός υποστηρίζει αναφορές JPEG, PNG και WebP και απαιτεί η εικόνα να έχει το επιλεγμένο μέγεθος βίντεο. Προετοιμάστε το θέμα, το περιβάλλον και τη σύνθεση σε αυτή την αρχική εικόνα και ζητήστε συγκεκριμένη κίνηση. Πρόκειται για αναφορά αρχικού καρέ και όχι εγγύηση διατήρησης κάθε λεπτομέρειας σε όλο το κλιπ.\n\n### Επαναχρησιμοποιήσιμοι μη ανθρώπινοι χαρακτήρες\n\nΗ διευρυμένη ροή του παραγωγού μπορεί να δημιουργήσει επαναχρησιμοποιήσιμο στοιχείο χαρακτήρα από σύντομο βίντεο αναφοράς ζώου, μασκότ ή αντικειμένου. Οι οδηγίες προετοιμασίας ζητούν κλιπ MP4 περίπου δύο έως τεσσάρων δευτερολέπτων, 720p έως 1080p, σε 16:9 ή 9:16. Η αντιστοίχιση αναλογίας διαστάσεων πηγής και εξόδου βοηθά να αποφευχθεί παραμορφωμένη εμφάνιση. Η παραγωγή μπορεί να αναφέρεται σε έως δύο χαρακτήρες.\n\nΚρατήστε το αναγνωριστικό χαρακτήρα και αναφέρετε το όνομά του στο prompt· η απλή αποστολή του αναγνωριστικού δεν αποτελεί όλη την προετοιμασία του οδηγού. Τα στοιχεία χαρακτήρων μπορούν να συνοδεύουν παραγωγή από εικόνα, αλλά οι επεκτάσεις βίντεο δεν τα δέχονται. Ο παραγωγός αποκλείει από προεπιλογή μεταφορτώσεις χαρακτήρων με ανθρώπινη ομοιότητα και απορρίπτει εικόνες αναφοράς με ανθρώπινα πρόσωπα στην τεκμηριωμένη ροή API. Οι δυνατότητες προσωπικών χαρακτήρων της εφαρμογής Sora είναι χωριστή ροή προϊόντος.\n\n### Συνεχίστε ή επεξεργαστείτε ολοκληρωμένο κλιπ\n\nΜια επέκταση λαμβάνει ολοκληρωμένο αρχικό βίντεο και prompt συνέχειας, χρησιμοποιώντας ολόκληρο το αρχικό κλιπ ως συμφραζόμενα για την κίνηση, την κατεύθυνση της κάμερας και τη συνέχεια της σκηνής. Ο οδηγός περιγράφει προσθήκες έως 20 δευτερολέπτων ανά επέκταση. Η τεκμηριωμένη είσοδος επέκτασης είναι βίντεο και κείμενο· πρόσθετες αναφορές χαρακτήρων ή εικόνων αποκλείονται από αυτήν τη λειτουργία. Περιγράψτε πώς συνεχίζεται η υπάρχουσα δράση, αντί να εισάγετε άσχετη σκηνή χωρίς μετάβαση.\n\nΗ επεξεργασία βίντεο στοχεύει σε σαφή αλλαγή υπάρχοντος κλιπ. Μια εστιασμένη αναθεώρηση μπορεί να αλλάζει το χρώμα αντικειμένου ή την παλέτα της σκηνής, διατηρώντας το υπόλοιπο πλάνο. Ο οδηγός του παραγωγού συνιστά μία σαφώς ορισμένη αλλαγή κάθε φορά και διακρίνει την επεξεργασία παραγόμενου βίντεο από τη μεταφόρτωση αυθαίρετου υλικού, η οποία έχει χωριστή προϋπόθεση επιλεξιμότητας. Κρατήστε την ολοκληρωμένη πηγή και προσδιορίστε την ακριβή ζητούμενη αναθεώρηση πριν από νέα επεξεργασία.\n\n### Εργασίες απόδοσης και τελικό βίντεο\n\nΗ τεκμηριωμένη ροή βίντεο του παραγωγού είναι ασύγχρονη: μια υποβληθείσα εργασία μπορεί να βρίσκεται σε ουρά ή σε εξέλιξη πριν ολοκληρωθεί ή αποτύχει. Η ολοκληρωμένη εργασία δίνει βίντεο MP4· οι μικρογραφίες και τα φύλλα καρέ υποστηρίζουν προεπισκόπηση και περιήγηση. Κρατήστε την ταυτότητα της εργασίας συνδεδεμένη με το prompt, τις αναφορές και τα επιστρεφόμενα αρχεία. Η αρχική απάντηση εργασίας δεν είναι το τελικό βίντεο προς αναπαραγωγή.\n\nΗ συνήθης ροή λήψης περιγράφει διάρκεια ζωής URL λήψης μίας ώρας. Η διευρυμένη μαζική ροή προετοιμάζει ανεξάρτητα αιτήματα απόδοσης JSON με σταθερά αναγνωριστικά στοιχείων, μεταφορτωμένες αναφορές και αποτέλεσμα αντιστοιχισμένο σε κάθε πλάνο· τα ολοκληρωμένα αρχεία της έχουν χωριστή περίοδο λήψης έως 24 ώρες. Αποθηκεύστε έγκαιρα το ολοκληρωμένο κλιπ και εξετάστε την πραγματική εικόνα και τον ήχο πριν το θεωρήσετε επιλεγμένη λήψη.\n\nΟι τεκμηριωμένοι περιορισμοί περιεχομένου του API του παραγωγού απαιτούν υλικό κατάλληλο για κοινό κάτω των 18 και απορρίπτουν χαρακτήρες ή μουσική που προστατεύονται από πνευματικά δικαιώματα και την παραγωγή πραγματικών ανθρώπων. Προετοιμάστε ανάλογα τη σκηνή και τις αναφορές. Το άμεσο αποτέλεσμα του μοντέλου είναι βίντεο με ήχο, όχι παραγόμενες στατικές εικόνες, απόκριση εργαλείου συνομιλίας ή ταινία απεριόριστης διάρκειας. Διατηρήστε την ακριβή ταυτότητα του βασικού μοντέλου και το αποδεκτό αρχικό κλιπ όταν συνεχίζετε μια οπτική ιδέα.",
    "alias_of": null,
    "aliases": [],
    "author": "Other",
    "capabilities": {
      "context_length": 60000,
      "manufacturer_input": [],
      "manufacturer_output": []
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0.2000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0.0002",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          }
        ],
        "summary": "Πλήρης τιμολόγηση της διαμόρφωσης στις λεπτομέρειες."
      }
    ],
    "ctx": null,
    "formats": [
      "chat_completions",
      "messages"
    ],
    "id": "sora-2",
    "input": [
      "text"
    ],
    "kind": "text",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "cache_read": 0,
        "cache_write": 0,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "authentication": {
              "api_key_source": "AILOOT_API_KEY",
              "header": "Authorization: Bearer"
            },
            "example_body": {
              "messages": [
                {
                  "content": "hello",
                  "role": "user"
                }
              ],
              "model": "sora-2",
              "stream": false
            },
            "hints": [
              "Supply owned text as messages[].content.",
              "Use stream:false for JSON or stream:true for SSE; keep the complete response."
            ],
            "ignored_fields": [],
            "lifecycle": {
              "cancel": null,
              "create": {
                "http": "POST",
                "path": "/v1/chat/completions"
              },
              "job_read": null,
              "mode": "synchronous_json_or_sse",
              "status_poll": null,
              "unknown": "Διατηρήστε την αρχική απόκριση και την ταυτότητα της προσπάθειας· δεν συνάγεται περιοδικός έλεγχος νέας εργασίας ή επανυποβολή."
            },
            "material_combinations": [
              {
                "alternatives": [
                  "message[] with literal string content"
                ],
                "mode": "owned_text_messages"
              }
            ],
            "outputs": {
              "all_results": "Διατηρήστε όλα τα byte JSON ή SSE, τις κεφαλίδες απόκρισης, τη χρήση που επιστρέφεται και όλα τα παρεχόμενα πεδία αποτελέσματος. Δεν δηλώνεται οικογένεια εξόδων ειδική για το μοντέλο.",
              "family": "protocol",
              "fields": [
                {
                  "description": "Διατηρήστε κάθε πεδίο που επιστρέφεται, χωρίς να υποθέτετε οικογένεια αποτελεσμάτων ειδική για το μοντέλο.",
                  "name": "complete response JSON",
                  "type": "object"
                },
                {
                  "description": "Διατηρήστε κάθε συμβάν και δείκτη τερματισμού που επιστρέφεται, χωρίς να επιλέγετε μόνο πεδία κειμένου.",
                  "name": "SSE data events",
                  "type": "stream"
                }
              ],
              "format": "JSON ή text/event-stream"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "sora-2"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages",
                "required": true,
                "type": "message[]"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].role",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].content",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": false,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "stream",
                "required": false,
                "type": "boolean"
              }
            ],
            "profile_binding": "Current d09 shared client interface only; model-specific provider output and acceptance are not claimed.",
            "request_schema": {
              "additionalProperties": false,
              "properties": {
                "messages": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "content": {
                        "oneOf": [
                          {
                            "type": "string"
                          },
                          {
                            "items": {
                              "oneOf": [
                                {
                                  "properties": {
                                    "text": {
                                      "type": "string"
                                    },
                                    "type": {
                                      "const": "text"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "text"
                                  ],
                                  "type": "object"
                                },
                                {
                                  "properties": {
                                    "image_url": {
                                      "properties": {
                                        "detail": {
                                          "type": "string"
                                        },
                                        "url": {
                                          "type": "string"
                                        }
                                      },
                                      "required": [
                                        "url"
                                      ],
                                      "type": "object"
                                    },
                                    "type": {
                                      "const": "image_url"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "image_url"
                                  ],
                                  "type": "object"
                                }
                              ]
                            },
                            "type": "array"
                          }
                        ]
                      },
                      "role": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "role",
                      "content"
                    ],
                    "type": "object"
                  },
                  "minItems": 1,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "sora-2"
                  ],
                  "type": "string"
                },
                "stream": {
                  "default": false,
                  "type": "boolean"
                }
              },
              "required": [
                "model",
                "messages"
              ],
              "type": "object"
            },
            "schema_template": {
              "messages": [
                {
                  "content": "hello",
                  "role": "user"
                }
              ],
              "model": "sora-2",
              "stream": false
            },
            "unsupported": [
              "Model-specific optional tools or structured-output controls are not part of this minimal profile.",
              "No image/audio/video request controls, dimensions or foreign model limits are inherited.",
              "No asynchronous media job route or manufacturer output capability is inferred."
            ]
          },
          "input": {
            "content_type": "application/json",
            "file_material": "Πραγματικό υλικό UTF-8 μπορεί να εισαχθεί ως περιεχόμενο κυριολεκτικής συμβολοσειράς· δεν συνάγεται αναφορά σε αρχείο.",
            "material_types": [
              "text"
            ],
            "messages": "πίνακας μηνυμάτων με role και content ως κυριολεκτική συμβολοσειρά",
            "optional_controls": [
              "stream"
            ],
            "required": [
              "model",
              "messages"
            ]
          },
          "lifecycle": {
            "cancel": null,
            "create": {
              "http": "POST",
              "path": "/v1/chat/completions"
            },
            "job_read": null,
            "mode": "synchronous_json_or_sse",
            "status_poll": null,
            "unknown": "Preserve the original response and attempt identity; no new job polling or resubmission is inferred."
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/chat/completions"
          },
          "operation_modes": [
            "request_response",
            "response_stream"
          ],
          "output": {
            "all_results": "Retain the complete JSON or SSE bytes, response headers, returned usage and all supplied result fields. No model-specific output family is asserted.",
            "family": "protocol",
            "format": "JSON or text/event-stream",
            "manufacturer_output_family": null
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Βασικές χρεώσεις ανά token",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.2000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\":\"sora-2\",\"messages\":[{\"role\":\"user\",\"content\":\"hello\"}],\"stream\":false}')\n\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nfrom pathlib import Path\nprint(Path(\"result.json\").read_text(encoding=\"utf-8\"))\nPY_RESULT\n",
            "label": "curl · complete JSON response",
            "language": "bash"
          },
          {
            "code": "from openai import OpenAI\nimport os\n\nif not os.environ.get(\"AILOOT_API_KEY\", \"\").strip(): raise SystemExit(\"Set AILOOT_API_KEY before making a request\")\nclient=OpenAI(base_url=\"https://api.ailoot.ai/v1\",api_key=os.environ[\"AILOOT_API_KEY\"],max_retries=0)\nresult=client.chat.completions.create(model=\"sora-2\", messages=[{\"role\":\"user\",\"content\":\"hello\"}], stream=False)\nimport json\nfrom pathlib import Path\n\ndata = result.to_dict(mode=\"json\")\nPath(\"result.json\").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding=\"utf-8\")\nprint(json.dumps(data, ensure_ascii=False, indent=2))\n",
            "label": "Python SDK · complete JSON response",
            "language": "python"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\":\"sora-2\",\"messages\":[{\"role\":\"user\",\"content\":\"hello\"}],\"stream\":true}')\n\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.sse\n",
            "label": "curl · preserve SSE stream",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "chat_completions",
        "hints": [
          "Supply owned text as messages[].content.",
          "Use stream:false for JSON or stream:true for SSE; keep the complete response."
        ],
        "http": "POST",
        "in": 0,
        "input": [
          "text"
        ],
        "label": "Chat Completions",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": 200,
        "output": [
          "json",
          "sse"
        ],
        "path": "/v1/chat/completions",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "token",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.2000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "request_model_id": "sora-2",
        "route_label": "Ultra",
        "status_reads": [],
        "tiers": [],
        "units": [
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0.2000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0.0002",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          }
        ]
      },
      {
        "available": null,
        "cache_read": 0,
        "cache_write": 0,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "authentication": {
              "api_key_source": "AILOOT_API_KEY",
              "headers": [
                "Authorization: Bearer",
                "x-api-key",
                "anthropic-version"
              ],
              "version_example": "2023-06-01"
            },
            "errors": [
              {
                "code": null,
                "condition": "Μη έγκυρα υποχρεωτικά πεδία, μη έγκυρη αναπαράσταση υλικού ή μη έγκυρη τιμή παραμέτρου",
                "http_status": 400,
                "recovery": "Διορθώστε τα υποδεικνυόμενα πεδία πριν από νέο αίτημα δημιουργίας.",
                "type": "invalid_request_error"
              }
            ],
            "example_body": {
              "max_tokens": 128,
              "messages": [
                {
                  "content": "Summarize the incident report.",
                  "role": "user"
                }
              ],
              "model": "sora-2",
              "stream": false
            },
            "lifecycle": {
              "create": {
                "http": "POST",
                "path": "/v1/messages"
              },
              "job_read": null,
              "mode": "synchronous_or_streamed",
              "unknown": "Διατηρήστε τα ID αιτήματος/απάντησης και τις κεφαλίδες. Δεν παρέχεται γενικό URL ανάκτησης εργασιών κειμένου."
            },
            "material_combinations": [
              {
                "mode": "text",
                "representation": "Συμβολοσειρά messages[].content",
                "required_material": "Κείμενο UTF-8"
              }
            ],
            "operation_modes": [
              "synchronous_json",
              "streamed_SSE"
            ],
            "outputs": {
              "all_results": "Διατηρήστε όλα τα μπλοκ περιεχομένου, τις υπογραφές συλλογιστικής και τα πραγματικά ID χρήσης εργαλείων. Συνθέστε όλες τις διαφορικές ενημερώσεις μπλοκ SSE· το πρώτο μπλοκ κειμένου δεν είναι η πλήρης έξοδος.",
              "family": "protocol",
              "fields": [
                {
                  "description": null,
                  "name": "id",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "model",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "content[]",
                  "type": "text|thinking|tool_use|other content block"
                },
                {
                  "description": null,
                  "name": "stop_reason",
                  "type": "string|null"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "JSON ή SSE"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "sora-2"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages",
                "required": true,
                "type": "message[]"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "user",
                  "assistant"
                ],
                "enum_known": true,
                "name": "messages[].role",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].content",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "max_tokens",
                "required": true,
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": false,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "stream",
                "required": false,
                "type": "boolean"
              }
            ],
            "profile_binding": "Documented current stock Messages bridge; optional model capabilities are separate from this minimal text request.",
            "request_schema": {
              "additionalProperties": false,
              "properties": {
                "max_tokens": {
                  "minimum": 1,
                  "type": "integer"
                },
                "messages": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "content": {
                        "oneOf": [
                          {
                            "type": "string"
                          },
                          {
                            "items": {
                              "oneOf": [
                                {
                                  "properties": {
                                    "text": {
                                      "type": "string"
                                    },
                                    "type": {
                                      "const": "text"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "text"
                                  ],
                                  "type": "object"
                                },
                                {
                                  "properties": {
                                    "source": {
                                      "oneOf": [
                                        {
                                          "properties": {
                                            "type": {
                                              "const": "url"
                                            },
                                            "url": {
                                              "type": "string"
                                            }
                                          },
                                          "required": [
                                            "type",
                                            "url"
                                          ],
                                          "type": "object"
                                        },
                                        {
                                          "properties": {
                                            "data": {
                                              "type": "string"
                                            },
                                            "media_type": {
                                              "type": "string"
                                            },
                                            "type": {
                                              "const": "base64"
                                            }
                                          },
                                          "required": [
                                            "type",
                                            "media_type",
                                            "data"
                                          ],
                                          "type": "object"
                                        }
                                      ]
                                    },
                                    "type": {
                                      "const": "image"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "source"
                                  ],
                                  "type": "object"
                                }
                              ]
                            },
                            "type": "array"
                          }
                        ]
                      },
                      "role": {
                        "enum": [
                          "user",
                          "assistant"
                        ],
                        "type": "string"
                      }
                    },
                    "required": [
                      "role",
                      "content"
                    ],
                    "type": "object"
                  },
                  "minItems": 1,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "sora-2"
                  ],
                  "type": "string"
                },
                "stream": {
                  "default": false,
                  "type": "boolean"
                }
              },
              "required": [
                "model",
                "messages",
                "max_tokens"
              ],
              "type": "object"
            },
            "schema_template": {
              "max_tokens": 128,
              "messages": [
                {
                  "content": "Summarize the incident report.",
                  "role": "user"
                }
              ],
              "model": "sora-2",
              "stream": false
            },
            "unsupported": [
              "No query API key.",
              "Hosted/server-side tools and model-specific optional controls are not part of this minimal family example."
            ]
          },
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "optional_controls": [
              "stream"
            ],
            "required": [
              "model",
              "messages",
              "max_tokens"
            ],
            "text_file_material": "Διαβάστε το πραγματικό έγγραφο UTF-8 και τοποθετήστε το κείμενό του στην υποδεικνυόμενη συμβολοσειρά εισόδου ή περιεχομένου του μηνύματος."
          },
          "lifecycle": {
            "create": {
              "http": "POST",
              "path": "/v1/messages"
            },
            "job_read": null,
            "mode": "synchronous_or_streamed",
            "unknown": "Keep request/response IDs and headers. No generic text job retrieval URL is supplied."
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/messages"
          },
          "output": {
            "all_results": "Keep all content blocks, thinking signatures and actual tool-use IDs. Assemble all SSE block deltas; a first text block is not the complete output.",
            "family": "protocol",
            "format": "JSON or SSE"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Βασικές χρεώσεις ανά token",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.2000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "{\n  \"model\": \"sora-2\",\n  \"max_tokens\": 128,\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\": \"Summarize the incident report.\"\n    }\n  ],\n  \"stream\": false\n}",
            "label": "Complete minimal JSON body",
            "language": "json"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}\"\nexport AILOOT_TEXT_FILE\npython3 - <<'PY_REQUEST'\nimport json, os\nfrom pathlib import Path\n\nsource_file = Path(os.environ['AILOOT_TEXT_FILE'])\nif not source_file.is_file():\n    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')\ntext = source_file.read_text(encoding='utf-8')\nif not text.strip():\n    raise SystemExit('Choose a document containing text')\npayload = {'model': 'sora-2', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}\npayload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\\n\\n' + text\nPath('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \\\n  -H \"x-api-key: $AILOOT_API_KEY\" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\n\nresult = json.loads(Path('result.json').read_text(encoding='utf-8'))\nprint(json.dumps(result, ensure_ascii=False, indent=2))\nPY_RESULT\n",
            "label": "curl · use your UTF-8 document",
            "language": "bash"
          },
          {
            "code": "import json, os\nfrom pathlib import Path\n\nsource_file = Path(os.environ['AILOOT_TEXT_FILE'])\nif not source_file.is_file():\n    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')\ntext = source_file.read_text(encoding='utf-8')\nif not text.strip():\n    raise SystemExit('Choose a document containing text')\npayload = {'model': 'sora-2', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}\npayload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\\n\\n' + text\nfrom urllib.request import Request, urlopen\nfrom urllib.error import HTTPError\n\napi_key = os.environ['AILOOT_API_KEY']\nif not api_key.strip():\n    raise SystemExit('Set AILOOT_API_KEY before making a request')\nheaders = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}\nheaders['x-api-key'] = api_key\nrequest = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')\ntry:\n    with urlopen(request, timeout=120) as response:\n        raw = response.read()\n        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')\nexcept HTTPError as error:\n    Path('result.json').write_bytes(error.read())\n    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')\n    raise\nPath('result.json').write_bytes(raw)\nimport json\nfrom pathlib import Path\n\nresult = json.loads(Path('result.json').read_text(encoding='utf-8'))\nprint(json.dumps(result, ensure_ascii=False, indent=2))\n",
            "label": "Python · save the complete result",
            "language": "python"
          }
        ],
        "family": "anthropic",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "messages",
        "http": "POST",
        "in": 0,
        "input": [
          "text"
        ],
        "label": "Anthropic Messages",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": 200,
        "output": [
          "json",
          "sse"
        ],
        "path": "/v1/messages",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "token",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.2000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "request_model_id": "sora-2",
        "route_label": "Ultra",
        "status_reads": [],
        "tiers": [],
        "units": [
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0.2000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0.0002",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "sora-2",
        "request_model_id": "sora-2",
        "route_label": "Ultra"
      }
    ],
    "name": "sora-2",
    "price": {
      "in": 0,
      "in_label": null,
      "out": 200,
      "out_label": null,
      "scope_label": "Token rates",
      "sort_in": 0,
      "sort_out": 200,
      "varies": false
    },
    "short": "Το Sora 2 δημιουργεί βίντεο με συγχρονισμένο διάλογο, ηχητικά εφέ και ήχο περιβάλλοντος από κείμενο ή εικόνα αναφοράς. Το βασικό προφίλ υποστηρίζει οπτική εξερεύνηση και κλιπ ιδεών, με χωριστές ροές του παραγωγού για επαναχρησιμοποιήσιμους μη ανθρώπινους χαρακτήρες, συνέχεια και στοχευμένες επεξεργασίες βίντεο."
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        },
        {
          "contract_json_pointer": "/methods/1/rawMethod/contract",
          "html_json_pointer": "/methods/1/html",
          "method_ordinal": 1
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod",
        "/methods/1/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "Το Sora 2 δημιουργεί βίντεο με συγχρονισμένο διάλογο, ηχητικά εφέ και ήχο περιβάλλοντος από κείμενο ή εικόνα αναφοράς. Το βασικό προφίλ υποστηρίζει οπτική εξερεύνηση και κλιπ ιδεών, με χωριστές ροές του παραγωγού για επαναχρησιμοποιήσιμους μη ανθρώπινους χαρακτήρες, συνέχεια και στοχευμένες επεξεργασίες βίντεο.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "1223f97fd2b75b75b97a856979d13e98dc853965670d80fa221ea94c55e84585",
    "renderer_sha256": "3ed36f7af4f78822bafbd174fdcaed7b698a18a86efe254253d37f1b098a7566"
  },
  "sourceRevision": "4284ea7561ba5309760effcc20304493fd652ba424c87dd0231ea727660a095e"
}
