Skip to content

Commit af2a498

Browse files
committed
docs: sync README and AGENTS with canonical domain order
Reorder domains to Western, Vedic, Numerology, Tarot, Biorhythm, I Ching, Crystals, Dreams, Angel Numbers, Location, Usage. Add Location-first rule for any coordinate dependent endpoint. AGENTS gains a Field formats that trip agents table covering timezone decimal hours (5.5 IST, 5.75 NPT), date and time formats, latitude longitude decimals, enum values, slugs, and nested person objects. Timezone cheat sheet covers 24 regions with DST offsets. Common tasks table reordered by domain priority. MCP equivalents section added linking REST paths to per domain MCP tools.
1 parent 6f4aba7 commit af2a498

2 files changed

Lines changed: 293 additions & 130 deletions

File tree

AGENTS.md

Lines changed: 141 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# @roxyapi/sdk Agent Guide
1+
# @roxyapi/sdk - Agent Guide
22

3-
TypeScript SDK for RoxyAPI. Multi-domain spiritual and metaphysical intelligence API. One API key, fully typed, zero runtime dependencies.
3+
TypeScript SDK for RoxyAPI. Eleven domains (Western astrology, Vedic astrology, numerology, tarot, biorhythm, I Ching, crystals, dreams, angel numbers, location, usage). One API key, fully typed, zero runtime dependencies.
44

55
> Before writing any code with this SDK, read `docs/llms-full.txt` in this package for the complete method reference with examples.
66
@@ -18,114 +18,106 @@ const roxy = createRoxy(process.env.ROXY_API_KEY!);
1818

1919
`createRoxy` sets the base URL (`https://roxyapi.com/api/v2`) and auth header automatically. Every method returns `{ data, error, response }`.
2020

21+
## Critical rule: geocode before any chart endpoint
22+
23+
Every chart, horoscope, panchang, dasha, dosha, navamsa, KP, synastry, compatibility, and natal endpoint needs `latitude`, `longitude`, and (for Western) `timezone`. **Never ask the user for coordinates.** Always call `roxy.location.searchCities` first.
24+
25+
```typescript
26+
const { data: cities } = await roxy.location.searchCities({ query: { q: 'Mumbai' } });
27+
const { latitude, longitude, timezone } = cities[0];
28+
```
29+
2130
## Domains
2231

2332
Type `roxy.` to see all available namespaces. Type `roxy.{domain}.` to see every method in that domain.
2433

2534
<!-- BEGIN:DOMAINS -->
2635
| Namespace | Endpoints | What it covers |
2736
|-----------|-----------|----------------|
28-
| `roxy.astrology` | 22 | Western astrology: natal charts, horoscopes, synastry, moon phases, transits, compatibility |
29-
| `roxy.vedicAstrology` | 42 | Vedic/Jyotish: birth charts, dashas, nakshatras, panchang, KP system, doshas, yogas |
30-
| `roxy.tarot` | 10 | Rider-Waite-Smith deck: spreads, daily pulls, yes/no, Celtic Cross, custom layouts |
31-
| `roxy.numerology` | 16 | Life path, expression, soul urge, personal year, karmic analysis, compatibility |
32-
| `roxy.dreams` | 5 | Dream symbol dictionary and interpretations |
33-
| `roxy.angelNumbers` | 4 | Angel number meanings, pattern analysis, daily guidance |
34-
| `roxy.iching` | 9 | I Ching: hexagrams, trigrams, coin casting, daily readings |
35-
| `roxy.crystals` | 12 | Crystal healing properties, zodiac/chakra pairings, birthstones, search |
36-
| `roxy.biorhythm` | 6 | 10-cycle biorhythm readings, forecasts, critical days, compatibility, daily check-ins (wellness, dating, productivity) |
37-
| `roxy.location` | 3 | City geocoding for birth chart coordinates |
37+
| `roxy.astrology` | 22 | Western astrology: natal charts, daily / weekly / monthly horoscopes, synastry, compatibility score, transits, moon phases |
38+
| `roxy.vedicAstrology` | 42 | Vedic / Jyotish: kundli, panchang, Vimshottari dasha, nakshatras, Mangal and Kaal Sarp and Sade Sati doshas, Guna Milan, navamsa, KP chart and ruling planets |
39+
| `roxy.numerology` | 16 | Life path, expression, soul urge, personal year, full chart, compatibility, karmic lessons |
40+
| `roxy.tarot` | 10 | Daily card, custom draws, three-card, Celtic Cross, yes / no, love spread, 78-card catalog |
41+
| `roxy.biorhythm` | 6 | Daily check-in, multi-day forecast, critical days, couples compatibility, phases |
42+
| `roxy.iching` | 9 | Daily hexagram, three-coin cast, 64 hexagrams, trigrams |
43+
| `roxy.crystals` | 12 | By zodiac, by chakra, birthstone, search, daily, pairings |
44+
| `roxy.dreams` | 5 | Dream symbol dictionary (3,000+ interpretations), daily prompt |
45+
| `roxy.angelNumbers` | 4 | Number meanings, universal digit-root lookup, daily |
46+
| `roxy.location` | 3 | City search with coordinates and timezone, countries |
3847
| `roxy.usage` | 1 | API usage stats and subscription info |
3948
<!-- END:DOMAINS -->
4049

