📡 API Dokumentation
Öffentliche REST API von PredX. Alle Antworten sind JSON. Basis-URL:
https://predx.org🔑 Authentifizierung
Geschützte Endpoints benötigen einen JWT Bearer Token im Authorization Header.
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Token erhältst du via POST /api/auth/login.
⚡ Rate Limits
POST /auth/login10 req / 15 minPOST /auth/forgot-password5 req / 60 minPOST /trades/*60 req / minMarkets
GET/api/markets
Liste aller öffentlichen Märkte. Supports query params: category, status, sort, search, limit, offset.
Query-Parameter
?status=open&sort=volume&limit=20&offset=0Beispiel
{
"markets": [
{
"id": "uuid",
"title_de": "Wird X gewinnen?",
"title_en": "Will X win?",
"category": "politics",
"status": "open",
"yes_probability": 0.63,
"total_volume": 4200,
"resolution_date": "2026-12-31T00:00:00.000Z"
}
],
"total": 42
}GET/api/markets/:id
Marktdetails inkl. Outcomes, letzte Trades, Statistiken.
Beispiel
{
"market": { "id": "...", "title_de": "...", "outcomes": [...] },
"recentTrades": [...],
"stats": { "total_trades": 123, "unique_traders": 45 }
}GET/api/markets/featured
Gibt den aktuellen "Wette des Tages" Markt zurück.
Beispiel
{ "market": { ... } } // or { "market": null }GET/api/markets/trending
Top-5 Märkte nach Volumen der letzten 24h.
Beispiel
{ "markets": [...] }POST/api/marketsauth
Neuen Markt erstellen. Body: title_de, title_en, category, resolution_date, market_type, initial_probability oder outcomes[].
Beispiel
// Request body
{
"title_de": "Wird X gewinnen?",
"title_en": "Will X win?",
"category": "politics",
"resolution_date": "2026-12-31",
"market_type": "binary",
"initial_probability": 0.45,
"resolution_source": "ORF.at Wahlergebnisse"
}Trading
POST/api/trades/buyauth
Anteile kaufen. Rate-Limit: 60 req/min.
Beispiel
// Request body
{
"market_id": "uuid",
"outcome_id": "uuid", // for multi markets
"side": "yes", // for binary markets
"amount": 100 // ATS to spend
}POST/api/trades/sellauth
Anteile verkaufen. Rate-Limit: 60 req/min.
Beispiel
{ "market_id": "uuid", "outcome_id": "uuid", "shares": 50 }Users
GET/api/users/leaderboard
Rangliste der besten Trader. Params: period (all/7d/30d), limit.
Beispiel
{ "leaderboard": [{ "username": "...", "total_profit": 2500, "win_rate": 0.72 }] }GET/api/users/:id
Öffentliches Benutzerprofil mit Portfolio und Statistiken.
Beispiel
{ "user": { "username": "...", "balance": 1200 }, "positions": [...], "stats": {...} }GET/api/users/meauth
Eigenes Profil (inkl. E-Mail, Guthaben, Referral-Code).
Beispiel
{ "user": { "id": "...", "balance": 1500, "referral_code": "ABC12345" } }Auth
POST/api/auth/register
Neuen Account erstellen. Body: username, email, password, display_name, language, referral_code (optional).
Beispiel
{ "user": { "id": "...", "username": "..." }, "token": "eyJ..." }POST/api/auth/login
Einloggen. Body: email, password. Rate-Limit: 10/15min.
Beispiel
{ "user": { ... }, "token": "eyJ..." }POST/api/auth/forgot-password
Passwort-Reset anfordern. Gibt immer 200 zurück (Anti-Enumeration).
Beispiel
{ "message": "Wenn die E-Mail existiert, wurde ein Link gesendet." }Embed
GET/embed/market/:id
iframe-einbettbares Market-Widget. Zeigt Titel, Wahrscheinlichkeit und Link zu PredX.
Beispiel
<iframe src="https://predx.org/embed/market/MARKET_ID" width="320" height="200" frameborder="0" style="border-radius:12px;" ></iframe>
🔌 Embed-Widget
Bettet einen PredX-Markt als interaktives Widget in deine Website ein.
<iframe src="https://predx.org/embed/market/MARKET_ID" width="320" height="200" frameborder="0" style="border-radius:12px;" ></iframe>
Ersetze MARKET_ID durch die ID des gewünschten Marktes. Die ID findest du in der URL auf predx.org/market/:id.
Fragen oder Feedback? Erstelle einen GitHub Issue.