{"message":"Why API - Children's Question Answering Service","version":"0.4.1","build":23,"endpoints":{"POST /answer":"Answer a child's question (returns immediately with card_id + image_status='pending')","GET /cards/{card_id}":"Read current state of a card job (race-safety read for Realtime subscribers)","POST /cards/{card_id}/retry":"Re-queue image generation for a failed card","POST /text-to-speech":"Generate TTS once per card (then save MP3 via /save-card); do not call when playing shelf","POST /save-card":"Save card (text, image-via-card_id, audio) to Wissensregal (API key required)","GET /shelf":"Retrieve shelf entries for a guest with pagination and signed URLs (API key required)","DELETE /shelf/{item_id}":"Delete a shelf item (API key + X-Guest-Id required; only own items)","PATCH /shelf/{item_id}":"Update answer quality rating 1/0/-1 (API key + X-Guest-Id required; only own items)","POST /api/events":"Record a market/product-research/conversion/usage event (API key + X-Area header required; legacy alias: POST /events)","GET /api/events/should-show":"Frequency-cap check: should the client show this event_type to this session? (API key required)","GET /admin/metrics":"Latest daily_metrics row, or ?date=YYYY-MM-DD (admin bearer token required)","GET /admin/research/{event_type}":"CSV download of raw events for the given type (admin bearer token required)","POST /admin/aggregate-daily-metrics":"Trigger nightly aggregation for yesterday or ?date=YYYY-MM-DD (admin bearer token required)"}}