Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

NOTE: The Competition services are still under development and are not yet available on Synapse.

Table of Contents

Overview

The Competition API is designed to support open-access Synapse data analysis and modeling challenges. This framework provides tools for administrators to create new competitions in Synapse and manage the users and data objects associated with a competition. A competition owner can control access to competition resources and registration, as well as track user participation and evaluate submitted models. This API will support user-facing interfaces to monitor competitions including activity notifications and on-demand scoring and leaderboarding.

Data Models

Synapse Competitions are constructed around three primary objects: Competition, Participant, and Submission. These objects are defined by eponymous JSON schema files in the Synapse Repository Services.

...

  • submissionID
  • eTag - optimistic concurrency flag; changes with each update
  • status - enum describing the state of the Submission, one of: OPEN, CLOSED, SCORED, INVALID
  • score - numerical score for this Submission (long)

REST API

Competition

URLHTTP TypeDescriptionRequest Parameters
/competitionPOSTCreate a new CompetitionuserId (String)
/competition/{competitionId}GETFetch Get a Competition 
/competition/{competitionId}PUT

Update a Competition

userId (String)
/competition/{competitionId}DELETEDelete a CompetitionuserId (String)
/competitionGETBatch Get Competitions (Paginated)

limit (long)
offset (long)

/competition/countGETGet the number of Competitions 
/competition/name/{name}GETFind a Competition by name 

Participant

URLHTTP TypeDescriptionRequest Parameters
/competition/{competitionId}/participantPOSTJoin as a new Participant in the Competition specified by competitionIda Participant in a CompetitionuserId (String)
/competition/{competitionId}/participant/{userId}POSTAdd another user as a Participant in a Competition.
Requires admin rights on the Competition.
userId (String)
/competition/{competitionId}/participant/{userId}GETGet a Participant 
/competition/{competitionId}/participant/{userId}DELETEDelete a ParticipantuserId (String)
/competition/{competitionId}/participant/GETBatch get Participants for a given Competition (Paginated) 
/competition/{competitionId}/participant/countGETGet the number of Participants in a given Competition 

Submission

URLHTTP TypeDescriptionRequest Parameters
/competition/submissionPOSTCreate a new Submission.
(and a corresponding SubmissionStatus object)
userId (String)
/competition/submission/{submissionId}GETFetch Get a Submission 
/competition/submission/{submissionId}/statusGET

Get the status of a Submission

 
/competition/submission/{submissionId}/statusPUT

Update the status of a Submission.
Requires admin rights on the Competition

userId (String)
/competition/submission/{submissionId}DELETEDelete a Submission.
Requires admin rights on the Competition.
userId (String)
/competition/{compId}/submissionGET

Batch get Submissions for a given Competition (Paginated).
Requires admin rights on the Competition.
Can be filtered by status enum.

userId (String)
SubmissionStatusEnum (String) (optional)
/competition/{compId}/submission/countGETGet the number of Submissions for a given Competition 

Example Workflow

The following is a proposed workflow for interacting with the Competition Services. Please note that some components are still under development.

...

  1. Create a Synapse Competition
    1. Fill in details, attach relevant Synapse entities
    2. Specify access requirements
    3. Specify open/close dates
  2. Listen for Submissions (using messaging service)
    1. Download unscored Submissions
    2. Perform scoring
    3. Push scores back to each SubmissionStatus
  3. Track user participation and publish competition status/leaderboard
  4. Award achievements for user participation / success

Planned Additions

The following Competition Services features are planned but not yet implemented.

...