- Docs
- Agent Reference
- Common Mistakes
Common Mistakes (verified from production)
LLMs frequently produce broken RoxyAPI code in these specific ways. Cross-checked against production logs.
Astrology
- Horoscope path is
GET /astrology/horoscope/{sign}/daily(weekly and monthly too). Sign is a PATH param, not a query param. Never?sign=aries. - Birth chart is
POST /astrology/natal-chart(not/birth-chart). POST with JSON body, not GET. - Daily horoscope response fields:
overview,love,career,health,finance,advice,luckyNumber,luckyColor. Nohoroscope,lucky_number, ormoodfields. - Western
timezoneis REQUIRED (no default). Vedictimezoneis optional with default5.5(IST).
Vedic
- Body is
{ date, time, latitude, longitude, timezone }— NOT{ year, month, day, hour }. - Manglik dosha response uses
present(boolean). NotisManglik. Fields:{ present, severity, description, exceptions, remedies, effects }. - Kalsarpa:
presentnothasKalsarpaDosha. Severity is"Mild"/"Moderate"/"Severe"— not"None"/"Partial"/"Full". - Guna Milan compatibility: field is
total(nottotal_score),maxScoreis always 36, breakdown items usecategory(notname). - Dasha endpoints:
POST /dasha/major(not/dasha/complete),POST /dasha/sub/{mahadasha}(not/dasha/antardashas). - KP chart is
POST /kp/chart(not/kp/birth-chart). KP ruling planets do NOT needdate/time— they usedatetimeor default to now. - Panchang detailed takes NO
timefield — onlydate,latitude,longitude, optionaltimezone.
Numerology
- Life path, chart, and personal year all take
{ year, month, day }integers — NOT abirthDatestring. - Chart requires
fullName(notname). Expression requiresfullName. Name is birth certificate name. - Personal year body:
{ month, day, year? }—yearis TARGET year (defaults to current), not birth year. - Compatibility body: flat
person1/person2objects, each with any oflifePath,expression,soulUrge, orfullName+year+month+day.
Tarot
- Daily body field is
seed(notuserId). Body is optional; omit for random daily card. - Daily response field is
dailyMessage(notmessage). - Spread responses return
positions[]where each has acard. No top-levelcards[]on spread endpoints. Access viapositions[i].card. - Spread endpoints are under
/spreads/:POST /spreads/three-card,POST /spreads/celtic-cross,POST /spreads/love. Not/three-cardor/love-spread. - Yes/No response:
strength(notconfidence). Values:"Strong"or"Qualified"only. No"Weak". - Card IDs are kebab-case:
the-fool,ace-of-cups,three-of-swords. Not numeric likemajor-01orcups-03. - Draw endpoint:
count1 to 78, optionalseed, optionalallowReversals(defaulttrue), optionalallowDuplicates(defaultfalse).
Biorhythm
- Forecast and critical-days both use
{ birthDate, startDate?, endDate? }. Forecast max window is 90 days, critical-days max is 180 days. - Compatibility body uses nested objects:
{ person1: { birthDate }, person2: { birthDate }, targetDate? }— NOT flatperson1BirthDate. - Daily body is optional
{ seed?, date? }.
I-Ching
- Daily is POST (
/iching/daily). Random cast is GET (/iching/cast). Seeded daily cast is POST (/iching/daily/cast). Do not confuse the three. - Hexagram detail path param is an INTEGER 1 to 64:
GET /iching/hexagrams/1, notGET /iching/hexagrams/qian.
Angel Numbers
- By-number path param is a STRING:
GET /angel-numbers/numbers/1111. If you pass integer1111to a typed client it may fail. /lookupworks for any positive integer, not just canonical angel numbers. It uses digit-root fallback — never generate "only 111/222/333/etc are valid" validation logic.
All Endpoints
- All POST endpoints: include
Content-Type: application/jsonheader.
SDK Usage (@roxyapi/sdk or roxy-sdk)
- TypeScript: initialize with
createRoxy(apiKey), named export from@roxyapi/sdk. Notnew Roxy(). Every method returns{ data, error, response }. Checkerrorfirst — mutually exclusive withdata. Pass structured args:{ path: {...} },{ body: {...} }, or{ query: {...} }— never positional. - Python:
from roxy_sdk import create_roxy, pass kwargs (sign="aries"), never positional. Async variants end with_async. Errors raiseRoxyAPIError— catch and switch one.code(note.error). - Do not guess method names. They come from OpenAPI
operationId, not URL paths. - Never call Roxy from client-side code. API keys belong on the server.