loading-img

Autenticación

Para poder usar los APIS, debes tener un appID y su contraseña. El appID sirve para identificar tu implementación y toda la actividad o datos relacionados, además, te brinda seguridad en el uso. El appID se utiliza en todas las solicitudes dentro del encabezado.

Es importante definir que nuestras APIS operan sobre REST usando JSON, con esta metodología garantizamos la compatibilidad con tu aplicación, la flexibilidad de usar los recursos a tu conveniencia y una gran facilidad para enviar y recibir la información que necesitas.

Existen 2 tipos de aplicaciones en ASTROWEB. Ambas sirven para lo mismo, pero la diferencia radica en que la primera permite crear cuentas individuales de usuario con credenciales propias y la segunda no lo hace, procesa todo bajo la misma cuenta y no permite el acceso de terceros. Tu decisión depende sólo de este criterio. A lo largo de la documentación daremos ejemplos de ambos escenarios.

Para efectos de pruebas y documentación utilizaremos dos AppID's diferentes. Recuerda que estos datos y credenciales son públicos, para producción debes tener tu propio appID que puedes solicitar en ASTROWEB.

  1. appID: "1" | pass: "test1" (CON registro de cuentas)
  2. appID: "2" | pass: "test2" (SIN registro de cuentas)

La autenticación en todos los encabezados es "BASIC", seguido por el appID, ":" y el password encriptado en base64. Así mismo, todo el contenido de JSON es en formato de texto simple "UTF-8". Cualquier lenguaje de programación moderno lo soporta. Para ejemplos prácticos a lo largo de esta documentación utilizaremos "JSON" simple o al principio, "COLDFUSION", un lenguaje muy intuitivo de ADOBE que permite saber exactamente lo que se esta haciendo y que puedes traducir a tu lenguaje propio con el esfuerzo mínimo.

Ejemplo de Autenticación Básica appID: 1

<cfhttp url="https://astroweb.mx/rest/aw/{servicio}" method="GET">
    <cfhttpparam type="header" name="Authorization" value="Basic #ToBase64('1:test1')#" />
    <cfhttpparam type="header" name="Content-Type" value="text/plain; charset=UTF-8">                
 </cfhttp>

Manejo de Errores

En el caso que exista algun error en la solicitud se regresará únicamente el objeto de ERROR, ejemplo:

{
    "errordata": {
        "message": "App Inexistente o invalida",
        "logdb": true,
        "detail": "",
        "logid": 6
    },
    "success": false,
    "errorcode": "APPID",
    "api": "SECURITY.CFC"
}
campo descripción
errordata.message texto legible para el usuario final sobre el motivo del error
errordata.logdb Bandera que indica si el error se guardó o no en la base de datos (true o false)
errordata.detail en caso de que el error no sea "controlado", el mensaje nativo del catch se podrá ver en este espacio
errordata.logid si el tipo de error se guarda en la base de datos (logdb) se puede referenciar en soporte con el logdb que incluye todas las variables de ambiente necesarias para ayudar a corregirlo
success Bandera simple para saber si la solicitud se ejecutó de forma correcta (true o false)
errorcode Código de error identificado. Permite personalizar el mensaje o idioma.
api API o microservicio que detectó el error y detuvo el proceso.

/CREDITS GET

https://astroweb.mx/rest/aw/credits/{token}/{prodid} - obtiene el código requerido para solicitar un estudio/reporte nuevo.

Regresa un "creditcode". Los créditos se adquieren en función de tu configuración en forma de prepago, pospago o renta fija. Si no hay créditos disponibles, regresará el código de error "NOCREDIT". Si consultas un estudio con un crédito inválido o nulo sólo podrás ver el primer capítulo del reporte.

parámetro descripción
token Si es appid es tipo-1, usa el token generado con tokens.post al autenticarse. Si es appid es tipo-2, usa el valor definido en la consola como llave.
prodid Reporte/estudio que se desea consultar. Los créditos estan asociados a tipos de reportes y los reportes estan disponibles en función de tu app. Para consultar los reportes que tu app tiene disponibles consulta tu consola o usa el servicio products.get (ejemplos son: 1=Natal, 3=Infantil, 5=Vocacional...)

Ejemplo de Consulta Básica appID: 1 o 2

https://astroweb.mx/rest/aw/credits/TOKEN-KEY/1

Respuesta Exitosa

