AstroWay/api v2.204.2 · el
όλες οι υπηρεσίες λειτουργούν κανονικά

White-label PDF χωρίς WordPress: inline branding μέσω ενός πεδίου

Το πεδίο whitelabel στα σχήματα όλων των 12 endpoint /v1/reports/* τώρα δέχεται όχι μόνο boolean (διάβασε DB-config), αλλά και inline-αντικείμενο με 15 πεδία. Αυτό αφαιρεί την εξάρτηση από χρήστη WordPress - οποιοσδήποτε SaaS-καταναλωτής API μπορεί να brand-άρει PDF σε πραγματικό χρόνο, χωρίς ξεχωριστή admin-σελίδα.

Μέχρι σήμερα, το whitelabel: true στα report-endpoints μας απαιτούσε έναν λογαριασμό WordPress με διαμορφωμένα κλειδιά στο whitelabel_configs. Αυτό είναι ιστορικό – παλαιότερα το white label ήταν μια Pro-λειτουργία του WP-plugin, και το API απλώς διάβαζε τον ίδιο πίνακα DB.

Για τους χρήστες του SDK χωρίς WP, αυτό σήμαινε: η διαμόρφωση επωνυμίας ήταν αδύνατη χωρίς ένα επιπλέον HTTP-hop (να διατηρείς μια ξεχωριστή υπηρεσία διαμόρφωσης, να τη συγχρονίζεις με τη δική μας και μετά να στέλνεις whitelabel: true).

Τώρα το πεδίο δέχεται ένα inline-αντικείμενο με όλα τα 15 πεδία branding. Ένα αίτημα = πλήρες πλαίσιο επωνυμίας = εξατομικευμένο PDF.

Παράδειγμα: PDF natal report με προσαρμοσμένο branding

Ενότητα με τίτλο «Παράδειγμα: PDF natal report με προσαρμοσμένο branding»
Terminal window
curl -X POST https://api.astroway.info/v1/reports/natal \
-H "X-Api-Key: aw_live_..." \
-H "Content-Type: application/json" \
-d '{
"chart": {
"date": "1990-05-15",
"time": "14:30:00",
"timezoneOffset": 3,
"latitude": 50.45,
"longitude": 30.52,
"name": "Maria"
},
"whitelabel": {
"companyName": "Acme Astrology",
"companyUrl": "https://acme-astro.example.com",
"companyEmail": "hello@acme-astro.example.com",
"logoUrl": "https://cdn.example.com/logo.png",
"themeColor": "#ff5500",
"headingColor": "#1a1a2e",
"reportName": "My Personal Cosmic Map",
"footerText": "© 2026 Acme Astrology",
"fontPairing": "serif-sans"
}
}'

Το PDF αποδίδεται με λογότυπο στην κεφαλίδα, προσαρμοσμένο τίτλο στο εξώφυλλο, αντίστοιχες theme-color πινελιές στα chart-SVG και ένα μπλοκ επαφών στο υποσέλιδο.

Όλα είναι προαιρετικά – ένα πεδίο που παραλείπεται λαμβάνει την τιμή από τη διαμόρφωση DB (εάν το API-key είναι συνδεδεμένο με χρήστη WP) ή από τις προεπιλογές συστήματος (για πελάτες SDK χωρίς WP).

ΠεδίοΤύποςΣκοπός
companyNamestringΌνομα επωνυμίας στην κεφαλίδα του PDF
companyUrlURLΚλικαριστό σύνδεσμο προς τον ιστότοπο στο υποσέλιδο
companyEmailemailΣύνδεσμος επικοινωνίας στο υποσέλιδο (mailto:)
companyMobilestringΤηλέφωνο στο υποσέλιδο
companyBiostringΜια παράγραφος περιγραφής της εταιρείας στη σελίδα εξωφύλλου
logoUrlURL (.png/.jpg/.svg/.webp)Λογότυπο, https-only, συνιστώμενη αναλογία 200×60
frontImageURLHero-εικόνα στη σελίδα εξωφύλλου
textPrimaryColor#RGB/#RRGGBBΚύριο κείμενο
textSecondaryColor#RGB/#RRGGBBΥπογραφές, μεταδεδομένα
backgroundColor#RGB/#RRGGBBΦόντο σελίδων
themeColor#RGB/#RRGGBBΤονισμοί, τίτλοι, γραμμές όψεων στα διαγράμματα
headingColor#RGB/#RRGGBBΕπικεφαλίδες H1/H2
footerTextstringΠροσαρμοσμένο copyright στο υποσέλιδο
fontPairingenumserif-sans / sans-serif / serif-only / sans-only / system
reportNamestringΑντικαθιστά την προεπιλεγμένη ονομασία αναφοράς στο εξώφυλλο

12 endpoints της οικογένειας /v1/reports/* δέχονται αυτό το πεδίο με τον ίδιο τρόπο: natal, transit-yearly, synastry, business, career, love, money, child, lal-kitab, human-design, tarot, vedic-kundli.

Η Boolean-λειτουργία είναι ζωντανή και δεν έχει αλλάξει:

  • whitelabel: true: διαβάζει τη διαμόρφωση DB για τον συνδεδεμένο χρήστη WP (όπως πριν)
  • whitelabel: false ή το πεδίο απουσιάζει: τυπικό branding AstroWay
  • whitelabel: {…}: inline-αντικείμενο, νέα συμπεριφορά

Το σχήμα OpenAPI για το πεδίο έγινε boolean | BrandingObject (union type). Κανένα υπάρχον αίτημα δεν θα χαλάσει.

Όταν το API-key είναι συνδεδεμένο με χρήστη WP ΚΑΙ ο πελάτης στέλνει ένα inline-αντικείμενο – το inline υπερισχύει του DB. Συγκεκριμένα:

  1. Προεπιλογές συστήματος (branding AstroWay)
  2. Διαμόρφωση DB από το whitelabel_configs (εάν ο χρήστης WP έχει μία)
  3. Inline-αντικείμενο από το body του αιτήματος

Η συγχώνευση είναι shallow, key-by-key. Δηλαδή, το inline.themeColor = "#ff5500" θα αντικαταστήσει την τιμή DB, αλλά το inline.logoUrl που παραλείπεται θα αφήσει το λογότυπο DB. Αυτό είναι βολικό για σενάρια SaaS όπου το βασικό branding βρίσκεται στο DB, ενώ ο per-tenant συντονισμός έρχεται inline.

Εσωτερική αντιστοίχιση: το themeColor γίνεται primaryColor μετά την κλήση του applyBrandingPreferences, το fontPairing αντιστοιχίζεται στο CSS font-family stack στο Handlebars-template (για παράδειγμα, serif-sans = font-family: 'Playfair Display', serif για επικεφαλίδες + 'Inter', sans-serif για το σώμα).

Το BrandingObject είναι τώρα ένα ξεχωριστό component στο /v1/openapi.json – αυτό σημαίνει ότι η επόμενη έκδοση του SDK (TS / Python / PHP) θα λάβει μια τυποποιημένη κλάση:

// TS SDK - після наступного codegen-релізу
import { Astroway } from "@astroway/sdk";
const client = new Astroway({ apiKey: process.env.ASTROWAY_KEY });
const pdf = await client.reports.natal.create({
chart: { date: "1990-05-15", time: "14:30", /* ... */ },
whitelabel: {
companyName: "Acme Astrology",
themeColor: "#ff5500",
reportName: "My Personal Cosmic Map",
fontPairing: "serif-sans", // typed enum, autocomplete у IDE
},
});