41-
**Total:** 130 endpoints across 10 domains + usage. Counts auto-sync from `specs/openapi.json` at release time.
50+
**Total:** 130 endpoints across 10 product domains plus usage. Counts auto-sync from `specs/openapi.json` at release time.
4251

4352
## Critical patterns
4453

45-
### GET endpoints — use `path` for URL parameters
54+
### Two-step pattern for coordinate-dependent endpoints
4655

4756
```typescript
48-
const { data } = await roxy.astrology.getDailyHoroscope({
49-
path: { sign: 'aries' },
50-
});
57+
const { data: cities } = await roxy.location.searchCities({ query: { q: 'Delhi' } });
58+
const { latitude, longitude, timezone } = cities[0];
5159

52-
const { data } = await roxy.crystals.getCrystal({
53-
path: { slug: 'amethyst' },
60+
const { data: chart } = await roxy.astrology.generateNatalChart({
61+
body: { date: '1990-01-15', time: '14:30:00', latitude, longitude, timezone },
5462
});
5563
```
5664

57-
### POST endpoints — use `body` for request data
65+
### GET endpoints - use `path` for URL params, `query` for query params
66+
67+
```typescript
68+
await roxy.astrology.getDailyHoroscope({ path: { sign: 'aries' } });
69+
await roxy.crystals.getCrystalsByZodiac({ path: { sign: 'leo' } });
70+
await roxy.crystals.searchCrystals({ query: { q: 'amethyst' } });
71+
```
72+
73+
### POST endpoints - use `body` for request data
5874

5975
Most valuable endpoints (charts, spreads, calculations) are POST:
6076

6177
```typescript
62-
// Birth chart — requires date, time, coordinates
63-
const { data } = await roxy.astrology.generateNatalChart({
64-
body: {
65-
date: '1990-01-15',
66-
time: '14:30:00',
67-
latitude: 28.6139,
68-
longitude: 77.209,
69-
},
78+
await roxy.astrology.generateNatalChart({
79+
body: { date: '1990-01-15', time: '14:30:00', latitude, longitude, timezone },
7080
});
7181

72-
// Tarot spread
73-
const { data } = await roxy.tarot.castCelticCross({
74-
body: { question: 'What should I focus on?' },
75-
});
76-
77-
// Numerology
78-
const { data } = await roxy.numerology.calculateLifePath({
79-
body: { year: 1990, month: 1, day: 15 },
82+
await roxy.vedicAstrology.generateBirthChart({
83+
body: { date: '1990-01-15', time: '14:30:00', latitude, longitude },
8084
});
81-
```
8285

83-
### Query parameters
86+
await roxy.tarot.castCelticCross({ body: { question: 'What should I focus on?' } });
8487

85-
```typescript
86-
const { data } = await roxy.crystals.searchCrystals({
87-
query: { q: 'amethyst' },
88-
});
88+
await roxy.numerology.calculateLifePath({ body: { year: 1990, month: 1, day: 15 } });
8989
```
9090

91-
### Multi-language responses via `query: { lang }`
91+
### Multi-language via `query: { lang }`
9292

