Přeskočit na obsah
AstroWay/api v2.254.12 · cs
všechny systémy jsou v pořádku

Autentizace

Téměř všechny požadavky na AstroWay API se autentizují pomocí hlavičky X-Api-Key. Výjimky: 14 endpointů /v1/reference/* (signs, planets, houses, aspects, …) funguje veřejně bez klíče s omezením 30 požadavků / hodinu na IP. Pokud požadavky provádí tvůj server, odešli hlavičku X-AstroWay-Site-URL a limit se stane 300 požadavků / hodinu na web: detaily.

Pro všechny výpočetní endpointy /v1/* (chart, synastry, transits, /reports, /tarot atd.) - pouze X-Api-Key. Pro uživatelské operace /v1/me/* (GET /me, DELETE /me/account) - Bearer JWT, vydaný přes /v1/auth/login. OAuth/session-cookies se na veřejném API nepoužívají. Referenční slovníky /v1/reference/* - bez klíče, zdarma (kanonické lookup-tabulky).

aw_live_aB3xY7pQ9rN2mK4jH8vC5tL6wZ1fD0eR
aw_test_aB3xY7pQ9rN2mK4jH8vC5tL6wZ1fD0eR
  • aw_live_: produkce, strhává kredity z zůstatku
  • aw_test_: sandbox, požadavky vracejí stubovou odpověď (nebo minimální reálný výpočet), nestrhávají kredity, jsou označeny v dashboardu zvlášť
  • Po prefixu: 32 znaků base62, kryptograficky náhodné
  • Klíč se zobrazí v čisté podobě pouze jednou při vytvoření. Dále v dashboardu - pouze první a poslední 4 znaky.
POST /v1/chart HTTP/1.1
Host: api.astroway.info
X-Api-Key: aw_live_aB3xY7pQ9rN2mK4jH8vC5tL6wZ1fD0eR
Content-Type: application/json

Pokud je pro tebe Postman pohodlnější než curl/SDK - je k dispozici hotová kolekce se všemi 771 endpointy, rozdělená do 55 složek podle OpenAPI tagů, s přednastavenými příklady požadavků. Auth je nastaven na úrovni kolekce: vložíš klíč do apiKey variable jednou, všechny požadavky ho převezmou.

Kolekce je automaticky generována z OpenAPI spec - aktualizuje se s každým nasazením.

Vytváření a správa klíčů

Sekce “Vytváření a správa klíčů”

Přes dashboard:

  • api.astroway.info/dashboard/keys
  • Můžeš mít až 10 aktivních klíčů na účet současně
  • Každý klíč má jméno, pole name (například production-backend, ci-tests, local-dev)

Přes API (pro self-service integrace):

Terminál
curl -X POST https://api.astroway.info/v1/keys \
-H "X-Api-Key: aw_live_master_key" \
-H "Content-Type: application/json" \
-d '{"name": "ci-tests", "mode": "test"}'

Klíče pro prohlížeč

Sekce “Klíče pro prohlížeč”

Typický klíč server-only: pokud požadavek s ním nese hlavičku Origin nebo Referer, přijde 403 ORIGIN_FORBIDDEN. To je záměrné, a to je to, co zachytí klíč, náhodně ponechaný ve frontendovém kódu.

Když widget nebo stránka mají přistupovat k API z prohlížeče, klíč se vytvoří rovnou s politikou původu. Pole origin_restriction v POST /v1/keys:

typeCo je povolenoKdy použít
server-only (výchozí)pouze požadavky bez Origin a Refererbackend, cron, CI
publicpouze uvedené hosty, a požadavek musí nést původwidget nebo stránka na tvé doméně, klíč ve zdrojovém kódu
allowlistto samé jako publiczastaralé označení: je stále přijímáno, ale v openapi.json se již neuvádí
Terminál
curl -X POST https://api.astroway.info/v1/keys \
-H "X-Api-Key: aw_live_master_key" \
-H "Content-Type: application/json" \
-d '{
"name": "site-widget",
"origin_restriction": {
"type": "public",
"allowed_origins": ["example.com", "*.example.com"]
},
"credits_cap_cycle": 20000,
"allowed_endpoints": ["chart", "public/*"]
}'

Pravidla porovnávání, ověřená v produkci:

  • Až 20 hostů na klíč. Schéma (https://) a port jsou ignorovány, na velikosti písmen nezáleží.
  • www. se odstraní z příchozího hosta, takže example.com pokrývá i www.example.com. Není třeba přidávat formu s www. zvlášť, nic to nemění.
  • *.example.com pokrývá subdomény (app.example.com), ale ne samotný example.com. Apex se uvádí na samostatném řádku, jako v příkladu výše.
  • Host, který není v seznamu, obdrží 403 ORIGIN_NOT_ALLOWED se samotným hostem v poli incoming_origin, aby bylo vidět, který řádek chybí.
  • Referer se počítá stejně jako Origin: prohlížeč ho odesílá tam, kde Origin chybí.

Změnit seznam u již vytvořeného klíče

Sekce “Změnit seznam u již vytvořeného klíče”

PATCH /v1/keys/{id} přepíše seznam, aniž by se dotkl samotného klíče. Přístupové právo je stejné jako u POST /v1/keys výše; v dashboardu je to položka “Změnit původ” v menu klíče.

Terminál
curl -X PATCH https://api.astroway.info/v1/keys/433 \
-H "X-Api-Key: aw_live_master_key" \
-H "Content-Type: application/json" \
-d '{
"origin_restriction": {
"type": "public",
"allowed_origins": ["example.com", "*.example.com"]
}
}'

Nový seznam platí od následujícího požadavku: cache klíče se resetuje během zápisu, není třeba čekat minutu. Samotný řetězec klíče se nemění, takže není třeba znovu vydávat ani stránku, ani backend. Po POST /v1/keys/{id}/rotate se seznam uloží a stará hodnota klíče přestane fungovat okamžitě.

Třída klíče se neupravuje, protože je zapsána v samotném klíči:

PokusOdpověď
pk_ udělat server-only400: třída je součástí klíče, je třeba ji zrušit a vytvořit nový
aw_ dát seznam domén400: prohlížečový klíč je jiná třída, vytváří se jako public
pk_ s prázdným seznamem400: klíč bez seznamu by odmítl každý požadavek
pk_ bez rozpočtu nebo rozsahu (null)400: klíč pro prohlížeč je vždy omezen oběma, lze je změnit, ale ne odstranit

Rozpočet kreditů na samostatný klíč

Sekce “Rozpočet kreditů na samostatný klíč”

Kredity jsou sdílené pro celý účet, takže jeden klíč je může všechny utratit. Pro backendový klíč je to normální, pro klíč ve zdrojovém kódu stránky ne: seznam domén říká, odkud lze přistupovat, ale neříká, kolik to může stát.

credits_cap_cycle ve stejném PATCH /v1/keys/{id} omezuje právě tento klíč:

Terminál
curl -X PATCH https://api.astroway.info/v1/keys/433 \
-H "X-Api-Key: aw_live_master_key" \
-H "Content-Type: application/json" \
-d '{"credits_cap_cycle": 5000}'

null odstraní omezení (kromě klíče pk_, u něj lze rozpočet změnit, ale ne odstranit). 0 znamená klíč, kterým nelze utratit nic: způsob, jak zaparkovat klíč, aniž bys ho zrušil. Počítadlo je stejné jako u kreditů a vynuluje se spolu s cyklem tarifu.

Když klíč narazí na svůj rozpočet, přijde 429 KEY_BUDGET_EXHAUSTED, i když na účtu kredity ještě zbyly, a dokonce i na tarifu s overage: rozpočet, který lze přečerpat za peníze, není rozpočet. Dokud je rozpočet nastaven, každá odpověď nese X-Key-Budget-Limit a X-Key-Budget-Remaining.

Klíč bez rozsahu volá vše, co je zahrnuto v tarifu. allowed_endpoints ho zužuje na seznam cest: přesných (chart) nebo jmenného prostoru (embed/*). Toto je třetí, nezávislé omezení: seznam domén říká odkud, rozpočet kolik, rozsah co přesně.

Terminál
curl -X PATCH https://api.astroway.info/v1/keys/433 \
-H "X-Api-Key: aw_live_master_key" \
-H "Content-Type: application/json" \
-d '{"allowed_endpoints": ["embed/*", "public/moon-phase"]}'

null odstraní omezení (kromě klíče pk_, u něj je rozsah povinný). Prázdný seznam není přijímán: četl by se stejně jako “všechno” i jako “nic”. Cesty se píší relativně k /v1, bez počátečního lomítka, na velikosti písmen nezáleží.

Volání mimo seznam obdrží 403 ENDPOINT_NOT_IN_SCOPE, a details pojmenuje samotný seznam, aby nebylo třeba hádat. Rozsah platí pro obě třídy klíčů a pro /v1/public/* a /v1/embed/* stejně jako pro zbytek. Služební čtení zpod ní nejsou osvobozena, na rozdíl od kreditů: klíč, zúžený na embed/*, nepřečte ani vlastní statistiku. To je záměrné, protože klíč ve zdrojovém kódu stránky by neměl návštěvníkovi vydávat náklady účtu, a správě klíče to nebrání: dashboard přistupuje se session, nikoli s klíčem.

1. Neumisťuj server-only klíč do frontendu

Sekce “1. Neumisťuj server-only klíč do frontendu”

Typický klíč je tajemství na úrovni backendu. Pokud se dostane do JS, který se spouští v prohlížeči uživatele - je viditelný v DevTools a unikne. Právě proto takový klíč odpovídá 403 ORIGIN_FORBIDDEN na jakýkoli požadavek s Origin nebo Referer.

Pokud je přistupování z prohlížeče přesto nutné, nedělá se to běžným klíčem, ale samostatným, vytvořeným s origin_restriction.type: "public": klíče pro prohlížeč. Takový klíč má prefix pk_, je také viditelný v DevTools, a v tom je celá podstata - jeho hodnota je omezena seznamem tvých domén, a požadavek bez původu odmítá.

Správně: tvůj backend drží klíč, frontend volá tvůj backend, tvůj backend - AstroWay API.

Nesprávně:

// DO NOT DO THIS
fetch('https://api.astroway.info/v1/chart', {
headers: { 'X-Api-Key': 'aw_live_...' }, // visible in browser
});

2. Proměnné prostředí, ne hardcode

Sekce “2. Proměnné prostředí, ne hardcode”
Terminál
# .env (in .gitignore)
ASTROWAY_API_KEY=aw_live_...
// in code
const key = process.env.ASTROWAY_API_KEY;
if (!key) throw new Error('ASTROWAY_API_KEY is not set');

3. Samostatné klíče pro různá prostředí

Sekce “3. Samostatné klíče pro různá prostředí”
  • production-backend: produkce
  • staging-backend: staging
  • ci-tests: CI/CD pipeline
  • local-dev-maksym: lokální vývoj každého vývojáře

Pokud je jeden klíč kompromitován - zruš právě ten, ostatní pokračují v práci.

Doporučená frekvence - jednou za 90 dní. Nebo okamžitě, pokud existuje podezření na únik.

Rotace bez downtime:

  1. Vytvoř nový klíč se stejným name + -v2
  2. Nasaď ho do produkce (paralelně se starým)
  3. Ujisti se, že usage proudí na nový klíč (dashboard)
  4. Zruš starý

Dashboard zobrazuje požadavky podle klíčů samostatně. Pokud najednou jeden klíč začal provádět 10× více požadavků než obvykle - je to signál k prověření.

Můžeš nastavit alert: Settings → Notifications → Alert when daily credits > X.

KódVýznam
401 UnauthorizedHlavička X-Api-Key chybí nebo klíč není platný
403 ForbiddenKlíč je platný, ale nemá scope pro tuto akci (například běžný klíč se pokouší spravovat jiné klíče)
403 PUBLISHABLE_KEY_UNBOUNDEDKlíč pk_ bez rozpočtu credits_cap_cycle nebo bez rozsahu allowed_endpoints: nastav obojí v nastavení klíče
402 Payment RequiredKredity došly (na Free) nebo předplatné není aktivní
429 Too Many RequestsPřekročen rate limit (10/60/300 req/min v závislosti na plánu)

Příklad 401:

{
"error": {
"code": "invalid_api_key",
"message": "The API key provided is invalid or has been revoked.",
"request_id": "8aec43e9bc749b37e998a489bbad1757"
}
}

Klíče s prefixem aw_test_ fungují v sandboxu:

  • Nestrhávají kredity
  • Vracejí stubovou nebo minimální reálnou odpověď
  • Neovlivňují produkční statistiky
  • Dostupné endpointy: ty samé

Užitečné pro CI/CD, e2e testy a lokální vývoj. Vytváří se přes dashboard jedním kliknutím.

Užitečné?
Navrhnout úpravu

Aktualizováno: