Skip to content

API Documentation

Thomas Barnette edited this page Sep 10, 2019 · 9 revisions

FTC Live Scoring System API.

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.

Guidelines

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.

Rate Limiting

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.

Rankings

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.

API Syntax

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

API v1

GetEvents

GET /api/v1/events/ - Gets list of Events

A list of all event codes that this instance of the FTCLive server knows about.

Responses:

Code Description Definition
200 Success ApiV1EventList

GetEvent

GET /api/v1/events/{code} - Gets an event

A detailed description of an event for any given event code.

Parameters:

Name Location Type Description
code* path string The event code

Responses:

Code Description Definition
200 Success ApiV1TeamList
404 No such event ApiV1Error

GetAwards (Use v2)

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.

Parameters:

Name Location Type Description
code* path string The event code

Responses:

Code Description Definition
200 Success ApiV1AwardList
503 Not Ready - no awards presented. ApiV1Error
404 No Such Event ApiV1Error

GetAlliances

GET /api/v1/events/{code}/elim/alliances/ - Gets Alliances

The elimination alliances.

Parameters:

Name Location Type Description
code* path string The event code

Responses:

Code Description Definition
200 Success ApiV1ElimsAllianceList
404 Event or Match not found ApiV1Error

GetFinal

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.

Parameters:

Name Location Type Description
code* path string The event code
If-Modified-Since header string GMT time of last hit

Responses:

Code Description Definition
200 Success ApiV1ElimsMatchList
404 Event or Final not found ApiV1Error
503 Not Ready ApiV1Error

GetFinalsMatch

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.

Parameters:

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

Responses:

Code Description Definition
200 Success ApiV1MatchDetailed
404 No Such Event/Match ApiV1Error

GetSemifinal

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.

Parameters:

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

Responses:

Code Description Definition
200 Success ApiV1ElimsMatchList
404 Event or Semifinal not found ApiV1Error
503 Not Ready ApiV1Error

GetSemifinalMatch

GET /api/v1/events/{code}/elim/sf/{sf}/{match} - Gets a semifinal match.

Detailed results for a single match within a semifinal.

Parameters:

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

Responses:

Code Description Definition
200 Success ApiV1MatchDetailed
404 No Such Event/Match ApiV1Error

GetMatches

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.

Parameters:

Name Location Type Description
code* path string The event code
If-Modified-Since header string GMT time of last hit

Responses:

Code Description Definition
200 Success ApiV1MatchBrief
404 Event not found ApiV1Error

GetActiveMatches

GET /api/v1/events/{code}/matches/active/ - Gets Active Matches

List of matches currently loaded for play.

Parameters:

Name Location Type Description
code* path string The event code

Responses:

Code Description Definition
200 Success ApiV1ActiveMatchList
404 Event not found ApiV1Error

GetMatch

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.

Parameters:

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

Responses:

Code Description Definition
200 Success ApiV1MatchDetailed
404 Event or Match not found ApiV1Error

GetRankings

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.

Parameters:

Name Location Type Description
code* path string The event code

Responses:

Code Description Definition
200 Success ApiV1RankingList
404 No Such Event ApiV1Error

GetRankings

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.

Parameters:

Name Location Type Description
code* path string The event code

Responses:

Code Description Definition
200 Success ApiV1RankingList
404 No Such Event ApiV1Error

GetCompetingTeams

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.

Parameters:

Name Location Type Description
code* path string The event code

Responses:

Code Description Definition
200 Success ApiV1TeamList

GetEventTeamInfo

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.

Parameters:

Name Location Type Description
code* path string The event code
number* path integer The team's number

Responses:

Code Description Definition
200 Success ApiV1Team
404 Team or Event not found ApiV1Error

GetTeamStatus

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.

Parameters:

Name Location Type Description
code* path string The event code

Responses:

Code Description Definition
200 Success ApiV1StatusList
404 No Such Event ApiV1Error

GetTeams

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.

Responses:

Code Description Definition
200 Success ApiV1TeamList

GetTeam

GET /api/v1/teams/{team}/ - Gets a team's info.

A detailed description of a team for any given team number.

Parameters:

Name Location Type Description
team* path integer The team number

Responses:

Code Description Definition
200 Success ApiV1Team
404 Team not found ApiV1Error

Version

GET /api/v1/version/ - Gets the version of the api.

Returns the version of the scoring system software.

Responses:

Code Description Definition
200 Success ApiV1Version

API v2

null

GetAwards

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.

Parameters:

Name Location Type Description
code* path string The event code

Responses:

Code Description Definition
200 Success ApiV2AwardList
404 No Such Event ApiV1Error

MatchEventStream

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.

Parameters:

Name Location Type Description
code* query string The event code

Responses:

Code Description Definition
200 Success ApiV2Update

2020 API

Skystone specific API

GetFinalMatchDetails

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.

Parameters:

Name Location Type Description
code* path string The event code
match* path integer The match number

Responses:

Code Description Definition
200 Success Api2020MatchDetailed
404 No such Event/Match ApiV1Error

GetSeminfinalMatchDetails

GET /api/2020/v1/events/{code}/elim/sf/{sf}/{match}/ - Gets the match scoring details for a semifinal match

Skystone game specific data.

Parameters:

Name Location Type Description
code* path string The event code
sf* path integer The semifinal number
match* path integer The match number

Responses:

Code Description Definition
200 Success Api2020MatchDetailed
404 No such Event/Match ApiV1Error

GetMatchDetails

GET /api/2020/v1/events/{code}/matches/{match}/ - Gets the match scoring details.

Skystone game specific data.

