Назад к документации

Текстовые отчеты по фирменной западной астрологии

Текстовые отчеты по фирменной западной астрологии

Создавайте настраиваемые полнотекстовые отчеты и фирменные 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 от руки.

Открыть редактор pipelineа
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а следуют за обычным выставлением кредитных счетов в отчете.

Загрузить полный пример выходных данных

Эти файлы представляют собой полные выходные данные, созданные на основе одной и той же синтетической демонстрационной диаграммы и предоставленные в виде фиксированных снимков для предварительного просмотра интеграции.

Параметры запроса

ParameterTypeReqDescription
psychological_report.enabledbooleanДаВключить создание отчетов. По умолчанию: false.
psychological_report.modestringНетРежим доставки отчета: асинхронный или синхронный. По умолчанию: асинхронный.
psychological_report.stylestringНетСтиль отчета: стандартный или jungian_parental. По умолчанию: стандартный.
psychological_report.markdownbooleanНетВключите report_markdown в заполненные ответы. По умолчанию: false.
psychological_report.output_formatstringНетУстановите формат PDF, если вам нужен загружаемый файл PDF URL. По умолчанию: json.
psychological_report.include_chart_in_pdfbooleanНетДобавьте титульную страницу натальной карты к выходным данным PDF. По умолчанию: false.
psychological_report.include_profile_branding_logobooleanНетПримените фирменный логотип профиля владельца API к нижним колонтитулам PDF. По умолчанию: true.
psychological_report.pdf_footer_labelstringНетТекст Custom, напечатанный в нижнем колонтитуле PDF перед датой и номером страницы.
psychological_report.report_structureobjectНетCustom план глав с названиями, вопросами, целевыми словами, темами доказательств и подразделами.
psychological_report.tone / depth / audiencestringНетНаписание элементов управления, используемых pipelineом отчетов.
psychological_report.focus_areasstring[]НетПриоритеты отчетов на уровне High, такие как идентичность, взаимоотношения или интеграция.
psychological_report.custom_instructionsstringНетДополнительные рекомендации по созданию pipelineа отчетов.
psychological_report.include_natal_chart_in_responsebooleanНетВключите 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

  1. Создать запрос отчета с помощью режим: «асинхронный»;.
  2. Read job_id и next_poll_after_seconds.
  3. Poll GET /api/v1/natal/report/{job_id}?format=json используя частоту сервера.
  4. Когда статус completed, загрузите PDF с помощью формат=pdf.
  5. Используйте 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-key header.
  • Опрос слишком быстрый, вместо уважения next_poll_after_seconds / Retry-After.
  • Providing callback_url without callback_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.

ParameterTypeReqDescription
psychological_report.callback_urlstringНетЭндпоинт обратного вызова HTTPS для событий завершенного/неудачного отчета. По умолчанию: null.
psychological_report.callback_signing_secretstringНетСекрет подписи вебхука. Требуется, если установлен 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 });
});