To sell a full numerology reading, your app makes one call. Call POST /v1/report with the reader's name and birth date. The answer is the whole reading as a book of 12 chapters. It runs from the mulank (birth day number) to the reader's personal year. With format=html, the book comes back as one finished web page. With format=json, the same book comes back as data for your team to lay out.

Pick HTML to ship quickly. The page needs nothing else to load, and it prints from the browser. Pick JSON when the report must look like your product. Your team picks the fonts and decides where the lock goes. One report uses 25 reading credits in either format.

A free numerology reading is cheaper from another route. POST /v1/profile returns the core numbers with their readings for 3 credits. At the same length, its text matches the report's chapters word for word. So build the free screens from the profile, and call the report once the reader pays.

We ran both formats for John Doe, born Aug 15, 1990, on our local copy of the engine on Oct 19, 2026. We tried English and Hindi, short and long readings, a company name on the cover and four requests the API should refuse. Every number below comes from those runs.

Diagram: one POST /v1/report call for John Doe returns either one finished HTML page of 48,525 bytes or the same 12 chapters as JSON, and the free screens come from POST /v1/profile before the reader pays

What a full numerology reading holds: 12 chapters

The chapter order never changes. The table lists the chapters for John Doe, with the English titles the API returns. The last two columns count the words in each chapter. standard is the short length and expanded the long one.

#

Chapter title

What is inside

Words, standard

Words, expanded

1

Your numbers at a glance

One table of 11 numbers

46

46

2

Your mulank

The day-of-birth number, with its reading

447

537

3

Your bhagyank

The number from adding all 8 digits of the date, with its reading

397

490

4

Your name number

The reading, then a word-by-word table for each letter system

70

125

5

Your Lo Shu grid

The grid drawing and a short summary, then missing numbers, repeated numbers and lines

341

784

6

Lucky day, colors and numbers

One table and a note on dates

68

68

7

Gemstone and mantra

One table and five short blocks

140

140

8

Your Western numbers

Life path, expression, soul urge, personality, maturity and birthday

240

685

9

Lessons to work on

Karmic debt and karmic lessons

163

411

10

Hidden passion and balance

Two more numbers from the name

88

245

11

Challenges and life stages

Three tables, each with its readings: challenges, pinnacles and life cycles

275

890

12

Your year, month and day

Personal numbers for the year, month and day of as_of

248

370

The cover and the closing note sit outside the chapters. The cover shows the name, the birth date and the three Indian core numbers. Those three are marked on a ring that holds 1 through 9. The closing note, headed "A last word", holds 4 short sentences that ask the reader to treat the book as a guide. With both added, John's whole book is 2,631 words at standard length.

Our glossary explains the terms in the chapters. The mulank and bhagyank open the book. The Lo Shu grid sorts a birth date's digits into nine boxes. Karmic lessons are the numbers missing from a name. The pinnacles are the life stages in chapter 11. For the sums behind chapters 2 to 4, see the three core numbers worked out step by step.

The report does no math of its own. It gathers what the profile and Western routes return. We called both routes for John at the same length and date as the report. All 6 numbers we compared were equal. The mulank and life path paragraphs were equal word for word.

Standard or expanded: how long the reading is

A report is long unless you ask for short. Its detail setting starts at expanded, because a book is read from start to end. The other numerology routes start at standard. Send detail=standard for the shorter book.

Length

Words in English

Words in Hindi

Reading time in English

standard

2,631

2,918

about 12 minutes

expanded

4,899

5,410

about 22 minutes

Reading time at 230 words a minute, the rate our own blog uses.

The long version grows the Western half and the grid most. The life stages chapter grew 3.2 times, from 275 to 890 words. The Western numbers grew 2.9 times, and the grid chapter 2.3 times. The glance table, the lucky chapter and the gemstone chapter stayed the same size.

Both lengths use the same 25 credits. So pick the length for your reader, not for your bill. If your readers open the report on a phone, test the 12-minute book against the 22-minute one.

Format html: a finished page in one call

The HTML answer is a whole page, from top to bottom. It opens with the cover, then a contents page, then the 12 chapters. A closing note and a footer with the day the report was made end the page. John's English page at expanded length was 48,525 bytes.

The page fetches nothing. We searched it for anything that loads from elsewhere. It has no script, no linked stylesheet and no image file. Its only web address is the standard label that marks a drawing as SVG. All of its look comes from one style block of 3,610 characters. So nothing on the page waits on a second request.

It is ready for phones and for paper. On a narrow screen, a style rule folds the two-column parts into one column. When printed, the cover fills the first page, and each chapter starts on a new page. The print rules ask for A4 paper. If your readers print on US Letter, check the print preview once.

The page knows its language. It carries lang="en" or lang="hi" at the top. That mark tells browsers and screen readers the language of the text.

Here is the whole server side of an HTML report. Run it after the reader pays, then send the text to their browser or your app's web view.

One HTML page for John Doe, with Acme Inc. on the cover