93-
Interpretations are available in 8 languages: `en`, `tr`, `de`, `es`, `fr`, `hi`, `pt`, `ru`. Pass `lang` as a query param on any supported endpoint. Defaults to `en`.
93+
Eight languages: `en`, `tr`, `de`, `es`, `fr`, `hi`, `pt`, `ru`. Defaults to `en`.
9494

9595
```typescript
96-
const { data } = await roxy.tarot.getDailyCard({
97-
body: { date: '2026-04-14' },
98-
query: { lang: 'es' },
99-
});
100-
101-
const { data } = await roxy.numerology.calculateLifePath({
96+
await roxy.tarot.getDailyCard({ body: { date: '2026-04-22' }, query: { lang: 'es' } });
97+
await roxy.numerology.calculateLifePath({
10298
body: { year: 1990, month: 1, day: 15 },
10399
query: { lang: 'hi' },
104100
});
105101
```
106102

107-
Supported: `astrology`, `vedicAstrology`, `tarot`, `numerology`, `crystals`, `iching`, `angelNumbers`, `biorhythm`. Not supported (English-only): `dreams`, `location`, `usage`. Languages without translations yet fall back to English.
103+
Supported: `astrology`, `vedicAstrology`, `numerology`, `tarot`, `biorhythm`, `iching`, `crystals`, `angelNumbers`. English-only: `dreams`, `location`, `usage`.
108104

109105
### Error handling
110106

111-
All errors return `{ error: string, code: string }`. The `error` field is human-readable (may change wording). The `code` field is machine-readable (stable, safe to switch on).
107+
All errors return `{ error: string, code: string }`. The `error` field is human-readable (may change wording). The `code` field is machine-readable (stable, switch on this).
112108

113109
```typescript
114110
const { data, error, response } = await roxy.astrology.getDailyHoroscope({
115111
path: { sign: 'aries' },
116112
});
117113

118114
if (error) {
119-
// error is { error: string, code: string } on 4xx/5xx
120115
console.error('Code:', error.code, 'Message:', error.error);
121116
return;
122117
}
123-
// data is fully typed after error check
124118
console.log(data.sign, data.overview);
125119
```
126120

127-
Error codes:
128-
129121
| Status | Code | When |
130122
|--------|------|------|
131123
| 400 | `validation_error` | Missing or invalid parameters |
@@ -139,53 +131,117 @@ Error codes:
139131

140132
## Common tasks
141133

