{"openapi":"3.1.0","info":{"title":"Morph Browsers Service","version":"0.1.0"},"paths":{"/session":{"get":{"summary":"List Sessions","operationId":"list_sessions","security":[{"HTTPBearer":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionList"}}}}}},"post":{"summary":"Create Session","description":"Create a new browser session.\n\nAllocates a service resource (source of truth) and then starts an instance\nthat references this resource. If quotas are exceeded, returns 409.","operationId":"create_session","security":[{"HTTPBearer":[]}],"parameters":[{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},{"name":"viewport_width","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":1366,"title":"Viewport Width"}},{"name":"viewport_height","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":768,"title":"Viewport Height"}},{"name":"recording","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Recording"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Session"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/session/{id}/connect":{"get":{"summary":"Get Session Connect Url","operationId":"get_session_connect_url","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/session/{id}":{"get":{"summary":"Get Session","operationId":"get_session","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Session"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Stop Session","operationId":"stop_session","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Session"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/session/{name}/by-name":{"get":{"summary":"Get Session By Name","operationId":"get_session_by_name","security":[{"HTTPBearer":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Session"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/session/{id}/pause":{"post":{"summary":"Pause Session","description":"Pause a running browser session (VM pause).","operationId":"pause_session","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Session"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/session/{id}/resume":{"post":{"summary":"Resume Session","description":"Resume a previously paused browser session.","operationId":"resume_session","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Session"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/session/{id}/branch":{"post":{"summary":"Branch Session","description":"Branch an existing session into N replicas.\n\nEach branched session receives a new `browsers:id`.\nRecording is per-session and stored under each instance's `recording` directory.","operationId":"branch_session","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}},{"name":"replicas","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Replicas"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/session/{id}/metadata":{"post":{"summary":"Update Session Metadata","description":"Update per-session metadata stored on the instance.\n- `metadata` is stored serialized under `browsers:meta` (JSON string).","operationId":"update_session_metadata","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetadataUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Session"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/session/{id}/share":{"post":{"summary":"Share Session","operationId":"share_session","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}},{"name":"ttl_seconds","in":"query","required":false,"schema":{"type":"integer","default":900,"title":"Ttl Seconds"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/session/{id}/keep-alive":{"post":{"summary":"Keep Session Alive","description":"Extend the TTL of a browser session to keep it alive longer.","operationId":"keep_session_alive","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}},{"name":"ttl_seconds","in":"query","required":false,"schema":{"type":"integer","default":3600,"title":"Ttl Seconds"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/session/{id}/recording/stop":{"post":{"summary":"Stop Session Recording","operationId":"stop_session_recording","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/session/{id}/recording/events.ndjson":{"get":{"summary":"Get Session Recording Events","operationId":"get_session_recording_events","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"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"},"MetadataUpdateRequest":{"properties":{"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"}},"type":"object","title":"MetadataUpdateRequest"},"Session":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"vcpus":{"type":"integer","title":"Vcpus"},"memory":{"type":"integer","title":"Memory"},"disk_size":{"type":"integer","title":"Disk Size"},"cdp_url":{"type":"string","title":"Cdp Url"},"connect_url":{"type":"string","title":"Connect Url"}},"type":"object","required":["id","name","vcpus","memory","disk_size","cdp_url","connect_url"],"title":"Session"},"SessionList":{"properties":{"count":{"type":"integer","title":"Count"},"data":{"items":{"$ref":"#/components/schemas/Session"},"type":"array","title":"Data"}},"type":"object","required":["count","data"],"title":"SessionList"},"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"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}