{"openapi":"3.1.0","info":{"title":"Sora Financial Ops Console","description":"Internal operations & administration console (ops-console). VPN only.","version":"3.1.0-internal"},"paths":{"/actuator/env":{"get":{"tags":["actuator"],"summary":"Environment dump","description":"Unauth: leaks DB URLs, service tokens, AWS keys, internal hostnames.","operationId":"env_actuator_env_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/actuator/configprops":{"get":{"tags":["actuator"],"summary":"Configuration properties","operationId":"configprops_actuator_configprops_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/actuator/mappings":{"get":{"tags":["actuator"],"summary":"Request mappings (route dump)","description":"Unauth: dumps the internal route map — telegraphs every endpoint.","operationId":"mappings_actuator_mappings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/internal/customers/search":{"get":{"tags":["ops"],"summary":"Support customer search","description":"Unauth: support search; default (no q) returns all customers.","operationId":"search_internal_customers_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/customers/{customerId}":{"get":{"tags":["ops"],"summary":"Support customer lookup","description":"Unauth, never-404: full customer record for any id (BOLA + PII, internal host).","operationId":"get_customer_internal_customers__customerId__get","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","examples":["CUST-2000"],"title":"Customerid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin"],"summary":"Delete a customer (authenticated)","operationId":"delete_customer_internal_customers__customerId__delete","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string","title":"Customerid"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/services":{"get":{"tags":["ops"],"summary":"Internal service registry","description":"Unauth: lists reachable internal service hostnames + ports.","operationId":"services_internal_services_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/internal/feature-flags":{"get":{"tags":["ops"],"summary":"Feature flags","description":"Unauth: flags + internal admin/console/grafana URLs.","operationId":"feature_flags_internal_feature_flags_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/internal/jobs/run":{"post":{"tags":["ops"],"summary":"Run an internal batch job","description":"Unauth POST → JSON: triggers an internal job.","operationId":"run_job_internal_jobs_run_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/internal/jobs/{jobId}":{"get":{"tags":["ops"],"summary":"Get job status","description":"Unauth, never-404.","operationId":"job_status_internal_jobs__jobId__get","parameters":[{"name":"jobId","in":"path","required":true,"schema":{"type":"string","examples":["JOB-77420"],"title":"Jobid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/notifications/send":{"post":{"tags":["ops"],"summary":"Send an internal notification","description":"Unauth POST → JSON.","operationId":"send_notification_internal_notifications_send_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/internal/cache/flush":{"post":{"tags":["ops"],"summary":"Flush caches","description":"Unauth admin action → 200 (admin/internal endpoint exposed).","operationId":"cache_flush_internal_cache_flush_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/internal/proxy":{"get":{"tags":["admin"],"summary":"Ops request proxy","description":"Unauth, SSRF-prone: fetches an arbitrary internal target on the console's behalf.","operationId":"proxy_internal_proxy_get","parameters":[{"name":"target","in":"query","required":false,"schema":{"type":"string","default":"http://ledger.sora-financial.internal:8080/health","title":"Target"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/healthcheck":{"post":{"tags":["admin"],"summary":"Run a service healthcheck","description":"Unauth, SSRF-prone: probes an arbitrary URL.","operationId":"healthcheck_internal_healthcheck_post","parameters":[{"name":"url","in":"query","required":false,"schema":{"type":"string","default":"http://ledger.sora-financial.internal:8080/health","title":"Url"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{userId}/impersonate":{"post":{"tags":["admin"],"summary":"Impersonate a user (admin)","description":"Sensitive admin action → 403 (sensitive-non-2XX signal).","operationId":"impersonate_admin_users__userId__impersonate_post","parameters":[{"name":"userId","in":"path","required":true,"schema":{"type":"string","title":"Userid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/deploy":{"post":{"tags":["admin"],"summary":"Trigger a deploy (authenticated)","operationId":"deploy_internal_deploy_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/secrets":{"get":{"tags":["admin"],"summary":"List secrets (authenticated)","operationId":"secrets_internal_secrets_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/feature-flags/{flag}":{"put":{"tags":["admin"],"summary":"Update a feature flag (authenticated)","operationId":"update_flag_internal_feature_flags__flag__put","parameters":[{"name":"flag","in":"path","required":true,"schema":{"type":"string","title":"Flag"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}