Skip to content

Instantly share code, notes, and snippets.

@loganlinn
Created November 14, 2018 21:50
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save loganlinn/d813ba0f9ccb47f34462ec8abeab8e14 to your computer and use it in GitHub Desktop.
Save loganlinn/d813ba0f9ccb47f34462ec8abeab8e14 to your computer and use it in GitHub Desktop.
Swagger for Clash Royale API (https://api.clashroyale.com/v1/)
swagger: 2.0
info:
title: Clash Royale API
description:
version: v1
termsOfService: http://supercell.com/en/terms-of-service/
host: api.clashroyale.com
basePath: /v1
schemes:
- https
- http
consumes:
- application/json
produces:
- application/json
tags:
- clans
- players
- cards
- tournaments
- leagues
- locations
responses:
BadRequest: # 400
title: Bad request
description: Client provided incorrect parameters for the request.
schema:
$ref: '#/definitions/Error'
Forbidden: # 403
title: Forbidden
description: |
Access denied, either because of missing/incorrect credentials or used API token does not grant access to
the requested resource.
schema:
$ref: '#/definitions/Error'
NotFound: # 404
title: Not found
description: Resource was not found.
schema:
$ref: '#/definitions/Error'
RequestThrottled: # 429
title: Too many requests
description: |
Request was throttled, because amount of requests was above the threshold defined for the used API token.
schema:
$ref: '#/definitions/Error'
UnknownException: # 500
title: Unknown exception
description: |
Unknown error happened when handling the request.
schema:
$ref: '#/definitions/Error'
InMaintenance: # 503
title: In maintenance
description: |
Service is temprorarily unavailable because of maintenance.
schema:
$ref: '#/definitions/Error'
definitions:
Error:
type: object
properties:
reason:
type: string
message:
type: string
VerifyTokenRequest:
type: object
properties:
token:
type: string
VerifyTokenResponse:
type: object
properties:
tag:
type: string
token:
type: string
status:
type: string
ClanBase:
type: object
properties:
tag:
type: string
name:
type: string
badgeId:
type: integer
SearchResultClan:
allOf:
- $ref: '#/definitions/ClanBase'
- type: object
properties:
type:
type: string
clanScore:
type: integer
requiredTrophies:
type: integer
donationsPerWeek:
type: integer
clanChestLevel:
type: integer
clanChestMaxLevel:
type: integer
members:
type: integer
location:
$ref: '#/definitions/Location'
Clan:
allOf:
- $ref: '#/definitions/SearchResultClan'
- type: object
properties:
description:
type: string
clanChestStatus:
type: string
clanChestPoints:
type: integer
memberList:
type: array
items:
$ref: '#/definitions/ClanMember'
PlayerBase:
type: object
properties:
tag:
type: string
name:
type: string
expLevel:
type: integer
trophies:
type: integer
arena:
$ref: "#/definitions/Arena"
ClanMember:
allOf:
- $ref: '#/definitions/PlayerBase'
- type: object
properties:
role:
type: string
clanRank:
type: integer
previousClanRank:
type: integer
donations:
type: integer
donationsReceived:
type: integer
clanChestPoints:
type: integer
Arena:
type: object
properties:
id:
type: integer
name:
type: string
Location:
type: object
properties:
id:
type: integer
name:
type: string
isCountry:
type: boolean
countryCode:
type: string
ClanSearchResult:
type: object
properties:
items:
type: array
items:
$ref: '#/definitions/SearchResultClan'
ClanMemberList:
type: object
properties:
items:
type: array
items:
$ref: '#/definitions/ClanMember'
WarParticipant:
type: object
properties:
tag:
type: string
name:
type: string
cardsEarned:
type: integer
battlesPlayed:
type: integer
wins:
type: integer
WarLog:
type: object
properties:
items:
type: array
items:
type: object
properties:
seasonId:
type: integer
createdDate:
type: string
participants:
type: array
items:
$ref: '#/definitions/WarParticipant'
CurrentWar:
type: object
properties:
state:
type: string
warEndTime:
type: string
clan:
type: object
properties:
tag:
type: string
name:
type: string
badgeId:
type: integer
clanScore:
type: integer
participants:
type: integer
battlesPlayed:
type: integer
wins:
type: integer
crowns:
type: integer
participants:
type: array
items:
$ref: '#/definitions/WarParticipant'
SeasonStatistics:
type: object
properties:
id:
type: string
trophies:
type: integer
bestTrophies:
type: integer
PlayerDetail:
allOf:
- $ref: '#/definitions/PlayerBase'
- type: object
properties:
bestTrophies:
type: integer
wins:
type: integer
losses:
type: integer
battleCount:
type: integer
threeCrownWins:
type: integer
challengeCardsWon:
type: integer
challengeMaxWins:
type: integer
tournamentCardsWon:
type: integer
tournamentBattleCount:
type: integer
role:
type: string
donations:
type: integer
donationsReceived:
type: integer
totalDonations:
type: integer
warDayWins:
type: integer
clanCardsCollected:
type: integer
clan:
$ref: "#/definitions/ClanBase"
arena:
$ref: "#/definitions/Arena"
leagueStatistics:
type: object
properties:
currentSeason:
$ref: "#/definitions/SeasonStatistics"
previousSeason:
$ref: "#/definitions/SeasonStatistics"
bestSeason:
$ref: "#/definitions/SeasonStatistics"
achievements:
type: array
items:
type: object
properties:
name:
type: string
stars:
type: integer
value:
type: integer
target:
type: integer
info:
type: string
cards:
type: array
items:
type: object
properties:
name:
type: string
level:
type: integer
maxLevel:
type: integer
count:
type: integer
iconUrls:
type: object
properties:
medium:
type: string
currentFavouriteCard:
type: object
properties:
name:
type: string
id:
type: integer
maxLevel:
type: integer
iconUrls:
type: object
properties:
medium:
type: string
UpcomingChestsList:
type: object
properties:
items:
type: array
items:
type: object
properties:
index:
type: integer
name:
type: string
BattleLogTeam:
type: object
properties:
tag:
type: string
name:
type: string
startingTrophies:
type: integer
trophyChange:
type: integer
crowns:
type: integer
clan:
$ref: "#/definitions/ClanBase"
cards:
type: array
items:
type: object
properties:
name:
type: string
level:
type: integer
maxLevel:
type: integer
iconUrls:
type: array
items:
type: object
properties:
medium:
type: string
BattleLog:
type: array
items:
type: object
properties:
type:
type: string
battleTime:
type: string
arena:
$ref: "#/definitions/Arena"
gameMode:
type: object
properties:
id:
type: integer
name:
type: string
deckSelection:
type: string
team:
type: array
items:
$ref: "#/definitions/BattleLogTeam"
opponent:
type: array
items:
$ref: "#/definitions/BattleLogTeam"
TournamentBase:
type: object
properties:
items:
type: array
items:
type: object
properties:
tag:
type: string
type:
type: string
status:
type: string
creatorTag:
type: string
name:
type: string
description:
type: string
capacity:
type: integer
maxCapacity:
type: integer
preparationDuration:
type: integer
duration:
type: integer
createdTime:
type: string
TournamentSearchResult:
allOf:
- $ref: '#/definitions/TournamentBase'
Tournament:
allOf:
- $ref: '#/definitions/TournamentBase'
- type: object
properties:
startedTime:
type: string
membersList:
type: array
items:
type: object
properties:
tag:
type: string
name:
type: string
score:
type: integer
rank:
type: integer
clan:
$ref: "#/definitions/ClanBase"
CardList:
type: object
properties:
items:
type: array
items:
type: object
properties:
name:
type: string
id:
type: integer
maxLevel:
type: integer
iconUrls:
type: object
properties:
medium:
type: string
LocationList:
type: object
properties:
items:
type: array
items:
$ref: "#/definitions/Location"
ClanRankingList:
type: object
properties:
items:
type: array
items:
type: object
properties:
tag:
type: string
name:
type: string
rank:
type: integer
previousRank:
type: integer
location:
$ref: "#/definitions/Location"
clanScore:
type: integer
badgeId:
type: integer
members:
type: integer
PlayerRankingList:
type: object
properties:
items:
type: array
items:
type: object
properties:
tag:
type: string
name:
type: string
expLevel:
type: integer
trophies:
type: integer
rank:
type: integer
previousRank:
type: integer
clan:
$ref: "#/definitions/ClanBase"
arena:
$ref: "#/definitions/Arena"
ClanWarsRankingList:
type: object
properties:
items:
type: array
items:
type: object
properties:
tag:
type: string
name:
type: string
rank:
type: integer
previousRank:
type: integer
location:
$ref: "#/definitions/Location"
clanScore:
type: integer
badgeId:
type: integer
members:
type: integer
paths:
/clans:
get:
summary: Search clans
description: |
Search all clans by name and/or filtering the results using various criteria. At least one filtering
criteria must be defined and if name is used as part of search, it is required to be at least three
characters long.
It is not possible to specify ordering for results so clients should not rely on any specific ordering
as that may change in the future releases of the API.
tags:
- clans
operationId: searchClans
parameters:
-
name: name
in: query
description: |
Search clans by name. If name is used as part of search query, it needs to be at least three
characters long. Name search parameter is interpreted as wild card search, so it may appear
anywhere in the clan name.
required: false
type: string
minLength: 3
-
name: locationId
in: query
description: |
Filter by clan location identifier. For list of available locations, refer to getLocations operation.
required: false
type: integer
-
name: minMembers
in: query
description: |
Filter by minimum amount of clan members.
required: false
type: integer
-
name: maxMembers
in: query
description: |
Filter by maximum amount of clan members.
required: false
type: integer
-
name: minScore
in: query
description: |
Filter by minimum amount of clan score.
required: false
type: integer
-
name: limit
in: query
description: |
Limit the number of items returned in the response.
required: false
type: integer
-
name: after
in: query
description: |
Return only items that occur after this marker. After marker can be found from the
response, inside the 'paging' property. Note that only after or before can be specified for a
request, not both.
required: false
type: integer
-
name: before
in: query
description: |
Return only items that occur before this marker. Before marker can be found from the
response, inside the 'paging' property. Note that only after or before can be specified for a
request, not both.
required: false
type: integer
responses:
'400':
$ref: '#/responses/BadRequest'
'403':
$ref: '#/responses/Forbidden'
'404':
$ref: '#/responses/NotFound'
'429':
$ref: '#/responses/RequestThrottled'
'500':
$ref: '#/responses/UnknownException'
'503':
$ref: '#/responses/InMaintenance'
'200':
schema:
$ref: '#/definitions/ClanSearchResult'
/clans/{clanTag}:
get:
summary: Get clan information
description: |
Get information about a single clan by clan tag. Clan tags can be found using clan search operation.
Note that clan tags start with hash character '#' and that needs to be URL-encoded properly to work
in URL, so for example clan tag '#2ABC' would become '%232ABC' in the URL.
tags:
- clans
operationId: getClan
parameters:
-
name: clanTag
in: path
description: |
Tag of the clan to retrieve.
required: true
type: string
responses:
'400':
$ref: '#/responses/BadRequest'
'403':
$ref: '#/responses/Forbidden'
'404':
$ref: '#/responses/NotFound'
'429':
$ref: '#/responses/RequestThrottled'
'500':
$ref: '#/responses/UnknownException'
'503':
$ref: '#/responses/InMaintenance'
'200':
schema:
$ref: '#/definitions/Clan'
/clans/{clanTag}/members:
get:
summary: List clan members
description: List clan members
tags:
- clans
operationId: getClanMembers
parameters:
-
name: clanTag
in: path
description: Tag of the clan whose members to retrieve.
required: true
type: string
-
name: limit
in: query
description: |
Limit the number of items returned in the response.
required: false
type: integer
-
name: after
in: query
description: |
Return only items that occur after this marker. After marker can be found from the
response, inside the 'paging' property. Note that only after or before can be specified for a
request, not both.
required: false
type: integer
-
name: before
in: query
description: |
Return only items that occur before this marker. Before marker can be found from the
response, inside the 'paging' property. Note that only after or before can be specified for a
request, not both.
required: false
type: integer
responses:
'400':
$ref: '#/responses/BadRequest'
'403':
$ref: '#/responses/Forbidden'
'404':
$ref: '#/responses/NotFound'
'429':
$ref: '#/responses/RequestThrottled'
'500':
$ref: '#/responses/UnknownException'
'503':
$ref: '#/responses/InMaintenance'
'200':
schema:
$ref: '#/definitions/ClanMemberList'
/clans/{clanTag}/warlog:
get:
summary: Retrieve clan's clan war log
description: Retrieve clan's clan war log
tags:
- clans
operationId: getClanWarLog
parameters:
-
name: clanTag
in: path
description: Tag of the clan whose war log to retrieve.
required: true
type: string
-
name: limit
in: query
description: |
Limit the number of items returned in the response.
required: false
type: integer
-
name: after
in: query
description: |
Return only items that occur after this marker. After marker can be found from the
response, inside the 'paging' property. Note that only after or before can be specified for a
request, not both.
required: false
type: integer
-
name: before
in: query
description: |
Return only items that occur before this marker. Before marker can be found from the
response, inside the 'paging' property. Note that only after or before can be specified for a
request, not both.
required: false
type: integer
responses:
'400':
$ref: '#/responses/BadRequest'
'403':
$ref: '#/responses/Forbidden'
'404':
$ref: '#/responses/NotFound'
'429':
$ref: '#/responses/RequestThrottled'
'500':
$ref: '#/responses/UnknownException'
'503':
$ref: '#/responses/InMaintenance'
'200':
schema:
$ref: '#/definitions/WarLog'
/clans/{clanTag}/currentwar:
get:
summary: Retrieve information about clan's current clan war
description: Retrieve information about clan's current clan war
tags:
- clans
operationId: getCurrentWar
parameters:
-
name: clanTag
in: path
description: Tag of the clan whose war log to retrieve.
required: true
type: string
responses:
'400':
$ref: '#/responses/BadRequest'
'403':
$ref: '#/responses/Forbidden'
'404':
$ref: '#/responses/NotFound'
'429':
$ref: '#/responses/RequestThrottled'
'500':
$ref: '#/responses/UnknownException'
'503':
$ref: '#/responses/InMaintenance'
'200':
schema:
$ref: '#/definitions/CurrentWar'
/players/{playerTag}:
get:
summary: Get player information
description: |
Get information about a single player by player tag. Player tags can be found either in game or by from
clan member lists.
Note that player tags start with hash character '#' and that needs to be URL-encoded properly to work
in URL, so for example player tag '#2ABC' would become '%232ABC' in the URL.
tags:
- players
operationId: getPlayer
parameters:
-
name: playerTag
in: path
description: |
Tag of the player to retrieve.
required: true
type: string
responses:
'400':
$ref: '#/responses/BadRequest'
'404':
$ref: '#/responses/NotFound'
'429':
$ref: '#/responses/RequestThrottled'
'500':
$ref: '#/responses/UnknownException'
'503':
$ref: '#/responses/InMaintenance'
'200':
schema:
$ref: '#/definitions/PlayerDetail'
/players/{playerTag}/upcomingchests:
get:
summary: Get information about player's upcoming chests
description: |
Get list of reward chests that the player will receive next in the game.
tags:
- players
operationId: getPlayerUpcomingChests
parameters:
-
name: playerTag
in: path
description: |
Tag of the player whose information to retrieve.
required: true
type: string
responses:
'400':
$ref: '#/responses/BadRequest'
'404':
$ref: '#/responses/NotFound'
'429':
$ref: '#/responses/RequestThrottled'
'500':
$ref: '#/responses/UnknownException'
'503':
$ref: '#/responses/InMaintenance'
'200':
schema:
$ref: '#/definitions/UpcomingChestsList'
/players/{playerTag}/battlelog:
get:
summary: Get log of recent battles for a player
description: |
Get list of recent battle results for a player.
tags:
- players
operationId: getPlayerBattles
parameters:
-
name: playerTag
in: path
description: |
Tag of the player whose information to retrieve.
required: true
type: string
responses:
'400':
$ref: '#/responses/BadRequest'
'404':
$ref: '#/responses/NotFound'
'429':
$ref: '#/responses/RequestThrottled'
'500':
$ref: '#/responses/UnknownException'
'503':
$ref: '#/responses/InMaintenance'
'200':
schema:
$ref: '#/definitions/BattleLog'
# /players/{playerTag}/verifytoken:
# post:
# summary: Verify a player token
# description: |
# Verifies a player token and returns whether or not the token was associated with the given player.
#
# This API call can be used by a player to prove that they own a particular game account as the token
# can only be retrieved inside the game from settings view.
# tags:
# - players
# operationId: verifyToken
# consumes:
# - application/json
# parameters:
# -
# name: playerTag
# in: path
# description: |
# Tag of the player whose information to retrieve.
# required: true
# type: string
# -
# name: token
# in: body
# description: Token to verify.
# schema:
# type: object
# required:
# - token
# properties:
# token:
# type: string
# responses:
# '400':
# $ref: '#/responses/BadRequest'
# '404':
# $ref: '#/responses/NotFound'
# '429':
# $ref: '#/responses/RequestThrottled'
# '500':
# $ref: '#/responses/UnknownException'
# '503':
# $ref: '#/responses/InMaintenance'
# '200':
# schema:
# $ref: '#/definitions/VerifyTokenResponse'
/tournaments:
get:
summary: Search tournaments
description: |
Search all tournaments by name.
It is not possible to specify ordering for results so clients should not rely on any specific ordering
as that may change in the future releases of the API.
tags:
- tournaments
operationId: searchTournaments
parameters:
-
name: name
in: query
description: |
Search tournaments by name.
required: false
type: string
minLength: 1
-
name: limit
in: query
description: |
Limit the number of items returned in the response.
required: false
type: integer
-
name: after
in: query
description: |
Return only items that occur after this marker. After marker can be found from the
response, inside the 'paging' property. Note that only after or before can be specified for a
request, not both.
required: false
type: integer
-
name: before
in: query
description: |
Return only items that occur before this marker. Before marker can be found from the
response, inside the 'paging' property. Note that only after or before can be specified for a
request, not both.
required: false
type: integer
responses:
'400':
$ref: '#/responses/BadRequest'
'403':
$ref: '#/responses/Forbidden'
'404':
$ref: '#/responses/NotFound'
'429':
$ref: '#/responses/RequestThrottled'
'500':
$ref: '#/responses/UnknownException'
'503':
$ref: '#/responses/InMaintenance'
'200':
schema:
$ref: '#/definitions/TournamentSearchResult'
/tournaments/{tournamentTag}:
get:
summary: Get tournament information
description: |
Get information about a single tournament by a tournament tag.
tags:
- tournaments
operationId: getTournament
parameters:
-
name: tournamentTag
in: path
description: |
Tag of the tournament to retrieve.
required: true
type: string
responses:
'400':
$ref: '#/responses/BadRequest'
'403':
$ref: '#/responses/Forbidden'
'404':
$ref: '#/responses/NotFound'
'429':
$ref: '#/responses/RequestThrottled'
'500':
$ref: '#/responses/UnknownException'
'503':
$ref: '#/responses/InMaintenance'
'200':
schema:
$ref: '#/definitions/Tournament'
/cards:
get:
summary: Get list of available cards
description: |
Get list of all available cards.
tags:
- cards
operationId: getCards
parameters:
responses:
'400':
$ref: '#/responses/BadRequest'
'403':
$ref: '#/responses/Forbidden'
'404':
$ref: '#/responses/NotFound'
'429':
$ref: '#/responses/RequestThrottled'
'500':
$ref: '#/responses/UnknownException'
'503':
$ref: '#/responses/InMaintenance'
'200':
schema:
$ref: '#/definitions/CardList'
/locations:
get:
summary: List locations
description: List all available locations
tags:
- locations
operationId: getLocations
parameters:
-
name: limit
in: query
description: |
Limit the number of items returned in the response.
required: false
type: integer
-
name: after
in: query
description: |
Return only items that occur after this marker. After marker can be found from the
response, inside the 'paging' property. Note that only after or before can be specified for a
request, not both.
required: false
type: integer
-
name: before
in: query
description: |
Return only items that occur before this marker. Before marker can be found from the
response, inside the 'paging' property. Note that only after or before can be specified for a
request, not both.
required: false
type: integer
responses:
'400':
$ref: '#/responses/BadRequest'
'403':
$ref: '#/responses/Forbidden'
'404':
$ref: '#/responses/NotFound'
'429':
$ref: '#/responses/RequestThrottled'
'500':
$ref: '#/responses/UnknownException'
'503':
$ref: '#/responses/InMaintenance'
'200':
schema:
$ref: '#/definitions/LocationList'
/locations/{locationId}:
get:
summary: Get location information
description: Get information about specific location
tags:
- locations
operationId: getLocation
parameters:
-
name: locationId
in: path
description: Identifier of the location to retrieve.
required: true
type: string
responses:
'400':
$ref: '#/responses/BadRequest'
'403':
$ref: '#/responses/Forbidden'
'404':
$ref: '#/responses/NotFound'
'429':
$ref: '#/responses/RequestThrottled'
'500':
$ref: '#/responses/UnknownException'
'503':
$ref: '#/responses/InMaintenance'
'200':
schema:
$ref: '#/definitions/Location'
/locations/{locationId}/rankings: {}
/locations/{locationId}/rankings/clans:
get:
summary: Get clan rankings for a specific location
description: Get clan rankings for a specific location
tags:
- locations
operationId: getClanRanking
parameters:
-
name: locationId
in: path
description: Identifier of the location to retrieve.
required: true
type: string
-
name: limit
in: query
description: |
Limit the number of items returned in the response.
required: false
type: integer
-
name: after
in: query
description: |
Return only items that occur after this marker. After marker can be found from the
response, inside the 'paging' property. Note that only after or before can be specified for a
request, not both.
required: false
type: integer
-
name: before
in: query
description: |
Return only items that occur before this marker. Before marker can be found from the
response, inside the 'paging' property. Note that only after or before can be specified for a
request, not both.
required: false
type: integer
responses:
'400':
$ref: '#/responses/BadRequest'
'403':
$ref: '#/responses/Forbidden'
'404':
$ref: '#/responses/NotFound'
'429':
$ref: '#/responses/RequestThrottled'
'500':
$ref: '#/responses/UnknownException'
'503':
$ref: '#/responses/InMaintenance'
'200':
schema:
$ref: '#/definitions/ClanRankingList'
/locations/{locationId}/rankings/players:
get:
summary: Get player rankings for a specific location
description: Get player rankings for a specific location
tags:
- locations
operationId: getPlayerRanking
parameters:
-
name: locationId
in: path
description: Identifier of the location to retrieve.
required: true
type: string
-
name: limit
in: query
description: |
Limit the number of items returned in the response.
required: false
type: integer
-
name: after
in: query
description: |
Return only items that occur after this marker. After marker can be found from the
response, inside the 'paging' property. Note that only after or before can be specified for a
request, not both.
required: false
type: integer
-
name: before
in: query
description: |
Return only items that occur before this marker. Before marker can be found from the
response, inside the 'paging' property. Note that only after or before can be specified for a
request, not both.
required: false
type: integer
responses:
'400':
$ref: '#/responses/BadRequest'
'403':
$ref: '#/responses/Forbidden'
'404':
$ref: '#/responses/NotFound'
'429':
$ref: '#/responses/RequestThrottled'
'500':
$ref: '#/responses/UnknownException'
'503':
$ref: '#/responses/InMaintenance'
'200':
schema:
$ref: '#/definitions/PlayerRankingList'
/locations/{locationId}/rankings/clanwars:
get:
summary: Get clan war rankings for a specific location
description: Get clan war rankings for a specific location
tags:
- locations
operationId: getClanWarsRanking
parameters:
-
name: locationId
in: path
description: Identifier of the location to retrieve.
required: true
type: string
-
name: limit
in: query
description: |
Limit the number of items returned in the response.
required: false
type: integer
-
name: after
in: query
description: |
Return only items that occur after this marker. After marker can be found from the
response, inside the 'paging' property. Note that only after or before can be specified for a
request, not both.
required: false
type: integer
-
name: before
in: query
description: |
Return only items that occur before this marker. Before marker can be found from the
response, inside the 'paging' property. Note that only after or before can be specified for a
request, not both.
required: false
type: integer
responses:
'400':
$ref: '#/responses/BadRequest'
'403':
$ref: '#/responses/Forbidden'
'404':
$ref: '#/responses/NotFound'
'429':
$ref: '#/responses/RequestThrottled'
'500':
$ref: '#/responses/UnknownException'
'503':
$ref: '#/responses/InMaintenance'
'200':
schema:
$ref: '#/definitions/ClanWarsRankingList'
parameters:
securityDefinitions:
JWT:
type: apiKey
description: JSON Web Token used as an API key
name: authorization
in: header
security:
JWT: []
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment