Até hoje whitelabel: true nos nossos report-endpoints exigia uma conta WordPress com chaves configuradas em whitelabel_configs. Isto é histórico – antes o white label era uma funcionalidade Pro do plugin WP, e a API simplesmente lia a mesma tabela DB.
Para utilizadores do SDK sem WP isso significava: brand-config impossível sem um salto HTTP adicional (manter um serviço de configuração separado, sincronizar com o nosso, e depois enviar whitelabel: true).
Agora o campo aceita um inline-objeto com todos os 15 campos de branding. Um pedido = contexto completo da marca = PDF personalizado.
Exemplo: PDF natal report com branding personalizado
Seção intitulada “Exemplo: PDF natal report com branding personalizado”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" } }'O PDF é renderizado com logótipo no cabeçalho, título personalizado na capa, acentos theme-color correspondentes no chart-SVG, e bloco de contactos no rodapé.
Todos os 15 campos do objeto
Seção intitulada “Todos os 15 campos do objeto”Todos os opcionais – um campo omitido assume o valor da configuração DB (se a chave API estiver ligada a um utilizador WP) ou dos defaults do sistema (para clientes SDK sem WP).
| Campo | Tipo | Finalidade |
|---|---|---|
companyName | string | Nome da marca no cabeçalho do PDF |
companyUrl | URL | Link clicável para o site no rodapé |
companyEmail | Link de contacto no rodapé (mailto:) | |
companyMobile | string | Telefone no rodapé |
companyBio | string | Um parágrafo de descrição da empresa na página de capa |
logoUrl | URL (.png/.jpg/.svg/.webp) | Logótipo, https‑only, 200×60 ratio recomendado |
frontImage | URL | Imagem hero na página de capa |
textPrimaryColor | #RGB/#RRGGBB | Texto principal |
textSecondaryColor | #RGB/#RRGGBB | Legendas, metadados |
backgroundColor | #RGB/#RRGGBB | Fundo das páginas |
themeColor | #RGB/#RRGGBB | Acentos, cabeçalhos, linhas de aspecto nos gráficos |
headingColor | #RGB/#RRGGBB | Cabeçalhos H1/H2 |
footerText | string | Copyright personalizado no rodapé |
fontPairing | enum | serif-sans / sans-serif / serif-only / sans-only / system |
reportName | string | Substitui o nome padrão do relatório na capa |
12 endpoints da família /v1/reports/* aceitam este campo da mesma forma: natal, transit-yearly, synastry, business, career, love, money, child, lal-kitab, human-design, tarot, vedic-kundli.
Compatibilidade retroativa
Seção intitulada “Compatibilidade retroativa”Modo booleano continua ativo e não mudou:
whitelabel: true: lê a configuração DB para o utilizador WP associado (como antes)whitelabel: falseou campo ausente: branding padrão AstroWaywhitelabel: {…}: inline-objeto, novo comportamento
O esquema OpenAPI para o campo passou a ser boolean | BrandingObject (tipo união). Nenhum pedido existente irá quebrar.
Prioridade de resolução
Seção intitulada “Prioridade de resolução”Quando uma chave API está ligada a um utilizador WP E o cliente envia um inline‑objeto – o inline prevalece sobre a DB. Concretamente:
- Defaults do sistema (branding AstroWay)
- Configuração DB com
whitelabel_configs(se o utilizador WP tiver uma) - Inline‑objeto no corpo do pedido
Merge – shallow, key‑by‑key. Ou seja, inline.themeColor = "#ff5500" sobrescreve o valor DB, mas inline.logoUrl omitido mantém o logótipo DB. Isto é útil para cenários SaaS onde o branding base está na DB, e o ajuste per‑tenant vem inline.
Mapeamento interno: themeColor torna‑se primaryColor após a chamada applyBrandingPreferences, fontPairing mapeia para a pilha CSS font-family no template Handlebars (por exemplo, serif-sans = font-family: 'Playfair Display', serif para cabeçalhos + 'Inter', sans-serif para o corpo).
OpenAPI 3.1 + tipagem SDK
Seção intitulada “OpenAPI 3.1 + tipagem SDK”BrandingObject agora é um componente separado em /v1/openapi.json – isso significa que a próxima versão do SDK (TS / Python / PHP) receberá uma classe tipada:
// 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 },});Roadmaps dos pacotes SDK – nos repositórios de staging correspondentes (astroway-typescript-staging/ROADMAP.md, etc.). O Cron publica releases menores a cada 5‑8 dias; o BrandingObject tipado chegará em breve.
O que isto elimina
Seção intitulada “O que isto elimina”Antes, para um consumidor SaaS que integrava a geração de PDF AstroWay no seu próprio produto, o caminho era:
- Manter a tua própria tabela
tenantscom o campobranding_json - Antes de cada pedido de report: buscar a configuração do teu utilizador
- Não perceber como passar para a API sem o plugin WP (antes: impossível, era preciso pedir‑nos para criar uma entrada em
whitelabel_configspara o utilizador SaaS) - Ou então fazer pós‑processamento do PDF com o teu próprio renderizador: infra adicional
Agora o caminho:
- Guardar
branding_jsonlocalmente - Passar inline em
whitelabelem cada pedido
Menos saltos HTTP, zero sincronização DB entre serviços, controlo total do branding por request.
Disponibilidade
Seção intitulada “Disponibilidade”O modo inline está disponível em todos os planos que incluem relatórios PDF – desde Indie ($19/mês) até Business. O tier Free não oferece PDF (intencional – no Free há JSON gratuito, sem renderização). O custo de crédito do pedido não muda – a configuração inline não acrescenta credit-cost ao render.
A documentação para todos os 12 endpoints foi atualizada com exemplos do modo inline. Vê /docs/api/ → Reports.
O mesmo Swiss Ephemeris que no Solar Fire - em 4 linhas de código.
Chave gratuita sem cartão. 5 000 chamadas por mês até o primeiro pagamento.