Текстовые отчеты по фирменной западной астрологии
Текстовые отчеты по фирменной западной астрологии
Создавайте настраиваемые полнотекстовые отчеты и фирменные PDF-файлы.
POST https://api.freeastroapi.com/api/v1/natal/calculateЗаголовок аутентификации: x-api-key
Используйте натальную эндпоинт с psychological_report.enabled=true для генерации подробных текстовые отчеты по западной астрологии, структурированный Markdown/JSON output и загружаемые PDF-файлы с логотипом вашего профиля. в нижнем колонтитуле.
Формирование полного отчета обычно занимает около 5-9 минут. Это ожидаемо, поскольку отчет создается с помощью обширного многоэтапного pipelineа: синтез диаграмм, ранжирование доказательств, планирование глав, составление проекта, пересмотр и проверка.
Создайте payload в редакторе pipeline.
Создатель настраиваемых отчетов позволяет настраивать входные данные для диаграмм, структуру глав, темы доказательств, тон и глубину. стилизация диаграмм, доставка PDF, метки нижнего колонтитула, сохраненные настройки и брендинг профиля без предварительного написания JSON от руки.
Safe retries with Idempotency-Key
Authenticated, billable astrology POST requests accept the optional header Idempotency-Key: <client-generated unique operation key>. Reuse the same key only when retrying the exact same method, path, query string, and JSON body after a timeout or network failure.
A completed replay returns the first response with Idempotency-Replayed: true, does not rerun the calculation, and does not consume extra quota. Keys are retained for about 24 hours.
Reusing a key with a changed request returns 409 idempotency_key_reused. A duplicate while the first request is still running returns 409 request_in_progress with Retry-After.
Тестовая таблица с нулевым кредитом
Используйте эту точную синтетическую payload карты с каноническим демонстрационным pipelineом, чтобы протестировать поток фирменных отчетов, не тратя кредиты на отчеты. Обход намеренно узок: та же синтетическая подпись рождения, стандартное создание отчетов и отсутствие специальной структуры глав или инструкций по созданию собственных отчетов.
{
"name": "Synthetic Demo Candidate",
"year": 1992,
"month": 11,
"day": 23,
"hour": 14,
"minute": 17,
"city": "Lisbon",
"tz_str": "Auto",
"psychological_report": {
"enabled": true,
"mode": "async",
"style": "standard",
"output_format": "pdf",
"include_chart_in_pdf": true,
"include_profile_branding_logo": true,
"pdf_footer_label": "Acme Astrology",
"markdown": true
}
}Чтобы протестировать собственную структуру главы, отправьте те же данные о рождении с минимальным report_structure. Это подтверждает настройку, но рассматривается как обычное создание отчета и потребляет 1 кредит отчета, если из кэша не возвращается точно такая же payload:
{
"name": "Synthetic Demo Candidate",
"year": 1992,
"month": 11,
"day": 23,
"hour": 14,
"minute": 17,
"city": "Lisbon",
"tz_str": "Auto",
"psychological_report": {
"enabled": true,
"mode": "async",
"style": "standard",
"output_format": "pdf",
"include_chart_in_pdf": true,
"include_profile_branding_logo": true,
"pdf_footer_label": "Acme Astrology",
"markdown": true,
"report_structure": {
"chapters": [
{
"id": "orientation",
"enabled": true,
"title": "Orientation",
"question": "What core psychological pattern does this chart describe?",
"target_words": "450-650",
"evidence_topics": ["identity", "temperament", "integration"],
"subsections": [
{
"heading": "Dominant pattern",
"instructions": "Name the chart's main psychological pattern."
},
{
"heading": "Developmental direction",
"instructions": "Describe the growth task without fatalistic prediction."
}
]
}
]
}
}
}Любые другие данные о рождении или существенная настройка pipelineа следуют за обычным выставлением кредитных счетов в отчете.
Загрузить полный пример выходных данных
Эти файлы представляют собой полные выходные данные, созданные на основе одной и той же синтетической демонстрационной диаграммы и предоставленные в виде фиксированных снимков для предварительного просмотра интеграции.
Параметры запроса
| Parameter | Type | Req | Description |
|---|---|---|---|
| psychological_report.enabled | boolean | Да | Включить создание отчетов. По умолчанию: false. |
| psychological_report.mode | string | Нет | Режим доставки отчета: асинхронный или синхронный. По умолчанию: асинхронный. |
| psychological_report.style | string | Нет | Стиль отчета: стандартный или jungian_parental. По умолчанию: стандартный. |
| psychological_report.markdown | boolean | Нет | Включите report_markdown в заполненные ответы. По умолчанию: false. |
| psychological_report.output_format | string | Нет | Установите формат PDF, если вам нужен загружаемый файл PDF URL. По умолчанию: json. |
| psychological_report.include_chart_in_pdf | boolean | Нет | Добавьте титульную страницу натальной карты к выходным данным PDF. По умолчанию: false. |
| psychological_report.include_profile_branding_logo | boolean | Нет | Примените фирменный логотип профиля владельца API к нижним колонтитулам PDF. По умолчанию: true. |
| psychological_report.pdf_footer_label | string | Нет | Текст Custom, напечатанный в нижнем колонтитуле PDF перед датой и номером страницы. |
| psychological_report.report_structure | object | Нет | Custom план глав с названиями, вопросами, целевыми словами, темами доказательств и подразделами. |
| psychological_report.tone / depth / audience | string | Нет | Написание элементов управления, используемых pipelineом отчетов. |
| psychological_report.focus_areas | string[] | Нет | Приоритеты отчетов на уровне High, такие как идентичность, взаимоотношения или интеграция. |
| psychological_report.custom_instructions | string | Нет | Дополнительные рекомендации по созданию pipelineа отчетов. |
| psychological_report.include_natal_chart_in_response | boolean | Нет | Включите payload натальной карты в ответ на опрос отчета. По умолчанию: false. |
Создайте фирменный индивидуальный отчет
curl -X POST "https://api.freeastroapi.com/api/v1/natal/calculate" \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-H "Idempotency-Key: report-synthetic-demo-001" \
-d '{
"name": "Synthetic Demo Candidate",
"year": 1992,
"month": 11,
"day": 23,
"hour": 14,
"minute": 17,
"city": "Lisbon",
"tz_str": "Auto",
"include_fixed_stars": true,
"fixed_stars": ["Sirius", "Regulus", "Spica"],
"include_dominants": true,
"include_rulers": true,
"psychological_report": {
"enabled": true,
"mode": "async",
"style": "standard",
"output_format": "pdf",
"include_chart_in_pdf": true,
"include_profile_branding_logo": true,
"pdf_footer_label": "Acme Astrology",
"markdown": true,
"tone": "essayistic",
"depth": "deep",
"audience": "advanced astrology app user",
"focus_areas": ["identity", "relationships", "integration"],
"custom_instructions": "Prioritize precise psychological synthesis over generic placement descriptions.",
"report_structure": {
"chapters": [
{
"id": "orientation",
"enabled": true,
"title": "Orientation",
"question": "What core psychological pattern does this chart describe?",
"target_words": "450-650",
"evidence_topics": ["identity", "temperament", "integration"],
"subsections": [
{
"heading": "Dominant pattern",
"instructions": "Name the chart's main psychological pattern."
},
{
"heading": "Developmental direction",
"instructions": "Describe the growth task without fatalistic prediction."
}
]
}
]
}
}
}'Опросите и загрузите PDF
- Создать запрос отчета с помощью
режим: «асинхронный»;. - Read
job_idиnext_poll_after_seconds. - Poll
GET /api/v1/natal/report/{job_id}?format=jsonиспользуя частоту сервера. - Когда статус
completed, загрузите PDF с помощьюформат=pdf. - Используйте
include_profile_branding_logo=falseпо запросу PDF, если вам нужна копия без брендинга.
{
"subject": { "...": "normal natal chart payload..." },
"credits_used": 0,
"psychological_report": {
"status": "pending",
"mode": "async",
"style": "standard",
"output_format": "pdf",
"include_chart_in_pdf": true,
"job_id": "7a7f3f9f-...",
"fetch_url": "/api/v1/natal/report/7a7f3f9f-...",
"pdf_url": "/api/v1/natal/report/7a7f3f9f-...?format=pdf&include_profile_branding_logo=true",
"credits_used": 0,
"include_profile_branding_logo": true,
"next_poll_after_seconds": 15
}
}curl -X GET "https://api.freeastroapi.com/api/v1/natal/report/{job_id}?format=json" \
-H "x-api-key: YOUR_API_KEY"{
"job_id": "7a7f3f9f-...",
"status": "completed",
"credits_used": 0,
"report_metadata": {
"report_id": "e5efe6ea-...",
"title": "Jane Example Natal Psychological Report",
"generated_at": "2026-03-21T11:44:09.531Z",
"provider": "openai-compatible",
"model": "gpt-5.3-chat-latest",
"summary": "Core report summary...",
"word_count": 7350
},
"report_markdown": "## Introduction ... (full markdown report)"
}curl -L "https://api.freeastroapi.com/api/v1/natal/report/{job_id}?format=pdf&include_profile_branding_logo=true" \
-H "x-api-key: YOUR_API_KEY" \
-o branded-western-report.pdfКредиты и кэш
- В этом потоке используются специальные
сообщать о кредитах, а не обычная квота запроса. - Опубликованная синтетическая тестовая диаграмма освобождается только для канонического демо-pipeline / pipeline по умолчанию и возвращает
credits_used: 0для тестирования эндпоинтов. - Настройка вещества генерации потребляет 1 кредит отчета, даже на синтетической тестовой таблице. Сюда входят пользовательские
report_structure, вопросы главы/подразделы,custom_instructions,focus_areas, изменения тона/глубины/аудитории или стиль отчета, отличный от стандартного. - Создание нового отчета требует 1 кредит отчета (
credits_used: 1). - Попадание в кэш для тех же данных о рождении и тех же настроек отчета повторно использует сохраненный отчет и не требует дополнительных кредитов.
- Та же payload, включая те же кастомные
report_structure, может вернуть то же завершенное задание/отчет из кэша. - Используйте
Idempotency-Keyдля безопасных повторов исходного запроса POST.
Формат вывода
Заполненные ответы всегда включают report_metadata. Тело вывода является исключительным: с psychological_report.markdown=false (по умолчанию) вы получите report_content; с psychological_report.markdown=true you receive report_markdown.
Брендинг профиля
- Логотип хранится в профиле пользователя, а не внутри payload запроса отчета.
- Загрузите или замените его с панели «Доставка» в конструктор пользовательских отчетов.
- При загрузке PDF используется логотип, прикрепленный к учетной записи, которой принадлежит ключ API.
- Установите
include_profile_branding_logo=falseпо запросу или PDF URL, чтобы опустить его. - Изменения логотипа применяются во время рендеринга PDF; кэшированный текст отчета не требует регенерации.
Распространенные ошибки
- Missing
x-api-keyheader. - Опрос слишком быстрый, вместо уважения
next_poll_after_seconds/Retry-After. - Providing
callback_urlwithoutcallback_signing_secret. - Не забывайте, что Markdown — это добровольное согласие. Установите
psychological_report.markdown=trueесли нуженreport_markdown. - Ожидается, что логотип будет следовать за ключом API из другой учетной записи. Брендинг привязан к профилю владельца API-ключа.
Дополнительно: обратный вызов веб-перехватчика (необязательно)
Это необязательно и более продвинуто. Если вы отправите callback_url and callback_signing_secret, the API sends a signed callback when the job is completed или failed.
| Parameter | Type | Req | Description |
|---|---|---|---|
| psychological_report.callback_url | string | Нет | Эндпоинт обратного вызова HTTPS для событий завершенного/неудачного отчета. По умолчанию: null. |
| psychological_report.callback_signing_secret | string | Нет | Секрет подписи вебхука. Требуется, если установлен callback_url. По умолчанию: null. |
{
"psychological_report": {
"enabled": true,
"mode": "async",
"output_format": "pdf",
"callback_url": "https://example.com/webhooks/freeastro/report",
"callback_signing_secret": "replace-with-a-long-random-secret"
}
}{
"event": "psychological_report.completed",
"job_id": "7a7f3f9f-...",
"status": "completed",
"credits_used": 1,
"report_metadata": { "...": "same metadata object as polling response" },
"report_markdown": "## Introduction ...",
"created_at": "2026-03-21T11:44:09.531Z"
}
Headers:
X-FreeAstro-Event: psychological_report.completed
X-FreeAstro-Timestamp: 1711025109
X-FreeAstro-Signature: <HMAC_SHA256_HEX>import crypto from "node:crypto";
import express from "express";
const app = express();
app.use(express.raw({ type: "application/json" }));
app.post("/webhooks/freeastro/report", (req, res) => {
const rawBody = req.body.toString("utf8");
const timestamp = req.header("X-FreeAstro-Timestamp") || "";
const signature = req.header("X-FreeAstro-Signature") || "";
const secret = process.env.FREE_ASTRO_CALLBACK_SECRET || "";
const expected = crypto
.createHmac("sha256", secret)
.update(`${timestamp}.${rawBody}`)
.digest("hex");
if (!crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected))) {
return res.status(401).send("invalid signature");
}
const event = JSON.parse(rawBody);
// Save report by event.job_id, then ack
return res.status(200).json({ ok: true });
});