Официальный TypeScript SDK
299 эндпоинтов, и все типизированы, а документация к каждому полю видна при наведении. Зависимостей нет: в проект добавляется только сам клиент.
npm install occult-api- 299
- Эндпоинтов, все с типами
- 2 392
- Полей с документацией
- 492
- Перечислений с автодополнением
- 0
- Зависимостей
Быстрый старт
Если apiKey не передан, клиент берёт OCCULT_API_KEY из переменных окружения. Создайте ключ — он показывается один раз, поэтому скопируйте его, прежде чем уйти со страницы.
import { OccultApi } from "occult-api";
const occult = new OccultApi({ apiKey: process.env.OCCULT_API_KEY });
const sun = await occult.astro.sunrise({
date_time: "2026-09-01T06:00:00+05:30",
latitude: 26.9124,
longitude: 75.7873,
timezone_as_float: 5.5,
});
console.log(sun.sunrise, sun.sunset);Методы повторяют URL
/api/astro/eclipse/next-solar/ — это occult.astro.eclipse.nextSolar(). Семь путей одновременно и эндпоинт, и родитель для других, поэтому они вызываемые объекты: работают и occult.astro.eclipse(), и occult.astro.eclipse.upcoming().
Имена полей ровно такие, как ждёт API: date_time, а не dateTime. Слоя преобразования нет — что вы пишете, то и уходит в запрос.
Один кредит, сколько ни спросите
Самое полезное, что стоит знать о ценах. Шесть расчётов в одном вызове стоят в шесть раз меньше, чем шесть отдельных вызовов.
// Six calculations, ONE credit. A call costs the same whether you
// ask for one key or twenty, so batch what the screen needs.
const panchang = await occult.astro.panchanga({
...place,
keys: ["tithi", "nakshatra_segments", "yogam", "karana", "choghadiya", "rahu_kaalam"],
});Эти имена типизированы для каждого эндпоинта. Панчанга принимает 57 имён, и одно неверное отклоняет весь запрос, поэтому SDK превращает такую опечатку в ошибку компиляции, а не в потраченный впустую вызов.
Ошибки, по которым удобно ветвиться
import { OccultApiError } from "occult-api";
try {
await occult.astro.panchanga({ ...place, keys: ["tithi"] });
} catch (error) {
if (error instanceof OccultApiError) {
if (error.code === "insufficient_credits") await upgradePlan();
if (error.code === "validation_error") console.log(error.fields);
// error.retryable is false for anything a retry cannot fix
}
}Любой сбой — это OccultApiError со стабильным машинным кодом, так что вы ветвитесь по причине, а не разбираете текст, который могут переформулировать. Временные сбои повторяются один раз; запрос с отозванным ключом не повторяется никогда, ведь повтор в платном API превращает одну ошибку в три.
Сгенерированные методы ничего не запирают
// Released after this SDK version? Call it anyway.
await occult.call("/api/astro/some-new-endpoint/", { date_time });Типизированные методы — обёртки над одним публичным вызовом, поэтому эндпоинт, вышедший после вашей версии пакета, доступен сразу, без ожидания нового релиза SDK.
Только на сервере
Ваш ключ тратит настоящие кредиты и никогда не должен попадать в браузерный бандл — там его прочитает любой, кто откроет devtools. API принимает вызовы из браузера, так что запрос с фронтенда сработает — и заодно отдаст ваш ключ каждому посетителю. Вызывайте SDK на бэкенде и передавайте на фронтенд готовый результат.
Что для чего
Этот SDK
Для кода. Вы делаете продукт, и вам нужны типы, автодополнение и ошибки, которые можно обработать.
MCP-сервер →
Для вопросов. Вы хотите, чтобы Claude или Cursor сделали расчёт прямо в диалоге, без единой строки кода.