{
    "success": true,
    "data": {
        "creditcode": "75EC3E02-EC02-AD04-5B3934F1CC21198F",
        "token": {
            "appid": "2",
            "expiry": "2019-07-19 13:55:40",
            "userid": "0",
            "token": "***SECRET***"
        }
    }
}

/PRODUCTS GET

https://astroweb.mx/rest/aw/products - lista el inventario de productos o tipos de reportes disponibles

Ejemplo de Consulta Básica appID: 1 o 2

https://astroweb.mx/rest/aw/products

Respuesta Exitosa

{
    "success": true,
    "data": {
        "products": [
            {
                "avmode": "PRE",
                "prodname": "Carta Natal",
                "metadata": "",
                "prodid": 1,
                "chapters": 9
            },
            {
                "avmode": "PRE",
                "prodname": "Natal Chart",
                "metadata": "",
                "prodid": 2,
                "chapters": ""
            }
        ]
    }
}

El campo avmode te permite saber si ese reporte lo tienes configurado como Prepago, Pospago o Fijo. En caso de estos últimos los créditos se generan automáticamente al solicitarlos, sólo en el caso de PRE es necesario adquirirlos con antelación.

El campo metadata especifica los campos adicionales que son necesarios proveer para elaborar el reporte. Si este campo viene vacio, los datos del profileid (generados en profiles.post) son suficientes. La tabla siguiente describe cada campo. Todos los campos enlistados deben incluirse en el mismo JSON de metadata al momento de solicitar el reporte con reports.post

Campos adicionales variables requeridos por metadata

campo descripción tipo ejemplo
profileid2 ID del perfil complementario (de profiles.post) numérico {"profileid2":"57"}

/PROFILES GET

https://astroweb.mx/rest/aw/profiles/{token} - lista el inventario de perfiles asociados al usuario

Regresa un arreglo dentro de Profiles con objetos detallados de perfil para cada persona, o datos de nacimiento, asociados a la cuenta.

parámetro descripción
token Si es appid es tipo-1, usa el token generado con tokens.post al autenticarse. Si es appid es tipo-2, usa el valor definido en la consola como llave.

Ejemplo de Consulta Básica appID: 1 o 2

https://astroweb.mx/rest/aw/profiles/TOKEN-KEY

Respuesta Exitosa

{
    "success": true,
    "data": {
        "profiles": [
            {
                "placename": "Durango, Mexico",
                "lastname": "",
                "longitude": -104.653176,
                "gender": "F",
                "firstname": "Edith Garcia",
                "birthdate": "1977-06-20 01:15",
                "dstmins": 0,
                "timezone": -6,
                "latitude": 24.02772,
                "profileid": 2,
                "astroavatar":"https://...."
            },
            {
                "placename": "Ciudad de Mexico",
                "lastname": "",
                "longitude": -99.133208,
                "gender": "M",
                "firstname": "Juan Carlos",
                "birthdate": "1976-05-11 15:20",
                "dstmins": 0,
                "timezone": -6,
                "latitude": 19.432608,
                "profileid": 1,
                "astroavatar":"https://...."
            }
        ],
        "token": {
            "appid": "1",
            "expiry": "2019-07-25 07:11:39",
            "userid": "1",
            "token": "83CF099A-C57D-5554-1D6007C7F8441E28"
        }
    }
}

/PROFILES POST

https://astroweb.mx/rest/aw/profiles/{token} - Se utiliza para crear perfiles nuevos.

Ya sea un perfil asociado a un usuario registrado "app tipo-1" o un perfil general, asociado al usuario "0" para "app tipo-2". Los perfiles sirven para registrar los datos de nacimiento de cada persona para poder generar estudios. Al crear un usuario se le crea también un perfil asociado, este servicio es para ampliar ese catálogo. Recuerda que necesitas proveer un token para usar este servicio.

En el caso de la "app tipo-1" el token es provisto por el servicio tokens.post (y se actualiza en cada solicitud), y en el caso de la "app tipo-2", el token es un valor fijo que configuras desde tu panel de control.