Οι οδικοί χάρτες των πακέτων SDK βρίσκονται στα αντίστοιχα staging-repos (astroway-typescript-staging/ROADMAP.md, κ.λπ.). Το Cron δημοσιεύει μικρές εκδόσεις κάθε 5-8 ημέρες· το τυποποιημένο BrandingObject θα είναι στην επόμενη.

Προηγουμένως, για έναν SaaS-καταναλωτή που ενσωματώνει τη δημιουργία PDF του AstroWay στο δικό του προϊόν, η διαδρομή ήταν:

  1. Να δημιουργήσεις έναν πίνακα tenants με ένα πεδίο branding_json
  2. Πριν από κάθε αίτημα αναφοράς: να ανακτήσεις τη διαμόρφωση του χρήστη σου
  3. Να μην καταλάβεις πώς να το μεταβιβάσεις στο API χωρίς το WP-plugin (πριν: καθόλου, έπρεπε να μας ζητήσεις να δημιουργήσουμε μια καταχώριση στο whitelabel_configs για τον χρήστη SaaS)
  4. Ή να κάνεις PDF-μετα-επεξεργασία με τον δικό σου renderer: αυτή είναι επιπλέον υποδομή

Τώρα η διαδρομή είναι:

  1. Να αποθηκεύεις το branding_json σε εσένα
  2. Να μεταβιβάζεις inline στο whitelabel για κάθε αίτημα

