{
  "openapi": "3.0.0",
  "info": {
    "title": "opencode",
    "description": "opencode api",
    "version": "1.0.0"
  },
  "paths": {
    "/event": {
      "get": {
        "responses": {
          "200": {
            "description": "Event stream",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Event"
                }
              }
            }
          }
        },
        "operationId": "getEvent",
        "parameters": [],
        "description": "Get events"
      }
    },
    "/session_create": {
      "post": {
        "responses": {
          "200": {
            "description": "Successfully created session",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/session.info"
                }
              }
            }
          }
        },
        "operationId": "postSession_create",
        "parameters": [],
        "description": "Create a new session"
      }
    },
    "/session_share": {
      "post": {
        "responses": {
          "200": {
            "description": "Successfully shared session",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/session.info"
                }
              }
            }
          }
        },
        "operationId": "postSession_share",
        "parameters": [],
        "description": "Share the session",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "sessionID": {
                    "type": "string"
                  }
                },
                "required": [
                  "sessionID"
                ]
              }
            }
          }
        }
      }
    },
    "/session_messages": {
      "post": {
        "responses": {
          "200": {
            "description": "Successfully created session",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Message.Info"
                  }
                }
              }
            }
          }
        },
        "operationId": "postSession_messages",
        "parameters": [],
        "description": "Get messages for a session",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "sessionID": {
                    "type": "string"
                  }
                },
                "required": [
                  "sessionID"
                ]
              }
            }
          }
        }
      }
    },
    "/session_list": {
      "post": {
        "responses": {
          "200": {
            "description": "List of sessions",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/session.info"
                  }
                }
              }
            }
          }
        },
        "operationId": "postSession_list",
        "parameters": [],
        "description": "List all sessions"
      }
    },
    "/session_abort": {
      "post": {
        "responses": {
          "200": {
            "description": "Aborted session",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        },
        "operationId": "postSession_abort",
        "parameters": [],
        "description": "Abort a session",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "sessionID": {
                    "type": "string"
                  }
                },
                "required": [
                  "sessionID"
                ]
              }
            }
          }
        }
      }
    },
    "/session_summarize": {
      "post": {
        "responses": {
          "200": {
            "description": "Summarize the session",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        },
        "operationId": "postSession_summarize",
        "parameters": [],
        "description": "Summarize the session",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "sessionID": {
                    "type": "string"
                  },
                  "providerID": {
                    "type": "string"
                  },
                  "modelID": {
                    "type": "string"
                  }
                },
                "required": [
                  "sessionID",
                  "providerID",
                  "modelID"
                ]
              }
            }
          }
        }
      }
    },
    "/session_chat": {
      "post": {
        "responses": {
          "200": {
            "description": "Chat with a model",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Message.Info"
                }
              }
            }
          }
        },
        "operationId": "postSession_chat",
        "parameters": [],
        "description": "Chat with a model",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "sessionID": {
                    "type": "string"
                  },
                  "providerID": {
                    "type": "string"
                  },
                  "modelID": {
                    "type": "string"
                  },
                  "parts": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/Message.Part"
                    }
                  }
                },
                "required": [
                  "sessionID",
                  "providerID",
                  "modelID",
                  "parts"
                ]
              }
            }
          }
        }
      }
    },
    "/provider_list": {
      "post": {
        "responses": {
          "200": {
            "description": "List of providers",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Provider.Info"
                  }
                }
              }
            }
          }
        },
        "operationId": "postProvider_list",
        "parameters": [],
        "description": "List all providers"
      }
    }
  },
  "components": {
    "schemas": {
      "Event": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/Event.storage.write"
          },
          {
            "$ref": "#/components/schemas/Event.lsp.client.diagnostics"
          },
          {
            "$ref": "#/components/schemas/Event.message.updated"
          },
          {
            "$ref": "#/components/schemas/Event.session.updated"
          }
        ],
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "storage.write": "#/components/schemas/Event.storage.write",
            "lsp.client.diagnostics": "#/components/schemas/Event.lsp.client.diagnostics",
            "message.updated": "#/components/schemas/Event.message.updated",
            "session.updated": "#/components/schemas/Event.session.updated"
          }
        }
      },
      "Event.storage.write": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "storage.write"
          },
          "properties": {
            "type": "object",
            "properties": {
              "key": {
                "type": "string"
              },
              "content": {}
            },
            "required": [
              "key"
            ]
          }
        },
        "required": [
          "type",
          "properties"
        ]
      },
      "Event.lsp.client.diagnostics": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "lsp.client.diagnostics"
          },
          "properties": {
            "type": "object",
            "properties": {
              "serverID": {
                "type": "string"
              },
              "path": {
                "type": "string"
              }
            },
            "required": [
              "serverID",
              "path"
            ]
          }
        },
        "required": [
          "type",
          "properties"
        ]
      },
      "Event.message.updated": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "message.updated"
          },
          "properties": {
            "type": "object",
            "properties": {
              "info": {
                "$ref": "#/components/schemas/Message.Info"
              }
            },
            "required": [
              "info"
            ]
          }
        },
        "required": [
          "type",
          "properties"
        ]
      },
      "Message.Info": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "role": {
            "type": "string",
            "enum": [
              "system",
              "user",
              "assistant"
            ]
          },
          "parts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Message.Part"
            }
          },
          "metadata": {
            "type": "object",
            "properties": {
              "time": {
                "type": "object",
                "properties": {
                  "created": {
                    "type": "number"
                  },
                  "completed": {
                    "type": "number"
                  }
                },
                "required": [
                  "created"
                ]
              },
              "sessionID": {
                "type": "string"
              },
              "tool": {
                "type": "object",
                "additionalProperties": {}
              },
              "assistant": {
                "type": "object",
                "properties": {
                  "modelID": {
                    "type": "string"
                  },
                  "providerID": {
                    "type": "string"
                  },
                  "cost": {
                    "type": "number"
                  },
                  "summary": {
                    "type": "boolean"
                  },
                  "tokens": {
                    "type": "object",
                    "properties": {
                      "input": {
                        "type": "number"
                      },
                      "output": {
                        "type": "number"
                      },
                      "reasoning": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "input",
                      "output",
                      "reasoning"
                    ]
                  }
                },
                "required": [
                  "modelID",
                  "providerID",
                  "cost",
                  "tokens"
                ]
              }
            },
            "required": [
              "time",
              "sessionID",
              "tool"
            ]
          }
        },
        "required": [
          "id",
          "role",
          "parts",
          "metadata"
        ]
      },
      "Message.Part": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/Message.Part.Text"
          },
          {
            "$ref": "#/components/schemas/Message.Part.Reasoning"
          },
          {
            "$ref": "#/components/schemas/Message.Part.ToolInvocation"
          },
          {
            "$ref": "#/components/schemas/Message.Part.SourceUrl"
          },
          {
            "$ref": "#/components/schemas/Message.Part.File"
          },
          {
            "$ref": "#/components/schemas/Message.Part.StepStart"
          }
        ],
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "text": "#/components/schemas/Message.Part.Text",
            "reasoning": "#/components/schemas/Message.Part.Reasoning",
            "tool-invocation": "#/components/schemas/Message.Part.ToolInvocation",
            "source-url": "#/components/schemas/Message.Part.SourceUrl",
            "file": "#/components/schemas/Message.Part.File",
            "step-start": "#/components/schemas/Message.Part.StepStart"
          }
        }
      },
      "Message.Part.Text": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "text"
          },
          "text": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "text"
        ]
      },
      "Message.Part.Reasoning": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "reasoning"
          },
          "text": {
            "type": "string"
          },
          "providerMetadata": {
            "type": "object",
            "additionalProperties": {}
          }
        },
        "required": [
          "type",
          "text"
        ]
      },
      "Message.Part.ToolInvocation": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "tool-invocation"
          },
          "toolInvocation": {
            "$ref": "#/components/schemas/Message.ToolInvocation"
          }
        },
        "required": [
          "type",
          "toolInvocation"
        ]
      },
      "Message.ToolInvocation": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/Message.ToolInvocation.ToolCall"
          },
          {
            "$ref": "#/components/schemas/Message.ToolInvocation.ToolPartialCall"
          },
          {
            "$ref": "#/components/schemas/Message.ToolInvocation.ToolResult"
          }
        ],
        "discriminator": {
          "propertyName": "state",
          "mapping": {
            "call": "#/components/schemas/Message.ToolInvocation.ToolCall",
            "partial-call": "#/components/schemas/Message.ToolInvocation.ToolPartialCall",
            "result": "#/components/schemas/Message.ToolInvocation.ToolResult"
          }
        }
      },
      "Message.ToolInvocation.ToolCall": {
        "type": "object",
        "properties": {
          "state": {
            "type": "string",
            "const": "call"
          },
          "step": {
            "type": "number"
          },
          "toolCallId": {
            "type": "string"
          },
          "toolName": {
            "type": "string"
          },
          "args": {}
        },
        "required": [
          "state",
          "toolCallId",
          "toolName"
        ]
      },
      "Message.ToolInvocation.ToolPartialCall": {
        "type": "object",
        "properties": {
          "state": {
            "type": "string",
            "const": "partial-call"
          },
          "step": {
            "type": "number"
          },
          "toolCallId": {
            "type": "string"
          },
          "toolName": {
            "type": "string"
          },
          "args": {}
        },
        "required": [
          "state",
          "toolCallId",
          "toolName"
        ]
      },
      "Message.ToolInvocation.ToolResult": {
        "type": "object",
        "properties": {
          "state": {
            "type": "string",
            "const": "result"
          },
          "step": {
            "type": "number"
          },
          "toolCallId": {
            "type": "string"
          },
          "toolName": {
            "type": "string"
          },
          "args": {},
          "result": {
            "type": "string"
          }
        },
        "required": [
          "state",
          "toolCallId",
          "toolName",
          "result"
        ]
      },
      "Message.Part.SourceUrl": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "source-url"
          },
          "sourceId": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "providerMetadata": {
            "type": "object",
            "additionalProperties": {}
          }
        },
        "required": [
          "type",
          "sourceId",
          "url"
        ]
      },
      "Message.Part.File": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "file"
          },
          "mediaType": {
            "type": "string"
          },
          "filename": {
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "mediaType",
          "url"
        ]
      },
      "Message.Part.StepStart": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "step-start"
          }
        },
        "required": [
          "type"
        ]
      },
      "Event.session.updated": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "const": "session.updated"
          },
          "properties": {
            "type": "object",
            "properties": {
              "info": {
                "$ref": "#/components/schemas/session.info"
              }
            },
            "required": [
              "info"
            ]
          }
        },
        "required": [
          "type",
          "properties"
        ]
      },
      "session.info": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^ses"
          },
          "share": {
            "type": "object",
            "properties": {
              "secret": {
                "type": "string"
              },
              "url": {
                "type": "string"
              }
            },
            "required": [
              "secret",
              "url"
            ]
          },
          "title": {
            "type": "string"
          },
          "time": {
            "type": "object",
            "properties": {
              "created": {
                "type": "number"
              },
              "updated": {
                "type": "number"
              }
            },
            "required": [
              "created",
              "updated"
            ]
          }
        },
        "required": [
          "id",
          "title",
          "time"
        ]
      },
      "Provider.Info": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "options": {
            "type": "object",
            "additionalProperties": {}
          },
          "models": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Provider.Model"
            }
          }
        },
        "required": [
          "id",
          "name",
          "models"
        ]
      },
      "Provider.Model": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "cost": {
            "type": "object",
            "properties": {
              "input": {
                "type": "number"
              },
              "inputCached": {
                "type": "number"
              },
              "output": {
                "type": "number"
              },
              "outputCached": {
                "type": "number"
              }
            },
            "required": [
              "input",
              "inputCached",
              "output",
              "outputCached"
            ]
          },
          "contextWindow": {
            "type": "number"
          },
          "maxOutputTokens": {
            "type": "number"
          },
          "attachment": {
            "type": "boolean"
          },
          "reasoning": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "cost",
          "contextWindow",
          "attachment"
        ]
      }
    }
  }
}