{"name":"GeniusPro API","description":"OpenAI-compatible chat, models, files, embeddings, and realtime voice API.","version":"1.0","base_url":"https://api.geniuspro.io","docs_url":"https://docs.geniuspro.io","openapi_docs_url":"https://api.geniuspro.io/docs","openapi_url":"https://api.geniuspro.io/openapi.json","plugin_manifest_url":"https://api.geniuspro.io/.well-known/ai-plugin.json","model_catalog_url":"https://api.geniuspro.io/v1/models/catalog","llms_txt_url":"https://docs.geniuspro.io/llms.txt","llms_full_txt_url":"https://docs.geniuspro.io/llms-full.txt","status_url":"https://api.geniuspro.io/v1/health","signup_url":"https://platform.geniuspro.io/api-keys","auth":{"type":"api_key","header":"X-API-Key","alt_header":"Authorization: Bearer <api_key>","signup_url":"https://platform.geniuspro.io/api-keys","notes":"Create an API key in the GeniusPro dashboard, then send it in the X-API-Key header (or as a Bearer token)."},"endpoints":{"health":{"method":"GET","path":"/v1/health","auth":false,"description":"Liveness probe. Returns { status: 'ok' }."},"models":{"method":"GET","path":"/v1/models","auth":true,"description":"List every model slug the authenticated key can call (OpenAI-compatible shape)."},"chat_completions":{"method":"POST","path":"/v1/chat/completions","auth":true,"streaming":true,"description":"OpenAI-compatible chat completions. Send a `model` slug plus `messages[]`; streaming via `stream: true`."},"embeddings":{"method":"POST","path":"/v1/embeddings","auth":true,"description":"Create text embeddings (OpenAI-compatible)."},"files_create":{"method":"POST","path":"/v1/files","auth":true,"description":"Request a pre-signed upload URL. Returns file id + upload_url."},"files_list":{"method":"GET","path":"/v1/files","auth":true,"description":"List files uploaded by the authenticated user."},"files_get":{"method":"GET","path":"/v1/files/:id","auth":true,"description":"Fetch metadata for a single uploaded file."},"files_complete":{"method":"POST","path":"/v1/files/:id/complete","auth":true,"description":"Confirm that bytes have been PUT to the pre-signed upload_url."},"files_delete":{"method":"DELETE","path":"/v1/files/:id","auth":true,"description":"Delete an uploaded file."},"realtime_voice":{"method":"WS","path":"/v1/realtime","auth":true,"description":"WebSocket endpoint for real-time voice. Auth via ?api_key= or an initial { type: 'auth', api_key } frame."}},"example_request":{"url":"https://api.geniuspro.io/v1/chat/completions","method":"POST","headers":{"X-API-Key":"<your-api-key>","Content-Type":"application/json"},"body":{"model":"simon-says","messages":[{"role":"user","content":"Hello from my app."}],"stream":false}},"file_upload_flow":["1. POST /v1/files with { filename, mime_type, purpose } -- returns upload_url + file id","2. PUT your file bytes to the upload_url","3. POST /v1/files/:id/complete -- status becomes 'ready'","4. Reference in chat: { type: 'file', file: { file_id: 'file-xxx' } } inside messages[].content[]"],"supported_file_types":["application/pdf","image/png","image/jpeg","image/webp","image/gif","text/plain","text/csv","application/json","text/markdown"],"model_catalog":{"url":"https://api.geniuspro.io/v1/models/catalog","note":"Authoritative four-tier catalog (experts / orchestrators / benchmarked / direct). Public, unauthenticated, refreshed every 5 minutes from the admin source of truth. User CATs (cat:slug) are per API key — use GET /v1/models.","tiers":[{"id":"experts","description":"Professional-role simon-says-* orchestrators (finance, legal, PM, architecture, etc.). Same endpoint; domain discipline where configured.","examples":["simon-says-finance","simon-says-lawyer","simon-says-accountant","simon-says-analyst","simon-says-pm","simon-says-architecture","simon-says-architecture-pro"]},{"id":"orchestrators","description":"Task-family simon-says-* slugs that auto-route across upstreams. Call one name; GeniusPro picks the best model per request.","examples":["simon-says","simon-says-chat","simon-says-coding","simon-says-coding-super","simon-says-reasoning","simon-says-design","simon-says-image"]},{"id":"benchmarked","description":"simon-says-* slugs selected per task from continuous benchmarks.","examples":["simon-says-math","simon-says-logic","simon-says-long-docs","simon-says-polyglot","simon-says-tools","simon-says-terminal"]},{"id":"direct","description":"Raw-provider slugs for callers who want a specific upstream model.","examples":["gpt-5.4","gpt-5.4-mini","gpt-5.3-codex","claude-opus-4-8","claude-opus-4-7","claude-sonnet-4.5","gemini-3.1-pro","grok-3","sam3"]}],"per_key_endpoint":"GET /v1/models — plan-filtered list for the authenticated caller, including their CATs."},"security":{"url":"https://geniuspro.io/security","summary":"No training on API traffic, PII scrubbed from logs by default, opt-in edge PII scrubbing available.","controls":[{"id":"no_training","claim":"GeniusPro does not train on API traffic.","detail":"Every upstream model provider we route to is configured on its commercial-API default of not training on API traffic. GeniusPro itself never trains on prompts or responses. Specific provider names are shared under NDA during onboarding."},{"id":"pii_scrubbed_from_logs","claim":"Personally identifying information is masked before requests and responses are persisted to GeniusPro's database.","detail":"Applies to chat history, long-term memory, realtime-session instructions, and simon-says-dev review rows. Types: email, US phone, SSN, Luhn-valid credit card, IPv4, IPv6, API-key-shaped tokens (sk-, gp-, sk-ant-, pk_live_, gh*_, Bearer, JWT).","marker_format":"<REDACTED:<type>>","default":true},{"id":"opt_in_edge_scrub","claim":"Callers can request PII to be scrubbed BEFORE the request reaches the upstream provider.","how":{"header":"X-GP-Scrub-Prompt: true","body_field":"scrub_pii","body_field_value":true},"default":false,"detail":"OFF by default because many legitimate workflows (resume parsing, customer-email summarization, contact extraction) need PII to reach the model. Either the header or the body flag enables it identically."},{"id":"tls_in_transit","claim":"TLS 1.2+ for all API traffic."},{"id":"encryption_at_rest","claim":"Chat history, long-term memory, usage logs, and billing records live in a managed Postgres database with encryption at rest."},{"id":"hashed_api_keys","claim":"API keys are stored as salted SHA-256 hashes; the raw key is shown exactly once at creation time."}],"compliance":{"covered_today":["SOC 2 Type II","ISO 27001"],"covered_today_note":"Attested across every link in the GeniusPro stack: managed Postgres database, US cloud hosting for the control plane and realtime voice proxy, and every hyperscaler-hosted model route used for compliance-sensitive traffic.","available_under_baa":["HIPAA"],"available_under_baa_note":"Enterprise tier wires HIPAA-covered workspaces so every link carries a signed BAA: the model upstream (routed through a hyperscaler-hosted provider under the matching BAA) AND the database (HIPAA-eligible tier with a signed BAA). Currently operating in production for enterprise customers.","contact":"https://geniuspro.io/#invite","vendor_chain_disclosure":"Specific infrastructure and model provider names are shared under NDA during onboarding and security-questionnaire review, not on public surfaces.","wire_format_note":"Wire format stays OpenAI-compatible at api.geniuspro.io/v1. Customer paperwork and per-workspace upstream routing are configured during onboarding."}},"ai_usage":{"url":"https://geniuspro.io/ai-usage","summary":"AI agents are welcome to read, summarize, link, and cite GeniusPro public surfaces with attribution. Verbatim copying, foundation-model training, and PII collection require written permission.","ok":["Read the discovery index, OpenAPI, ai-plugin.json, llms.txt, JSON-LD, and model catalog.","Summarize and link back to canonical URLs.","Cite model slugs from https://api.geniuspro.io/v1/models/catalog as the authoritative source.","Build integrations against https://api.geniuspro.io/v1."],"not_ok":["Copy GeniusPro prose, code samples, or documentation verbatim without attribution.","Use GeniusPro content for foundation-model training, fine-tuning, RLHF, DPO, or distillation without written permission.","Collect, cache, or redistribute any PII (contact emails, names, etc.) that appears on GeniusPro public surfaces.","Misrepresent model slugs, pricing, availability, or capabilities."],"customer_traffic_note":"Data callers send to api.geniuspro.io is governed by the separate security policy at https://geniuspro.io/security, not this AI-usage policy.","permission_contact":"legal@geniuspro.io"},"llm_hints":{"discovery":"Start from https://api.geniuspro.io/ then follow openapi_url for the full spec. Hand-written developer guides live at https://docs.geniuspro.io (AI-readable at /llms.txt, /llms-full.txt, and /markdown/*).","verify_models":"Before claiming a GeniusPro model slug does not exist, fetch https://api.geniuspro.io/v1/models/catalog — it is the authoritative public list, updated live from the admin catalog.","preferred_model_for_chat":"simon-says-chat","preferred_model_for_coding":"simon-says-coding","never_send_to_client":["Upstream provider API keys (we don't publish which providers we use)","Database service-role credentials or connection strings","Other users' api_keys"],"rate_limit_behavior":"Expect 429 when over your plan's per-minute ceiling. Back off and retry with jitter.","billing_behavior":"Expect 402 when the account has no remaining credits. The response body includes error.message starting with 'API_BILLING:'."},"error_codes":{"400":"Invalid request (bad JSON, missing fields, unsupported param).","401":"Missing or invalid API key.","402":"Insufficient credits.","413":"Request body > 4MB.","429":"Rate limited.","500":"Server error."}}