-
Notifications
You must be signed in to change notification settings - Fork 26
API Documentation
This documentation can be found with 'Try it out' abilities within the scoring software running on localhost at http://localhost/swagger-docs/api.html. We highly recommend accessing this documentation through the scoring system.
FTC Live Scoring System public API. This API may be used by 3rd party developers to create applications and services using the data stored by the local FTC Live Server.
Applications may run on any computer that is on the same network as the scoring system. Applications that are co-hosted on the scoring computer should not attempt to reach into the scoring system's databases directly. It's assumed that the primary purpose of a 3rd party application is to publish match data to a cloud server. Care should be taken to ensure that the scorekeeping computer is on a secure network. If using live scoring, an isolated 5Ghz network for the scoring server and tablet trackers is preferred. Event participants must not have access to this network even as the computer running the 3rd party application has access to the broader internet. Applications should be sensitive to how often they poll for data. Please remember that third party applications are by their very nature accessories to the critical functions of scoring an event. No 3rd party application should ever be the source of performance issues with FTCLive. To that end, when polling for match results, it's not going to matter if the application gets the results many multiples of seconds after they've been committed to the database. Poll too fast and FTCLive reserves the right to blackball an application by returning HTTP Status 429 for all requests.The scoring system implements rate limiting to safe-guard the primary mission of the scoring system to support the event. Before the system has loaded any match for play, the rate limit is more generous and allows for 1200 requests per 5 minute period, per event. Routes that do not access a specific event are pooled together. Once a match has been loaded for play, the rate drops to 30 requests per 5 minute period per event. This limit is applied across all access from any application, so multiple applications may cause each other to go over the limit. Applications that require faster access or believe that they are being starved by another application may request an API key using the/api/v1/keyrequest/ route. See the route details for more information.Applications must not generate their own rankings from match data without explicitly labelling them as not event official. The easiest to reach rankings, if not the only rankings available, should only be populated from the rankings resource described below.The FTCLive API uses a RESTful architecture to define a set of URIs operating over the GET method. POST, PUT, and DELETE are not supported. 3rd party applications may not modify the FTClive database. 3rd party applications should be sensitive to how often they query the server. To keep the API surface as simple as possible a "Nouns are good; verbs are bad" approach is defined. Given that access to the underlying database is read only, GET is implied. For any given resource the resource without parameters returns an array of all elements, the resource with a parameter returns a detailed description of the element. To reduce the total number of resources, all resources that operate over a collection of data are defined as plural even when selecting only one element in a collection. All public api resources paths begin with /api/. All paths must have a trailing forward slash. All query responses are json formatted text.
FIRST - Contact
GET /api/v1/events/ - Gets list of Events
A list of all event codes that this instance of the FTCLive server knows about.
| Code | Description | Definition |
|---|---|---|
| 200 | Success | ApiV1EventList |
GET /api/v1/events/{code} - Gets an event
A detailed description of an event for any given event code.
| Name | Location | Type | Description |
|---|---|---|---|
| code* | path | string | The event code |
| Code | Description | Definition |
|---|---|---|
| 200 | Success | ApiV1TeamList |
| 404 | No such event | ApiV1Error |
GET /api/v1/events/{code}/awards/ - Gets Awards
This endpoint is deprecated. Use the apiv2 one instead. This one will not properly return Dean's List winners if there are more than 3 and does not include team affiliation for individual awards.
This returns a list of award winners that have been presented. The list changes as awards are presented.
| Name | Location | Type | Description |
|---|---|---|---|
| code* | path | string | The event code |
| Code | Description | Definition |
|---|---|---|
| 200 | Success | ApiV1AwardList |
| 503 | Not Ready - no awards presented. | ApiV1Error |
| 404 | No Such Event | ApiV1Error |
GET /api/v1/events/{code}/elim/alliances/ - Gets Alliances
The elimination alliances.
| Name | Location | Type | Description |
|---|---|---|---|
| code* | path | string | The event code |
| Code | Description | Definition |
|---|---|---|
| 200 | Success | ApiV1ElimsAllianceList |
| 404 | Event or Match not found | ApiV1Error |
GET /api/v1/events/{code}/elim/finals/ - Get Final
Returns an array of finals matches that have been played along with the teams that played in the matches. Does not return all possible matches, only those that have finished. The team that sits out any given match is represented by a team number of -1. If called on an Finals Division (_0), returns the Inter-Division Finals.
| Name | Location | Type | Description |
|---|---|---|---|
| code* | path | string | The event code |
| If-Modified-Since | header | string | GMT time of last hit |
| Code | Description | Definition |
|---|---|---|
| 200 | Success | ApiV1ElimsMatchList |
| 404 | Event or Final not found | ApiV1Error |
| 503 | Not Ready | ApiV1Error |
GET /api/v1/events/{code}/elim/finals/{match} - Gets a finals match.
Detailed results for a single finals match. If called on a Finals Division, returns the detaield result of a single Interdivision Finals Match.
| Name | Location | Type | Description |
|---|---|---|---|
| code* | path | string | The event code |
| match* | path | integer | The match number |
| If-Modified-Since | header | string | GMT time of last hit |
| Code | Description | Definition |
|---|---|---|
| 200 | Success | ApiV1MatchDetailed |
| 404 | No Such Event/Match | ApiV1Error |
GET /api/v1/events/{code}/elim/sf/{sf}/ - Gets Semifinal
Returns an array of matches that have been played in the given semifinal along with the teams that played in the matches. Does not return all possible matches, only those that have finished. The team that sits out any given match is represented by a team number of -1.
| Name | Location | Type | Description |
|---|---|---|---|
| code* | path | string | The event code |
| sf* | path | string | The semifinal number |
| If-Modified-Since | header | string | GMT time of last hit |
| Code | Description | Definition |
|---|---|---|
| 200 | Success | ApiV1ElimsMatchList |
| 404 | Event or Semifinal not found | ApiV1Error |
| 503 | Not Ready | ApiV1Error |
GET /api/v1/events/{code}/elim/sf/{sf}/{match} - Gets a semifinal match.
Detailed results for a single match within a semifinal.
| Name | Location | Type | Description |
|---|---|---|---|
| code* | path | string | The event code |
| sf* | path | integer | The semifinal series |
| match* | path | integer | The match number |
| If-Modified-Since | header | string | GMT time of last hit |
| Code | Description | Definition |
|---|---|---|
| 200 | Success | ApiV1MatchDetailed |
| 404 | No Such Event/Match | ApiV1Error |
GET /api/v1/events/{code}/matches/ - Gets Qualification match list
The Qualification match list for a given event. If matchmaker has not been run when this is requested the match list will be empty.
| Name | Location | Type | Description |
|---|---|---|---|
| code* | path | string | The event code |
| If-Modified-Since | header | string | GMT time of last hit |
| Code | Description | Definition |
|---|---|---|
| 200 | Success | ApiV1MatchBrief |
| 404 | Event not found | ApiV1Error |
GET /api/v1/events/{code}/matches/active/ - Gets Active Matches
List of matches currently loaded for play.
| Name | Location | Type | Description |
|---|---|---|---|
| code* | path | string | The event code |
| Code | Description | Definition |
|---|---|---|
| 200 | Success | ApiV1ActiveMatchList |
| 404 | Event not found | ApiV1Error |
GET /api/v1/events/{code}/matches/{number}/ - Gets Qualification Match
Results for a match that has been played. NO_SUCH_MATCH indicates either an invalid match number or the match has not been played yet.
| Name | Location | Type | Description |
|---|---|---|---|
| code* | path | string | The event code |
| number* | path | integer | The match number |
| If-Modified-Since | header | string | GMT time of last hit |
| Code | Description | Definition |
|---|---|---|
| 200 | Success | ApiV1MatchDetailed |
| 404 | Event or Match not found | ApiV1Error |
GET /api/v1/events/{code}/rankings/ - Gets Rankings
A list of rankings for the event. Clients should understand that rankings are rather static and schedule their polling appropriately.
| Name | Location | Type | Description |
|---|---|---|---|
| code* | path | string | The event code |
| Code | Description | Definition |
|---|---|---|
| 200 | Success | ApiV1RankingList |
| 404 | No Such Event | ApiV1Error |
GET /api/v1/events/{code}/rankings/combined/ - Gets Rankings
A list of combined league rankings for all leagues present at an event. Clients should understand that rankings are rather static and schedule their polling appropriately.
| Name | Location | Type | Description |
|---|---|---|---|
| code* | path | string | The event code |
| Code | Description | Definition |
|---|---|---|
| 200 | Success | ApiV1RankingList |
| 404 | No Such Event | ApiV1Error |
GET /api/v1/events/{code}/teams/ - Gets list of teams competing at an event
A list of teams defined by team numbers participating in any given event.
| Name | Location | Type | Description |
|---|---|---|---|
| code* | path | string | The event code |
| Code | Description | Definition |
|---|---|---|
| 200 | Success | ApiV1TeamList |
GET /api/v1/events/{code}/teams/{number}/ - Gets event-specific team info
Returns a detailed description of a team with a given number competing at a given event. This will return the team info as it was when the event occurred.
| Name | Location | Type | Description |
|---|---|---|---|
| code* | path | string | The event code |
| number* | path | integer | The team's number |
| Code | Description | Definition |
|---|---|---|
| 200 | Success | ApiV1Team |
| 404 | Team or Event not found | ApiV1Error |
GET /api/v1/events/{code}/teamstatus/ - Gets Team Status
Returns the team status tracking data. This data should match what appears on the status display. The status is one of NONE, IN_PROGRESS, FAIL, PASS, READY, LATE, VERY_LATE.
| Name | Location | Type | Description |
|---|---|---|---|
| code* | path | string | The event code |
| Code | Description | Definition |
|---|---|---|
| 200 | Success | ApiV1StatusList |
| 404 | No Such Event | ApiV1Error |
GET /api/v1/teams/ - Gets list of teams
Returns all team numbers that have registered with FIRST as of the last sync to the FIRST registration database for this release of FTCLive. This is a very long list. Applications that want this data should query once upon startup and then never again. The packaged team list will always be returned.
| Code | Description | Definition |
|---|---|---|
| 200 | Success | ApiV1TeamList |
GET /api/v1/teams/{team}/ - Gets a team's info.
A detailed description of a team for any given team number.
| Name | Location | Type | Description |
|---|---|---|---|
| team* | path | integer | The team number |
| Code | Description | Definition |
|---|---|---|
| 200 | Success | ApiV1Team |
| 404 | Team not found | ApiV1Error |
GET /api/v1/version/ - Gets the version of the api.
Returns the version of the scoring system software.
| Code | Description | Definition |
|---|---|---|
| 200 | Success | ApiV1Version |
null
GET /api/v2/events/{code}/awards/ - Gets Awards
List of award winners that have been presented. The list changes as awards are presented. Award winners are shown in this list once they have been publicly presented. For individual awards, the team affiliation may or may not be included. For most awards, the winner is series=1, second place is 2, third place is 3.
| Name | Location | Type | Description |
|---|---|---|---|
| code* | path | string | The event code |
| Code | Description | Definition |
|---|---|---|
| 200 | Success | ApiV2AwardList |
| 404 | No Such Event | ApiV1Error |
GET /api/v2/stream/ - (Websocket Only) Match Event Stream
Connects a websocket to listen for match events. Events come as messages on the socket in near-real-time to when they occur. Each event has a timestamp in millis. Notable events are MATCH_START, MATCH_COMMIT, MATCH_POST, and MATCH_ABORT. The message only contains minimal data about the match involved. ApiV1 HTTP endpoints can be hit to get more details about the match. Note: The Swagger 'Try it out' feature does not support Websockets.
| Name | Location | Type | Description |
|---|---|---|---|
| code* | query | string | The event code |
| Code | Description | Definition |
|---|---|---|
| 200 | Success | ApiV2Update |
Skystone specific API
GET /api/2020/v1/events/{code}/elim/finals/{match}/ - Gets the match scoring details for a finals match.
Skystone game specific data. If called on a Finals Division (_0), returns the Inter-Division Finals Match.
| Name | Location | Type | Description |
|---|---|---|---|
| code* | path | string | The event code |
| match* | path | integer | The match number |
| Code | Description | Definition |
|---|---|---|
| 200 | Success | Api2020MatchDetailed |
| 404 | No such Event/Match | ApiV1Error |
GET /api/2020/v1/events/{code}/elim/sf/{sf}/{match}/ - Gets the match scoring details for a semifinal match
Skystone game specific data.
| Name | Location | Type | Description |
|---|---|---|---|
| code* | path | string | The event code |
| sf* | path | integer | The semifinal number |
| match* | path | integer | The match number |
| Code | Description | Definition |
|---|---|---|
| 200 | Success | Api2020MatchDetailed |
| 404 | No such Event/Match | ApiV1Error |
GET /api/2020/v1/events/{code}/matches/{match}/ - Gets the match scoring details.
Skystone game specific data.
| Name | Location | Type | Description |
|---|---|---|---|
| code* | path | string | The event code |
| match* | path | integer | The match number |
| Code | Description | Definition |
|---|---|---|
| 200 | Success | Api2020MatchDetailed |
| 404 | No such Event/Match | ApiV1Error |
null
GET /api/v1/keycheck/ - Checks the status of the key requested.
This will immediately return the active status of the specified key.
| Name | Location | Type | Description |
|---|---|---|---|
| Authorization* | header | string | The key to check the status of. |
| Code | Description | Definition |
|---|---|---|
| 200 | Success, returns true or false if the key is active | ApiV1KeyStatus |
| 404 | Key not found. | ApiV1Error |
POST /api/v1/keyrequest/ - Requests a key to be granted for an increase rate limit.
Must include the name of the application making the request by specifying the name param in the POST. This name will be displayed to the scorekeeper to validate the key. This will immediately return a key, but the key will not be valid until the scorekeeper approves the request. The status of the key can be checked with /apiv1/keycheck/. Once receiving the key, the application can pass the key as the Authorization header of the HTTP requests. Once the key is active, the rate limit will be increased for the specified key.
| Name | Location | Type | Description |
|---|---|---|---|
| name* | query | string | The name of the program requesting the key. |
| Code | Description | Definition |
|---|---|---|
| 200 | Success, returns with key | ApiV1Key |
| 400 | Must include name as a parameter. This will be displayed to the scorekeeper. |
ApiV1Error |
GET /api/v1/keywait/ - Waits until the specified key becomes active.
This request will return once the scorekeeper has activated the specified key, or immediately if the key is already active.
| Name | Location | Type | Description |
|---|---|---|---|
| Authorization* | header | string | The key to wait until it is valid for. |
| Code | Description | Definition |
|---|---|---|
| 200 | Success, returns true if the key is active | ApiV1KeyStatus |
| 404 | Key not found. | ApiV1Error |
{
"winners": {
"items": {
"genericRef": {
"type": "DEFINITION",
"ref": "#/definitions/ApiV2AwardAssignment",
"simpleRef": "ApiV2AwardAssignment"
},
"type": "ref"
},
"type": "array"
},
"name": {
"type": "string"
},
"isTeamAward": {
"type": "boolean"
}
}
{
"matchList": {
"items": {
"genericRef": {
"type": "DEFINITION",
"ref": "#/definitions/ApiV1ElimsMatch",
"simpleRef": "ApiV1ElimsMatch"
},
"type": "ref"
},
"type": "array"
}
}
{
"alliances": {
"items": {
"genericRef": {
"type": "DEFINITION",
"ref": "#/definitions/ApiV1ElimsAlliance",
"simpleRef": "ApiV1ElimsAlliance"
},
"type": "ref"
},
"type": "array"
}
}
{
"teamName": {
"type": "string"
},
"matchesPlayed": {
"type": "integer"
},
"ranking": {
"type": "integer"
},
"team": {
"type": "integer"
},
"rankingPoints": {
"type": "string",
"position": 0,
"description": "the formatted decimal average Ranking Points"
},
"tieBreakerPoints": {
"type": "string",
"position": 0,
"description": "the formatted decimal average TieBreaker Points"
}
}
{
"red": {
"properties": {
"auto": {
"type": "integer"
},
"dq2": {
"type": "boolean",
"position": 0,
"description": "true if team 2 is a No-Show or receives a Red Card"
},
"dq1": {
"type": "boolean",
"position": 0,
"description": "true if team 1 is a No-Show or receives a Red Card"
},
"penalty": {
"type": "integer"
},
"end": {
"type": "integer"
},
"teleop": {
"type": "integer"
}
},
"type": "object"
},
"redScore": {
"type": "integer"
},
"scheduledTime": {
"type": "integer"
},
"blue": {
"properties": {
"auto": {
"type": "integer"
},
"dq2": {
"type": "boolean",
"position": 0,
"description": "true if team 2 is a No-Show or receives a Red Card"
},
"dq1": {
"type": "boolean",
"position": 0,
"description": "true if team 1 is a No-Show or receives a Red Card"
},
"penalty": {
"type": "integer"
},
"end": {
"type": "integer"
},
"teleop": {
"type": "integer"
}
},
"type": "object"
},
"randomization": {
"type": "integer"
},
"matchBrief": {
"properties": {
"red": {
"properties": {},
"type": "object",
"position": 0,
"description": "ApiV1QualsAlliance if this match is a qualification match or ApiV1ElimsAlliance if this match is an eliminations match."
},
"field": {
"type": "integer"
},
"blue": {
"properties": {},
"type": "object",
"position": 0,
"description": "ApiV1QualsAlliance if this match is a qualification match or ApiV1ElimsAlliance if this match is an eliminations match."
},
"matchName": {
"type": "string"
},
"matchState": {
"type": "string"
},
"finished": {
"type": "boolean"
},
"time": {
"type": "integer"
},
"matchNumber": {
"type": "integer"
}
},
"type": "object"
},
"startTime": {
"type": "integer"
},
"blueScore": {
"type": "integer"
},
"resultPostedTime": {
"type": "integer"
}
}
{
"awards": {
"items": {
"genericRef": {
"type": "DEFINITION",
"ref": "#/definitions/ApiV2Award",
"simpleRef": "ApiV2Award"
},
"type": "ref"
},
"type": "array"
}
}
{
"name": {
"type": "string"
},
"id": {
"type": "string"
},
"abbreviation": {
"type": "string"
}
}
{
"version": {
"type": "string"
}
}
{
"rankingList": {
"items": {
"genericRef": {
"type": "DEFINITION",
"ref": "#/definitions/ApiV1Ranking",
"simpleRef": "ApiV1Ranking"
},
"type": "ref"
},
"type": "array"
}
}
{
"active": {
"type": "boolean"
}
}
{
"errorCode": {
"_enum": [
"REJECT_REQUEST",
"TOO_MANY_REQUESTS",
"NOT_READY",
"NO_PERMS",
"NO_SUCH_EVENT",
"NO_SUCH_MATCH",
"NO_SUCH_TEAM",
"NO_SUCH_YEAR",
"NO_NAME",
"NO_SUCH_KEY"
],
"type": "string"
}
}
{
"matches": {
"items": {
"genericRef": {
"type": "DEFINITION",
"ref": "#/definitions/ApiV1MatchBrief",
"simpleRef": "ApiV1MatchBrief"
},
"type": "ref"
},
"type": "array"
}
}
{
"awards": {
"items": {
"genericRef": {
"type": "DEFINITION",
"ref": "#/definitions/ApiV1Award",
"simpleRef": "ApiV1Award"
},
"type": "ref"
},
"type": "array"
}
}
{
"teamNumbers": {
"items": {
"type": "integer"
},
"type": "array"
}
}
{
"activeStatusTypes": {
"items": {
"genericRef": {
"type": "DEFINITION",
"ref": "#/definitions/ApiV1StatusType",
"simpleRef": "ApiV1StatusType"
},
"type": "ref"
},
"type": "array"
},
"teamStatusList": {
"items": {
"genericRef": {
"type": "DEFINITION",
"ref": "#/definitions/ApiV1TeamStatus",
"simpleRef": "ApiV1TeamStatus"
},
"type": "ref"
},
"type": "array"
}
}
{
"red": {
"properties": {
"autonomousPoints": {
"type": "integer"
},
"firstReturnedIsSkystone": {
"type": "boolean"
},
"driverControlledTransportPoints": {
"type": "integer"
},
"driverControlledPlacedPoints": {
"type": "integer"
},
"minorPenalties": {
"type": "integer"
},
"towerBonusPoints": {
"type": "integer"
},
"autoReturned": {
"type": "integer"
},
"driverControlledPlaced": {
"type": "integer"
},
"driverControlledDelivered": {
"type": "integer"
},
"parkingPoints": {
"type": "integer"
},
"foundationRepositioned": {
"type": "boolean"
},
"capstonePoints": {
"type": "integer"
},
"foundationMoved": {
"type": "boolean"
},
"repositionedPoints": {
"type": "integer"
},
"autoStones": {
"properties": {},
"type": "object",
"position": 0,
"description": "Array of the first six stones delivered in autonomous, in order. Each stone is one of: SKYSTONE, STONE, NONE."
},
"autoPlacedPoints": {
"type": "integer"
},
"navigationPoints": {
"type": "integer"
},
"autoPlaced": {
"type": "integer"
},
"robot1": {
"properties": {
"capstoneLevel": {
"type": "integer",
"position": 0,
"description": "The level of this Robot's capstone. -1 is not-placed."
},
"parked": {
"type": "boolean"
},
"navigated": {
"type": "boolean"
}
},
"type": "object"
},
"autoTransportPoints": {
"type": "integer"
},
"autoDelivered": {
"type": "integer"
},
"robot2": {
"properties": {
"capstoneLevel": {
"type": "integer",
"position": 0,
"description": "The level of this Robot's capstone. -1 is not-placed."
},
"parked": {
"type": "boolean"
},
"navigated": {
"type": "boolean"
}
},
"type": "object"
},
"majorPenalties": {
"type": "integer",
"position": 0,
"description": ""
},
"driverControlledReturned": {
"type": "integer"
}
},
"type": "object"
},
"redScore": {
"type": "integer"
},
"scheduledTime": {
"type": "integer"
},
"blue": {
"properties": {
"autonomousPoints": {
"type": "integer"
},
"firstReturnedIsSkystone": {
"type": "boolean"
},
"driverControlledTransportPoints": {
"type": "integer"
},
"driverControlledPlacedPoints": {
"type": "integer"
},
"minorPenalties": {
"type": "integer"
},
"towerBonusPoints": {
"type": "integer"
},
"autoReturned": {
"type": "integer"
},
"driverControlledPlaced": {
"type": "integer"
},
"driverControlledDelivered": {
"type": "integer"
},
"parkingPoints": {
"type": "integer"
},
"foundationRepositioned": {
"type": "boolean"
},
"capstonePoints": {
"type": "integer"
},
"foundationMoved": {
"type": "boolean"
},
"repositionedPoints": {
"type": "integer"
},
"autoStones": {
"properties": {},
"type": "object",
"position": 0,
"description": "Array of the first six stones delivered in autonomous, in order. Each stone is one of: SKYSTONE, STONE, NONE."
},
"autoPlacedPoints": {
"type": "integer"
},
"navigationPoints": {
"type": "integer"
},
"autoPlaced": {
"type": "integer"
},
"robot1": {
"properties": {
"capstoneLevel": {
"type": "integer",
"position": 0,
"description": "The level of this Robot's capstone. -1 is not-placed."
},
"parked": {
"type": "boolean"
},
"navigated": {
"type": "boolean"
}
},
"type": "object"
},
"autoTransportPoints": {
"type": "integer"
},
"autoDelivered": {
"type": "integer"
},
"robot2": {
"properties": {
"capstoneLevel": {
"type": "integer",
"position": 0,
"description": "The level of this Robot's capstone. -1 is not-placed."
},
"parked": {
"type": "boolean"
},
"navigated": {
"type": "boolean"
}
},
"type": "object"
},
"majorPenalties": {
"type": "integer",
"position": 0,
"description": ""
},
"driverControlledReturned": {
"type": "integer"
}
},
"type": "object"
},
"randomization": {
"type": "integer"
},
"matchBrief": {
"properties": {
"red": {
"properties": {},
"type": "object",
"position": 0,
"description": "ApiV1QualsAlliance if this match is a qualification match or ApiV1ElimsAlliance if this match is an eliminations match."
},
"field": {
"type": "integer"
},
"blue": {
"properties": {},
"type": "object",
"position": 0,
"description": "ApiV1QualsAlliance if this match is a qualification match or ApiV1ElimsAlliance if this match is an eliminations match."
},
"matchName": {
"type": "string"
},
"matchState": {
"type": "string"
},
"finished": {
"type": "boolean"
},
"time": {
"type": "integer"
},
"matchNumber": {
"type": "integer"
}
},
"type": "object"
},
"startTime": {
"type": "integer"
},
"blueScore": {
"type": "integer"
},
"resultPostedTime": {
"type": "integer"
}
}
{
"name": {
"type": "string"
},
"startTime": {
"type": "integer"
},
"key": {
"type": "string"
}
}
{
"team": {
"type": "integer"
},
"status": {
"type": "object",
"access": ""
}
}
{
"eventCodes": {
"items": {
"type": "string"
},
"type": "array"
}
}
{
"seed": {
"type": "integer"
},
"pick2": {
"type": "integer"
},
"captain": {
"type": "integer"
},
"pick1": {
"type": "integer"
},
"dq": {
"type": "boolean"
}
}
{
"red": {
"properties": {
"seed": {
"type": "integer"
},
"pick2": {
"type": "integer"
},
"captain": {
"type": "integer"
},
"pick1": {
"type": "integer"
},
"dq": {
"type": "boolean"
}
},
"type": "object"
},
"blue": {
"properties": {
"seed": {
"type": "integer"
},
"pick2": {
"type": "integer"
},
"captain": {
"type": "integer"
},
"pick1": {
"type": "integer"
},
"dq": {
"type": "boolean"
}
},
"type": "object"
},
"match": {
"type": "string"
},
"time": {
"type": "integer"
}
}
{
"payload": {
"properties": {
"number": {
"type": "integer"
},
"field": {
"type": "integer"
},
"shortName": {
"type": "string"
}
},
"type": "object"
},
"updateTime": {
"type": "integer"
},
"updateType": {
"_enum": [
"MATCH_START",
"MATCH_ABORT",
"MATCH_COMMIT",
"MATCH_POST"
],
"type": "string"
}
}
{
"firstPlace": {
"type": "string"
},
"thirdPlace": {
"type": "string"
},
"secondPlace": {
"type": "string"
},
"awardName": {
"type": "string"
},
"officialAward": {
"type": "boolean"
}
}
{
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"series": {
"type": "integer"
},
"team": {
"type": "integer"
}
}
{
"number": {
"type": "integer",
"position": 0,
"description": "The team's number"
},
"country": {
"type": "string",
"position": 0,
"description": "The team's home country"
},
"school": {
"type": "string",
"position": 0,
"description": "The team's school or affiliation"
},
"city": {
"type": "string",
"position": 0,
"description": "The team's home city"
},
"name": {
"type": "string",
"position": 0,
"description": "The team's nickname"
},
"state": {
"type": "string",
"position": 0,
"description": "The team's home state"
},
"rookie": {
"type": "integer",
"position": 0,
"description": "The team's rookie year"
}
}
{
"red": {
"properties": {},
"type": "object",
"position": 0,
"description": "ApiV1QualsAlliance if this match is a qualification match or ApiV1ElimsAlliance if this match is an eliminations match."
},
"field": {
"type": "integer"
},
"blue": {
"properties": {},
"type": "object",
"position": 0,
"description": "ApiV1QualsAlliance if this match is a qualification match or ApiV1ElimsAlliance if this match is an eliminations match."
},
"matchName": {
"type": "string"
},
"matchState": {
"type": "string"
},
"finished": {
"type": "boolean"
},
"time": {
"type": "integer"
},
"matchNumber": {
"type": "integer"
}
}