Crystal recommendations
Recommend crystals based on zodiac sign, chakra, or intention keyword. At least one filter must be provided. Providing multiple filters returns crystals that match the most criteria first. Valid chakras: Root, Sacral, Solar Plexus, Heart, Throat, Third Eye, Crown. Returns up to limit crystals (default 5, max 20).
Endpoint
POST /v1/crystals/recommend
Request parameters
| Field | Type | Required | Description |
|---|---|---|---|
| zodiac_sign | string | null | No | Western zodiac sign to filter by. Example: 'Taurus', 'Scorpio'. |
| chakra | string | null | No | Chakra to filter by. One of: Root, Sacral, Solar Plexus, Heart, Throat, Third Eye, Crown. |
| intention | string | null | No | Intention keyword to match. Example: 'protection', 'love', 'abundance'. |
| limit | integer | No | Maximum number of recommendations to return. |
Example request
- curl
- Python
- TypeScript
curl -X POST "https://api.asterwise.com/v1/crystals/recommend" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"zodiac_sign":"Aries","chakra":"Heart","intention":"abundance","limit":3}'
import asterwise
from asterwise.api.crystals_api import CrystalsApi
from asterwise.models.crystal_recommend_request import CrystalRecommendRequest
configuration = asterwise.Configuration(
host="https://api.asterwise.com",
access_token="YOUR_API_KEY",
)
request = CrystalRecommendRequest(
zodiac_sign="Aries",
chakra="Heart",
intention="abundance",
limit=3,
)
with asterwise.ApiClient(configuration) as client:
api = CrystalsApi(client)
result = api.crystals_recommend(crystal_recommend_request=request)
print(result)
import { createClient, createConfig, crystalsRecommend } from 'asterwise';
const client = createClient(createConfig({
baseUrl: 'https://api.asterwise.com',
headers: { Authorization: 'Bearer YOUR_API_KEY' },
}));
const result = await crystalsRecommend({
client,
body: {
"zodiac_sign": "Aries",
"chakra": "Heart",
"intention": "abundance",
"limit": 3
},
});
console.log(result.data);
Example response
Response fields
| Field | Type | Description |
|---|---|---|
| success | boolean | True if the request succeeded |
| message | string | Human-readable status message |
| data | object | |
| data.total | integer | Number of crystals returned. |
| data.filters_applied | object | The filters used for this recommendation. |
| data.crystals | array[object] | Recommended crystals sorted by match strength. |
| data.crystals[].slug | string | URL-safe identifier, e.g. 'amethyst', 'blue-sapphire'. |
| data.crystals[].name | string | Display name of the crystal. |
| data.crystals[].colors | array[string] | Primary colours of this crystal. |
| data.crystals[].hardness_mohs | number | Hardness on the Mohs scale (1-10). |
| data.crystals[].chakras | array[string] | Associated chakras. |
| data.crystals[].element | string | Classical element: Earth, Water, Fire, Air, or All. |
| data.crystals[].zodiac_signs | array[string] | Associated Western zodiac signs. |
| data.crystals[].vedic_planet | string | null | Vedic planetary correspondence. Null if no classical Vedic text assigns this stone. |
| data.crystals[].vedic_correspondence | string | 'navaratna' (primary classical gem), 'uparatna' (substitute gem), or 'none_classical' (no Vedic text assigns this stone). |
| data.crystals[].western_planet | string | null | Western metaphysical planetary correspondence. |
| data.crystals[].keywords | array[string] | Primary energy keywords. |
| data.crystals[].healing_physical | string | Physical healing properties. |
| data.crystals[].healing_emotional | string | Emotional healing properties. |
| data.crystals[].healing_spiritual | string | Spiritual healing properties. |
| data.crystals[].description | string | Overview description. |
| data.crystals[].origins | array[string] | Primary geographic origins. |
| data.crystals[].affirmation | string | Affirmation for working with this crystal. |
| data.crystals[].caution | string | null | Important safety or usage cautions. Null if none. |
Errors
| Code | Description | Reference |
|---|---|---|
| authentication_failed | Missing or invalid API key. | authentication_failed |
| ephemeris_unavailable | Upstream ephemeris service error. | ephemeris_unavailable |
| insufficient_tier | API key tier does not include this endpoint. | insufficient_tier |
| internal_error | Unexpected server error. | internal_error |
| ip_rate_limit_exceeded | Too many requests in a short window. | ip_rate_limit_exceeded |
| payload_too_large | Request body exceeds the size limit. | payload_too_large |
| resource_not_found | Referenced resource was not found. | resource_not_found |
| validation_error | Request body failed schema validation. | validation_error |