← Zurück zur Startseite

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

  1. Konto anlegen: POST /api/v1/auth/register (oder im Dashboard registrieren). Der kostenlose Testzeitraum startet automatisch.
  2. Token erzeugen: POST /api/v1/tokens mit angemeldeter Session, Passwort und gewünschten Scopes. Der geheime Wert mys_… wird einmal ausgegeben — nur der SHA-256-Hash wird gespeichert.
  3. Token im Client hinterlegen und bei jedem Agenten-Aufruf senden: Authorization: Bearer mys_… plus X-MyScanity-Client: claude (oder chatgpt, cursor, dsh, other).
  4. Mit GET /api/v1/agent/me prü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 Cookie Abmelden
GET /api/v1/auth/me Cookie Aktueller Nutzer und Abo-Status

tokens

Methode Pfad Auth / Scope Beschreibung
GET /api/v1/tokens Cookie Agenten-Tokens auflisten (nur Präfixe)
POST /api/v1/tokens Cookie 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} Cookie 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 Cookie Abo- und Teststatus
POST /api/v1/billing/checkout Cookie 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 Cookie 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

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

Maschinenlesbar