parámetro (*requerido) descripción
firstname * Nombre(s) de la persona
lastname Apellido(s) de la persona
email correo electrónico de la persona
Default: correo electrónico del usuario, requerido para app tipo-2
birthdate Fecha/Hora de nacimiento (en formato: "yyyy-mm-dd HH:MM" (24hrs))
gender Sexo, usado para precisión gramatical en los reportes. F=Femenino/M=Masculino.
(default: calculado con el firstname usando genderize.io)
latlng Latitud y Longitud de nacimiento, en copla separados por coma (ej: "19.245,-99.097")
(default: calculado con placename usando google geocode api)
timezone zona horaria de nacimiento respecto a GMT/UTC (-12 a +12 en formato decimal)
(default: calculado con latlng usando google maps api)
dstmins minutos diferenciales por aplicación de horario de verano (-150,150)
(default: calculado con birthdate y latlng usando google timezone api)
placename Nombre del lugar de nacimiento, texto y detalle separado por comas (ej: "cdmx,mexico"))
(default: calculado con latlng usando google maps api)
Nota Importante: aunque sean mínimos los campos requeridos para crear el perfil, se necesita que en su momento esten completos para generar los estudios. Por ello, el sistema siempre buscará calcular automáticamente los faltantes o recalcular cuando exista información nueva.

Ejemplo Creación de Perfil appid: 1

https://astroweb.mx/rest/aw/profiles/1234-5678-3333-9090
{
	"email" : "napoleon35@aol.com",
    "firstname" : "Napo Monsanto",
    "placename" : "Acapulco, Mexico",
    "birthdate" : "1990-08-07 04:05"
}

Respuesta Exitosa

{
    "success": true,
    "data": {
        "profile": {
            "placename": "Acapulco, Mexico",
            "lastname": "",
            "longitude": -99.823653,
            "gender": "M",
            "firstname": "Napo Monsanto",
            "birthdate": "1990-08-07 04:05",
            "dstmins": 0,
            "timezone": -6,
            "latitude": 16.853109,
            "profileid": 12,
            "astroavatar":"https://...."
        },
        "token": {
            "appid": 2,
            "expiry": "2019-07-17 22:43:55",
            "userid": 0,
            "token": "1234-5678-3333-9090"
        }
    }
}

Ejemplo Creación de Perfil appID: 2

https://astroweb.mx/rest/aw/profiles/TOKEN-API-PRIVADO
{
	"email" : "napoleon35@aol.com",
    "firstname" : "Napo Monsanto",
    "placename" : "Acapulco, Mexico",
    "birthdate" : "1990-08-07 04:05"
}

Respuesta Exitosa

{
    "success": true,
    "data": {
        "profile": {
            "placename": "Acapulco, Mexico",
            "lastname": "",
            "longitude": -99.823653,
            "gender": "M",
            "firstname": "Napo Monsanto",
            "birthdate": "1990-08-07 04:05",
            "dstmins": 0,
            "timezone": -6,
            "latitude": 16.853109,
            "profileid": 12,
            "astroavatar":"https://...."
        },
        "token": {
            "appid": 2,
            "expiry": "2019-07-17 22:43:55",
            "userid": 0,
            "token": "***SECRET***"
        }
    }
}
Observa como en el caso de la app tipo-2 mostrada en el ejemplo, el token no es el provisto por el servicio de Tokens sino una llave propia (ej: "TOKEN-API-PRIVADO") configurable desde tu panel de control. Esto se debe a que no se requiere el token ya que no hay usuario por autenticar. Puedes observar también que en la respuesta esta token se regresa enmascarado. A diferencia de la app tipo-1 donde el token es dinamico y visible en la respuesta misma.

/REPORTS GET

https://astroweb.mx/rest/aw/reports/{token}/creditcode - Trae el inventario de reportes adquiridos o despliega un reporte especifico

Si se desea un reporte específico entonces el valor de creditcode debe ser un código de reporte válido, de lo contrario, se debe usar cero para regresar un listado del inventario.

parámetro descripción
token Si es appid es tipo-1, usa el token generado con tokens.post al autenticarse. Si es appid es tipo-2, usa el valor definido en la consola como llave.
creditcode Código para ver el reporte completo. El "cero" genera el inventario de existentes

Ejemplo de Consulta Básica appID: 1 o 2

https://astroweb.mx/rest/aw/reports/TOKEN-KEY/0

Respuesta Exitosa

