{
  "openapi": "3.1.0",
  "info": {
    "title": "EXCT EVE fitting read-only API",
    "version": "1.0.0",
    "description": "Public community configurations backed by the same source XML as the website. No authentication. MCP clients can use https://fit.exct.online/mcp (Streamable HTTP). See /agent-guide.md for equipment selection and export semantics."
  },
  "servers": [
    {
      "url": "https://fit.exct.online"
    }
  ],
  "security": [],
  "paths": {
    "/api/v1/fits": {
      "get": {
        "operationId": "searchFits",
        "summary": "Search configuration metadata in Chinese or English",
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": false,
            "description": "Space-separated substrings must all match metadata",
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "ship",
            "in": "query",
            "required": false,
            "description": "Ship typeID or localized name, e.g. 28710 / Golem / 魔像",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "purpose",
            "in": "query",
            "required": false,
            "description": "Purpose keyword, e.g. 四级 / 运输",
            "schema": {
              "type": "string",
              "maxLength": 100
            }
          },
          {
            "name": "collection",
            "in": "query",
            "required": false,
            "description": "Exact collection ID",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 10
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Pagination offset",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10000,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Query result, including dataVersion",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid query parameters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "404": {
            "description": "Unknown configuration, branch or version",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded; Retry-After header specifies seconds",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "500": {
            "description": "Catalog temporarily unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/fit": {
      "get": {
        "operationId": "getFit",
        "summary": "Read full configuration or an exact branch/version",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": true,
            "description": "Configuration ID returned by search, e.g. lv4/marauder/golem",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "branch",
            "in": "query",
            "required": false,
            "description": "Exact branch ID. Omitted branch selects the first for export.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "version",
            "in": "query",
            "required": false,
            "description": "Exact string version ID. Omitted version selects the latest when selecting a branch or exporting.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Query result, including dataVersion",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid query parameters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "404": {
            "description": "Unknown configuration, branch or version",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded; Retry-After header specifies seconds",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "500": {
            "description": "Catalog temporarily unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/screenshot": {
      "get": {
        "operationId": "getFitScreenshot",
        "summary": "Read static default-equipment PNG metadata and public URL; custom alternatives are unsupported",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": true,
            "description": "Configuration ID returned by search, e.g. lv4/marauder/golem",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "branch",
            "in": "query",
            "required": false,
            "description": "Exact branch ID. Omitted branch selects the first for export.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "version",
            "in": "query",
            "required": false,
            "description": "Exact string version ID. Omitted version selects the latest when selecting a branch or exporting.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "language",
            "in": "query",
            "required": false,
            "description": "Image language",
            "schema": {
              "type": "string",
              "enum": [
                "zh",
                "en"
              ],
              "default": "zh"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Query result, including dataVersion",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid query parameters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "404": {
            "description": "Unknown configuration, branch or version",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded; Retry-After header specifies seconds",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "500": {
            "description": "Catalog temporarily unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/export": {
      "get": {
        "operationId": "exportFit",
        "summary": "Return exported text and selected IDs in JSON",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": true,
            "description": "Configuration ID returned by search, e.g. lv4/marauder/golem",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "branch",
            "in": "query",
            "required": false,
            "description": "Exact branch ID. Omitted branch selects the first for export.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "version",
            "in": "query",
            "required": false,
            "description": "Exact string version ID. Omitted version selects the latest when selecting a branch or exporting.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "format",
            "in": "query",
            "required": false,
            "description": "XML returns untouched full configuration; omit branch/version/alternatives. EFT excludes implants.",
            "schema": {
              "type": "string",
              "enum": [
                "eft",
                "text",
                "xml"
              ],
              "default": "eft"
            }
          },
          {
            "name": "alternatives",
            "in": "query",
            "required": false,
            "description": "URL-encoded JSON mapping selectionKey to zero-based alternative index; omitted keys keep original items",
            "schema": {
              "type": "string",
              "contentMediaType": "application/json"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Query result, including dataVersion",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid query parameters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "404": {
            "description": "Unknown configuration, branch or version",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded; Retry-After header specifies seconds",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "500": {
            "description": "Catalog temporarily unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/version": {
      "get": {
        "operationId": "getDataVersion",
        "summary": "Catalog hash, timestamp, counts and official SDE provenance",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Query result, including dataVersion",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "Invalid query parameters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "404": {
            "description": "Unknown configuration, branch or version",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded; Retry-After header specifies seconds",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "500": {
            "description": "Catalog temporarily unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          }
        }
      }
    }
  }
}
