Agent tool definitions
curl -X GET https://api.astroway.info/v1/agent/tools \ -H "X-Api-Key: aw_live_..." \ -H "Content-Type: application/json"const res = await fetch('https://api.astroway.info/v1/agent/tools', { method: 'GET', headers: { 'X-Api-Key': process.env.ASTROWAY_API_KEY, 'Content-Type': 'application/json', },});const { ok, data, error } = await res.json();if (!ok) throw new Error(error.message);console.log(data);import os, requests
r = requests.get( 'https://api.astroway.info/v1/agent/tools', headers={'X-Api-Key': os.environ['ASTROWAY_API_KEY'], 'Content-Type': 'application/json'},)result = r.json()if not result['ok']: raise RuntimeError(result['error']['message'])print(result['data'])<?phpuse GuzzleHttp\Client;
$client = new Client(['base_uri' => 'https://api.astroway.info/v1/']);$r = $client->get('agent/tools', [ 'headers' => ['X-Api-Key' => getenv('ASTROWAY_API_KEY')],]);$result = json_decode($r->getBody(), true);if (!$result['ok']) throw new \RuntimeException($result['error']['message']);print_r($result['data']);Tool definitions for an agent framework, generated from the live OpenAPI document, so the schema a model fills is the schema the endpoint validates. format=openai (default) returns { type, function } objects you can spread straight into a chat completion; format=anthropic returns { name, description, input_schema }. The objects carry nothing of ours: how to call each tool lives in a separate executors map keyed by tool name, because an unexpected key inside a vendor tool object is a 400 at their end. select chooses what to hand over: the curated starter set by default, all for the catalogue, group:Vedic for one area, paths:/chart,/synastry for an explicit list; q filters within that, limit caps it (default 32, max 128, which is the OpenAI ceiling). Nothing truncates silently: totalMatched, totalAvailable and a note say what was left out. No auth is embedded in a tool, so send X-Api-Key on the call itself.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Query Parameters
Section titled “Query Parameters ”Which vendor contract the tool objects follow. openai returns { type, function }, anthropic returns { name, description, input_schema }.
What to hand over: starter (the curated set, the default), all, group:<tag> such as group:Vedic, or paths:/chart,/synastry for an explicit list. An unknown path is named in notes rather than dropped.
Free-text filter applied within the selection, matched against path, summary, description and group.
How many tools to return. The ceiling is the OpenAI limit of 128 functions per request; models degrade well before it. Anything left out is counted in totalMatched.
Responses
Section titled “ Responses ”Successful calculation
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
Example
{ "ok": true, "data": { "format": "openai", "select": "starter", "tools": [ { "type": "function", "function": { "name": "astroway_post_chart", "description": "Natal Chart. Calculate a full natal chart: planets, house cusps, aspects, sect, and angular data for a given birth moment. When the birth time is unknown, send timeUnknown: true instead of time and the response carries planets and aspects with houses, angles and sect set to null, plus a timeUnknown block giving the ran…", "parameters": { "type": "object", "properties": { "date": { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" }, "time": { "type": "string", "pattern": "^\\d{2}:\\d{2}:\\d{2}$" }, "timezoneOffset": { "type": [ "number" ], "minimum": -14, "maximum": 14, "default": 0, "description": "Hours from UTC at the given moment, not minutes. Fractional zones are hours too: 5.5 for India, 5.75 for Nepal, -3.5 for Newfoundland. Defaults to 0, meaning UTC." }, "latitude": { "type": "number", "minimum": -90, "maximum": 90 }, "longitude": { "type": "number", "minimum": -180, "maximum": 180 }, "houseSystem": { "type": "string", "default": "P" }, "name": { "type": "string", "default": "" }, "city": { "type": "string", "default": "" }, "zodiacType": { "type": "string", "enum": [ "tropical" ] }, "ayanamsaId": { "type": [ "number" ] }, "ayanamsa": { "type": "string", "enum": [ "fagan-bradley" ], "description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either." }, "cosmogram": { "type": "boolean" }, "timeUnknown": { "type": "boolean" } }, "required": [ "date" ], "additionalProperties": true, "description": "Birth data where the clock time may be unknown. Either pass time (HH:mm:ss), or set timeUnknown: true and omit it. In the second case the response carries planets and aspects but no houses, angles or sect." } } } ], "executors": { "astroway_post_chart": { "method": "POST", "path": "/v1/chart", "credits": 20, "group": "Core", "docs": "https://api.astroway.info/docs/api/chart" }, "astroway_post_planets": { "method": "POST", "path": "/v1/planets", "credits": 10, "group": "Core", "docs": "https://api.astroway.info/docs/api/planets" }, "astroway_post_sun_times": { "method": "POST", "path": "/v1/sun-times", "credits": 10, "group": "Core", "docs": "https://api.astroway.info/docs/api/sun-times" }, "astroway_post_synastry": { "method": "POST", "path": "/v1/synastry", "credits": 50, "group": "Comparisons", "docs": "https://api.astroway.info/docs/api/synastry" }, "astroway_post_composite": { "method": "POST", "path": "/v1/composite", "credits": 50, "group": "Comparisons", "docs": "https://api.astroway.info/docs/api/composite" }, "astroway_post_synastry_attraction_score": { "method": "POST", "path": "/v1/synastry/attraction-score", "credits": 50, "group": "Comparisons", "docs": "https://api.astroway.info/docs/api/synastry/attraction-score" }, "astroway_post_transits": { "method": "POST", "path": "/v1/transits", "credits": 50, "group": "Prognostics", "docs": "https://api.astroway.info/docs/api/transits" }, "astroway_post_transit_calendar": { "method": "POST", "path": "/v1/transit-calendar", "credits": 100, "group": "Prognostics", "docs": "https://api.astroway.info/docs/api/transit-calendar" }, "astroway_post_forecast_calendar": { "method": "POST", "path": "/v1/forecast-calendar", "credits": 100, "group": "Prognostics", "docs": "https://api.astroway.info/docs/api/forecast-calendar" }, "astroway_post_solar_return": { "method": "POST", "path": "/v1/solar-return", "credits": 50, "group": "Prognostics", "docs": "https://api.astroway.info/docs/api/solar-return" }, "astroway_post_render_wheel_western": { "method": "POST", "path": "/v1/render/wheel-western", "credits": 10, "group": "Visualization", "docs": "https://api.astroway.info/docs/api/render/wheel-western" }, "astroway_post_moon_phase": { "method": "POST", "path": "/v1/moon-phase", "credits": 10, "group": "Calendar & Cycles", "docs": "https://api.astroway.info/docs/api/moon-phase" }, "astroway_post_human_design": { "method": "POST", "path": "/v1/human-design", "credits": 50, "group": "Human Design", "docs": "https://api.astroway.info/docs/api/human-design" }, "astroway_post_hd_penta": { "method": "POST", "path": "/v1/hd/penta", "credits": 100, "group": "Human Design", "docs": "https://api.astroway.info/docs/api/hd/penta" }, "astroway_post_vedic_varga_D1": { "method": "POST", "path": "/v1/vedic/varga/D1", "credits": 20, "group": "Vedic", "docs": "https://api.astroway.info/docs/api/vedic/varga/D1" }, "astroway_post_vedic_varga_D9": { "method": "POST", "path": "/v1/vedic/varga/D9", "credits": 20, "group": "Vedic", "docs": "https://api.astroway.info/docs/api/vedic/varga/D9" }, "astroway_post_vedic_panchang_full": { "method": "POST", "path": "/v1/vedic/panchang/full", "credits": 20, "group": "Vedic", "docs": "https://api.astroway.info/docs/api/vedic/panchang/full" }, "astroway_post_vedic_dashas_vimshottari_maha": { "method": "POST", "path": "/v1/vedic/dashas/vimshottari/maha", "credits": 20, "group": "Vedic", "docs": "https://api.astroway.info/docs/api/vedic/dashas/vimshottari/maha" }, "astroway_post_horoscope_daily": { "method": "POST", "path": "/v1/horoscope/daily", "credits": 50, "group": "Horoscope", "docs": "https://api.astroway.info/docs/api/horoscope/daily" }, "astroway_post_numerology_pythagorean_life_path": { "method": "POST", "path": "/v1/numerology/pythagorean/life-path", "credits": 10, "group": "Numerology: Pythagorean", "docs": "https://api.astroway.info/docs/api/numerology/pythagorean/life-path" }, "astroway_post_numerology_pythagorean_expression": { "method": "POST", "path": "/v1/numerology/pythagorean/expression", "credits": 10, "group": "Numerology: Pythagorean", "docs": "https://api.astroway.info/docs/api/numerology/pythagorean/expression" }, "astroway_post_numerology_chaldean_life_path": { "method": "POST", "path": "/v1/numerology/chaldean/life-path", "credits": 10, "group": "Numerology: Chaldean", "docs": "https://api.astroway.info/docs/api/numerology/chaldean/life-path" }, "astroway_post_tarot_rider_waite_draw_single": { "method": "POST", "path": "/v1/tarot/rider-waite/draw/single", "credits": 10, "group": "Tarot: Rider-Waite-Smith", "docs": "https://api.astroway.info/docs/api/tarot/rider-waite/draw/single" }, "astroway_post_tarot_rider_waite_draw_three_card": { "method": "POST", "path": "/v1/tarot/rider-waite/draw/three-card", "credits": 10, "group": "Tarot: Rider-Waite-Smith", "docs": "https://api.astroway.info/docs/api/tarot/rider-waite/draw/three-card" }, "astroway_post_reports_natal": { "method": "POST", "path": "/v1/reports/natal", "credits": 5000, "group": "Reports", "docs": "https://api.astroway.info/docs/api/reports/natal" }, "astroway_post_ai_explain_aspect": { "method": "POST", "path": "/v1/ai/explain-aspect", "credits": 100, "group": "AI & MCP", "docs": "https://api.astroway.info/docs/api/ai/explain-aspect" } }, "count": 26, "totalMatched": 26, "totalAvailable": 760, "truncated": false, "notes": [ "Tools carry no auth. Send X-Api-Key on the call itself, exactly as for a direct request." ] }}Validation error
Example
{ "ok": false, "error": { "code": "INVALID_INPUT", "message": "Validation failed: date: Date must be YYYY-MM-DD", "details": [ { "path": "date", "message": "Date must be YYYY-MM-DD" } ] }}Missing or invalid API key
Example
{ "ok": false, "error": { "code": "INVALID_API_KEY", "message": "Invalid API key" }}