{
    "success": true,
    "data": {
        "reports": [
            {
                "profile": {
                    "placename": "Durango, Mexico",
                    "lastname": "",
                    "longitude": -104.653176,
                    "gender": "F",
                    "firstname": "Edith Garcia",
                    "birthdate": "1977-06-20 01:15",
                    "dstmins": 0,
                    "timezone": -6,
                    "latitude": 24.02772,
                    "profileid": 2
                },
                "creditid": 2,
                "creditcode": "556EE328-B50B-7968-A0208FEBBE4669E7",
                "iconame": "https://astroweb.s3.amazonaws.com/reports/ico_natal.png",
                "prodname": "Carta Natal",
                "repid": 10,
                "prodid": 1
            },
            {
                "profile": {
                    "placename": "Ciudad de Mexico",
                    "lastname": "",
                    "longitude": -99.133208,
                    "gender": "M",
                    "firstname": "Juan Carlos",
                    "birthdate": "1976-05-11 15:20",
                    "dstmins": 0,
                    "timezone": -6,
                    "latitude": 19.432608,
                    "profileid": 1
                },
                "creditid": 1,
                "creditcode": "556EE18F-FBDA-92AE-D23C6D4C7F670CCD",
                "iconame": "https://astroweb.s3.amazonaws.com/reports/ico_natal.png",
                "prodname": "Carta Natal",
                "repid": 8,
                "prodid": 1
            }
        ],
        "token": {
            "appid": "1",
            "expiry": "2019-07-25 07:28:52",
            "userid": "1",
            "token": "83CF099A-C57D-5554-1D6007C7F8441E28"
        }
    }
}
Al usar un creditcode especifico, el resultado sera el reporte mismo. Igual que el resultado de REPORTS.POST. La diferencia es que estas consultando un reporte existente y no generando uno nuevo.

/REPORTS POST

https://astroweb.mx/rest/aw/reports/{token} - Crea y regresa un estudio nuevo o existente

Este servicio toma todos los elementos para generar el reporte solicitado. Es importante que ya exista el perfil del usuario y que el appid tenga el reporte en inventario. También es muy importante asegurar que el campo de metadata tenga toda la información requerida para el estudio en cuestión.

parámetro descripción
token* Si es appid es tipo-1, usa el token generado con tokens.post al autenticarse. Si es appid es tipo-2, usa el valor definido en la consola como llave.
prodid* Reporte/estudio que se desea consultar. Los créditos estan asociados a tipos de reportes y los reportes estan disponibles en función de tu app. Para consultar los reportes que tu app tiene disponibles consulta tu consola o usa el servicio products.get (ejemplos son: 1=Natal, 2=Infantil, 3=Vocacional...)
creditcode* Código para ver el reporte completo. Cualquier código inválido genera un reporte demo (solo el primer capítulo.)
profileid* ID del perfil creado con el servicio profiles.post y que contiene los datos de nacimiento de la persona sujeta del estudio.
metadata Si el estudio lo requiere (ver products.get), en este campo se deben incluir los campos adicionales necesarios (ej: fecha de retorno, profileid de pareja, etc)

Ejemplo de Consulta Básica appID: 1 o 2

https://astroweb.mx/rest/aw/reports/SECRET-KEY
{
	"prodid" : "4",
	"profileid" : "19",
	"metadata" : {"profileid" : "20"},
	"creditcode" : "r-987-555-123-000"
}

Respuesta Exitosa

{
    "success": true,
    "data": {
        "mode": "DEMO",
        "report": [
            {
                "chapter": "Capitulo 1 : Tu perspectiva ante la vida...",
                "data": [
                    {
                        "code": "SUN_Tau",
                        "image": "https://s3.amazonaws.com/astroweb/images/0/SUN_TAU.jpg",
                        "aspect": "Sol en Tauro",
                        "text": [
                            "Eres un alma paciente...",
                            "Tienes una naturaleza muy..."
                        ]
                    }                    
                ]
            }
        ]
    }
}

La composición del reporte es un conjunto de arreglos y estructuras muy fáciles de leer e implementar. Se encuentra delimitado por capítulos (chapter), dentro de cada capíitulo hay aspectos que incluyen imagen, titulo y textos expuestos por párrafos. Puedes contar en que la estructura es la misma para cualquier reporte. De esta forma tu puedes decidir como mostrarlo a tus usuarios.

El modo puede ser DEMO ó FULL. Cuando sea DEMO quiere decir que solo se incluye el primer capítulo y es gratuito.

/TOKENS POST

https://astroweb.mx/rest/aw/tokens - Se utiliza para hacer login de un usuario.

Sólo aplica para apps "tipo-1", aquellas con capacidad de crear cuentas individuales (ej: appid: 1).

parámetro descripción
user correo electrónico registrado
pass contraseña registrada

Ejemplo de Login Básico appID: 1

<cfset myJSON = '
   {
    "user" : "test@manoexperta.com", 
    "pass" : "passdepruebas"
   }
'>

