
# Make astrology automation, HTTP module guide

> Ship a daily horoscope email, a natal chart on form submit, or a tarot card to Slack every morning, on [Make](https://www.make.com/) in about 15 minutes. No code.

The whole integration is one **HTTP** module and one saved key. After that, every one of the 259+ endpoints is the same module with a different URL and body. Make parses the JSON for you, so every field of a chart or a reading becomes a draggable item in the next module.

## The call that proves it

Run this in a terminal first. A 200 here means the key is good, so anything that breaks afterwards is scenario wiring.

```bash
curl "https://roxyapi.com/api/v2/astrology/horoscope/aries/daily" \
  -H "X-API-Key: $ROXY_API_KEY"
```

No key yet? One key covers every domain and checkout is instant: [pricing](/pricing).

Now the same call as a module. Make stores the key in a keychain, so it never sits in the scenario itself and never travels in an export.

1. In your scenario click **+**, search **HTTP**, and pick the HTTP app. Choose **Version 4** if the version dropdown appears, since Version 3 is the legacy app with a different layout.
2. Choose **Make a request**.
3. **Authentication type** `API key`.
4. Click **Credentials**, or **Add** next to **Choose a key**. **Name** `RoxyAPI key`. **Key** paste your key from [your account](/account?tab=keys). **API key placement** `In the header`. **API key parameter name** `X-API-Key`. Click **Create**.
5. **URL** `https://roxyapi.com/api/v2/astrology/horoscope/aries/daily`. **Method** `GET`.
6. **Parse response** `Yes`.
7. Run the module on its own and read the output.

You get clean JSON with no wrapper: `sign`, `date`, `overview`, `love`, `career`, `health`, `finance`, `advice`, `column`, `events`, `luckyNumber`, `luckyColor`, `compatibleSigns`, `activeTransits`, `moonSign`, `moonPhase`, `energyRating`. Every one of those is now draggable into any Gmail, Slack, Google Docs or Airtable field downstream.

**Warning: Leave the Headers section empty**
The HTTP module has its own **Credentials** field for authentication, and the Make docs are explicit that the key belongs there rather than in **Headers**. A key typed into Headers is stored in the scenario, so it travels in every export and blueprint you share. Reuse the keychain instead and the export carries only a reference. Edit or rotate it later from **Keys** in the left sidebar, and every module using it follows.

## Send birth data with a POST

Charts, panchang, dasha, compatibility and synastry all take a birth moment.


### HTTP module

1. **Method** `POST`.
2. **URL** `https://roxyapi.com/api/v2/astrology/natal-chart`.
3. **Body content type** `application/JSON`.
4. **Body input method** `Data structure`, then map each field. Make escapes JSON reserved characters for you, which matters the moment a value comes from free-text user input. Pick `JSON string` only if you want to paste the raw body yourself.
5. The five required fields, whichever input method you picked:
   ```json
   {
     "date": "{{1.birth_date}}",
     "time": "{{1.birth_time}}",
     "latitude": {{1.latitude}},
     "longitude": {{1.longitude}},
     "timezone": "{{1.timezone}}"
   }
   ```

`date` is `YYYY-MM-DD` and `time` is `HH:MM:SS`. Optional `houseSystem` (`placidus` by default) and `nodeType` (`true` by default) sit alongside them.

### curl preview

```bash
curl -X POST "https://roxyapi.com/api/v2/astrology/natal-chart" \
  -H "X-API-Key: $ROXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "date": "1990-05-12",
    "time": "14:30:00",
    "latitude": 40.7128,
    "longitude": -74.0060,
    "timezone": "America/New_York"
  }'
```

### Typed SDK

For reference if you later port a scenario into a Make Custom App or a plain script:

```typescript
import { createRoxy } from '@roxyapi/sdk';
const roxy = createRoxy(process.env.ROXY_API_KEY!);
const { data } = await roxy.astrology.generateNatalChart({
  body: {
    date: '1990-05-12',
    time: '14:30:00',
    latitude: 40.7128,
    longitude: -74.0060,
    timezone: 'America/New_York',
  },
});
```


**Warning: Resolve the city first, never ask for coordinates**
Nobody knows their birth latitude. Put one more HTTP module on `GET https://roxyapi.com/api/v2/location/search?q=berlin` ahead of the chart module and read `latitude`, `longitude` and `timezone` off the first entry in the `cities` array. The `timezone` comes back as an IANA name, which is what you want: the server resolves it to the right offset for the birth date, so a summer birth and a winter birth are both correct. A decimal offset such as `5.5` is accepted but knows nothing about daylight saving.

The `planets` field is an array, so Make exposes it as a repeatable collection. Use an **Iterator** to loop over it, or pull one out inline:

```
get(map(2.planets; sign; name; Sun); 1)
```

## Ship a daily horoscope email

Three modules.

1. **Schedule** trigger, daily at 08:00.
2. **HTTP, Make a request** on `https://roxyapi.com/api/v2/astrology/horoscope/aries/daily` with the `RoxyAPI key` keychain and **Parse response** Yes.
3. **Gmail, Send an email**, subject `Your daily horoscope`, body built from `{{2.overview}}`, `{{2.love}}` and `{{2.career}}`.

For all twelve signs, add an **Iterator** over the sign list and a **Sleep** between iterations rather than twelve simultaneous calls.

Add `?lang=` to any URL for one of ten languages (`en`, `tr`, `de`, `es`, `hi`, `pt`, `fr`, `ru`, `zh-Hans`, `zh-Hant`). Machine values such as `sign` stay English; the prose translates.

## Cache what does not change

Make does not cache HTTP responses, and a horoscope is the same all day for one sign. Use a **Data store**, which is built in:

1. Create a data store with a `sign`, `date` and payload field.
2. **Data store, Get a record** keyed `horoscope_aries_2026-04-13`.
3. A **Router** with two routes: cache hit goes straight to the email, cache miss calls HTTP then **Data store, Add/Replace a Record**.

One fetch per sign per day, whatever the traffic. The [caching guide](/docs/guides/caching) lists how long each kind of result stays valid.

## Gotchas


### The bundle picker shows nothing after the call
**Parse response** is off, so the output is one raw string. Set it to `Yes` and run the module once; every field becomes mappable from then on.

### My key is in the blueprint I just shared
It was typed into **Headers** instead of **Credentials**. Move it to a keychain and re-export. Rotate the shared key from [your account](/account?tab=keys).

### Free text breaks my JSON body
Use **Body input method** `Data structure` rather than `JSON string`. Make escapes reserved characters in the values for you; a hand-written JSON string does not.

### I get a 400 and cannot tell which field is wrong
A 400 carries `issues[]` listing every field problem at once, so read that array instead of guessing one field at a time. All errors come back as `{ error, code }`. Retry only 429 and 5xx, never a 400.

### 429 halfway through an Iterator
You are through your monthly request allowance. Twelve signs firing every minute will spend a month of it in hours. Add a **Sleep**, cache in a data store, or move up a plan. See [authentication](/docs/authentication) for the quota headers on every response.

### The HTTP module looks nothing like this page
You are on **HTTP (legacy)**, Version 3, which has separate per-auth modules and no Credentials field. Add the module again and choose Version 4.

## Pick the next endpoint

- **Domain guides**, for which endpoints to call and in what order: [Western Astrology](/docs/guides/astrology), [Vedic Astrology](/docs/guides/vedic-astrology), [KP Astrology](/docs/guides/kp), [Human Design](/docs/guides/human-design), [Forecast](/docs/guides/forecast), [Chinese Astrology](/docs/guides/chinese-astrology), [Feng Shui](/docs/guides/feng-shui), [Biorhythm](/docs/guides/biorhythm), [Tarot](/docs/guides/tarot), [Numerology](/docs/guides/numerology), [I-Ching](/docs/guides/iching), [Dreams](/docs/guides/dreams), [Crystals](/docs/guides/crystals), [Angel Numbers](/docs/guides/angel-numbers), [Ayurveda](/docs/guides/ayurveda), [Kabbalah](/docs/guides/kabbalah), [Vastu](/docs/guides/vastu), [Mesoamerican Astrology](/docs/guides/mesoamerican-astrology).
- **Common in scenarios:** [`GET /astrology/horoscope/{sign}/daily`](/api-reference#tag/western-astrology/GET/astrology/horoscope/{sign}/daily), [`GET /astrology/horoscope/{sign}/weekly`](/api-reference#tag/western-astrology/GET/astrology/horoscope/{sign}/weekly), [`POST /astrology/natal-chart`](/api-reference#tag/western-astrology/POST/astrology/natal-chart), [`POST /astrology/compatibility-score`](/api-reference#tag/western-astrology/POST/astrology/compatibility-score), [`POST /vedic-astrology/birth-chart`](/api-reference#tag/vedic-astrology/POST/vedic-astrology/birth-chart), [`POST /tarot/spreads/three-card`](/api-reference#tag/tarot/POST/tarot/spreads/three-card), [`POST /numerology/life-path`](/api-reference#tag/numerology/POST/numerology/life-path), [`POST /biorhythm/daily`](/api-reference#tag/biorhythm/POST/biorhythm/daily).
- [n8n](/docs/integrations/n8n) and [Zapier](/docs/integrations/zapier) run the same patterns on adjacent platforms.
- Want the model to pick the endpoint instead of you? [Remote MCP](/docs/mcp) exposes 256+ tools to an AI agent, and the [AI chatbot tutorial](/docs/tutorials/ai-chatbot) builds one end to end.

## FAQ

**Can Make call an astrology API without any code?**

Yes. One HTTP module, one keychain, and a URL is the whole setup. Set Authentication type to API key, place the key in the header under the name `X-API-Key`, turn Parse response on, and every field of the result becomes draggable in later modules. One key reaches all 18 domains.

**Where do I put the API key in a Make HTTP module?**

In **Credentials**, as an API key keychain with placement `In the header` and parameter name `X-API-Key`. Not in the Headers section: a key typed there is stored inside the scenario and travels in every blueprint export. The keychain is edited later from Keys in the left sidebar, and every module that uses it picks up the change.

**How do I send birth date, time and place to a chart endpoint from Make?**

Set the method to POST, Body content type to `application/JSON`, and Body input method to `Data structure`, then map `date`, `time`, `latitude`, `longitude` and `timezone`. Resolve the city with `GET /location/search?q={city}` in a module before it, so the person types a place name and never a coordinate.

**How do I stop a Make scenario from burning through my request quota?**

Cache. A daily horoscope is identical all day for one sign, so store the response in a Make data store keyed by sign and date, and use a Router to serve from the store on a hit. That turns any amount of traffic into one call per sign per day.

**Does the free Make plan work with RoxyAPI?**

Yes. The HTTP app, data stores, Iterator, Router and Sleep are all standard modules. You need a RoxyAPI key, and a single key covers every domain, so no part of the wiring depends on a paid Make tier.
