Difference between revisions of "API Upload Judging Score"

From zFairs Contest Management
(Created page with "== Upload Judging Scores == You can use our api to upload your judges scores. To do this you need to POST a message to your site. Below is an example of what needs to be poste...")
 
(Remove username/password API auth; ApiKey only)
 
(4 intermediate revisions by 3 users not shown)
Line 1: Line 1:
== Upload Judging Scores ==
+
== Upload Judging Score ==
You can use our api to upload your judges scores. To do this you need to POST a message to your site. Below is an example of what needs to be posted. You can get round Id from the get info api call, judge id, and project key are returned when a judge or project is added.  
+
Records project assessment scores for a judging round. Optionally clears existing scores for that round first.
  
 +
=== Authentication ===
 +
All data API calls are <code>POST</code> (unless noted) with JSON body:
 +
 +
{| class="wikitable"
 +
|-
 +
! Field !! Required !! Description
 +
|-
 +
| <code>ApiKey</code> || Yes || Private API key for your site.
 +
|-
 +
| <code>FairId</code> || Yes || Fair GUID from the site URL (<code>f</code> query parameter).
 +
|-
 +
| <code>Body</code> || Depends || Request payload. Use <code>{}</code> when no body fields are needed.
 +
|}
 +
 +
 +
Calls must be run '''server-side''' — do not expose your API key in a browser.
 +
 +
=== Response envelope ===
 +
Most endpoints return:
 +
 +
<pre>
 +
{
 +
  Success: true,
 +
  Message: null,  // error text when Success is false
 +
  Body: { ... }    // endpoint-specific payload
 +
}
 +
</pre>
 +
 +
 +
=== Request ===
 
<syntaxhighlight lang="JavaScript" line>
 
<syntaxhighlight lang="JavaScript" line>
 
 
fetch('/api/data/JudgingScores', {
 
fetch('/api/data/JudgingScores', {
 
     method:'POST',
 
     method:'POST',
 
     headers:{'Content-Type': 'application/json'},
 
     headers:{'Content-Type': 'application/json'},
 
     body: JSON.stringify({
 
     body: JSON.stringify({
             Username:'admin username',
+
             ApiKey:'<Private key>',
            Password: 'password',
+
             FairId: '9df61f13-474b-442f-ac1f-edca7348ef71', // value of f in your URL
             FairId: '9df61f13-474b-442f-ac1f-edca7348ef71', //This value can be found in your url it's the value of f
 
 
             Body: {
 
             Body: {
RoundId: 123,
+
RoundId: 2,
Assignments:[{
+
ClearOldScores: true,
ProjectKey: 'e381c719-d7fc-471a-b50c-fe51747652e4',
+
Assignments: [
JudgeId: '674907d1-60db-443b-b3c9-4755564c94a9',
+
{
Score: 98.2
+
ProjectKey: "32161f13-474b-442f-ac1f-edca7348e000",
},
+
JudgeId: "judge-public-guid",
...
+
Score: 95.5,
 +
Notes: "Strong methodology"
 +
}
 
]
 
]
            }
+
}
 
         })
 
         })
 
})
 
})
Line 26: Line 56:
 
.then(data=>{console.log('Success: ',data);})
 
.then(data=>{console.log('Success: ',data);})
 
.catch((error)=>{console.log('Error: ', error);});
 
.catch((error)=>{console.log('Error: ', error);});
 +
</syntaxhighlight>
 +
 +
=== Response ===
 +
On success:
 +
 +
<pre>
 +
{
 +
  Success: true,
 +
  Message: "Assignment count: 1\n...",  // processing log; unknown judge/project lines
 +
  Body: null
 +
}
 +
</pre>
 +
 +
 +
=== Field notes ===
 +
* Empty scores returns: <code>No scores to set</code>.
 +
* Notes default to <code>Loaded by API</code> when omitted.
 +
* For reading scores back for a round, POST to <code>/api/data/JudgingScoresForRound</code> with <code>Body.RoundId</code> (see [[API Judging Scores]]).
 +
 +
 +
=== Related APIs ===
 +
* [[API Judging Scores]]
 +
* [[API Set Judging Assignments]]
 +
* [[API Get Judges]] / [[API Get Projects]] / [[API Get Info]]
  
</syntaxhighlight>
 
  
* Note that all scores in this round will be cleared, prior to setting these new assignments.
+
<br/><br/>
 +
[[Category: API]]

Latest revision as of 12:55, 25 July 2026

Upload Judging Score

Records project assessment scores for a judging round. Optionally clears existing scores for that round first.

Authentication

All data API calls are POST (unless noted) with JSON body:

Field Required Description
ApiKey Yes Private API key for your site.
FairId Yes Fair GUID from the site URL (f query parameter).
Body Depends Request payload. Use {} when no body fields are needed.


Calls must be run server-side — do not expose your API key in a browser.

Response envelope

Most endpoints return:

{
  Success: true,
  Message: null,   // error text when Success is false
  Body: { ... }    // endpoint-specific payload
}


Request

fetch('/api/data/JudgingScores', {
    method:'POST',
    headers:{'Content-Type': 'application/json'},
    body: JSON.stringify({
            ApiKey:'<Private key>',
            FairId: '9df61f13-474b-442f-ac1f-edca7348ef71', // value of f in your URL
            Body: {
				RoundId: 2,
				ClearOldScores: true,
				Assignments: [
					{
						ProjectKey: "32161f13-474b-442f-ac1f-edca7348e000",
						JudgeId: "judge-public-guid",
						Score: 95.5,
						Notes: "Strong methodology"
					}
				]
			}
        })
})
.then(response => response.json())
.then(data=>{console.log('Success: ',data);})
.catch((error)=>{console.log('Error: ', error);});

Response

On success:

{
  Success: true,
  Message: "Assignment count: 1\n...",  // processing log; unknown judge/project lines
  Body: null
}


Field notes

  • Empty scores returns: No scores to set.
  • Notes default to Loaded by API when omitted.
  • For reading scores back for a round, POST to /api/data/JudgingScoresForRound with Body.RoundId (see API Judging Scores).


Related APIs