MyScanity API für Entwickler und KI-Agenten
Die öffentliche Agenten-API liefert genau die Ebene, die MyScanity einzigartig macht: bewertete Setups, fertige Trade-Pläne, Portfolio, Watchlist. Keine Rohdaten, keine Scan-Trigger, keine Einstellungen. Authentifiziert wird mit persönlichen Bearer-Tokens.
MyScanity ist ein informatives Werkzeug, keine Anlageberatung. Alle Auswertungen sind algorithmische Signale auf Basis historischer Kursmuster.
Schnellstart
- Konto anlegen:
POST /api/v1/auth/register(oder im Dashboard registrieren). Der kostenlose Testzeitraum startet automatisch. - Token erzeugen:
POST /api/v1/tokensmit angemeldeter Session, Passwort und gewünschten Scopes. Der geheime Wertmys_…wird einmal ausgegeben — nur der SHA-256-Hash wird gespeichert. - Token im Client hinterlegen und bei jedem Agenten-Aufruf senden:
Authorization: Bearer mys_…plusX-MyScanity-Client: claude(oderchatgpt,cursor,dsh,other). - Mit
GET /api/v1/agent/meprüfen, dass Token und Scopes greifen.
Scopes
| Scope | Bedeutung |
|---|---|
setups:read |
Gespeicherte Setups und Trade-Pläne lesen |
portfolio:read |
Portfolio-Positionen lesen |
watchlist:write |
Watchlist lesen und schreiben |
book:review |
Externes Depot flüchtig über die Rotation legen |
Default beim Anlegen: setups:read und portfolio:read.
Fehlt ein Scope, antwortet die API mit 403.
Endpunkte
auth
| Methode | Pfad | Auth / Scope | Beschreibung |
|---|---|---|---|
| POST | /api/v1/auth/register |
öffentlich | Konto anlegen E-Mail, Benutzername und Passwort; startet den kostenlosen Testzeitraum. |
| POST | /api/v1/auth/login |
öffentlich | Anmelden (setzt das Session-Cookie) |
| POST | /api/v1/auth/logout |
Abmelden | |
| GET | /api/v1/auth/me |
Aktueller Nutzer und Abo-Status |
tokens
| Methode | Pfad | Auth / Scope | Beschreibung |
|---|---|---|---|
| GET | /api/v1/tokens |
Agenten-Tokens auflisten (nur Präfixe) | |
| POST | /api/v1/tokens |
Agenten-Token erzeugen — der geheime Wert wird einmal ausgegeben Body: client, password, optional name, scopes, expires_days (max. 5 aktive Tokens). | |
| DELETE | /api/v1/tokens/{token_id} |
Agenten-Token widerrufen |
agent
| Methode | Pfad | Auth / Scope | Beschreibung |
|---|---|---|---|
| GET | /api/v1/agent/me |
Bearer beliebiger Scope | Token testen: Identität und Scopes |
| GET | /api/v1/agent/setups |
Bearer
setups:read
|
Gespeicherte Setups, sortiert, mit Status und Plan Optional ?status=tradeable|no_plan|in_portfolio|pending|blacklisted und ?setup_type=… |
| GET | /api/v1/agent/trade-plan/{ticker} |
Bearer
setups:read
|
Trade-Plan für einen Ticker (oder der Skip-Grund) |
| GET | /api/v1/agent/portfolio |
Bearer
portfolio:read
|
Offene, geplante und geschlossene Positionen |
| GET | /api/v1/agent/watchlist |
Bearer
watchlist:write
|
Eigene Watchlist des aktiven Profils Optional ?profile_id=… |
| PUT | /api/v1/agent/watchlist |
Bearer
watchlist:write
|
Watchlist-Ticker hinzufügen, entfernen oder ersetzen Body: add / remove / replace (replace nicht mit add/remove kombinieren). Optional Idempotency-Key. |
| POST | /api/v1/agent/book-review |
Bearer
book:review
|
Externes Depot flüchtig auf das Rotationsboard legen Wird nicht gespeichert; Antwort ist eine Momentaufnahme. |
billing
| Methode | Pfad | Auth / Scope | Beschreibung |
|---|---|---|---|
| GET | /api/v1/billing/status |
Abo- und Teststatus | |
| POST | /api/v1/billing/checkout |
Stripe-Checkout-Session erzeugen (Zahlung bestätigt der Mensch) Liefert eine Checkout-URL; die Karte wird nie im Namen des Agenten belastet. | |
| POST | /api/v1/billing/portal |
Stripe-Kundenportal öffnen |
Fehlercodes
| Status | Bedeutung |
|---|---|
400 |
Ungültige Eingabe (Validierung, unbekannter Scope, ungültiger Status) |
401 |
Nicht authentifiziert — fehlender/ungültiger Token bzw. abgelaufene Session |
402 |
Konto nicht berechtigt (Testzeitraum abgelaufen, kein Abo) |
403 |
Scope fehlt oder Aktion nicht erlaubt |
404 |
Unbekannter Ticker, Token oder Profil |
429 |
Rate-Limit erreicht — `Retry-After` beachten |
503 |
Datenbank/Redis vorübergehend nicht erreichbar |
Antworten sind JSON mit detail. Ein 402 bedeutet:
Testzeitraum abgelaufen oder kein Abo — der Account-Inhaber muss ein Abo abschließen.
Rate-Limits
- 60 Anfragen pro Minute pro Token (Lesen)
- 10 Anfragen pro Minute für Watchlist-Writes und Book-Reviews
- 20 fehlgeschlagene Token-Versuche pro Minute und IP
- Maximal 5 aktive Tokens pro Konto; Laufzeit 1–365 Tage (Standard 90)
Clients sollten 429 mit Retry-After respektieren und
exponentiell zurückweichen.
Antwort-Header
| Header | Bedeutung |
|---|---|
WWW-Authenticate |
`Bearer realm="myscanity"` — mit `error` (invalid_token / insufficient_scope) und `resource_metadata` auf die RFC-9728-Ressource |
RateLimit |
`limit`, `remaining`, `reset` des aktiven Fensters (60 s) |
RateLimit-Remaining |
verbleibende Anfragen im aktuellen Fenster |
Retry-After |
Sekunden bis zum nächsten Versuch — nur bei `429` |
Jede erfolgreiche Agenten-Antwort trägt RateLimit und
RateLimit-Remaining; GET /api/v1/agent/me liefert das Budget zusätzlich
im Body. 401/403 nennen das Auth-Verfahren im
WWW-Authenticate-Header, die Metadaten stehen unter
https://www.myscanity.de/.well-known/oauth-protected-resource (RFC 9728).
Idempotenz
Schreibende Aufrufe akzeptieren den Request-Header `Idempotency-Key` (1–80 Zeichen aus A–Z a–z 0–9 . _ : + -). Gleicher Key + gleicher Body liefert die gespeicherte Antwort zurück (24 h), gleicher Key mit anderem Body antwortet `409`. Aktuell für `PUT /api/v1/agent/watchlist`.
Beispiele
curl
curl -s https://www.myscanity.de/api/v1/agent/setups?status=tradeable \
-H 'Authorization: Bearer mys_…' \
-H 'X-MyScanity-Client: dsh'
Python
import requests
resp = requests.get(
"https://www.myscanity.de/api/v1/agent/trade-plan/NVDA",
headers={
"Authorization": "Bearer mys_…",
"X-MyScanity-Client": "claude",
},
timeout=20,
)
resp.raise_for_status()
plan = resp.json()
print(plan["entry"], plan["stop"], plan.get("target_3r"))
TypeScript
const resp = await fetch(
"https://www.myscanity.de/api/v1/agent/portfolio",
{
headers: {
Authorization: "Bearer mys_…",
"X-MyScanity-Client": "cursor",
},
},
);
if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
const portfolio = await resp.json();
Token erzeugen (Mensch, angemeldet)
curl -s -X POST https://www.myscanity.de/api/v1/tokens \
-H 'Content-Type: application/json' \
--cookie 'trend_scanner_session=…' \
-d '{"client": "claude", "password": "…", "scopes": ["setups:read", "portfolio:read"]}'
Was die API bewusst nicht tut
- Keine Roh-OHLCV-Daten, keine Chart-Binaries, kein Datenexport.
- Keine Scan-Trigger, keine Backtests, keine Optimierungsläufe.
- Keine Einstellungs- oder Admin-Mutationen; Watchlist-Writes sind die Ausnahme.
- Keine Zahlungen ohne den Menschen: Checkout liefert nur eine Stripe-URL, die Freigabe (3-D Secure) erfolgt im Browser.
Maschinenlesbar
- /api/openapi.json — kuratierte OpenAPI-Spezifikation mit
securitySchemes.bearerAuthund ohne interne Routen. - /llms.txt — Kurzfassung für KI-Agenten.
- /llms-full.txt — ausführliches Faktenblatt.
- /sitemap.xml und /robots.txt — Crawl-Karte.