134+
Ordered by domain priority (Western, Vedic, Numerology, Tarot, Biorhythm, I Ching, Crystals, Dreams, Angel Numbers, Location, Usage).
135+
142136
| Task | Code |
143137
|------|------|
144138
| Daily horoscope | `roxy.astrology.getDailyHoroscope({ path: { sign } })` |
145-
| Birth chart (Western) | `roxy.astrology.generateNatalChart({ body: { date, time, latitude, longitude } })` |
146-
| Birth chart (Vedic) | `roxy.vedicAstrology.generateBirthChart({ body: { date, time, latitude, longitude } })` |
139+
| Natal chart (Western) | `roxy.astrology.generateNatalChart({ body: { date, time, latitude, longitude, timezone } })` |
140+
| Synastry | `roxy.astrology.calculateSynastry({ body: { person1, person2 } })` |
147141
| Compatibility score | `roxy.astrology.calculateCompatibility({ body: { person1, person2 } })` |
148-
| Tarot daily card | `roxy.tarot.getDailyCard({ body: { date } })` |
149-
| Celtic Cross reading | `roxy.tarot.castCelticCross({ body: { question } })` |
150-
| Life Path number | `roxy.numerology.calculateLifePath({ body: { year, month, day } })` |
151-
| Full numerology chart | `roxy.numerology.generateNumerologyChart({ body: { date, name } })` |
142+
| Current moon phase | `roxy.astrology.getCurrentMoonPhase()` |
143+
| Transits | `roxy.astrology.calculateTransits({ body: { natalChart } })` |
144+
| Kundli (Vedic birth chart) | `roxy.vedicAstrology.generateBirthChart({ body: { date, time, latitude, longitude } })` |
145+
| Panchang (detailed) | `roxy.vedicAstrology.getDetailedPanchang({ body: { date, latitude, longitude } })` |
146+
| Choghadiya | `roxy.vedicAstrology.getChoghadiya({ body: { date, latitude, longitude } })` |
147+
| Current dasha | `roxy.vedicAstrology.getCurrentDasha({ body: { date, time, latitude, longitude } })` |
148+
| Mangal Dosha | `roxy.vedicAstrology.checkManglikDosha({ body: { date, time, latitude, longitude } })` |
149+
| Guna Milan (matching) | `roxy.vedicAstrology.calculateGunMilan({ body: { person1, person2 } })` |
150+
| Navamsa (D9) | `roxy.vedicAstrology.generateNavamsa({ body: { date, time, latitude, longitude } })` |
151+
| KP chart | `roxy.vedicAstrology.generateKpChart({ body: { date, time, latitude, longitude } })` |
152+
| Nakshatra detail | `roxy.vedicAstrology.getNakshatra({ path: { id: 'ashwini' } })` |
153+
| Life path number | `roxy.numerology.calculateLifePath({ body: { year, month, day } })` |
154+
| Full numerology chart | `roxy.numerology.generateNumerologyChart({ body: { fullName, year, month, day } })` |
155+
| Personal year | `roxy.numerology.calculatePersonalYear({ body: { month, day } })` |
156+
| Daily tarot card | `roxy.tarot.getDailyCard({ body: { seed } })` |
157+
| Three-card spread | `roxy.tarot.castThreeCard({ body: { question } })` |
158+
| Celtic Cross | `roxy.tarot.castCelticCross({ body: { question } })` |
159+
| Yes / no tarot | `roxy.tarot.castYesNo({ body: { question } })` |
160+
| Daily biorhythm | `roxy.biorhythm.getDailyBiorhythm({ body: { seed } })` |
161+
| Biorhythm forecast | `roxy.biorhythm.getForecast({ body: { birthDate } })` |
162+
| Biorhythm compatibility | `roxy.biorhythm.calculateBioCompatibility({ body: { person1, person2 } })` |
163+
| Daily hexagram | `roxy.iching.getDailyHexagram({ body: { seed } })` |
164+
| Cast I Ching reading | `roxy.iching.castReading()` |
165+
| Hexagram detail | `roxy.iching.getHexagram({ path: { number: 1 } })` |
152166
| Crystal by zodiac | `roxy.crystals.getCrystalsByZodiac({ path: { sign } })` |
153-
| I Ching reading | `roxy.iching.castReading()` |
154-
| Angel number meaning | `roxy.angelNumbers.getAngelNumber({ path: { number: '1111' } })` |
167+
| Crystal by chakra | `roxy.crystals.getCrystalsByChakra({ path: { chakra } })` |
155168
| Dream symbol lookup | `roxy.dreams.getDreamSymbol({ path: { id: 'flying' } })` |
156-
| Biorhythm reading | `roxy.biorhythm.getReading({ body: { birthDate: '1990-01-15' } })` |
157-
| Biorhythm forecast | `roxy.biorhythm.getForecast({ body: { birthDate: '1990-01-15', endDate: '2026-05-01' } })` |
158-
| Biorhythm compatibility | `roxy.biorhythm.calculateBioCompatibility({ body: { person1: { birthDate }, person2: { birthDate } } })` |
169+
| Angel number meaning | `roxy.angelNumbers.getAngelNumber({ path: { number: '1111' } })` |
170+
| Universal number lookup | `roxy.angelNumbers.analyzeNumberSequence({ query: { number: '1234' } })` |
159171
| Find city coordinates | `roxy.location.searchCities({ query: { q: 'Mumbai' } })` |
160172
| Check API usage | `roxy.usage.getUsageStats()` |
161173

162-
## Location helper
163-
164-
Most chart endpoints need `latitude` and `longitude`. Use the location API to geocode:
165-
166-
```typescript
167-
const { data: cities } = await roxy.location.searchCities({
168-
query: { q: 'Mumbai, India' },
169-
});
170-
const city = cities[0];
171-
// Use city.latitude and city.longitude in chart requests
172-
```
174+
## Field formats that trip agents
175+
176+
These are the fields AI agents most often get wrong. Copy the format column exactly.
177+
178+
| Field | Format | Good | Bad |
179+
|-------|--------|------|-----|
180+
| `timezone` | Decimal hours from UTC (number) | `5.5` (India IST, GMT+5:30), `5.75` (Nepal NPT, GMT+5:45), `-5` (NY EST), `9.5` (Adelaide), `0` (UTC) | `"5:30"`, `"5:45"`, `5.45`, `"GMT-5"`, `"Asia/Kolkata"`, `"+0530"` |
181+
| `date` | ISO date string | `"1990-01-15"` | `"Jan 15 1990"`, `new Date()`, `"15/01/1990"`, `"1990-1-15"` |
182+
| `time` | 24-hour string | `"14:30:00"`, `"09:00:00"` | `"2:30 PM"`, `"14:30"` (no seconds), `"9:0:0"` (no leading zeros) |
183+
| `latitude` | Decimal degrees (number) | `28.6139` (Delhi), `-33.8688` (Sydney), `40.7128` (NYC) | `"28°36'N"`, `"28 36 50"`, strings |
184+
| `longitude` | Decimal degrees (number) | `77.209` (Delhi), `-74.006` (NYC), `139.6917` (Tokyo) | Same as latitude - no DMS strings |
185+
| `sign` (horoscope path) | Lowercase zodiac name | `aries`, `taurus`, `gemini`, ... `pisces` | `"Aries"`, `"♈"`, `"1"`, `"ARIES"` (case-insensitive but prefer lowercase) |
186+
| `fullName` (numerology) | Birth-certificate name | `"John William Smith"`, `"Priya Rajesh Sharma"` | Nickname, married name, partial name - affects all letter-based calcs |
187+
| `seed` | Any string (deterministic) | `"user-42"`, `"session-abc-123"`, email hash | Numbers, objects - must be string |
188+
| `number` (angel numbers path) | String | `"1111"`, `"777"`, `"1234"` | `1111` (int) fails path validation |
189+
| `id` (nakshatra / dream / tarot) | Slug | `"ashwini"`, `"flying"`, `"the-fool"`, `"three-of-cups"` | Display names, uppercase, spaces |
190+
| `houseSystem` | Enum | `"placidus"` (default), `"whole-sign"`, `"equal"`, `"koch"` | `"Placidus"`, `"whole_sign"`, `"WS"` |
191+
| `ayanamsa` (KP) | Enum | `"kp-newcomb"` (default), `"kp-old"`, `"lahiri"`, `"custom"` | `"KP"`, `"New Comb"`, `"Lahiri"` |
192+
| `nodeType` | Enum | `"true-node"`, `"mean-node"` | `"true"`, `"mean"`, `"True Node"` |
193+
| `count` (tarot draw) | Integer 1 to 78 | `3`, `10`, `78` | `0`, `79`, strings, floats |
194+
| `mahadasha` (path) | Planet name | `"Ketu"`, `"Venus"`, `"Sun"`, `"Moon"`, `"Mars"`, `"Rahu"`, `"Jupiter"`, `"Saturn"`, `"Mercury"` | `"KETU"` (works, case-insensitive), `"ke"`, `"Ke-tu"` |
195+
| `person1` / `person2` | Object with full birth data | `{ date, time, latitude, longitude, timezone }` (Western) or `{ date, time, latitude, longitude }` (Vedic) | Separate top-level fields, missing time, partial object |
196+
| `question` (tarot / iching) | Optional string | `"Should I accept the job offer?"`, `"What should I focus on this week?"` | Leave undefined for general reading. More specific = better interpretation. |
197+
| `year` / `month` / `day` (numerology) | Integer | `1990`, `1`, `15` | Zero-padded strings `"01"`, decimals, full dates |
198+
199+
### Timezone cheat sheet (most-asked locations)
200+
201+
| Region | Decimal | Region | Decimal |
202+
|--------|---------|--------|---------|
203+
| UTC / London (winter) | `0` | Dubai | `4` |
204+
| London (summer, BST) | `1` | Karachi | `5` |
205+
| Berlin / Paris | `1` (winter) / `2` (summer) | Delhi / Mumbai (IST) | `5.5` |
206+
| Istanbul | `3` | Kathmandu (NPT) | `5.75` |
207+
| Moscow | `3` | Dhaka | `6` |
208+
| Tehran | `3.5` (winter) / `4.5` (summer) | Bangkok | `7` |
209+
| Adelaide | `9.5` (winter) / `10.5` (summer) | Singapore / Beijing | `8` |
210+
| New York (EST / EDT) | `-5` / `-4` | Tokyo | `9` |
211+
| Chicago (CST / CDT) | `-6` / `-5` | Sydney | `10` (winter) / `11` (summer) |
212+
| Denver (MST / MDT) | `-7` / `-6` | Auckland | `12` (winter) / `13` (summer) |
213+
| Los Angeles (PST / PDT) | `-8` / `-7` | Honolulu | `-10` |
214+
215+
DST matters. If the birth date falls inside a daylight-saving window, use the summer / DST offset. For Vedic endpoints this is rarely an issue (most users are in India, fixed 5.5), but Western natal charts must respect DST at the time of birth.
216+
217+
## MCP equivalents
218+
219+
Every method has a matching MCP tool. The MCP server per domain is at `https://roxyapi.com/mcp/{domain}-api`. Tool names follow `{method}_{path_snake_case}`, for example:
220+
221+
- `POST /astrology/natal-chart` -> `post_astrology_natal_chart` on `/mcp/astrology-api`
222+
- `GET /astrology/horoscope/{sign}/daily` -> `get_astrology_horoscope_sign_daily` on `/mcp/astrology-api`
223+
- `POST /vedic-astrology/birth-chart` -> `post_vedic_astrology_birth_chart` on `/mcp/vedic-astrology-api`
224+
- `POST /tarot/spreads/celtic-cross` -> `post_tarot_spreads_celtic_cross` on `/mcp/tarot-api`
225+
226+
Use the SDK for typed TypeScript apps. Use MCP for AI agents (Claude Desktop, Cursor MCP, OpenAI agents) where the agent selects tools based on user intent.
173227

174228
## Gotchas
175229

176-
- **Parameters are objects, not positional.** Always `{ path: {...} }`, `{ body: {...} }`, or `{ query: {...} }` — never positional arguments.
177-
- **Do not guess method names.** Type `roxy.domain.` and let autocomplete show available methods. Method names come from `operationId` in the OpenAPI spec, not URL paths.
178-
- **Do not use raw `fetch`.** The SDK handles auth headers, base URL, and typed responses.
230+
- **Geocode first.** Any chart, panchang, synastry, compatibility, or natal endpoint needs coordinates. Call `roxy.location.searchCities` before the chart method.
231+
- **Parameters are objects, not positional.** Always `{ path: {...} }`, `{ body: {...} }`, or `{ query: {...} }`.
232+
- **Do not guess method names.** Type `roxy.domain.` and let autocomplete show them. Method names come from `operationId` in the OpenAPI spec, not URL paths.
233+
- **Do not use raw `fetch`.** The SDK handles auth, base URL, and typed responses.
179234
- **Do not expose API keys client-side.** Call Roxy from server code, API routes, or server components only.
180-
- **Chart endpoints need coordinates.** Use `roxy.location.searchCities()` to get latitude/longitude before calling any birth chart or panchang method.
181-
- **Date format is `YYYY-MM-DD`, time is `HH:MM:SS`.** Both are strings. Timezone is optional (IANA format like `America/New_York`).
182-
- **All list endpoints may return paginated objects** (e.g. `{ items: [...], total: N }`) rather than raw arrays. Check the type.
235+
- **Date format is `YYYY-MM-DD`, time is `HH:MM:SS`.** Both are strings.
236+
- **Western `timezone` is required** (decimal hours, `-5` for EST, `5.5` for IST, `0` for UTC). Vedic endpoints accept an optional `timezone` that defaults to `5.5` (IST).
183237
- **`data` and `error` are mutually exclusive.** If `error` is set, `data` is `undefined` and vice versa.
184-
- **Errors have `error` (message) and `code` (machine-readable).** Switch on `code`, not `error` — the message may change wording.
238+
- **Switch on `error.code`, not `error.error`.** The message may change; the code is stable.
239+
- **List endpoints may return paginated objects** (`{ items, total }`) instead of raw arrays. Check the type.
185240

186241
## Links
187242

188243
- Full method reference: `docs/llms-full.txt` (bundled in this package)
189244
- Interactive API docs: https://roxyapi.com/api-reference
190245
- Pricing and API keys: https://roxyapi.com/pricing
191246
- MCP for AI agents: https://roxyapi.com/docs/mcp
247+
- Python SDK: https://pypi.org/project/roxy-sdk/

0 commit comments

Comments
 (0)