Parameters:

Name Location Type Description
code* path string The event code
match* path integer The match number

Responses:

Code Description Definition
200 Success Api2020MatchDetailed
404 No such Event/Match ApiV1Error

API Key Management

null

KeyCheck

GET /api/v1/keycheck/ - Checks the status of the key requested.

This will immediately return the active status of the specified key.

Parameters:

Name Location Type Description
Authorization* header string The key to check the status of.

Responses:

Code Description Definition
200 Success, returns true or false if the key is active ApiV1KeyStatus
404 Key not found. ApiV1Error

KeyRequest

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.

Parameters:

Name Location Type Description
name* query string The name of the program requesting the key.

Responses:

Code Description Definition
200 Success, returns with key ApiV1Key
400 Must include name as a parameter. This will be displayed to the scorekeeper. ApiV1Error

KeyWait

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.

Parameters:

Name Location Type Description
Authorization* header string The key to wait until it is valid for.

Responses:

Code Description Definition
200 Success, returns true if the key is active ApiV1KeyStatus
404 Key not found. ApiV1Error

Definitions

ApiV2Award

{
  "winners": {
    "items": {
      "genericRef": {
        "type": "DEFINITION",
        "ref": "#/definitions/ApiV2AwardAssignment",
        "simpleRef": "ApiV2AwardAssignment"
      },
      "type": "ref"
    },
    "type": "array"
  },
  "name": {
    "type": "string"
  },
  "isTeamAward": {
    "type": "boolean"
  }
}

ApiV1ElimsMatchList

{
  "matchList": {
    "items": {
      "genericRef": {
        "type": "DEFINITION",
        "ref": "#/definitions/ApiV1ElimsMatch",
        "simpleRef": "ApiV1ElimsMatch"
      },
      "type": "ref"
    },
    "type": "array"
  }
}

ApiV1ElimsAllianceList

{
  "alliances": {
    "items": {
      "genericRef": {
        "type": "DEFINITION",
        "ref": "#/definitions/ApiV1ElimsAlliance",
        "simpleRef": "ApiV1ElimsAlliance"
      },
      "type": "ref"
    },
    "type": "array"
  }
}

ApiV1Ranking

{
  "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"
  }
}

ApiV1MatchDetailed

{
  "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"
  }
}

ApiV2AwardList

{
  "awards": {
    "items": {
      "genericRef": {
        "type": "DEFINITION",
        "ref": "#/definitions/ApiV2Award",
        "simpleRef": "ApiV2Award"
      },
      "type": "ref"
    },
    "type": "array"
  }
}

ApiV1StatusType

{
  "name": {
    "type": "string"
  },
  "id": {
    "type": "string"
  },
  "abbreviation": {
    "type": "string"
  }
}

ApiV1Version

{
  "version": {
    "type": "string"
  }
}

ApiV1RankingList

{
  "rankingList": {
    "items": {
      "genericRef": {
        "type": "DEFINITION",
        "ref": "#/definitions/ApiV1Ranking",
        "simpleRef": "ApiV1Ranking"
      },
      "type": "ref"
    },
    "type": "array"
  }
}

ApiV1KeyStatus

{
  "active": {
    "type": "boolean"
  }
}

ApiV1Error

{
  "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"
  }
}

ApiV1ActiveMatchList

{
  "matches": {
    "items": {
      "genericRef": {
        "type": "DEFINITION",
        "ref": "#/definitions/ApiV1MatchBrief",
        "simpleRef": "ApiV1MatchBrief"
      },
      "type": "ref"
    },
    "type": "array"
  }
}

ApiV1AwardList

{
  "awards": {
    "items": {
      "genericRef": {
        "type": "DEFINITION",
        "ref": "#/definitions/ApiV1Award",
        "simpleRef": "ApiV1Award"
      },
      "type": "ref"
    },
    "type": "array"
  }
}

ApiV1TeamList

{
  "teamNumbers": {
    "items": {
      "type": "integer"
    },
    "type": "array"
  }
}

ApiV1StatusList

{
  "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"
  }
}

Api2020MatchDetailed

{
  "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"
  }
}

ApiV1Key

{
  "name": {
    "type": "string"
  },
  "startTime": {
    "type": "integer"
  },
  "key": {
    "type": "string"
  }
}

ApiV1TeamStatus

{
  "team": {
    "type": "integer"
  },
  "status": {
    "type": "object",
    "access": ""
  }
}

ApiV1EventList

{
  "eventCodes": {
    "items": {
      "type": "string"
    },
    "type": "array"
  }
}

ApiV1ElimsAlliance

{
  "seed": {
    "type": "integer"
  },
  "pick2": {
    "type": "integer"
  },
  "captain": {
    "type": "integer"
  },
  "pick1": {
    "type": "integer"
  },
  "dq": {
    "type": "boolean"
  }
}

ApiV1ElimsMatch

{
  "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"
  }
}

ApiV2Update

{
  "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"
  }
}

ApiV1Award

{
  "firstPlace": {
    "type": "string"
  },
  "thirdPlace": {
    "type": "string"
  },
  "secondPlace": {
    "type": "string"
  },
  "awardName": {
    "type": "string"
  },
  "officialAward": {
    "type": "boolean"
  }
}

ApiV2AwardAssignment

{
  "firstName": {
    "type": "string"
  },
  "lastName": {
    "type": "string"
  },
  "series": {
    "type": "integer"
  },
  "team": {
    "type": "integer"
  }
}

ApiV1Team

{
  "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"
  }
}

ApiV1MatchBrief

{
  "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"
  }
}

Clone this wiki locally