- Docs
- Domain Guides
- Crystals
Crystals API, what to build and how to call it
Ship a crystal-by-zodiac page, a chakra stone finder, or a daily crystal widget in under 15 minutes.
Crystal retail and metaphysical shops use this to build "crystals for [zodiac]" and "[chakra] chakra stones" pages. Those two URL patterns are the highest-volume crystal queries on Google. The Roxy crystal catalog covers properties, chakras, zodiac associations, colors, affirmations, and pairings across 80+ stones.
What you can build with this
- Crystal recommendation features filtered by zodiac or chakra
- Birthstone pages by month (evergreen gift and jewelry SEO)
- Crystal encyclopedia apps with search
- Wellness and meditation features that surface a stone of the day
What you need, 30 seconds
- A Roxy API key. Get one on the pricing page.
- Nothing else. All crystal content is GET.
Step 1, call your first endpoint
The #1 crystal call is by zodiac. crystals for Pisces and its 11 siblings drive the highest search volume in the domain. Pick a language.
curl "https://roxyapi.com/api/v2/crystals/zodiac/pisces" \
-H "X-API-Key: $ROXY_API_KEY"
import { createRoxy } from '@roxyapi/sdk';
const roxy = createRoxy(process.env.ROXY_API_KEY!);
const { data } = await roxy.crystals.getCrystalsByZodiac({
path: { sign: 'pisces' },
});
data.crystals.forEach(c => console.log(c.name, c.chakra));
import os
from roxy_sdk import create_roxy
roxy = create_roxy(os.environ['ROXY_API_KEY'])
result = roxy.crystals.get_crystals_by_zodiac(sign='pisces')
for c in result['crystals']:
print(c['name'], c['chakra'])
claude mcp add-json --scope user roxy-crystals '{"type":"http","url":"https://roxyapi.com/mcp/crystals","headers":{"X-API-Key":"YOUR_KEY"}}'
Then ask Claude, "which crystals are best for Pisces?" The agent returns a list with properties. Full setup for Cursor, Claude Desktop, Antigravity, and other clients: MCP guide.
Step 2, render it to the user
A crystal grid is the simplest viable UI. Name, image, chakra tag, and the top property keywords.
export function CrystalGrid({ crystals }: { crystals: any[] }) {
return (
<ul className="grid grid-cols-3 gap-4">
{crystals.map(c => (
<li key={c.id}>
<img src={c.imageUrl} alt={c.name} />
<h3>{c.name}</h3>
<small>{c.chakra} chakra</small>
<p>{c.properties.join(' · ')}</p>
</li>
))}
</ul>
);
}
Step 3, ship the rest
By chakra, the second-highest query pattern
GET /crystals/chakra/{chakra} returns stones for a given chakra (root, sacral, solar-plexus, heart, throat, third-eye, crown). Wellness and meditation content.
Birthstone by month, evergreen SEO
GET /crystals/birthstone/{month} takes a month number (1 to 12) and returns the birthstone or birthstones for that month. Works for gift-guide and jewelry-app features.
Search, chatbot-friendly
GET /crystals/search?q={term} is free-text lookup. Use this when an AI agent needs to find stones by intent ("crystals for anxiety", "crystals for luck").
See the full list at the Crystals API reference.
Gotchas
- Zodiac and chakra paths are case-insensitive.
pisces,Pisces,PISCESall work. Lowercase kebab-case is the canonical form. - Chakra names with spaces are hyphenated. Use
third-eye, notthird eyeorthirdEye. langcontrols the content language. Crystal interpretations are translated into 8 languages, pass?lang=trfor Turkish,?lang=esfor Spanish.- List endpoints return
{ crystals: [], ... }. The top-level object has pagination fields, the array is incrystals.
What to build next
Pair crystals with astrology for a full personality reading in the AI chatbot tutorial. The SDK guide covers typed access across all filters.