// On your server: build one reader's report as an HTML page.
async function buildReportPage(name, birthDate) {
  const url = "https://apiforastrology.com/api/numerology/v1/report?format=html";
  const response = await fetch(url, {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.ASTROLOGY_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ name: name, birth_date: birthDate, brand: "Acme Inc." }),
  });
  if (!response.ok) {
    throw new Error(`The report failed with status ${response.status}`);
  }
  return await response.text();
}

// buildReportPage("John Doe", "1990-08-15") returns the page as text.

The key never leaves your server. The reader only gets the finished page.

Format json: the same book, as data

JSON gives you the parts of the book, not its look. The top level holds the language, the dates, the cover, the chapters and the not_claimed line. Each chapter holds a list of items. Every item is one of three types.

Item type

What it holds

How often in John's book

section

Blocks, each with a title, its paragraphs and sometimes a note

15 times, in 11 chapters

table

A title (or none), the columns and the rows, all as text

8 times

loshu

The 3 by 3 cells, the rule that filled them and an svg drawing

once, in chapter 5

So your layout code has four jobs. It draws a section, a table, a grid and the cover. Everything else in the book is one of those.

John Doe, born Aug 15, 1990, Acme Inc. on the cover: trimmed to a few fields and 2 of 12 chapters

{
  "lang": "en",
  "as_of": "2026-10-01",
  "tint": { "planet": "Venus", "paper": "#fcf5f8", "strong": "#963a62" },
  "cover": {
    "brand": "Acme Inc.",
    "title": "John Doe",
    "born": "Born August 15, 1990",
    "glance": "Mulank 6 · Bhagyank 6 · Name number 7"
  },
  "chapters": [
    {
      "number": 4,
      "key": "name",
      "title": "Your name number",
      "items": [
        {
          "type": "table",
          "title": "Chaldean",
          "columns": ["Word", "Total", "Number"],
          "rows": [["John", "18", "9"], ["Doe", "16", "7"], ["Total", "34", "7"]]
        }
      ]
    },
    {
      "number": 5,
      "key": "loshu",
      "title": "Your Lo Shu grid",
      "items": [
        {
          "type": "loshu",
          "cells": [
            [{ "number": 4, "count": 0 }, { "number": 9, "count": 2 }, { "number": 2, "count": 0 }],
            [{ "number": 3, "count": 0 }, { "number": 5, "count": 1 }, { "number": 7, "count": 0 }],
            [{ "number": 8, "count": 1 }, { "number": 1, "count": 2 }, { "number": 6, "count": 2 }]
          ],
          "svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 282 282\" ..."
        }
      ]
    }
  ],
  "not_claimed": "Numbers describe tendencies, not fixed events. Use them as a guide, not a rule."
}

The two drawings work anywhere. The grid's svg and the cover's wheel_svg hold their colors and lines inside each shape. Neither one has a style block. They carry their look as attributes on each shape, so they need no style sheet from the page around them. New to the grid? Our step-by-step guide to the Lo Shu grid shows where John's digits land.

The cover colors come with the book. The tint field holds five of them, taken from the planet of the reader's mulank. John's mulank 6 belongs to Venus, so his cover is a pale pink with a deep rose accent. Jane Doe's mulank 4 belongs to Rahu, which takes Saturn's colors. Her cover is a pale gray-blue with a deep blue accent. Use the tint, or keep your own colors.

Lay out a Hindi book with a font that has Hindi letters. The HTML page asks the device for one, such as Noto Serif Devanagari. Your own screens need the same check.

This loop is a first step for your layout code. It lists each chapter and the item types it holds.

Run on John Doe's JSON book (format=json)

// List each chapter and the kinds of items your screens must draw.
function listChapters(book) {
  for (const chapter of book.chapters) {
    const types = chapter.items.map((item) => item.type).join(", ");
    console.log(chapter.number, chapter.title, "|", types);
  }
}

For John, it prints 12 lines. The first is "1 Your numbers at a glance | table". The last is "12 Your year, month and day | section".

HTML or JSON: how to choose

Question

Format html

Format json

What does your team build?

One call and one web view

One call, a cover and three item layouts

Whose design is it?

The API's: serif type, a cover in the mulank's planet colors

Yours: fonts, colors and the order of screens

Can readers print it?

Yes, from the browser, a chapter per page

Only if you write print styles

Where can the paywall go?

Before the page: pay, then see it all

Anywhere in your own flow

Can it span several screens?

No, it is one long page

Yes, one chapter per screen or any split you choose

Your company name on it?

brand prints above the reader's name on the cover

cover.brand comes back for you to place

Reading credits per report

25

25

You can start with HTML and switch later. Both formats come from the same call with one setting changed. The book inside does not change.

Where the paywall goes in a free numerology reading

Do not build the free part from the report. Each report call uses 25 credits, whether the visitor pays or not. Say 1,000 people try your free reading. Built from the report, those free readings use 25,000 credits. Built from POST /v1/profile, they use 3,000.