Λιγότερα HTTP-hops, μηδενικός συγχρονισμός DB μεταξύ υπηρεσιών, πλήρης έλεγχος του branding ανά αίτημα.

Η inline-λειτουργία είναι διαθέσιμη σε όλα τα πακέτα όπου υπάρχουν PDF-reports – από το Indie (19$/μήνα) έως το Business. Το Free tier δεν παρέχει PDF (αυτό είναι σκόπιμο – στο Free υπάρχει δωρεάν JSON, χωρίς rendering). Το κόστος πίστωσης του αιτήματος δεν αλλάζει – η inline-διαμόρφωση δεν προσθέτει credit-cost επιπλέον του rendering.

Η τεκμηρίωση για όλα τα 12 endpoints έχει ενημερωθεί με παραδείγματα inline-λειτουργίας. Δες /docs/api/ → Reports.

MakSeong · AstroWay

Δημιουργώ το AstroWay API: τυλίγω το Swiss Ephemeris σε καθαρό REST και γράφω για τις βαρετές λεπτομέρειες που είναι πραγματικά σημαντικές.

// δημιούργησε πάνω σε αυτό

Αυτή η ίδια Swiss Ephemeris που υπάρχει στο Solar Fire - σε 4 γραμμές κώδικα.

Δωρεάν κλειδί χωρίς κάρτα. 5.000 αιτήματα ανά μήνα μέχρι την πρώτη πληρωμή.

Περισσότερα από το blog όλες οι δημοσιεύσεις →

Ephemeris 2026-07-19

Πώς διατηρούμε την ακρίβεια υπό έλεγχο: CI εναντίον swetest και NASA

Η ακρίβεια στο astro-API υποβαθμίζεται εύκολα από μια μόνο ανασυγκρότηση των εφεμερίδων. Αναλύουμε την προστασία: ένας πυρήνας Swiss Ephemeris για την εφαρμογή και το API, εκατοντάδες παγωμένα snapshots σε πρότυπους χάρτες και τριγωνοποίηση κάθε PR εναντίον swetest CGI, Kerykeion, Prokerala και του καταλόγου σκιών της NASA.

Engineering 2026-07-15

Τρία επίσημα SDK: TypeScript, Python, PHP αντί για ακατέργαστο curl

Ακατέργαστο HTTP λειτουργεί, αλλά ο τυποποιημένος πελάτης εξοικονομεί ώρες: αυτόματη συμπλήρωση διαδρομών, τύποι αιτήματος και απάντησης, ενσωματωμένο retry σε 408/409/429/5xx και ιεραρχία σφαλμάτων τύπου Stainless. Αναλύουμε τρία επίσημα SDK - @astroway/sdk (npm), astroway (PyPI), astroway/sdk (Packagist) - και πώς δημιουργήθηκαν από ένα OpenAPI συμβόλαιο.

Industry 2026-06-05

Free Astrology API: Which One Has the Best Free Tier in 2026?

A side-by-side of free tiers across the major astrology APIs - credits, request caps, card requirements - and how much you can actually build for free.