Sari la conținut
AstroWay/api v2.254.12 · ro
toate sistemele sunt în stare normală

Autentificare

Aproape toate cererile către AstroWay API sunt autentificate prin header X-Api-Key. Excepții: 14 endpointuri /v1/reference/* (signs, planets, houses, aspects, …) funcționează public fără cheie, cu limita de 30 de cereri / oră pe IP. Dacă cererile le face serverul tău, trimite headerul X-AstroWay-Site-URL și limita devine 300 de cereri / oră pe site: detalii.

Pentru toate endpointurile de calcul /v1/* (chart, synastry, transits, /reports, /tarot etc.) - doar X-Api-Key. Pentru operații de utilizator /v1/me/* (GET /me, DELETE /me/account) - Bearer JWT, emis prin /v1/auth/login. OAuth/session-cookies nu sunt folosite pe API-ul public. Dicționarele de referință /v1/reference/* - fără cheie, gratuit (tabele de căutare canonice).

aw_live_aB3xY7pQ9rN2mK4jH8vC5tL6wZ1fD0eR
aw_test_aB3xY7pQ9rN2mK4jH8vC5tL6wZ1fD0eR
  • aw_live_: production, scade credite din sold
  • aw_test_: sandbox, cererile returnează un răspuns stabil (sau un calcul real minim), nu scad credite, marcate separat în dashboard
  • După prefix: 32 de caractere base62, criptografic aleatorii
  • Cheia este afișată în formă curată doar o singură dată la creare. După aceea în dashboard - doar primele și ultimele 4 caractere.
POST /v1/chart HTTP/1.1
Host: api.astroway.info
X-Api-Key: aw_live_aB3xY7pQ9rN2mK4jH8vC5tL6wZ1fD0eR
Content-Type: application/json

Dacă ți se pare mai convenabil Postman decât curl/SDK - există o colecție gata cu toate 771 endpointuri, împărțită în 55 de directoare pe taguri OpenAPI, cu exemple de cereri inserate. Auth este configurat la nivel de colecție: introduci cheia în variabila apiKey o singură dată, toate cererile o preiau.

Colecția este auto-generată din OpenAPI spec - se actualizează la fiecare deploy.

Prin dashboard:

Prin API (pentru integrări self-service):

Terminal window
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"}'

Cheia tipică server-only: dacă o cerere cu ea conține headerul Origin sau Referer, primește 403 ORIGIN_FORBIDDEN. Este intenționat, și este ceea ce prinde cheia, lăsată accidental în frontend.

Când widgetul sau pagina trebuie să acceseze API-ul din browser, cheia este creată imediat cu o politică de origine. Câmpul origin_restriction în POST /v1/keys:

typeCe este permisCând să folosești
server-only (implicit)doar cereri fără Origin și Refererbackend, cron, CI
publicdoar gazdele enumerate, și cererea trebuie să conțină originewidget sau pagină pe domeniul tău, cheia în codul sursă
allowlistacelași ca publicscriere învechită: încă acceptată, dar nu mai apare în openapi.json
Terminal window
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/*"]
}'

Reguli de potrivire, verificate în producție:

  • Până la 20 gazde pe cheie. Schema (https://) și portul sunt ignorate, cazul nu contează.
  • www. este eliminat din gazda de intrare, astfel example.com acoperă și www.example.com. Nu este nevoie să adaugi separat forma cu www., nu schimbă nimic.
  • *.example.com acoperă subdomeniile (app.example.com), dar nu example.com în sine. Asteriscul este listat pe o linie separată, ca în exemplul de mai sus.
  • O gazdă care nu este în listă primește 403 ORIGIN_NOT_ALLOWED cu gazda respectivă în câmpul incoming_origin, pentru a vedea ce linie lipsește.
  • Referer este tratat la fel ca Origin: browserul îl trimite acolo unde Origin lipsește.

PATCH /v1/keys/{id} rescrie lista, fără a atinge cheia însăși. Dreptul de acces este același ca la POST /v1/keys de mai sus; în dashboard este opțiunea “Modifică origine” în meniul cheii.

Terminal window
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"]
}
}'

Noua listă intră în vigoare de la următoarea cerere: cache-ul cheii este resetat în timpul scrierii, nu trebuie să aștepți un minut. Șirul cheii în sine nu se schimbă, deci nu e nevoie să re-deployezi nici pagina, nici backend-ul. După POST /v1/keys/{id}/rotate lista este păstrată, iar valoarea veche a cheii încetează să funcționeze imediat.

Clasa cheii nu poate fi editată, deoarece este încorporată în cheie:

ÎncercareRăspuns
pk_ să devină server-only400: clasa face parte din cheie, trebuie revocat și creat unul nou
aw_ să aibă listă de domenii400: cheia de browser este altă clasă, se creează ca public
pk_ cu listă goală400: o cheie fără listă ar respinge fiecare cerere
pk_ fără buget sau zonă (null)400: cheia pentru browser este întotdeauna limitată de ambele, pot fi modificate, dar nu eliminate

Buget de credite pentru o cheie individuală

Section titled “Buget de credite pentru o cheie individuală”

Creditele sunt comune pentru întregul cont, așa că o cheie poate consuma toate. Pentru o cheie de backend e normal, pentru o cheie în codul sursă al paginii nu: lista de domenii spune de unde se poate accesa, dar nu spune cât poate costa.

credits_cap_cycle în același PATCH /v1/keys/{id} limitează exact această cheie:

Terminal window
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 elimină limita (cu excepția cheii pk_, al cărei buget poate fi modificat, dar nu eliminat). 0 înseamnă o cheie cu care nu poți cheltui nimic: o metodă de a parca cheia fără a o revoca. Contorul este același ca al creditelor și se resetează odată cu ciclul tarifar.

Când cheia atinge bugetul său, primește 429 KEY_BUDGET_EXHAUSTED, chiar dacă în cont mai sunt credite, și chiar și pe un plan cu overage: bugetul care poate fi depășit contra cost nu este buget. Atâta timp cât bugetul este setat, fiecare răspuns conține X-Key-Budget-Limit și X-Key-Budget-Remaining.

O cheie fără zonă poate accesa tot ce este inclus în plan. allowed_endpoints o restrânge la o listă de căi: exacte (chart) sau spațiu de nume (embed/*). Aceasta este a treia limitare independentă: lista de domenii spune de unde, bugetul spune cât, zona spune ce anume.

Terminal window
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 elimină limita (cu excepția cheii pk_, al cărei domeniu este obligatoriu). O listă goală nu este acceptată: ar fi citită atât ca “tot”, cât și ca “nimic”. Căile se scriu relativ la /v1, fără slash inițial, cazul valorii nu contează.

O cerere în afara listei primește 403 ENDPOINT_NOT_IN_SCOPE, iar details indică lista însăși, pentru a nu trebui să ghicești. Domeniul se aplică ambelor clase de chei și la /v1/public/* și la /v1/embed/* la fel ca la restul. Citirile de serviciu sub el nu sunt scutite, spre deosebire de credite: o cheie restrânsă la embed/* nu va citi nici statisticile proprii. Este intenționat, deoarece o cheie în codul sursă al paginii nu ar trebui să expună vizitatorului cheltuielile contului, iar gestionarea cheii nu interferează: dashboard-ul funcționează cu sesiunea, nu cu cheia.

Cheia tipică este un secret la nivel de backend. Dacă ajunge în JS care rulează în browserul utilizatorului - este vizibilă în DevTools și se va scurge. De aceea o astfel de cheie răspunde cu 403 ORIGIN_FORBIDDEN la orice cerere cu Origin sau Referer.

Dacă trebuie să accesezi din browser, se face cu o cheie separată, creată cu origin_restriction.type: "public": chei pentru browser. O astfel de cheie are prefixul pk_, este de asemenea vizibilă în DevTools, și asta e esența - valoarea ei este limitată la lista domeniilor tale, iar o cerere fără origine este respinsă.

Corect: backend-ul tău păstrează cheia, frontend-ul se conectează la backend-ul tău, backend-ul tău - la AstroWay API.

Greșit:

// DO NOT DO THIS
fetch('https://api.astroway.info/v1/chart', {
headers: { 'X-Api-Key': 'aw_live_...' }, // visible in browser
});
Terminal window
# .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');
  • production-backend: producție
  • staging-backend: staging
  • ci-tests: pipeline CI/CD
  • local-dev-maksym: dezvoltare locală a fiecărui dezvoltator

Dacă o cheie este compromisă - revocă exact acea cheie, celelalte continuă să funcționeze.

Frecvența recomandată - o dată la 90 de zile. Sau imediat, dacă există suspiciunea unei scurgeri.

  1. Creează o cheie nouă cu același name + -v2
  2. Deplaseaz-o în producție (paralel cu cea veche)
  3. Asigură-te că utilizarea curge către noua cheie (dashboard)
  4. Revocă cea veche

Dashboard-ul arată cererile pe chei separat. Dacă brusc o cheie începe să facă de 10× mai multe cereri decât de obicei - este un semnal să verifici.

Poți seta un alert: Settings → Notifications → Alert when daily credits > X.

CodValoare
401 UnauthorizedHeader X-Api-Key lipsește sau cheia este nevalidă
403 ForbiddenCheia este validă, dar nu are scope pentru această acțiune (de exemplu, o cheie obișnuită încearcă să gestioneze alte chei)
403 PUBLISHABLE_KEY_UNBOUNDEDCheia pk_ fără buget credits_cap_cycle sau fără zonă allowed_endpoints: setează ambele în setările cheii
402 Payment RequiredCreditele s-au epuizat (pe Free) sau abonamentul este inactiv
429 Too Many RequestsDepășit rate limit (10/60/300 req/min în funcție de plan)

Exemplu 401:

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

Cheile cu prefixul aw_test_ funcționează în sandbox:

  • Nu scad credite
  • Returnează un răspuns stabil sau un calcul real minim
  • Nu afectează statistica de producție
  • Endpointuri disponibile: aceleași

Util pentru CI/CD, teste e2e și dezvoltare locală. Se creează prin dashboard cu un singur click.

  • Credite și limite: cum funcționează billing-ul și rate limiting
  • Erori: listă completă a codurilor de eroare
Util?
Sugerează o corectură

Ultima actualizare: