FlutterFlow
FlutterFlow se compila en una aplicación que tiene en sus manos tu usuario, así que la cuestión no es qué campos rellenar, sino dónde termina la clave. La solicitud a continuación se envía a producción exactamente en la forma en que la construye la llamada; los pasos en FlutterFlow están escritos según la documentación de FlutterFlow al 2026-09-17.
Primero crea una clave, como se describe en la sección Clave para automatización, con el ámbito chart.
1. Crea la llamada
Sección titulada «1. Crea la llamada»Abre API Calls, haz clic en + Add, selecciona Create API Call y completa:
-
API Call Name:
Natal chart. -
Method Type:
POST. -
URL:
https://api.astroway.info/v1/chart -
Pestaña Headers, + Add Header: una línea
X-Api-Key:seguida de tu clave. Otra líneaContent-Type: application/json. -
Pestaña Variables: cinco variables de tipo String,
date,time,timezone,latitude,longitude, cada una con un valor por defecto del JSON a continuación. -
Pestaña Body, en la lista desplegable JSON: inserta el JSON y arrastra en él las variables.
{ "date": "1990-05-15", "time": "14:30:00", "timezone": "Europe/Kyiv", "latitude": "50.45", "longitude": "30.52"}La latitud y longitud se dejan como cadenas a propósito: la API acepta "50.45" como número, y la cadena simplifica arrastrar las variables.
Haz clic en Add Call, abre Response & Test, pulsa Test API Call y mira la respuesta en Test Response. data.input.timezoneOffset se devuelve como 4: ese es el desplazamiento de Kyiv en esa fecha.
2. Haz la llamada privada
Sección titulada «2. Haz la llamada privada»En Advanced Settings de la llamada activa Make Private, haz clic en Save, luego en Deploy APIs. Ahora la llamada se ejecuta en Firebase Cloud Function, por lo que el proyecto necesita Firebase conectado y un plan de Firebase con Cloud Functions.
Dos cosas más que la documentación de FlutterFlow dice claramente: la clave enviada desde el frontend, por ejemplo a través de remote config, sigue estando expuesta incluso en una llamada privada, y la forma segura es el encabezado incluido en la propia llamada.
3. Lee la respuesta
Sección titulada «3. Lee la respuesta»En JSON Paths haz clic en + Add JSON Path y asigna un nombre a cada uno:
| Nombre | JSON Path |
|---|---|
ascendant | $.data.houses.ascendant |
sunLongitude | $.data.planets[0].longitude |
moonLongitude | $.data.planets[1].longitude |
offsetUsed | $.data.input.timezoneOffset |
El signo es la longitud dividida por 30 y redondeada hacia abajo, como índice en una lista de doce nombres: por ejemplo, Ascendente 159.26 da 5, es decir, Virgo. Basta con una función personalizada de cuatro líneas o una lista de doce elementos y el índice.
La compilación web no puede llamarnos desde el navegador
Sección titulada «La compilación web no puede llamarnos desde el navegador»Medido el 2026-09-17 desde una página en dominio externo: POST /v1/chart responde al preflight sin el encabezado access-control-allow-origin, y Chrome bloquea la solicitud. Al navegador en dominio externo solo responden /v1/public/* y /v1/embed/*.
FlutterFlow realiza las llamadas a través de su propio proxy en el constructor, en Run mode y Test mode, por lo que una llamada que funciona allí puede fallar después de publicar la aplicación web. Hay dos soluciones, y recomendamos la primera:
- Haz la llamada privada, como arriba. Entonces se ejecuta en Cloud Function, no en el navegador, y eso elimina tanto el problema de la clave como el de CORS.
- Coloca tu propio backend delante de nosotros, si ya lo tienes. La configuración del proxy en FlutterFlow, junto con tu propio proxy URL, está documentada para el constructor y los modos Run y Test; la documentación no menciona la compilación web publicada, así que no deberías contar con ello.
Una clave pública pk_ no soluciona esto: solo accede a /v1/public/* y /v1/embed/*, y desde compilaciones para iOS y Android se rechaza por completo, ya que no envían web-origin.
Errores
Sección titulada «Errores»401en una llamada privada: la clave está en el grupo, no en la llamada.400 INVALID_FIELDcontimezoneendetails: zona vacía, es una abreviatura comoESTo no es un nombre de zona.400condateotimeendetails: el formato no esYYYY-MM-DD/HH:MM:SS.403 ENDPOINT_NOT_IN_SCOPE: el ámbito de la clave no incluyechart.429 KEY_BUDGET_EXHAUSTED: la clave agotó su presupuesto; aumentalo en el dashboard.