core/api/openapi3.yml

1073 lines
25 KiB
YAML

openapi: 3.0.0
info:
version: 2.0.0
title: TWHelp API
description: REST API to interact with [TWHelp](https://tribalwarshelp.com).
contact:
name: Dawid Wysokiński
url: https://dwysokinski.me
email: contact@dwysokinski.me
license:
name: MIT
tags:
- name: versions
- name: servers
- name: tribes
servers:
- url: "{scheme}://{hostname}/api"
variables:
scheme:
default: http
enum:
- http
- https
hostname:
default: localhost:9234
paths:
/v2/versions:
get:
operationId: listVersions
tags:
- versions
description: List versions
parameters:
- $ref: "#/components/parameters/CursorQueryParam"
- $ref: "#/components/parameters/LimitQueryParam"
responses:
200:
$ref: "#/components/responses/ListVersionsResponse"
default:
$ref: "#/components/responses/ErrorResponse"
/v2/versions/{versionCode}:
get:
operationId: getVersion
tags:
- versions
description: Get a version
parameters:
- $ref: "#/components/parameters/VersionCodePathParam"
responses:
200:
$ref: "#/components/responses/GetVersionResponse"
default:
$ref: "#/components/responses/ErrorResponse"
/v2/versions/{versionCode}/servers:
get:
operationId: listServers
tags:
- versions
- servers
description: List servers
parameters:
- $ref: "#/components/parameters/VersionCodePathParam"
- $ref: "#/components/parameters/CursorQueryParam"
- $ref: "#/components/parameters/LimitQueryParam"
- $ref: "#/components/parameters/ServerOpenQueryParam"
responses:
200:
$ref: "#/components/responses/ListServersResponse"
default:
$ref: "#/components/responses/ErrorResponse"
/v2/versions/{versionCode}/servers/{serverKey}:
get:
operationId: getServer
tags:
- versions
- servers
description: Get a server
parameters:
- $ref: "#/components/parameters/VersionCodePathParam"
- $ref: "#/components/parameters/ServerKeyPathParam"
responses:
200:
$ref: "#/components/responses/GetServerResponse"
default:
$ref: "#/components/responses/ErrorResponse"
/v2/versions/{versionCode}/servers/{serverKey}/config:
get:
operationId: getServerConfig
tags:
- versions
- servers
description: Get server config
parameters:
- $ref: "#/components/parameters/VersionCodePathParam"
- $ref: "#/components/parameters/ServerKeyPathParam"
responses:
200:
$ref: "#/components/responses/GetServerConfigResponse"
default:
$ref: "#/components/responses/ErrorResponse"
/v2/versions/{versionCode}/servers/{serverKey}/building-info:
get:
operationId: getBuildingInfo
tags:
- versions
- servers
description: Get building info
parameters:
- $ref: "#/components/parameters/VersionCodePathParam"
- $ref: "#/components/parameters/ServerKeyPathParam"
responses:
200:
$ref: "#/components/responses/GetBuildingInfoResponse"
default:
$ref: "#/components/responses/ErrorResponse"
/v2/versions/{versionCode}/servers/{serverKey}/unit-info:
get:
operationId: getUnitInfo
tags:
- versions
- servers
description: Get unit info
parameters:
- $ref: "#/components/parameters/VersionCodePathParam"
- $ref: "#/components/parameters/ServerKeyPathParam"
responses:
200:
$ref: "#/components/responses/GetUnitInfoResponse"
default:
$ref: "#/components/responses/ErrorResponse"
/v2/versions/{versionCode}/servers/{serverKey}/tribes:
get:
operationId: listTribes
tags:
- versions
- servers
- tribes
description: List tribes
parameters:
- $ref: "#/components/parameters/VersionCodePathParam"
- $ref: "#/components/parameters/ServerKeyPathParam"
- $ref: "#/components/parameters/CursorQueryParam"
- $ref: "#/components/parameters/LimitQueryParam"
- $ref: "#/components/parameters/TribeDeletedQueryParam"
responses:
200:
$ref: "#/components/responses/ListTribesResponse"
default:
$ref: "#/components/responses/ErrorResponse"
components:
schemas:
Error:
type: object
required:
- code
- message
additionalProperties: false
properties:
code:
type: string
example: length-out-of-range
message:
type: string
path:
type: array
description: References field where an error occurred.
items:
type: string
x-go-type-skip-optional-pointer: true
params:
type: object
description: Additional data related to the error. Can be used for i18n.
additionalProperties: true
x-go-type-skip-optional-pointer: true
Version:
type: object
required:
- code
- host
- name
- timezone
properties:
code:
type: string
example: pl
host:
type: string
format: hostname
example: www.tribalwars.net
name:
type: string
example: Poland
timezone:
type: string
example: Europe/Warsaw
Server:
type: object
required:
- key
- open
- url
- numPlayers
- numTribes
- numVillages
- numBarbarianVillages
- numBonusVillages
- numPlayerVillages
- createdAt
properties:
key:
type: string
example: pl151
open:
type: boolean
url:
type: string
format: uri
example: https://pl151.plemiona.pl
numPlayers:
type: integer
playerDataSyncedAt:
type: string
format: date-time
numTribes:
type: integer
tribeDataSyncedAt:
type: string
format: date-time
numVillages:
type: integer
numBarbarianVillages:
type: integer
numBonusVillages:
type: integer
numPlayerVillages:
type: integer
villageDataSyncedAt:
type: string
format: date-time
ennoblementDataSyncedAt:
type: string
format: date-time
createdAt:
type: string
format: date-time
ServerConfig:
type: object
required:
- ally
- build
- buildings
- commands
- coord
- game
- misc
- moral
- newbie
- night
- sitter
- sleep
- snob
- speed
- unitSpeed
- win
properties:
ally:
$ref: "#/components/schemas/ServerConfigAlly"
build:
$ref: "#/components/schemas/ServerConfigBuild"
buildings:
$ref: "#/components/schemas/ServerConfigBuildings"
commands:
$ref: "#/components/schemas/ServerConfigCommands"
coord:
$ref: "#/components/schemas/ServerConfigCoord"
game:
$ref: "#/components/schemas/ServerConfigGame"
misc:
$ref: "#/components/schemas/ServerConfigMisc"
moral:
type: integer
newbie:
$ref: "#/components/schemas/ServerConfigNewbie"
night:
$ref: "#/components/schemas/ServerConfigNight"
sitter:
$ref: "#/components/schemas/ServerConfigSitter"
sleep:
$ref: "#/components/schemas/ServerConfigSleep"
snob:
$ref: "#/components/schemas/ServerConfigSnob"
speed:
type: number
format: double
unitSpeed:
type: number
format: double
win:
$ref: "#/components/schemas/ServerConfigWin"
ServerConfigAlly:
type: object
required:
- allytimeSupport
- fixedAllies
- levels
- limit
- noHarm
- noJoin
- noLeave
- noOtherSupport
- noOtherSupportType
- pointsMemberCount
- warsAutoacceptDays
- warsMemberRequirement
- warsPointsRequirement
- xpRequirements
properties:
allytimeSupport:
type: integer
fixedAllies:
type: integer
levels:
type: integer
limit:
type: integer
noHarm:
type: integer
noJoin:
type: integer
noLeave:
type: integer
noOtherSupport:
type: integer
noOtherSupportType:
type: integer
pointsMemberCount:
type: integer
warsAutoacceptDays:
type: integer
warsMemberRequirement:
type: integer
warsPointsRequirement:
type: integer
xpRequirements:
type: string
ServerConfigBuild:
type: object
required:
- destroy
properties:
destroy:
type: integer
ServerConfigBuildings:
type: object
required:
- customBarracks
- customChurch
- customFarm
- customGarage
- customHide
- customIron
- customMain
- customMarket
- customPlace
- customSmith
- customSnob
- customStable
- customStatue
- customStone
- customStorage
- customWall
- customWatchtower
- customWood
properties:
customBarracks:
type: integer
customChurch:
type: integer
customFarm:
type: integer
customGarage:
type: integer
customHide:
type: integer
customIron:
type: integer
customMain:
type: integer
customMarket:
type: integer
customPlace:
type: integer
customSmith:
type: integer
customSnob:
type: integer
customStable:
type: integer
customStatue:
type: integer
customStone:
type: integer
customStorage:
type: integer
customWall:
type: integer
customWatchtower:
type: integer
customWood:
type: integer
ServerConfigCommands:
type: object
required:
- commandCancelTime
- millisArrival
properties:
commandCancelTime:
type: integer
millisArrival:
type: integer
ServerConfigCoord:
type: object
required:
- bonusNew
- bonusVillages
- emptyVillages
- func
- inner
- mapSize
- nobleRestart
- selectStart
- startVillages
- villageMoveWait
properties:
bonusNew:
type: integer
bonusVillages:
type: integer
emptyVillages:
type: integer
func:
type: integer
inner:
type: integer
mapSize:
type: integer
nobleRestart:
type: integer
selectStart:
type: integer
startVillages:
type: integer
villageMoveWait:
type: integer
ServerConfigGame:
type: object
required:
- archer
- barbarianMaxPoints
- barbarianRise
- barbarianShrink
- baseProduction
- buildtimeFormula
- church
- event
- fakeLimit
- farmLimit
- hauls
- haulsBase
- haulsMax
- knight
- knightNewItems
- scavenging
- stronghold
- suppressEvents
- tech
- watchtower
properties:
archer:
type: integer
barbarianMaxPoints:
type: integer
barbarianRise:
type: number
format: double
barbarianShrink:
type: integer
baseProduction:
type: integer
buildtimeFormula:
type: integer
church:
type: integer
event:
type: integer
fakeLimit:
type: number
format: double
farmLimit:
type: integer
hauls:
type: integer
haulsBase:
type: integer
haulsMax:
type: integer
knight:
type: integer
knightNewItems:
type: integer
scavenging:
type: integer
stronghold:
type: integer
suppressEvents:
type: integer
tech:
type: integer
watchtower:
type: integer
ServerConfigMisc:
type: object
required:
- killRanking
- tradeCancelTime
- tutorial
properties:
killRanking:
type: integer
tradeCancelTime:
type: integer
tutorial:
type: integer
ServerConfigNewbie:
type: object
required:
- days
- ratio
- ratioDays
- removeNewbieVillages
properties:
days:
type: integer
ratio:
type: integer
ratioDays:
type: integer
removeNewbieVillages:
type: integer
ServerConfigNight:
type: object
required:
- active
- defFactor
- duration
- endHour
- startHour
properties:
active:
type: integer
defFactor:
type: number
format: double
duration:
type: integer
endHour:
type: integer
startHour:
type: integer
ServerConfigSitter:
type: object
required:
- allow
properties:
allow:
type: integer
ServerConfigSleep:
type: object
required:
- active
- delay
- max
- maxAwake
- min
- minAwake
- warnTime
properties:
active:
type: integer
delay:
type: integer
max:
type: integer
maxAwake:
type: integer
min:
type: integer
minAwake:
type: integer
warnTime:
type: integer
ServerConfigSnob:
type: object
required:
- cheapRebuild
- coinIron
- coinStone
- coinWood
- factor
- gold
- maxDist
- noBarbConquer
- rise
properties:
cheapRebuild:
type: integer
coinIron:
type: integer
coinStone:
type: integer
coinWood:
type: integer
factor:
type: number
format: double
gold:
type: integer
maxDist:
type: integer
noBarbConquer:
type: integer
rise:
type: integer
ServerConfigWin:
type: object
required:
- check
properties:
check:
type: integer
Unit:
type: object
required:
- attack
- buildTime
- carry
- defense
- defenseArcher
- defenseCavalry
- pop
- speed
properties:
attack:
type: integer
buildTime:
type: number
format: double
carry:
type: integer
defense:
type: integer
defenseArcher:
type: integer
defenseCavalry:
type: integer
pop:
type: integer
speed:
type: number
format: double
UnitInfo:
type: object
required:
- archer
- axe
- catapult
- heavy
- knight
- light
- marcher
- militia
- ram
- snob
- spear
- spy
- sword
properties:
archer:
$ref: "#/components/schemas/Unit"
axe:
$ref: "#/components/schemas/Unit"
catapult:
$ref: "#/components/schemas/Unit"
heavy:
$ref: "#/components/schemas/Unit"
knight:
$ref: "#/components/schemas/Unit"
light:
$ref: "#/components/schemas/Unit"
marcher:
$ref: "#/components/schemas/Unit"
militia:
$ref: "#/components/schemas/Unit"
ram:
$ref: "#/components/schemas/Unit"
snob:
$ref: "#/components/schemas/Unit"
spear:
$ref: "#/components/schemas/Unit"
spy:
$ref: "#/components/schemas/Unit"
sword:
$ref: "#/components/schemas/Unit"
Building:
type: object
required:
- buildTime
- buildTimeFactor
- iron
- ironFactor
- maxLevel
- minLevel
- pop
- popFactor
- stone
- stoneFactor
- wood
- woodFactor
properties:
buildTime:
type: number
format: double
buildTimeFactor:
type: number
format: double
iron:
type: integer
ironFactor:
type: number
format: double
maxLevel:
type: integer
minLevel:
type: integer
pop:
type: integer
popFactor:
type: number
format: double
stone:
type: integer
stoneFactor:
type: number
format: double
wood:
type: integer
woodFactor:
type: number
format: double
BuildingInfo:
type: object
required:
- barracks
- farm
- garage
- hide
- iron
- main
- market
- place
- smith
- snob
- stable
- statue
- stone
- storage
- wall
- watchtower
- wood
properties:
barracks:
$ref: "#/components/schemas/Building"
farm:
$ref: "#/components/schemas/Building"
garage:
$ref: "#/components/schemas/Building"
hide:
$ref: "#/components/schemas/Building"
iron:
$ref: "#/components/schemas/Building"
main:
$ref: "#/components/schemas/Building"
market:
$ref: "#/components/schemas/Building"
place:
$ref: "#/components/schemas/Building"
smith:
$ref: "#/components/schemas/Building"
snob:
$ref: "#/components/schemas/Building"
stable:
$ref: "#/components/schemas/Building"
statue:
$ref: "#/components/schemas/Building"
stone:
$ref: "#/components/schemas/Building"
storage:
$ref: "#/components/schemas/Building"
wall:
$ref: "#/components/schemas/Building"
watchtower:
$ref: "#/components/schemas/Building"
wood:
$ref: "#/components/schemas/Building"
Tribe:
type: object
required:
- id
- name
- tag
- profileUrl
- points
- allPoints
- numMembers
- numVillages
- rank
- dominance
- rankAtt
- scoreAtt
- rankDef
- scoreDef
- rankTotal
- scoreTotal
- bestRank
- bestRankAt
- mostVillages
- mostVillagesAt
- mostPoints
- mostPointsAt
- createdAt
properties:
id:
type: integer
name:
type: string
tag:
type: string
profileUrl:
type: string
format: uri
points:
type: integer
allPoints:
type: integer
numMembers:
type: integer
numVillages:
type: integer
rank:
type: integer
dominance:
type: number
format: double
rankAtt:
type: integer
scoreAtt:
type: integer
rankDef:
type: integer
scoreDef:
type: integer
rankTotal:
type: integer
scoreTotal:
type: integer
bestRank:
type: integer
bestRankAt:
type: string
format: date-time
mostVillages:
type: integer
mostVillagesAt:
type: string
format: date-time
mostPoints:
type: integer
mostPointsAt:
type: string
format: date-time
createdAt:
type: string
format: date-time
deletedAt:
type: string
format: date-time
Cursor:
type: object
x-go-type-skip-optional-pointer: true
properties:
self:
description: Cursor pointing to the current page.
type: string
x-go-type-skip-optional-pointer: true
next:
description: Cursor pointing to the next page.
type: string
x-go-type-skip-optional-pointer: true
PaginationResponse:
type: object
properties:
cursor:
$ref: "#/components/schemas/Cursor"
parameters:
CursorQueryParam:
in: query
name: cursor
schema:
type: string
required: false
LimitQueryParam:
in: query
name: limit
schema:
type: integer
minimum: 0
required: false
ServerOpenQueryParam:
name: open
in: query
description: true=only open servers, false=only closed servers,
by default both open and closed servers are returned
schema:
type: boolean
required: false
TribeDeletedQueryParam:
name: deleted
in: query
description: true=only deleted tribes, false=only existing tribes,
by default both existing and deleted tribes are returned
schema:
type: boolean
required: false
VersionCodePathParam:
in: path
name: versionCode
required: true
schema:
type: string
ServerKeyPathParam:
in: path
name: serverKey
required: true
schema:
type: string
responses:
ListVersionsResponse:
description: ""
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/PaginationResponse"
- type: object
required:
- data
properties:
data:
type: array
items:
$ref: "#/components/schemas/Version"
GetVersionResponse:
description: ""
content:
application/json:
schema:
type: object
required:
- data
properties:
data:
$ref: "#/components/schemas/Version"
ListServersResponse:
description: ""
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/PaginationResponse"
- type: object
required:
- data
properties:
data:
type: array
items:
$ref: "#/components/schemas/Server"
GetServerResponse:
description: ""
content:
application/json:
schema:
type: object
required:
- data
properties:
data:
$ref: "#/components/schemas/Server"
GetServerConfigResponse:
description: ""
content:
application/json:
schema:
type: object
required:
- data
properties:
data:
$ref: "#/components/schemas/ServerConfig"
GetUnitInfoResponse:
description: ""
content:
application/json:
schema:
type: object
required:
- data
properties:
data:
$ref: "#/components/schemas/UnitInfo"
GetBuildingInfoResponse:
description: ""
content:
application/json:
schema:
type: object
required:
- data
properties:
data:
$ref: "#/components/schemas/BuildingInfo"
ListTribesResponse:
description: ""
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/PaginationResponse"
- type: object
required:
- data
properties:
data:
type: array
items:
$ref: "#/components/schemas/Tribe"
ErrorResponse:
description: Default error response.
content:
application/json:
schema:
type: object
required:
- errors
additionalProperties: false
properties:
errors:
type: array
items:
$ref: "#/components/schemas/Error"