<cfhttp url="https://astroweb.mx/rest/aw/tokens" method="POST">
    <cfhttpparam type="header" name="Authorization" value="Basic #ToBase64('1:test1')#" />
    <cfhttpparam type="header" name="Content-Type" value="text/plain; charset=UTF-8">                
   <cfhttpparam type="body" value="#myJSON#" />
</cfhttp>

Respuesta Exitosa

lleva la siguiente estructura:

{
    "success": true,
    "data": {
        "token": {
            "appid": 1,
            "userid": 1,
            "expiry": "2019-07-17 20:20:07",
            "token": "1A1D34E4-F689-B4A1-025628E8DA61CCDF"
        }
    }
}
campo descripción
success Bandera booleana (true/false) para indicar el éxito de la transacción
data.appid Parte del objeto token, indica el AppID autenticado
data.userid Indica el usuario que se autenticó.
  1. En el caso de las apps con registro este es un valor entero positivo.
  2. En el caso de las apps sin registro este valor siempre será cero.
data.expiry Fecha y Hora en la que expira el token. Usualmente tienen validez de 15mins y se actualiza con cada servicio consumido. Formato en yyyy-mm-dd HH:MM:SS
data.token Token otorgado. Este valor se debe usar para cualquier solicitud asociada, y si expira (errorcode:BADTOKEN) debe volverse a generar.
Nota Importante: Si necesitas ingresar a una cuenta de usuario (app tipo 1), pero no tienes las credenciales, puedes agregar a tu solicitud el campo "forcelogin" con valor de "true" para obtener el token. Esto es fundamental para poder hacer operaciones con el usuario desde el back-end de tu app.
pending...

/USERS POST

https://astroweb.mx/rest/aw/users - Se utiliza para crear cuentas nuevas.

Sólo aplica para apps "tipo-1", aquellas con capacidad de crear cuentas individuales (ej: appid: 1).

parámetro (*requerido) descripción
email * correo electrónico del usuario, en adelante el "user" para logins
pass * contraseña para el usuario
firstname * Nombre(s) del usuario
lastname Apellido(s) del usuario
birthdate Fecha/Hora de nacimiento (en formato: "yyyy-mm-dd HH:MM" (24hrs))
gender Sexo, usado para precisión gramatical en los reportes. F=Femenino/M=Masculino.
(default: calculado con el firstname usando genderize.io)
latlng Latitud y Longitud de nacimiento, en copla separados por coma (ej: "19.245,-99.097")
(default: calculado con placename usando google geocode api)
timezone zona horaria de nacimiento respecto a GMT/UTC (-12 a +12 en formato decimal)
(default: calculado con latlng usando google maps api)
dstmins minutos diferenciales por aplicación de horario de verano (-150,150)
(default: calculado con birthdate y latlng usando google timezone api)
placename Nombre del lugar de nacimiento, texto y detalle separado por comas (ej: "cdmx,mexico"))
(default: calculado con latlng usando google maps api)
isactive Bandera booleana para indicar si la cuenta se encuentra activa o no. (default: true)

Ejemplo Creación de Cuenta appID: 1

https://astroweb.mx/rest/aw/users
{
	"email" : "cleopatra59@correo.com",
	"pass" : "randompass",
    "firstname" : "Pepe Luis",
    "placename" : "Ciudad de Mexico",
    "birthdate" : "1976-05-11 15:20"
}

Respuesta Exitosa

{
    "success": true,
    "data": {
        "profile": {
            "placename": "Ciudad de Mexico",
            "lastname": "",
            "longitude": -99.133208,
            "gender": "M",
            "firstname": "Pepe Luis",
            "birthdate": "1976-05-11 15:20",
            "dstmins": 0,
            "timezone": -6,
            "latitude": 19.432608,
            "profileid": 10
        },
        "token": {
            "appid": 1,
            "userid": 77,
            "expiry": "2019-07-17 20:15:10",
            "token": "19EFDF59-FC89-6F55-FD5220D41E4BBAB7"
        }
    }
}
La respuesta incluye el objeto "profile" que permite ver la información necesaria del usuario para el cálculo de sus estudios. Para modificar, debes usar el servicio users.put y para agregar más perfiles asociados a éste usuario, el servicio de profiles.post

/TOOLS POST

https://astroweb.mx/rest/aw/tools/{token} - Diversas herramientas.

Herramientas de uso general

parámetro (*requerido) descripción
action Selector de Herramienta:
  1. getChart: trae la carta natal (data)
    (requiere profileid)

Ejemplo getChart

https://astroweb.mx/rest/aw/tools
{
    "action" : "getchart"
	"profileid" : 11
}



RESPONSE
{
    "success": true,
    "data": {
        "token": {
            "appid": "2",
            "expiry": "2019-08-12 14:36:59",
            "userid": "0",
            "token": "***SECRET***"
        },
        "chart": {
            "ALL": {
                "ASPECTSOLD": ""
            },
            "C02": {
                "position": "29.52",
                "SIGN": "Lib"
            },
            "CHI": {
                "position": "29.06",
                "aspects": "",
                "retro": "FALSE",
                "sign": "Ari",
                "house": "07"
            },
            "URA": {
                "position": " 4.25",
                "aspects": "",
                "retro": "TRUE",
                "sign": "Sco",
                "house": "02"
            },
            "C01": {
                "position": " 0.31",
                "SIGN": "Lib"
            },
            "VES": {
                "position": "22.40",
                "aspects": "",
                "retro": "FALSE",
                "sign": "Tau",
                "house": "08"
            },
            "C04": {
                "position": " 0.30",
                "SIGN": "Cap"
            },
            "C03": {
                "position": " 0.12",
                "SIGN": "Sag"
            },
            "SAT": {
                "position": "27.48",
                "aspects": "",
                "retro": "FALSE",
                "sign": "Can",
                "house": "10"
            },
            "C06": {
                "position": " 1.12",
                "SIGN": "Pis"
            },
            "C05": {
                "position": " 0.50",
                "SIGN": "Aqu"
            },
            "C08": {
                "position": "29.52",
                "SIGN": "Ari"
            },
            "C07": {
                "position": " 0.31",
                "SIGN": "Ari"
            },
            "MNN": {
                "position": "12.16",
                "aspects": "",
                "retro": "TRUE",
                "sign": "Sco",
                "house": "02"
            },
            "C09": {
                "position": " 0.12",
                "SIGN": "Gem"
            },
            "ASC": {
                "position": " 0.31",
                "aspects": "",
                "retro": "FALSE",
                "sign": "Lib",
                "house": "01"
            },
            "PLU": {
                "position": " 9.18",
                "aspects": "",
                "retro": "TRUE",
                "sign": "Lib",
                "house": "01"
            },
            "MHV": {
                "position": " 0.30",
                "aspects": "",
                "retro": "FALSE",
                "sign": "Can",
                "house": "10"
            },
            "C11": {
                "position": " 0.50",
                "SIGN": "Leo"
            },
            "JUN": {
                "position": " 5.12",
                "aspects": "",
                "retro": "FALSE",
                "sign": "Vir",
                "house": "12"
            },
            "C10": {
                "position": " 0.30",
                "SIGN": "Can"
            },
            "JUP": {
                "position": "11.00",
                "aspects": "",
                "retro": "FALSE",
                "sign": "Tau",
                "house": "08"
            },
            "C12": {
                "position": " 1.12",
                "SIGN": "Vir"
            },
            "FOR": {
                "position": " 3.09",
                "aspects": "",
                "retro": "FALSE",
                "sign": "Pis",
                "house": "06"
            },
            "MOO": {
                "position": "23.55",
                "aspects": "",
                "retro": "FALSE",
                "sign": "Lib",
                "house": "01"
            },
            "SUN": {
                "position": "21.17",
                "aspects": "",
                "retro": "FALSE",
                "sign": "Tau",
                "house": "08"
            },
            "LIL": {
                "position": "21.30",
                "aspects": "",
                "retro": "FALSE",
                "sign": "Ari",
                "house": "07"
            },
            "CER": {
                "position": " 0.48",
                "aspects": "",
                "retro": "FALSE",
                "sign": "Can",
                "house": "10"
            },
            "NEP": {
                "position": "13.10",
                "aspects": "",
                "retro": "TRUE",
                "sign": "Sag",
                "house": "03"
            },
            "PAL": {
                "position": "15.19",
                "aspects": "",
                "retro": "FALSE",
                "sign": "Tau",
                "house": "08"
            },
            "MER": {
                "position": " 3.26",
                "aspects": "",
                "retro": "TRUE",
                "sign": "Gem",
                "house": "09"
            },
            "VEN": {
                "position": "11.14",
                "aspects": "",
                "retro": "FALSE",
                "sign": "Tau",
                "house": "08"
            },
            "MAR": {
                "position": "27.27",
                "aspects": "",
                "retro": "FALSE",
                "sign": "Can",
                "house": "10"
            }
        }
    }
}