The profile has what a free reading needs. Its answer gives the mulank, the bhagyank, the name number and the grid, each with a reading. The report's chapters 2 to 7 are made from this same answer. Show a part of it free, such as the three core numbers and one short reading each.

At the same length, the words match. We compared the profile's mulank reading with the report's mulank chapter. With both at standard, the paragraphs were the same. The report starts at expanded, though. So send the same detail to both calls if the paid book must repeat the free text exactly.

Call the report after the reader pays. With HTML, the paywall sits in front of the page: pay first, then the page opens. With JSON, your free screens come first, then the lock, then the full book.

Send the phone only what the reader may see. Call the report early and hide chapters on the screen, and the hidden text is already on the phone. Hiding a chapter does not take it out of the answer the phone received.

Each report is one call for one reader. Count 25 credits each time you build one.

See every part of the report. Our numerology report feature page lists each field of the cover and of the JSON items.

See what the numerology report holds, as one HTML page or as JSON chapters, on its feature page

Your company name, and the reader's own numbers

Your company name can go on the cover. Send it as brand, up to 40 characters. We sent "Acme Inc.". It appeared above John's name on the HTML cover, and in cover.brand in the JSON. Nothing else in the book changed. Without it, the cover shows no company name, not even ours.

Add the reader's numbers for a 13th chapter. The numbers list takes as many as 5 items: mobile, vehicle or house numbers, or business names. We sent John's phone, 212 555 0147, and his car plate, ABC 4521. The new last chapter read the phone as 5 (Mercury) and the plate as 3 (Jupiter). It also said how well each number fits him.

The API refuses a request it cannot build. We sent four on purpose. Every one was refused with status 422, naming the field to fix.

What we sent

Answer

Field named

A brand of 41 characters

422, at most 40 characters

brand

6 items in numbers

422, at most 5 items

numbers

format=xml

422, must be html or json

query.format

No name

422, field required

name

A refused request uses no reading credits. Only a successful live call counts.

Hindi readings with one setting

The whole book can come back in Hindi. The query setting lang=hi does it. The chapter titles, readings, table labels and cover lines all change. Chapter 2 becomes "आपका मूलांक", which means "your mulank". The numbers stay the same: John is still 6, 6 and 7.

Dates change form too. In the Hindi book, his birth date reads 15.08.1990, day first. In the English book, it reads August 15, 1990.

Hindi pages are larger to send. The Hindi HTML at expanded length was 87,600 bytes, 1.81 times the English page. Yet it held almost the same number of characters, 0.98 times as many. The gap is in the letters themselves. Each Hindi letter takes 3 bytes to send, and each English letter takes 1.

Sizes, speed and credits we measured

These are the sizes of John's report, in bytes, as the engine sent them.

Answer

English, standard

English, expanded

Hindi, standard

Hindi, expanded

HTML page

36,559

48,525

57,933

87,600

JSON book

31,224

43,229

52,564

82,295

The English HTML page was 5,296 to 5,335 bytes larger than the JSON. Its style block alone is 3,610 characters.

The engine answered in milliseconds. On our local copy, we called each English version 5 times in a row. The middle times were 7 to 9 milliseconds, and the slowest call took 36. The first call of the whole run took 75. That is the engine alone, on our own machine. Your readers also wait for the trip over the internet, which this test did not measure.

The credits stay fixed. One live report uses 25 reading credits. The length, the language, the brand line and the numbers chapter do not change that. The profile uses 3 credits. A test key counts test calls and uses no reading credits.

Check every field before you build. The API reference for the report lists the request and answer of POST /v1/report, with John Doe's sample call. The free numerology calculator works out the core numbers for whatever name and date you type.

Check the report's settings, format, lang and detail, in the numerology API reference

Testing with John Doe and Jane Doe

Test keys work only for the docs' two sample people. One is John Doe, born Aug 15, 1990. The other is Jane Doe, born Mar 22, 1992. Leave as_of out, or send the docs' date, Oct 1, 2026. Any other person or date gets a 403 answer that names the two sample people.

John Doe, born Aug 15, 1990, with Acme Inc. on the cover, as JSON at standard length

curl -X POST "https://apiforastrology.com/api/numerology/v1/report?format=json&detail=standard&as_of=2026-10-01" \
  -H "Authorization: Bearer $ASTROLOGY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"John Doe","birth_date":"1990-08-15","brand":"Acme Inc."}'

Change one setting at a time. Swap format=json for format=html to see the page. Add lang=hi for Hindi. Drop detail=standard for the long book. For a first call from scratch, see our numerology API quickstart. For the screens around the report, see the six screens of a numerology app, each with its call.

Show the disclaimer in any layout. The not_claimed field is the last one in the JSON sample above, and the HTML page prints it in its closing note. Numbers describe leanings, so your screens should say so near the readings.

The choice comes down to who draws the page. Let the API draw it, and one call and a web view finish the job. Draw it yourself, and the JSON hands you the same 12 chapters to place inside your own design.