{"openapi":"3.1.0","info":{"title":"OpenEnv Environment HTTP API","description":"\n# OpenEnv Environment HTTP API\n\nHTTP API for interacting with OpenEnv environments through a standardized interface.\n\n## Features\n\n* **Environment Reset**: Initialize or restart episodes\n* **Action Execution**: Send actions and receive observations\n* **State Inspection**: Query current environment state\n* **Schema Access**: Retrieve JSON schemas for actions and observations\n\n## Workflow\n\n1. Call `/reset` to start a new episode and get initial observation\n2. Call `/step` repeatedly with actions to interact with environment\n3. Episode ends when observation returns `done: true`\n4. Call `/state` anytime to inspect current environment state\n\n## Documentation\n\n* **Swagger UI**: Available at `/docs`\n* **ReDoc**: Available at `/redoc`\n* **OpenAPI Schema**: Available at `/openapi.json`\n        ","contact":{"name":"OpenEnv Team","url":"https://github.com/meta-pytorch/OpenEnv"},"license":{"name":"BSD-3-Clause","url":"https://github.com/meta-pytorch/OpenEnv/blob/main/LICENSE"},"version":"1.0.0"},"paths":{"/reset":{"post":{"tags":["Environment Control"],"summary":"Reset the environment","description":"Reset the environment to its initial state and return the first observation.\n\nYou can optionally provide a seed for reproducibility and an episode_id for tracking.","operationId":"reset_reset_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetRequest"}}}},"responses":{"200":{"description":"Environment reset successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetResponse"},"example":{"observation":{"status":"ready","data":{}},"done":false}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/step":{"post":{"tags":["Environment Control"],"summary":"Execute an action in the environment","description":"Execute an action in the environment and receive the resulting observation.\n\nThe action must conform to the environment's action schema, which can be\nretrieved from the `/schema` endpoint. If the action is invalid,\nthe endpoint will return HTTP 422 with detailed validation errors.\n\nThe response includes:\n- **observation**: The environment's response to the action\n- **reward**: Optional reward signal (float or None)\n- **done**: Boolean indicating if the episode has terminated","operationId":"step_step_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StepRequest"}}},"required":true},"responses":{"200":{"description":"Action executed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StepResponse"},"example":{"observation":{"status":"success","data":{}},"reward":1.0,"done":false}}}},"422":{"description":"Validation error - invalid action format or values","content":{"application/json":{"example":{"detail":[{"type":"string_too_short","loc":["body","action","message"],"msg":"String should have at least 1 character","input":""}]}}}},"500":{"description":"Internal server error during action execution"}}}},"/state":{"get":{"tags":["State Management"],"summary":"Get current environment state","description":"Retrieve the current internal state of the environment.\n\nThe structure of the state object is defined by the environment's State model.","operationId":"endpoint_state_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/State"}}}}}}},"/metadata":{"get":{"summary":"Metadata","description":"Metadata enrichment for the /metadata endpoint.","operationId":"metadata_metadata_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Health","description":"Health check endpoint required by Dockerfile HEALTHCHECK and inference.py.","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/schema":{"get":{"tags":["Schema"],"summary":"Get all JSON schemas","description":"Get JSON schemas for actions, observations, and state in a single response.\n\nReturns a combined schema object containing:\n- **action**: JSON schema for actions accepted by this environment\n- **observation**: JSON schema for observations returned by this environment  \n- **state**: JSON schema for environment state objects\n\nThis is more efficient than calling individual schema endpoints and provides\nall schema information needed to interact with the environment.","operationId":"get_schemas_schema_get","responses":{"200":{"description":"Combined schemas retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemaResponse"},"example":{"action":{"type":"object","properties":{"message":{"type":"string"}}},"observation":{"type":"object","properties":{"response":{"type":"string"}}},"state":{"type":"object","properties":{"step_count":{"type":"integer"}}}}}}}}}},"/":{"get":{"summary":"Root","description":"Environment root — provides deployment status and endpoint directory.","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/stats":{"get":{"summary":"Stats","description":"Real-time in-memory environment statistics (Wow Factor).","operationId":"stats_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"EnvironmentMetadata":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the environment"},"description":{"type":"string","title":"Description","description":"Description of what the environment does"},"readme_content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Readme Content","description":"Content of the README file for the environment"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version","description":"Version of the environment"},"author":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Author","description":"Author of the environment"},"documentation_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Documentation Url","description":"URL to the environment's documentation"}},"additionalProperties":false,"type":"object","required":["name","description"],"title":"EnvironmentMetadata","description":"Metadata about an environment for documentation and UI purposes."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthResponse":{"properties":{"status":{"type":"string","title":"Status","description":"Health status of the environment server"}},"additionalProperties":false,"type":"object","required":["status"],"title":"HealthResponse","description":"Response model for health check endpoint."},"ResetRequest":{"properties":{"seed":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Seed","description":"Random seed for reproducible episodes"},"episode_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Episode Id","description":"Custom episode identifier"}},"additionalProperties":true,"type":"object","title":"ResetRequest","description":"Request model for environment reset.","examples":[{"episode_id":"episode-001","seed":42},{}]},"ResetResponse":{"properties":{"observation":{"additionalProperties":true,"type":"object","title":"Observation","description":"Initial observation from the environment"},"reward":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Reward","description":"Initial reward (typically None at reset)"},"done":{"type":"boolean","title":"Done","description":"Whether episode is already done (typically False)","default":false}},"additionalProperties":false,"type":"object","required":["observation"],"title":"ResetResponse","description":"Response model for environment reset."},"SchemaResponse":{"properties":{"action":{"additionalProperties":true,"type":"object","title":"Action","description":"JSON schema for actions accepted by this environment"},"observation":{"additionalProperties":true,"type":"object","title":"Observation","description":"JSON schema for observations returned by this environment"},"state":{"additionalProperties":true,"type":"object","title":"State","description":"JSON schema for environment state objects"}},"additionalProperties":false,"type":"object","required":["action","observation","state"],"title":"SchemaResponse","description":"Response model for the combined schema endpoint."},"State":{"properties":{"episode_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Episode Id","description":"Unique identifier for the current episode"},"step_count":{"type":"integer","minimum":0.0,"title":"Step Count","description":"Number of steps taken in the current episode","default":0}},"additionalProperties":true,"type":"object","title":"State","description":"Base class for environment state.\n\nRepresents internal environment state, separate from observations."},"StepRequest":{"properties":{"action":{"additionalProperties":true,"type":"object","title":"Action","description":"Action to execute, must conform to environment's action schema"},"timeout_s":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Timeout S","description":"Optional timeout in seconds for action execution"},"request_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Request Id","description":"Optional request identifier for tracking"}},"additionalProperties":true,"type":"object","required":["action"],"title":"StepRequest","description":"Request model for environment step.","examples":[{"action":{"value":1},"timeout_s":30.0},{"action":{"value":1},"render":true,"verbose":false}]},"StepResponse":{"properties":{"observation":{"additionalProperties":true,"type":"object","title":"Observation","description":"Observation resulting from the action"},"reward":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Reward","description":"Reward signal from the action"},"done":{"type":"boolean","title":"Done","description":"Whether the episode has terminated","default":false}},"additionalProperties":false,"type":"object","required":["observation"],"title":"StepResponse","description":"Response model for environment step."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}},"tags":[{"name":"Environment Control","description":"Core operations for environment interaction (reset, step)"},{"name":"State Management","description":"Operations for inspecting environment state"},{"name":"Environment Info","description":"Information about the environment"},{"name":"Schema","description":"JSON Schema endpoints for actions, observations, and state"},{"name":"Health","description":"Service health and status checks"}]}