/pingΈλεγχος ότι το key είναι έγκυρο. Χωρίς πεδία.
response
- ok: true
API v1
Έκδοση 1 (v1), μόνο προσθήκες: νέα endpoints και προαιρετικά πεδία προστίθενται, ποτέ δεν αφαιρείται ή αλλάζει κάτι που υπάρχει.
Δεν διαγράφουμε ποτέ βίντεο, όμως συνιστούμε να κατεβάζετε κάθε έτοιμο βίντεο μία φορά και να το φιλοξενείτε στον δικό σας server. Οι τιμές και το πορτοφόλι σας είναι ίδια με το mystage.film.
Από μια κατηγορία μέχρι ένα βίντεο στον δικό σας server. Κάθε POST στέλνει νέο Idempotency-Key. Ο πλήρης οδηγός ως κείμενο: docs/api/guides/quickstart.md, και στο /llms.txt.
Τα poster_url, video_url, example_poster_url και example_video_url είναι στο media CDN μας, που απαντά 403 σε αίτημα χωρίς Referer header. Σε browser μη χρησιμοποιείτε Referrer-Policy no-referrer (δουλεύει το strict-origin ή η προεπιλογή). Ένας server που κατεβάζει media πρέπει να στέλνει Referer, οποιοδήποτε https origin, π.χ. το δικό σας site. Το hotlinking στο CDN μας δεν υποστηρίζεται για sites σε παραγωγή: κατεβάστε το poster και το βίντεο μία φορά και σερβίρετέ τα από δικό σας storage ή CDN. Το link του έτοιμου βίντεο (GET /v1/orders/{id}/video) δεν χρειάζεται Referer αλλά λήγει στο expires_at.
Σύντομος και ακριβής οδηγός για agents: η σειρά των κλήσεων, τα headers που απαιτούνται, οι κανόνες χρημάτων (πάντα δείχνετε την τιμή και παίρνετε επιβεβαίωση από τον άνθρωπο πριν το POST /v1/orders), πώς συμπληρώνονται οι φόρμες από το schema, κάθε πότε γίνεται polling και ο κανόνας Referer για τα media. Το OpenAPI είναι δημόσιο στο /api/v1/openapi.json.
Άνοιγμα /llms.txtΚάθε κλήση στέλνει το API key σας στο Authorization header, τύπου Bearer. Δεν υπάρχουν cookies, δεν υπάρχει CORS: το API καλείται από backend/server, όχι από browser του τελικού χρήστη. Το key δίνει πρόσβαση ΜΟΝΟ στον δικό σας λογαριασμό: κάθε παραγγελία, αρχείο και χρηματική κίνηση είναι δεμένη με τον λογαριασμό σας, ό,τι κι αν στείλετε. Το key φαίνεται μία φορά κατά τη δημιουργία· αν διαρρεύσει, ανακαλέστε το από το portal και φτιάξτε άλλο.
Authorization: Bearer vapi_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Όλα τα endpoints βρίσκονται κάτω από https://mystage.film/api/v1. Οι απαντήσεις είναι JSON. Κάθε απάντηση έχει x-request-id header: αναφέρετέ το όταν επικοινωνείτε με την υποστήριξη.
https://mystage.film/api/v1
Τα list endpoints επιστρέφουν { data, has_more, next_cursor }. Περάστε το next_cursor ως query παράμετρο cursor στην επόμενη κλήση. limit: 1 έως 100 (προεπιλογή 20). Παραγγελίες και usage έρχονται νεότερα πρώτα· τα βίντεο με τη σειρά του καταλόγου. Με φίλτρα μια σελίδα μπορεί να έχει λιγότερα στοιχεία ενώ has_more είναι true.
Κάθε POST που δημιουργεί κάτι (orders, uploads, change requests, approvals, cancel) ΑΠΑΙΤΕΙ το header Idempotency-Key με μοναδική τιμή ανά λειτουργία (π.χ. ένα UUID ανά λειτουργία). Ίδιο key και ίδιο σώμα: η αποθηκευμένη απάντηση, ποτέ δεύτερη εκτέλεση. Ίδιο key και διαφορετικό σώμα: 422 idempotency_mismatch. Key που τρέχει ακόμη: 409 idempotency_in_flight. Οι απαντήσεις κρατούνται 48 ώρες· τα σφάλματα server (5xx) δεν αποθηκεύονται. Έτσι ένα network retry δεν δημιουργεί ποτέ διπλή παραγγελία ή διπλή χρέωση. Και ένα αποθηκευμένο 402 επαναλαμβάνεται: μετά από φόρτιση χρησιμοποιήστε νέο key.
Idempotency-Key: 8f3c1d2a-77b9-4c1e-9a01-5f6e8d9c0b1a
Όλα τα σφάλματα ακολουθούν RFC 9457 (application/problem+json) με πεδία type, title, status, code, request_id και, για προβλήματα πεδίων, λίστα errors. Αποφασίζετε με βάση το code. Οι κωδικοί που θα συναντήσετε και τι κάνετε:
Μέχρι 120 κλήσεις το λεπτό ανά key (ανάγνωση και γραφή μαζί) και μέχρι 30 POST/PATCH/DELETE το λεπτό ανά key. Στο 429 η απάντηση έχει Retry-After. Δεν χρεώνεστε ποτέ για κλήσεις που απορρίφθηκαν.
Αντί να ρωτάτε συνέχεια το GET /v1/orders, καταχωρήστε ένα webhook και θα σας ειδοποιούμε όταν αλλάζει μια παραγγελία σας: order.created, order.paid, order.production_started, order.storyboard_ready, order.awaiting_approval, order.changes_requested, order.delivered, order.failed, order.cancelled. Λαμβάνετε μόνο events για τις δικές σας παραγγελίες, ποτέ για άλλους λογαριασμούς. Το σώμα περιέχει μόνο ids και status: διαβάστε τις λεπτομέρειες με GET /v1/orders/order_id.
Κάθε αίτημα ακολουθεί το Standard Webhooks: headers webhook-id, webhook-timestamp και webhook-signature, υπογεγραμμένα με το secret του endpoint. Ελέγξτε την υπογραφή πριν εμπιστευτείτε ένα event. Αν το endpoint δεν απαντά 2xx, ξαναδοκιμάζουμε για περίπου 27 ώρες· μετά από 5 ημέρες συνεχών αποτυχιών το απενεργοποιούμε.
Όλες οι κλήσεις είναι σχετικές με το base URL. Τα σώματα είναι strict: άγνωστα πεδία απορρίπτονται.
/pingΈλεγχος ότι το key είναι έγκυρο. Χωρίς πεδία.
/meΤο key σας, ο λογαριασμός σας, το υπόλοιπο του πορτοφολιού σας και σύνοψη χρήσης 30 ημερών (κλήσεις, παραγγελίες, χρεώσεις σε cents).
curl -H "Authorization: Bearer $KEY" https://mystage.film/api/v1/me
/usageΤο ιστορικό κλήσεων του key σας: route, method, status, order_id αν η κλήση δημιούργησε παραγγελία και credits_cents όσα χρεώθηκαν. Cursor pagination.
curl -H "Authorization: Bearer $KEY" "https://mystage.film/api/v1/usage?limit=50"
/video-categoriesΟι κατηγορίες του καταλόγου βίντεο, με slug, όνομα στα αγγλικά και στα ελληνικά και πόσα βίντεο έχει η καθεμία.
curl -H "Authorization: Bearer $KEY" https://mystage.film/api/v1/video-categories
/videosΤα βίντεο του καταλόγου, όλα ή μίας κατηγορίας. Κάθε στοιχείο έχει poster_url, video_url (HLS), duration_seconds, categories (ονόματα), category_slugs και product_id: το προϊόν που παραγγέλνει ένα τέτοιο βίντεο, ή null αν είναι μόνο παράδειγμα. Φίλτρα: category, tag, q, aspect. Τα media θέλουν Referer header.
curl -H "Authorization: Bearer $KEY" "https://mystage.film/api/v1/videos?category=restaurants&limit=20"
/videos/{videoId}Ένα βίντεο του καταλόγου, ίδιο σχήμα με στοιχείο της λίστας. 404 not_found για άγνωστο id.
/model-libraryΈτοιμα AI μοντέλα για να απαντήσετε σε πεδίο model-picker (το id του μοντέλου) ή σε πεδίο person-spec σε library mode. Φίλτρο: gender.
/model-library/{modelId}Ένα μοντέλο της βιβλιοθήκης με τις εικόνες του από μπροστά, πίσω, πλάι και πορτρέτο.
/productsΟ κατάλογός σας: τίτλος (EN, EL), υπότιτλος, τιμές ανά διάρκεια, duration_prices, aspect_ratios, has_storyboard, κατηγορίες, tags, ένα βίντεο και poster παράδειγμα. Φίλτρα: category, tag, q, aspect, length_seconds. Cursor pagination.
curl -H "Authorization: Bearer $KEY" "https://mystage.film/api/v1/products?category=restaurants"
/products/{productId}Ένα προϊόν με id ή slug, με όλες τις λεπτομέρειες. has_storyboard true σημαίνει ότι η παραγγελία σταματά μία φορά για storyboard που εγκρίνει ο πελάτης· false σημαίνει ότι πηγαίνει κατευθείαν στο τελικό βίντεο.
/products/{productId}/intake-formΤα πεδία που ζητά το προϊόν: τύπος, ετικέτα, υποχρεωτικότητα, επιλογές, show_if, θέσεις για αρχεία, model_library και api_settable. Χτίστε τη φόρμα σας από εδώ· παραλείψτε κρυφά πεδία και πεδία με api_settable false (ισχύει η προεπιλογή).
/uploadsIdempotency-Key requiredΖητά presigned URL για ένα αρχείο της φόρμας. Σώμα: purpose "intake", content_type (image/jpeg, image/png, image/webp, audio/mpeg, audio/mp4), size_bytes (μέχρι 50 MB, ακριβές). PUT στο url με ακριβώς τα headers που επιστράφηκαν πριν λήξει (10 λεπτά). Κρατήστε το upload_id για τις απαντήσεις της παραγγελίας.
curl -X POST -H "Authorization: Bearer $KEY" -H "Idempotency-Key: $IDEM" \
-H "Content-Type: application/json" -d '{"customer_id":"…","purpose":"intake","content_type":"image/jpeg","size_bytes":48123}' \
https://mystage.film/api/v1/uploads
curl -X PUT -H "content-type: image/jpeg" --data-binary @photo.jpg "$UPLOAD_URL"/ordersIdempotency-Key requiredΔημιουργεί την παραγγελία και χρεώνει το πορτοφόλι σας σε ένα transaction. Σώμα: customer_id, product_id, length_seconds (από τις τιμές), aspect (προαιρετικά, από aspect_ratios), add_ons { subtitles, extra_formats, resolution, duration_seconds } (προαιρετικά, μόνο όσα προσφέρει το προϊόν), answers (τα πεδία της φόρμας· τα αρχεία ως upload_id), uploads (λίστα upload_id), review (προαιρετικά). Το complimentary δεν είναι διαθέσιμο μέσω API. 402 insufficient_credit αν δεν φτάνει το υπόλοιπο: δεν δημιουργείται ούτε χρεώνεται τίποτα.
curl -X POST -H "Authorization: Bearer $KEY" -H "Idempotency-Key: $IDEM" \
-H "Content-Type: application/json" -d '{"customer_id":"…","product_id":"…","length_seconds":15,"answers":{},"uploads":[]}' \
https://mystage.film/api/v1/orders/ordersΟι παραγγελίες σας, νεότερες πρώτα. Φίλτρα: status, created_after (ISO), customer_id. Cursor pagination.
curl -H "Authorization: Bearer $KEY" "https://mystage.film/api/v1/orders?status=delivered"
/orders/{orderId}Μια παραγγελία: status (received, awaiting_approval, changes_requested, in_production, delivered, failed, cancelled, awaiting_balance), στοιχεία, add ons, total_cents, cancellation_requested.
/orders/{orderId}/cancelIdempotency-Key requiredΚαταχωρεί ΑΙΤΗΜΑ ακύρωσης για την ομάδα μας (201, status pending). Σώμα: reason (υποχρεωτικό, τουλάχιστον 10 χαρακτήρες). Η παραγωγή δεν σταματά και δεν γίνεται αυτόματη επιστροφή χρημάτων: η ομάδα μας αποφασίζει για το αίτημα και για κάθε επιστροφή. Στο μεταξύ η παραγγελία μπορεί να παραδοθεί κανονικά.
/orders/{orderId}/storyboardΜόνο για προϊόντα με has_storyboard true: το τρέχον storyboard, το version_id, το status και οι σκηνές με εικόνες (links που ισχύουν 10 λεπτά). 404 storyboard_not_ready πριν είναι έτοιμο.
/orders/{orderId}/storyboard/approveIdempotency-Key requiredΕγκρίνει το storyboard εκ μέρους του πελάτη· η παραγωγή συνεχίζει. Σώμα: version_id από το GET storyboard.
/orders/{orderId}/change-requestsIdempotency-Key requiredΖητά αλλαγές σε σκηνές. Σώμα: version_id και changes, λίστα με scene_index και comment (10 έως 2000 χαρακτήρες). Ένας γύρος μπορεί να χρεωθεί από το πορτοφόλι (402 revision_payment_failed)· τα βίντεο 15 δευτερολέπτων μόνο εγκρίνονται.
/orders/{orderId}/videoΜόνο με delivered: download URL για το τελικό MP4 και expires_at (10 λεπτά). Μην αποθηκεύετε το link, ζητήστε ξανά. Κατεβάστε το αρχείο μία φορά και φιλοξενήστε το στον δικό σας server.
/webhook-endpointsΚαταχωρεί ένα webhook για τις δικές σας παραγγελίες. Σώμα: url (δημόσιο https, θύρα 443), events (μόνο order.*), description (προαιρετικό). Η απάντηση έχει το signing secret, που φαίνεται μόνο αυτή τη φορά. Μέχρι 5 endpoints ανά λογαριασμό.
curl -X POST -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"url":"https://example.com/hooks/in","events":["order.delivered","order.storyboard_ready"]}' \
https://mystage.film/api/v1/webhook-endpoints/webhook-endpointsΤα webhook endpoints σας, νεότερα πρώτα. Το secret δεν εμφανίζεται ποτέ ξανά.
/webhook-endpoints/{endpointId}Ένα webhook endpoint σας.
/webhook-endpoints/{endpointId}Αλλάζει url, events ή description, ή το απενεργοποιεί και το ενεργοποιεί ξανά (status active ή disabled).
/webhook-endpoints/{endpointId}Διαγράφει ένα endpoint που δεν έχει λάβει ποτέ αποστολή. Αν έχει ιστορικό αποστολών, απενεργοποιήστε το.
/webhook-endpoints/{endpointId}/testΣτέλνει τώρα ένα υπογεγραμμένο δοκιμαστικό event webhook.ping και δείχνει αν το endpoint απάντησε 2xx.
/webhook-endpoints/{endpointId}/rotate-secretΝέο signing secret, που φαίνεται μόνο σε αυτή την απάντηση. Τα επόμενα events υπογράφονται με αυτό.
Cookies
Χρησιμοποιούμε cookies ανάλυσης για να κατανοήσουμε πώς χρησιμοποιείται ο ιστότοπος. Δεν είναι απαραίτητα για τη λειτουργία του και η επιλογή σας δεν αλλάζει σε τίποτα την υπηρεσία που λαμβάνετε. Διαβάστε την Πολιτική Απορρήτου