{
  "openapi": "3.0.3",
  "info": {
    "title": "Wardogs RCON API (unofficial)",
    "version": "v1",
    "description": "Unofficial reference for the Wardogs dedicated server RCON HTTP API (the /v1 interface the admin panel uses). Verify against your own server. Full reference: https://wardogs.tech/rcon-reference",
    "contact": {
      "name": "wardogs.tech",
      "url": "https://wardogs.tech/rcon-reference"
    }
  },
  "servers": [
    {
      "url": "https://{host}:{port}",
      "description": "A network-exposed RCON listener (TLS required). Use http:// only for a loopback listener.",
      "variables": {
        "host": {
          "default": "your-server-host"
        },
        "port": {
          "default": "7776"
        }
      }
    }
  ],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "tags": [
    {
      "name": "Match state"
    },
    {
      "name": "Players"
    },
    {
      "name": "Moderation"
    },
    {
      "name": "Match control"
    },
    {
      "name": "Rotation"
    },
    {
      "name": "Catalog"
    },
    {
      "name": "Config"
    },
    {
      "name": "Meta"
    },
    {
      "name": "Sponsor"
    }
  ],
  "paths": {
    "/v1/status": {
      "get": {
        "summary": "Live match state",
        "tags": [
          "Match state"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Status"
                }
              }
            }
          }
        }
      }
    },
    "/v1/players": {
      "get": {
        "summary": "Connected players",
        "tags": [
          "Players"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Players"
                }
              }
            }
          }
        }
      }
    },
    "/v1/capabilities": {
      "get": {
        "summary": "Supported routes + config flags",
        "tags": [
          "Meta"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Capabilities"
                }
              }
            }
          }
        }
      }
    },
    "/v1/bans": {
      "get": {
        "summary": "Ban list",
        "tags": [
          "Moderation"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Bans"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Ban a player",
        "tags": [
          "Moderation"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Ok"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BanRequest"
              }
            }
          }
        }
      }
    },
    "/v1/bans/{steamId}": {
      "delete": {
        "summary": "Lift a ban",
        "tags": [
          "Moderation"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Ok"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "steamId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "SteamID64."
          }
        ]
      }
    },
    "/v1/reserved-slots": {
      "get": {
        "summary": "Reserved slot ids",
        "tags": [
          "Moderation"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReservedSlots"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Add a reserved slot",
        "tags": [
          "Moderation"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Ok"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SteamIdRequest"
              }
            }
          }
        }
      }
    },
    "/v1/reserved-slots/{steamId}": {
      "delete": {
        "summary": "Remove a reserved slot",
        "tags": [
          "Moderation"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Ok"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "steamId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "SteamID64."
          }
        ]
      }
    },
    "/v1/audit": {
      "get": {
        "summary": "Admin action log",
        "tags": [
          "Meta"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Audit"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 500,
              "default": 50
            }
          }
        ]
      }
    },
    "/v1/players/{steamId}/kick": {
      "post": {
        "summary": "Kick a player",
        "tags": [
          "Moderation"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Ok"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "steamId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "SteamID64."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReasonRequest"
              }
            }
          }
        }
      }
    },
    "/v1/players/{steamId}/kill": {
      "post": {
        "summary": "Kill a player in-match",
        "tags": [
          "Moderation"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Ok"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "steamId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "SteamID64."
          }
        ]
      }
    },
    "/v1/players/{steamId}/message": {
      "post": {
        "summary": "Direct message a player",
        "tags": [
          "Players"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Ok"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "steamId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "SteamID64."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MessageRequest"
              }
            }
          }
        }
      }
    },
    "/v1/players/{steamId}": {
      "patch": {
        "summary": "Change a player's faction (capability-gated)",
        "tags": [
          "Players"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Ok"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "steamId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "SteamID64."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FactionRequest"
              }
            }
          }
        }
      }
    },
    "/v1/broadcast": {
      "post": {
        "summary": "Broadcast a message to everyone",
        "tags": [
          "Players"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Ok"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MessageRequest"
              }
            }
          }
        }
      }
    },
    "/v1/match/map": {
      "post": {
        "summary": "Change map now",
        "tags": [
          "Match control"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Ok"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MapSelection"
              }
            }
          }
        }
      }
    },
    "/v1/match/end": {
      "post": {
        "summary": "End the current match",
        "tags": [
          "Match control"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Ok"
                }
              }
            }
          }
        }
      }
    },
    "/v1/match/restart": {
      "post": {
        "summary": "Restart the current match",
        "tags": [
          "Match control"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Ok"
                }
              }
            }
          }
        }
      }
    },
    "/v1/world/lighting": {
      "put": {
        "summary": "Set lighting/weather live",
        "tags": [
          "Match control"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Ok"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LightingRequest"
              }
            }
          }
        }
      }
    },
    "/v1/rotation": {
      "get": {
        "summary": "Map rotation",
        "tags": [
          "Rotation"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rotation"
                }
              }
            }
          }
        }
      }
    },
    "/v1/rotation/entries": {
      "post": {
        "summary": "Add a rotation entry",
        "tags": [
          "Rotation"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Ok"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MapSelection"
              }
            }
          }
        }
      }
    },
    "/v1/rotation/entries/{i}": {
      "delete": {
        "summary": "Remove a rotation entry",
        "tags": [
          "Rotation"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Ok"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "i",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            },
            "description": "Rotation entry index."
          }
        ]
      }
    },
    "/v1/rotation/entries/{i}/move": {
      "post": {
        "summary": "Move an entry up/down",
        "tags": [
          "Rotation"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Ok"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "i",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            },
            "description": "Rotation entry index."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MoveRequest"
              }
            }
          }
        }
      }
    },
    "/v1/rotation/save": {
      "post": {
        "summary": "Persist rotation changes",
        "tags": [
          "Rotation"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Ok"
                }
              }
            }
          }
        }
      }
    },
    "/v1/settings": {
      "patch": {
        "summary": "Patch scoreTick / rotation settings",
        "tags": [
          "Config"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Ok"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SettingsPatch"
              }
            }
          }
        }
      }
    },
    "/v1/catalog/maps": {
      "get": {
        "summary": "Available maps",
        "tags": [
          "Catalog"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Catalog"
                }
              }
            }
          }
        }
      }
    },
    "/v1/catalog/lightings": {
      "get": {
        "summary": "Available lighting presets",
        "tags": [
          "Catalog"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Catalog"
                }
              }
            }
          }
        }
      }
    },
    "/v1/catalog/experiences": {
      "get": {
        "summary": "All experiences (modes)",
        "tags": [
          "Catalog"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Catalog"
                }
              }
            }
          }
        }
      }
    },
    "/v1/catalog/maps/{id}/experiences": {
      "get": {
        "summary": "Experiences valid for a map",
        "tags": [
          "Catalog"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Ok"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Map id."
          }
        ]
      }
    },
    "/v1/catalog/maps/{id}/alternators": {
      "get": {
        "summary": "Zone alternators for a map",
        "tags": [
          "Catalog"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Ok"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Map id."
          }
        ]
      }
    },
    "/v1/sponsor": {
      "get": {
        "summary": "Sponsor banner URL",
        "tags": [
          "Sponsor"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Sponsor"
                }
              }
            }
          }
        }
      },
      "put": {
        "summary": "Set sponsor banner URL",
        "tags": [
          "Sponsor"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Ok"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SponsorRequest"
              }
            }
          }
        }
      }
    },
    "/v1/config": {
      "get": {
        "summary": "Config document",
        "tags": [
          "Config"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Config"
                }
              }
            }
          }
        }
      },
      "put": {
        "summary": "Apply a config document",
        "tags": [
          "Config"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "If-Match",
            "in": "header",
            "schema": {
              "type": "string"
            },
            "description": "Current revision, quoted, for optimistic concurrency."
          },
          {
            "name": "force",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "fullApply",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "text/plain": {
              "schema": {
                "type": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConfigResult"
                }
              }
            }
          },
          "412": {
            "description": "Revision conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConfigResult"
                }
              }
            }
          }
        }
      }
    },
    "/v1/config/validate": {
      "post": {
        "summary": "Validate a config document",
        "tags": [
          "Config"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "text/plain": {
              "schema": {
                "type": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConfigResult"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "The RCON password, sent as `Authorization: Bearer <password>`. One token, full access."
      }
    },
    "schemas": {
      "Ok": {
        "type": "object",
        "properties": {
          "ok": {
            "type": "boolean"
          },
          "message": {
            "type": "string"
          }
        }
      },
      "Error": {
        "type": "object",
        "properties": {
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            }
          }
        }
      },
      "FactionScore": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "colorHex": {
            "type": "string"
          }
        }
      },
      "Status": {
        "type": "object",
        "properties": {
          "serverName": {
            "type": "string"
          },
          "map": {
            "type": "string"
          },
          "experiences": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "lighting": {
            "type": "string"
          },
          "alternator": {
            "type": "string"
          },
          "scoreTick": {
            "type": "object",
            "properties": {
              "current": {
                "type": "integer"
              },
              "min": {
                "type": "integer"
              },
              "max": {
                "type": "integer"
              }
            }
          },
          "scoreCap": {
            "type": "integer"
          },
          "matchSeconds": {
            "type": "integer"
          },
          "players": {
            "type": "object",
            "properties": {
              "current": {
                "type": "integer"
              },
              "max": {
                "type": "integer"
              }
            }
          },
          "factionScores": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FactionScore"
            }
          },
          "rotation": {
            "type": "object",
            "nullable": true,
            "properties": {
              "nowIndex": {
                "type": "integer",
                "nullable": true
              },
              "nextIndex": {
                "type": "integer",
                "nullable": true
              }
            }
          }
        }
      },
      "Player": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "steamId": {
            "type": "string"
          },
          "faction": {
            "type": "string"
          },
          "kills": {
            "type": "integer"
          },
          "deaths": {
            "type": "integer"
          },
          "cash": {
            "type": "integer"
          },
          "pingMs": {
            "type": "integer"
          }
        }
      },
      "Players": {
        "type": "object",
        "properties": {
          "players": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Player"
            }
          }
        }
      },
      "Capabilities": {
        "type": "object",
        "properties": {
          "routes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "config": {
            "type": "object",
            "properties": {
              "writable": {
                "type": "boolean"
              }
            }
          }
        }
      },
      "Ban": {
        "type": "object",
        "properties": {
          "steamId": {
            "type": "string"
          },
          "bannedAtUtc": {
            "type": "string"
          },
          "bannedBy": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          }
        }
      },
      "Bans": {
        "type": "object",
        "properties": {
          "bans": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Ban"
            }
          }
        }
      },
      "ReservedSlots": {
        "type": "object",
        "properties": {
          "reservedSlots": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "AuditEntry": {
        "type": "object",
        "properties": {
          "timestampUtc": {
            "type": "string"
          },
          "peer": {
            "type": "string"
          },
          "sessionId": {
            "type": "string"
          },
          "event": {
            "type": "string"
          },
          "detail": {
            "type": "string"
          }
        }
      },
      "Audit": {
        "type": "object",
        "properties": {
          "entries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AuditEntry"
            }
          }
        }
      },
      "RotationEntry": {
        "type": "object",
        "properties": {
          "map": {
            "type": "string"
          },
          "experiences": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "lighting": {
            "type": "string"
          },
          "zoneAlternator": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "denied": {
            "type": "boolean"
          }
        }
      },
      "Rotation": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "mode": {
            "type": "string"
          },
          "entries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RotationEntry"
            }
          }
        }
      },
      "Catalog": {
        "type": "object",
        "description": "Catalog list; shape varies by endpoint (maps/lightings/experiences)."
      },
      "Sponsor": {
        "type": "object",
        "properties": {
          "imageUrl": {
            "type": "string"
          }
        }
      },
      "Config": {
        "type": "object",
        "properties": {
          "revision": {
            "type": "string"
          },
          "writable": {
            "type": "boolean"
          },
          "text": {
            "type": "string"
          },
          "sections": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "ConfigResult": {
        "type": "object",
        "properties": {
          "ok": {
            "type": "boolean"
          },
          "revision": {
            "type": "string"
          },
          "error": {
            "$ref": "#/components/schemas/Error"
          },
          "outcomes": {
            "type": "array",
            "items": {}
          },
          "changed": {
            "type": "array",
            "items": {}
          },
          "warnings": {
            "type": "array",
            "items": {}
          }
        }
      },
      "MapSelection": {
        "type": "object",
        "required": [
          "map"
        ],
        "properties": {
          "map": {
            "type": "string"
          },
          "experiences": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "lighting": {
            "type": "string"
          },
          "zoneAlternator": {
            "type": "string"
          }
        }
      },
      "ReasonRequest": {
        "type": "object",
        "properties": {
          "reason": {
            "type": "string"
          }
        }
      },
      "BanRequest": {
        "type": "object",
        "required": [
          "steamId"
        ],
        "properties": {
          "steamId": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          }
        }
      },
      "SteamIdRequest": {
        "type": "object",
        "required": [
          "steamId"
        ],
        "properties": {
          "steamId": {
            "type": "string"
          }
        }
      },
      "MessageRequest": {
        "type": "object",
        "required": [
          "message"
        ],
        "properties": {
          "message": {
            "type": "string"
          }
        }
      },
      "FactionRequest": {
        "type": "object",
        "required": [
          "faction"
        ],
        "properties": {
          "faction": {
            "type": "string"
          }
        }
      },
      "LightingRequest": {
        "type": "object",
        "required": [
          "lighting"
        ],
        "properties": {
          "lighting": {
            "type": "string"
          }
        }
      },
      "MoveRequest": {
        "type": "object",
        "required": [
          "direction"
        ],
        "properties": {
          "direction": {
            "type": "string",
            "enum": [
              "up",
              "down"
            ]
          }
        }
      },
      "SettingsPatch": {
        "type": "object",
        "properties": {
          "scoreTick": {
            "type": "integer"
          },
          "rotationEnabled": {
            "type": "boolean"
          },
          "rotationMode": {
            "type": "string"
          }
        }
      },
      "SponsorRequest": {
        "type": "object",
        "required": [
          "imageUrl"
        ],
        "properties": {
          "imageUrl": {
            "type": "string"
          }
        }
      }
    }
  }
}