{"components":{"schemas":{"Credits":{"properties":{"jarvis_sessions":{"type":"integer"},"nexus_tasks":{"type":"integer"},"pops_messages":{"type":"integer"}},"type":"object"},"Error":{"properties":{"credits":{"type":"object"},"detail":{},"error":{"type":"string"},"retry_after_sec":{"type":"integer"},"service":{"type":"string"}},"required":["error"],"type":"object"},"Service":{"properties":{"backend":{"type":"string"},"description":{"type":"string"},"endpoints":{"items":{"type":"string"},"type":"array"},"endpoints_planned":{"items":{"type":"string"},"type":"array"},"id":{"type":"string"},"name":{"type":"string"},"status":{"enum":["live","planned","beta"],"type":"string"},"unit":{"type":"string"}},"required":["id","name","status"],"type":"object"}},"securitySchemes":{"bearerAuth":{"bearerFormat":"np_\u2026","description":"Tenant API key from /conta (or bootstrap key for catalog only).","scheme":"bearer","type":"http"}}},"info":{"description":"Gateway SaaS for Jarvis, Nexus and Pops. Metered routes require a tenant API key (`np_\u2026`). Covers Jarvis, Nexus, Pops, billing and tenant account surfaces. Missions: create/continue timeout 90s (1 credit after success; retry without Idempotency-Key may re-charge). List/get timeout 5s (not metered; safe to retry). Workspace allowlist: /tmp, nexus_platform, SATA projects; omitted workspace defaults to /tmp. Non-allowlisted paths rejected.","title":"ForgeOps AI API","version":"0.6.7"},"openapi":"3.0.3","paths":{"/app":{"get":{"responses":{"200":{"description":"HTML chat workspace"},"302":{"description":"Redirect to login"}},"summary":"Tenant Chat AI UI (session auth, metered)","tags":["catalog"]}},"/healthz":{"get":{"responses":{"200":{"content":{"application/json":{"schema":{"not":{"required":["backends"]},"properties":{"domain_ready":{"type":"boolean"},"jarvis":{"type":"string"},"mission_engine":{"type":"string"},"nexus":{"type":"string"},"pops":{"type":"string"},"public_url":{"nullable":true,"type":"string"},"service":{"type":"string"},"status":{"type":"string"},"version":{"type":"string"}},"required":["status","service","version","jarvis","nexus","pops","mission_engine"],"type":"object"}}},"description":"Platform reachable"},"503":{"description":"All backends down"}},"summary":"Aggregated health (sanitized)","tags":["public"]}},"/openapi.json":{"get":{"responses":{"200":{"description":"OpenAPI 3.0 JSON"}},"summary":"This OpenAPI document","tags":["public"]}},"/precos":{"get":{"responses":{"200":{"description":"HTML pricing"}},"summary":"Public pricing page","tags":["public"]}},"/v1/billing/checkout":{"post":{"requestBody":{"content":{"application/json":{"schema":{"properties":{"plan_id":{"enum":["starter","pro"],"type":"string"}},"required":["plan_id"],"type":"object"}}},"required":true},"responses":{"200":{"description":"checkout_url"},"400":{"description":"Invalid plan"},"501":{"description":"Stripe not configured / live keys blocked"}},"security":[{"bearerAuth":[]}],"summary":"Create Stripe Checkout session (test mode)","tags":["billing"]}},"/v1/billing/plans":{"get":{"responses":{"200":{"description":"Plans"}},"summary":"Public billing plans","tags":["billing"]}},"/v1/billing/webhook":{"post":{"responses":{"200":{"description":"Ack"},"400":{"description":"Bad signature"}},"summary":"Stripe webhook (signature required)","tags":["billing"]}},"/v1/jarvis/mission":{"post":{"description":"Timeout 90s. Debits 1 jarvis.mission credit after upstream success. Retry without Idempotency-Key may re-charge. Workspace omitted \u2192 /tmp. Allowlist only.","requestBody":{"content":{"application/json":{"schema":{"properties":{"goal":{"maxLength":4000,"type":"string"},"inspect_only":{"type":"boolean"},"objective":{"type":"string"},"project":{"type":"string"},"workspace":{"description":"Allowlisted: /tmp, /home/asus/nexus_platform, SATA projects/<slug>. Default /tmp.","type":"string"}},"required":["goal"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"charged":{"type":"integer"},"credits_remaining":{"properties":{"jarvis_sessions":{"type":"integer"},"nexus_tasks":{"type":"integer"},"pops_messages":{"type":"integer"}},"type":"object"},"mission":{"type":"object"},"service":{"type":"string"}},"required":["service","charged","credits_remaining"],"type":"object"}}},"description":"Charged mission result"},"400":{"description":"goal/workspace invalid"},"402":{"description":"insufficient_credits"},"502":{"content":{"application/json":{"schema":{"properties":{"credits":{"type":"object"},"detail":{},"error":{"type":"string"},"hint":{"type":"string"},"retry_after_sec":{"type":"integer"},"service":{"type":"string"}},"required":["error"],"type":"object"}}},"description":"upstream_unavailable | mission_engine_unavailable"}},"security":[{"bearerAuth":[]}],"summary":"Create/run a bounded mission (metered)","tags":["jarvis"]}},"/v1/jarvis/missions":{"get":{"description":"Timeout 5s. Safe to retry.","responses":{"200":{"description":"Mission list"},"502":{"description":"mission_engine_unavailable"}},"security":[{"bearerAuth":[]}],"summary":"List missions (not metered)","tags":["jarvis"]}},"/v1/jarvis/missions/{mission_id}":{"get":{"description":"Timeout 5s. Safe to retry.","parameters":[{"in":"path","name":"mission_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Mission"},"404":{"description":"mission_not_found"},"502":{"description":"mission_engine_unavailable"}},"security":[{"bearerAuth":[]}],"summary":"Mission detail (not metered)","tags":["jarvis"]}},"/v1/jarvis/missions/{mission_id}/continue":{"post":{"description":"Timeout 90s. Debits 1 jarvis.mission credit after success. Retry without Idempotency-Key may re-charge.","parameters":[{"in":"path","name":"mission_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"goal":{"type":"string"},"objective":{"maxLength":4000,"type":"string"}},"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"charged":{"type":"integer"},"credits_remaining":{"properties":{"jarvis_sessions":{"type":"integer"},"nexus_tasks":{"type":"integer"},"pops_messages":{"type":"integer"}},"type":"object"},"mission":{"type":"object"},"service":{"type":"string"}},"required":["service","charged","credits_remaining"],"type":"object"}}},"description":"Charged continue result"},"402":{"description":"insufficient_credits"},"404":{"description":"mission_not_found"},"502":{"content":{"application/json":{"schema":{"properties":{"credits":{"type":"object"},"detail":{},"error":{"type":"string"},"hint":{"type":"string"},"retry_after_sec":{"type":"integer"},"service":{"type":"string"}},"required":["error"],"type":"object"}}},"description":"mission_continue_failed | mission_engine_unavailable"}},"security":[{"bearerAuth":[]}],"summary":"Continue mission (metered after success)","tags":["jarvis"]}},"/v1/jarvis/session":{"post":{"requestBody":{"content":{"application/json":{"schema":{"properties":{"intent":{"type":"string"},"message":{"maxLength":4000,"type":"string"},"pedido":{"type":"string"},"prompt":{"type":"string"}},"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"charged":{"type":"integer"},"credits_remaining":{"properties":{"jarvis_sessions":{"type":"integer"},"nexus_tasks":{"type":"integer"},"pops_messages":{"type":"integer"}},"type":"object"},"elapsed_ms":{"type":"number"},"model":{"type":"string"},"provider":{"type":"string"},"reply":{"type":"string"},"service":{"type":"string"}},"required":["service","charged","credits_remaining"],"type":"object"}}},"description":"Charged reply"},"402":{"description":"insufficient_credits"},"502":{"description":"upstream_unavailable"}},"security":[{"bearerAuth":[]}],"summary":"Metered Jarvis session chat","tags":["jarvis"]}},"/v1/me":{"get":{"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"credits":{"$ref":"#/components/schemas/Credits"},"email":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"},"tenant_id":{"type":"integer"}},"type":"object"}}},"description":"Principal"}},"security":[{"bearerAuth":[]}],"summary":"Caller identity and credits","tags":["catalog"]}},"/v1/nexus/execute":{"post":{"description":"Kill-switch NP_NEXUS_EXECUTE + NP_NEXUS_EXECUTE_TENANTS. Allowlisted intents only (status, tarefas, foco). Debits 1 nexus_tasks credit after success. No shell. force=true rejected.","requestBody":{"content":{"application/json":{"schema":{"properties":{"command":{"description":"Allowlisted: status|tarefas|foco [project]","maxLength":200,"type":"string"}},"required":["command"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"charged":{"type":"integer"},"credits_remaining":{"properties":{"jarvis_sessions":{"type":"integer"},"nexus_tasks":{"type":"integer"},"pops_messages":{"type":"integer"}},"type":"object"},"result":{"type":"object"},"service":{"type":"string"}},"required":["service","charged","credits_remaining"],"type":"object"}}},"description":"Charged execute result"},"400":{"description":"command_required | command_not_allowed | force_not_allowed"},"402":{"description":"insufficient_credits"},"403":{"description":"nexus_execute_disabled"},"502":{"description":"upstream_unavailable"}},"security":[{"bearerAuth":[]}],"summary":"Safe Nexus command (closed beta)","tags":["nexus"]}},"/v1/nexus/tasks":{"get":{"parameters":[{"in":"query","name":"limit","schema":{"default":10,"maximum":50,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"charged":{"type":"integer"},"credits_remaining":{"properties":{"jarvis_sessions":{"type":"integer"},"nexus_tasks":{"type":"integer"},"pops_messages":{"type":"integer"}},"type":"object"},"nexus":{"type":"object"},"service":{"type":"string"}},"required":["service","charged","credits_remaining"],"type":"object"}}},"description":"Charged summary"},"402":{"description":"insufficient_credits"},"502":{"description":"upstream_unavailable"}},"security":[{"bearerAuth":[]}],"summary":"Metered Nexus task summary (read-only; debit after success)","tags":["nexus"]}},"/v1/plans":{"get":{"responses":{"200":{"description":"Plans + checkout path"}},"security":[{"bearerAuth":[]}],"summary":"Plan stubs","tags":["catalog"]}},"/v1/pops/chat":{"post":{"requestBody":{"content":{"application/json":{"schema":{"properties":{"conversation_id":{"type":"string"},"message":{"maxLength":4000,"type":"string"},"pedido":{"type":"string"},"prompt":{"type":"string"}},"required":["message"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"charged":{"type":"integer"},"conversation_id":{"type":"string"},"credits_remaining":{"properties":{"jarvis_sessions":{"type":"integer"},"nexus_tasks":{"type":"integer"},"pops_messages":{"type":"integer"}},"type":"object"},"model":{"type":"string"},"provider":{"type":"string"},"reply":{"type":"string"},"service":{"type":"string"}},"required":["service","charged","credits_remaining"],"type":"object"}}},"description":"Charged reply"},"400":{"description":"message_required / too_long"},"401":{"description":"Auth"},"402":{"description":"insufficient_credits"},"403":{"description":"tenant_key_required"},"502":{"description":"upstream_unavailable"}},"security":[{"bearerAuth":[]}],"summary":"Metered Pops chat (debit after success)","tags":["pops"]}},"/v1/services":{"get":{"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"services":{"items":{"$ref":"#/components/schemas/Service"},"type":"array"}},"required":["services"],"type":"object"}}},"description":"Catalog"},"401":{"description":"Missing/invalid key"}},"security":[{"bearerAuth":[]}],"summary":"Service catalog","tags":["catalog"]}}},"servers":[{"description":"Public ForgeOps","url":"https://forgeops-ai.com"},{"description":"Local","url":"http://127.0.0.1:8790"}],"tags":[{"name":"public"},{"name":"catalog"},{"name":"pops"},{"name":"nexus"},{"name":"jarvis"},{"name":"billing"}],"x-forgeops-catalog":[{"backend":"jarvis","description":"Condutor de sess\u00e3o: intents, tools e orquestra\u00e7\u00e3o.","endpoints":["POST /v1/jarvis/session","POST /v1/jarvis/mission","GET /v1/jarvis/missions","GET /v1/jarvis/missions/{id}","POST /v1/jarvis/missions/{id}/continue"],"id":"jarvis.session","name":"Jarvis Session","status":"live","unit":"request"},{"backend":"nexus","description":"Mem\u00f3ria persistente, tarefas e foco (SATA) \u2014 read-only.","endpoints":["GET /v1/nexus/tasks"],"endpoints_planned":["POST /v1/nexus/tasks"],"id":"nexus.memory","name":"Nexus Memory & Tasks","status":"live","unit":"operation"},{"backend":"nexus","description":"Execu\u00e7\u00e3o controlada (comandos seguros por defeito).","endpoints_planned":["POST /v1/nexus/execute"],"id":"nexus.execute","name":"Nexus Execute","status":"planned","unit":"job"},{"backend":"pops","description":"Completions LLM via Pops (ollama|groq|grok).","endpoints":["POST /v1/pops/chat"],"id":"pops.chat","name":"Pops Chat","status":"live","unit":"message"}]}
