Void-of-course Moon
Void-of-course Moon periods in a date range (UTC). Rule used: the traditional one — the Moon is void from its last exact Ptolemaic aspect (conjunction, sextile, square, trine, opposition) to the Sun, Mercury, Venus, Mars, Jupiter or Saturn until it enters the next sign (William Lilly, Christian Astrology, 1647, p. 112). Outer planets are not counted. Each period gives start and end in UTC, the last aspect, the sign the Moon is in and the sign it enters next. Range limit 92 days.
Endpoint
POST /v1/western/moon/void-of-course
GET works tooGET /v1/western/moon/void-of-course: Same answer as the POST route with the same fields as query parameters; cacheable (public, 10 minutes). Current-moment flags such as is_current may lag by up to the cache age.
Request parameters
| Field | Type | Required | Description |
|---|---|---|---|
| from_date | string | Yes | First day of the range (YYYY-MM-DD, UTC). |
| to_date | string | Yes | Last day of the range (YYYY-MM-DD, UTC, inclusive). At most 92 days after from_date. |
Example request
- curl
- Python
- TypeScript
curl -X POST "https://api.asterwise.com/v1/western/moon/void-of-course" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"from_date":"2026-01-01","to_date":"2026-01-14"}'
import asterwise
from asterwise.api.western_astrology_api import WesternAstrologyApi
from asterwise.models.void_of_course_request import VoidOfCourseRequest
configuration = asterwise.Configuration(
host="https://api.asterwise.com",
access_token="YOUR_API_KEY",
)
request = VoidOfCourseRequest(
from_date="2026-01-01",
to_date="2026-01-14",
)
with asterwise.ApiClient(configuration) as client:
api = WesternAstrologyApi(client)
result = api.western_void_of_course(void_of_course_request=request)
print(result)
import { createClient, createConfig, westernVoidOfCourse } from 'asterwise';
const client = createClient(createConfig({
baseUrl: 'https://api.asterwise.com',
headers: { Authorization: 'Bearer YOUR_API_KEY' },
}));
const result = await westernVoidOfCourse({
client,
body: {
"from_date": "2026-01-01",
"to_date": "2026-01-14"
},
});
console.log(result.data);
Example response
Example response omitted — live API call did not return HTTP 200.
Response fields
| Field | Type | Description |
|---|---|---|
| success | boolean | True if the request succeeded |
| message | string | Human-readable status message |
| data | object | |
| data.from_date | string | |
| data.to_date | string | |
| data.definition | string | Plain-English statement of the rule used. |
| data.periods | array[object] | Void-of-course periods that overlap the range, in time order. |
| data.periods[].start_utc | string | When the void-of-course period starts (last exact aspect), UTC. |
| data.periods[].end_utc | string | When it ends: the Moon enters the next sign, UTC. |
| data.periods[].duration_hours | number | Length of the void period in hours. |
| data.periods[].moon_sign | string | Sign the Moon is in while void. |
| data.periods[].moon_sign_index | integer | |
| data.periods[].next_sign | string | Sign the Moon enters at end_utc. |
| data.periods[].next_sign_index | integer | |
| data.periods[].last_aspect | VoidOfCourseLastAspect | null | The Moon's last exact aspect before leaving the sign. Null when the Moon made no exact aspect in that sign. |
| data.periods[].whole_sign_void | boolean | True when the Moon made no exact aspect at all while in the sign, so it was void for the whole passage. |
Errors
| Code | Description | Reference |
|---|---|---|
| api_key_invalid | Invalid API key format. | api_key_invalid |
| api_key_missing | API key is missing. Include it in the Authorization header as 'Bearer YOUR_KEY'. | api_key_missing |
| api_key_not_found | The provided API key was not found. Verify the key in your Asterwise dashboard. | api_key_not_found |
| api_key_revoked | This API key has been revoked. | api_key_revoked |
| burst_limit_exceeded | Too many requests per minute. Please slow down. | burst_limit_exceeded |
| internal_error | Something went wrong on our end. Please try again, or contact [email protected] if the problem persists. Include your request_id when contacting support. | internal_error |
| ip_rate_limit_exceeded | Too many requests from this IP address. Please slow down. | ip_rate_limit_exceeded |
| monthly_usage_limit_exceeded | Monthly API call limit reached. Upgrade your plan to continue. | monthly_usage_limit_exceeded |
| payload_too_large | Request body exceeds maximum allowed size of 64KB. | payload_too_large |
| subscription_expired | Your subscription has expired. Please renew at asterwise.com/dashboard to continue. | subscription_expired |
| validation_error | The request couldn't be processed. See the 'details' field for specific field-level issues. | validation_error |