Monthly Horoscope
GET https://starsapi.com/api/v3/horoscope/monthly
Returns the calendar-month horoscope (1st through last day, IST) for a single zodiac sign.
Returns ~1000 words of content organized into 6 H2 sections —
Overview, Career & Business, Money & Finance, Love & Relationships,
Health & Wellbeing, and Important Dates — plus a structured
content_sections field for app tabs and notifications.
month=, not date=.
Daily and weekly endpoints accept date= for picking the time window.
The monthly endpoint accepts month= instead. The values it accepts are different too —
see the month formats section below.
Authentication
Required. Three methods accepted:
| Method | Example |
|---|---|
| Header (recommended) | X-Api-Key: am_live_xxxxxxxxxxxx |
| Bearer | Authorization: Bearer am_live_xxxxxxxxxxxx |
| Query | ?api_key=am_live_xxxxxxxxxxxx |
See authentication for security considerations.
Query parameters
| Param | Required | Default | Accepted values |
|---|---|---|---|
sign |
Yes | — | Aries, Taurus, Gemini, Cancer, Leo, Virgo, Libra, Scorpio, Sagittarius, Capricorn, Aquarius, Pisces |
zodiac_system |
No | vedic_moon |
vedic_moon · western_sun |
month |
No | this-month |
See the month formats section below |
language |
No | en |
en · hi |
sub_type parameter.
Daily and weekly accept sub_type=love / career to focus a short forecast on one area.
Monthly doesn't need this — Love and Career already have their own H2 sections inside every forecast.
Always returns content equivalent to sub_type=general.
Month formats
The month parameter accepts several formats:
| Format | Example | Resolves to |
|---|---|---|
| Keyword | this-month | 1st through last day of current calendar month (IST) |
| Keyword | next-month | 1st through last day of upcoming month |
| Keyword | last-month | 1st through last day of previous month |
| Calendar month | 2026-06 | June 1 – June 30, 2026 |
| Any date in month | 2026-06-15 | June 1 – June 30 (system resolves to the month containing the date) |
Response shape
Successful responses contain a top-level status + success flag, a data object, and a meta envelope:
| Field | Type | Description |
|---|---|---|
status | integer | HTTP status code echo (200 on success). |
success | boolean | Always true on success. |
| data | ||
data.sign | string | Echo of the requested sign. |
data.zodiac_system | string | Zodiac system used. |
data.sub_type | string | Always general for monthly. |
data.period_type | string | Always monthly for this endpoint. |
data.period_key | string | Calendar month key, e.g. 2026-06. Stable cache key. |
data.period_start | string (YYYY-MM-DD) | First day of the target month. |
data.period_end | string (YYYY-MM-DD) | Last day of the target month. |
data.language | string | Language of the returned content. |
data.summary | string | One-line summary — ideal for push notifications, subject lines, list previews. |
data.content | string (HTML) | Full content with <h2> section headings, <p> paragraphs, <ul>/<li> for dates. |
data.content_text | string | Plain text with section labels as headings, paragraphs separated by \n\n. |
data.content_paragraphs | array of strings | Each paragraph (and section title) as a separate string. |
data.content_sections | object | Monthly only. Structured sections object — see below. |
data.mood | string | Mood keyword for the month (e.g. Nurturing, Transformative). |
data.key_theme | string | One-phrase theme for the month. |
data.lucky_number | integer | Suggested lucky number for the month. |
data.lucky_color | string | Suggested lucky color. |
data.compatible_sign | string | Most compatible sign for the month. |
data.ratings.love | integer (1–5) | Love rating for the month. |
data.ratings.career | integer (1–5) | Career rating. |
data.ratings.money | integer (1–5) | Money rating. |
data.ratings.health | integer (1–5) | Health rating. |
data.ratings.overall | integer (1–5) | Overall rating. |
data.dos | array of strings | Recommended actions for the month. |
data.donts | array of strings | Actions to avoid for the month. |
data.generated_at | string | When this content was generated (server time). |
data.served_tier | string | Content tier served (e.g. canonical, premium). |
data.partner_tier | string | Your partner tier as configured on the API key. |
| meta | ||
meta.endpoint | string | Echo of the called endpoint path. |
meta.version | string | API version (currently 3.0). |
meta.response_time_ms | integer | Server-side response time in milliseconds. |
meta.timestamp | string (ISO 8601) | UTC time the response was served. |
meta.credits_remaining | integer | API credits remaining on your plan. |
meta.request_id | string | Unique request identifier — include in support tickets. |
Note that monthly does not include a lucky_time field (unlike daily, which returns a time window).
The content_sections object (monthly-only)
In addition to the three content formats shared with daily and weekly (content, content_text, content_paragraphs),
monthly returns a fourth format: a structured content_sections object with each section as its own keyed entry.
Perfect for tabbed UIs, section-specific notifications, and calendar imports.
| Section key | Returns |
|---|---|
overview | {title, body, body_html} — synthesis of the month's defining theme |
career | {title, body, body_html} — Mercury / Sun / Saturn transits applied to work and profession |
money | {title, body, body_html} — income, investments, expenses (Vedic: 2nd/11th/8th bhava framework) |
love | {title, body, body_html} — Venus / Mars / Moon transits for partnerships |
health | {title, body, body_html} — physical and mental health |
important_dates | Array of {date_label, event} — major astrological dates with significance |
Section sub-object shape
| Field | Type | Description |
|---|---|---|
title | string | English section title (e.g. "Career & Business"). Stable across languages. |
body | string | Plain text body of the section. |
body_html | string | HTML-wrapped body (e.g. <p>...</p>). |
Important dates entry shape
| Field | Type | Description |
|---|---|---|
date_label | string | Human-friendly date label (e.g. "Tuesday, June 2"). |
event | string | Description of the astrological event (e.g. "Jupiter enters Cancer"). |
Important-dates entries are typically ordered by astrological importance, not chronologically.
Headline events (eclipses, slow planet ingresses, retrograde stations) come first; smaller events follow.
Sort the array client-side by parsing date_label if you need calendar order.
The four content formats
Same horoscope, four pre-formatted variants — the same three as daily/weekly, plus the monthly-only structured sections.
| Field | Format | Use for |
|---|---|---|
content | HTML (with <h2> sections) | Web pages, Flutter Html widget, WordPress, email bodies. H2s give natural SEO structure. |
content_text | Plain text | SMS, WhatsApp/Telegram bots, voice TTS. Section labels appear as plain headings. |
content_paragraphs | Array of strings | Custom UI — each paragraph as a swipeable card. Section titles are array items too. |
content_sections | Object (monthly only) | Tabbed UIs, section-specific push, calendar imports. Each section has its own keyed entry. |
Use cases
- Tabbed monthly screen — use
content_sectionswith 6 tabs (Overview / Career / Money / Love / Health / Important Dates). Each section pre-formatted asbody_html. - Calendar integration — iterate
content_sections.important_datesas calendar event source. Each entry is ready to import into Google/Apple Calendar. - Section-specific push — send
content_sections.career.bodyMonday morning,love.bodyFriday evening. One forecast, many touchpoints. - Monthly newsletter — use full
content(HTML with H2s) as email body.summaryas subject line. - Blog / WordPress post — drop
contentinto post body. H2 sections give natural SEO heading hierarchy. - WhatsApp / Telegram bot — reply to "show me my career outlook" with
content_sections.career.bodyonly. - Monthly dashboard —
ratingsfor 5-star bars,lucky_*as highlight tiles,moodas emoji.
Fetching all 12 signs at once
For monthly sign-picker screens or full-zodiac dashboards, fetch all 12 signs in parallel. Each call counts as one request against your quota.
// JavaScript
const signs = ['Aries','Taurus','Gemini','Cancer','Leo','Virgo',
'Libra','Scorpio','Sagittarius','Capricorn','Aquarius','Pisces'];
const all = await Promise.all(
signs.map(s => fetch(
`https://starsapi.com/api/v3/horoscope/monthly?sign=${s}&month=this-month`,
{ headers: { 'X-Api-Key': 'YOUR_API_KEY' } }
).then(r => r.json()))
);
// Use all[i].data.content_sections.overview.body for sign-picker cards
data.period_key (e.g. 2026-06)
as your cache key — rotates automatically when the month changes.
Fetch once on first app open of the month, cache until next month start.
Errors
| HTTP | Code | Cause |
|---|---|---|
| 400 | MISSING_SIGN | sign param not provided |
| 400 | INVALID_SIGN | Sign name not in 12-sign list |
| 400 | INVALID_ZODIAC_SYSTEM | Must be vedic_moon or western_sun |
| 400 | INVALID_LANGUAGE | Unsupported language code |
| 400 | INVALID_MONTH | Bad month format. Use this-month, next-month, last-month, YYYY-MM, or YYYY-MM-DD |
| 401 | AUTH_MISSING_KEY | No API key in request |
| 401 | AUTH_INVALID_KEY | Key format invalid or not found |
| 401 | AUTH_REVOKED_KEY | Key has been revoked |
| 403 | AUTH_ORIGIN_DENIED | Request from non-whitelisted origin |
| 404 | HOROSCOPE_NOT_AVAILABLE | Content not yet generated for that month (querying a future month before its cron runs) |
| 429 | RATE_LIMIT_EXCEEDED | Plan quota exceeded |
Error response format
{
"status": 404,
"success": false,
"error": {
"code": "HOROSCOPE_NOT_AVAILABLE",
"message": "Horoscope not yet generated for Aries vedic_moon/general/en in 2026-05"
},
"meta": {
"endpoint": "/api/v3/horoscope/monthly",
"version": "3.0",
"response_time_ms": 1,
"timestamp": "2026-05-31T14:10:17+05:30",
"request_id": "b32a8a86bb97200f"
}
}
See also
- Daily Horoscope — one-day variant with
lucky_timewindows - Weekly Horoscope — 7-day variant (Monday–Sunday)
- Yearly Horoscope — full-year variant with 10 structured sections
- Horoscope overview — full category
- Errors reference — universal error codes