{"openapi":"3.0.0","info":{"title":"HeyBonita API","version":"v1"},"components":{"securitySchemes":{"ApiKeyHeader":{"type":"apiKey","in":"header","name":"x-api-key","description":"Culture API developer key (request access at /developers). Optional during the open beta; enforced per environment."}}},"paths":{"/api/core/v1/knowledge":{"get":{"summary":"Culture API: search/list published knowledge entries","description":"Query params: search, category, page, limit (max 100). Returns published, culturally on-mission entries with trust metadata.","security":[{"ApiKeyHeader":[]}],"responses":{"200":{"description":"{ ok, entries, total, page, limit }"},"401":{"description":"API key required or invalid"},"403":{"description":"API key deactivated"}}}},"/api/core/v1/knowledge/{id}":{"get":{"summary":"Culture API: single knowledge entry by id","security":[{"ApiKeyHeader":[]}],"responses":{"200":{"description":"{ ok, entry }"},"401":{"description":"API key required or invalid"},"403":{"description":"API key deactivated"},"404":{"description":"Not found"}}}},"/api/core/v1/knowledge/map":{"get":{"summary":"Culture API: geo-tagged cultural map entries","security":[{"ApiKeyHeader":[]}],"responses":{"200":{"description":"{ ok, entries }"},"401":{"description":"API key required or invalid"},"403":{"description":"API key deactivated"}}}},"/api/core/v1/knowledge/regional":{"get":{"summary":"Culture API: regional knowledge by city/state/region name","description":"Query params: region (required).","security":[{"ApiKeyHeader":[]}],"responses":{"200":{"description":"{ ok, entry }"},"400":{"description":"region query param is required"},"401":{"description":"API key required or invalid"},"403":{"description":"API key deactivated"}}}},"/api/core/v1/knowledge/calendar":{"get":{"summary":"Culture API: cultural calendar events","description":"Query params: month (1–12), category (holiday|history|arts|music|community|observance), limit (max 200).","security":[{"ApiKeyHeader":[]}],"responses":{"200":{"description":"{ ok, events, total, source }"},"400":{"description":"invalid month"},"401":{"description":"API key required or invalid"},"403":{"description":"API key deactivated"}}}},"/api/core/v1/knowledge/random":{"get":{"summary":"Culture API: random published knowledge entry","security":[{"ApiKeyHeader":[]}],"responses":{"200":{"description":"{ ok, entry }"},"401":{"description":"API key required or invalid"},"403":{"description":"API key deactivated"}}}},"/api/v1/chat/completions":{"post":{"summary":"Bonita chat completions (OpenAI-compatible)","description":"Builder or Studio API key. Body: { model: 'bonita'|'bonita-premium', messages, stream? }. Extra usage: $0.025 standard / $0.12 premium turn.","security":[{"ApiKeyHeader":[]}],"requestBody":{"required":true},"responses":{"200":{"description":"Chat completion or SSE stream"},"401":{"description":"API key required or invalid"},"402":{"description":"Plan or extra-usage limit"}}}},"/api/core/v1/developers/checkout":{"post":{"summary":"Start Stripe Checkout for a developer API plan","description":"Session cookie. JSON: { plan: api_culture|api_builder|api_studio, cadence?: monthly|yearly }","responses":{"200":{"description":"{ url, provider: stripe }"},"401":{"description":"Sign in required"}}}},"/api/core/v1/developers/keys":{"get":{"summary":"List the signed-in user’s API keys (prefixes only)"},"post":{"summary":"Mint a hashed API key (active subscription required)"},"delete":{"summary":"Revoke a key by id"}},"/api/core/v1/developers/request-access":{"post":{"summary":"Culture API: request a developer key","description":"JSON body: { email, organization?, use_case? }. Stored for manual review; keys are provisioned by the team until self-serve exists.","requestBody":{"required":true},"responses":{"200":{"description":"Request stored"},"400":{"description":"Invalid email"},"429":{"description":"Rate limited"}}}},"/api/core/v1/health":{"get":{"summary":"Public liveness (service token adds detailed readiness)","responses":{"200":{"description":"OK"}}}},"/api/core/v1/version":{"post":{"summary":"Version","responses":{"200":{"description":"OK"}}}},"/api/core/v1/search":{"post":{"summary":"Search","requestBody":{},"responses":{"200":{"description":"OK"}}}},"/api/core/v1/trends":{"post":{"summary":"Trends","requestBody":{},"responses":{"200":{"description":"OK"}}}},"/api/core/v1/video":{"post":{"summary":"Video","requestBody":{},"responses":{"200":{"description":"OK"}}}},"/api/core/v1/voice":{"post":{"summary":"Bonita chat TTS (ElevenLabs MP3)","description":"Session or service token. JSON body: { text, voice_locale? }. Returns audio/mpeg. Uses ELEVENLABS_VOICE_ID_BONITA.","requestBody":{},"responses":{"200":{"description":"audio/mpeg"},"401":{"description":"Unauthorized"},"429":{"description":"Rate limited"},"503":{"description":"ELEVENLABS_API_KEY missing"}}}},"/api/core/v1/image":{"post":{"summary":"Generate image","requestBody":{"required":true},"responses":{"200":{"description":"OK"}}}},"/api/core/v1/chat":{"post":{"summary":"Chat completion","requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"messages":{"type":"array"}}},{"type":"object","properties":{"prompt":{"type":"string"}}},{"type":"object","properties":{"input":{"type":"string"}}}]}}}},"responses":{"200":{"description":"Chat response with messages array"}}}}}}