Upload an attendance workbook
Requires participation_configure, programs_view and access to this organization’s program, with participation enabled. Accepts a private CSV/XLSX file up to20MiB and an existing program participation period. Inspects up to12 sample rows per sheet for mapping. Workbook bounds are100 sheets,100000 source rows,512 columns and2000000 expanded cells. A matching organization-wide upload idempotency key returns the original batch with HTTP200; reuse for another program/period returns422. Upload does not create participation checks. Requires permission: one of participation_configure.
curl --request POST \
--url https://api.gratona.com/v1/admin/programs/{program_id}/participation/imports \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form file=@example-file \
--form participation_period_id=18 \
--form idempotency_key=attendance-upload-2026-10-20import requests
url = "https://api.gratona.com/v1/admin/programs/{program_id}/participation/imports"
files = { "file": ("example-file", open("example-file", "rb")) }
payload = {
"participation_period_id": "18",
"idempotency_key": "attendance-upload-2026-10-20"
}
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('file', '<string>');
form.append('participation_period_id', '18');
form.append('idempotency_key', 'attendance-upload-2026-10-20');
const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
options.body = form;
fetch('https://api.gratona.com/v1/admin/programs/{program_id}/participation/imports', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.gratona.com/v1/admin/programs/{program_id}/participation/imports",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"participation_period_id\"\r\n\r\n18\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"idempotency_key\"\r\n\r\nattendance-upload-2026-10-20\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: multipart/form-data"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.gratona.com/v1/admin/programs/{program_id}/participation/imports"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"participation_period_id\"\r\n\r\n18\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"idempotency_key\"\r\n\r\nattendance-upload-2026-10-20\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.gratona.com/v1/admin/programs/{program_id}/participation/imports")
.header("Authorization", "Bearer <token>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"participation_period_id\"\r\n\r\n18\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"idempotency_key\"\r\n\r\nattendance-upload-2026-10-20\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/admin/programs/{program_id}/participation/imports")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"participation_period_id\"\r\n\r\n18\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"idempotency_key\"\r\n\r\nattendance-upload-2026-10-20\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"id": 42,
"program_id": 12,
"participation_period_id": 18,
"original_filename": "attendance.xlsx",
"source_type": "xlsx",
"status": "review",
"progress": 100,
"mapping": {
"evidence_source": "official_record",
"existing_session_action": "block",
"symbols": {},
"sheets": [
{
"sheet": "Sheet1",
"header_row": 1,
"columns": {
"name": 0,
"gratona_id": 0,
"student_id": 0,
"gender": 0
},
"site": {
"fixed_id": 42,
"column": 0,
"value_map": {}
},
"cohort": {
"fixed_id": 42,
"column": 0,
"value_map": {}
},
"attendance_columns": [
{
"column": 4,
"date": "2026-10-20"
}
],
"enabled": true,
"profile_columns": {}
}
],
"external_student_id_field_key": "student_id",
"gender_field_key": "gender"
},
"inspection": [
{
"name": "Sheet1",
"suggested_header_row": 1,
"columns": [
{
"index": 0,
"letter": "A"
}
],
"sample_rows": [
{
"row_number": 2,
"values": [
"Jane Recipient"
]
}
]
}
],
"summary": {
"total_rows": 1,
"ready_rows": 1,
"review_rows": 1,
"blocked_rows": 1,
"unresolved_rows": 1,
"committed_rows": 1,
"skipped_rows": 1,
"exact_id_matches": 1,
"provisional_rows": 1,
"estimated_rows": 1,
"maximum_rows": 1
},
"validation_errors": [
{
"sheet": "Sheet1",
"row": 2,
"date": "2026-10-20",
"codes": [
"placement_conflict"
]
}
],
"error_message": "The attendance file could not be validated. Review the mapping and retry.",
"failure_stage": "validation",
"can_commit": true,
"can_void": false,
"created_at": "2026-10-20T12:00:00Z",
"completed_at": "2026-10-20T12:05:00Z",
"voided_at": "2023-11-07T05:31:56Z",
"void_reason": "Imported the incorrect workbook.",
"created_checks": [
{
"id": 120,
"scheduled_for": "2026-10-20",
"status": "submitted",
"revision": 1,
"site": {
"id": 12,
"name": "Main campus"
},
"cohort": {
"id": 12,
"name": "Main campus"
},
"counts": {
"expected": 25,
"seen": 23,
"unresolved": 2
}
}
],
"rows": {
"items": [
{
"id": 84,
"sheet": "Sheet1",
"source_row_number": 2,
"attendance_date": "2026-10-20",
"display_name": "Jane Recipient",
"gratona_id": "42",
"external_student_id": "STU-001",
"site_id": 12,
"cohort_id": 18,
"site_source_value": "Main campus",
"cohort_source_value": "Group A",
"symbol": "P",
"encounter_status": "seen",
"enrollment_confirmation": "confirmed_enrolled",
"match_type": "suggested_candidate",
"decision": "match",
"status": "review",
"entity_id": 42,
"candidates": [
{
"entity_id": 42,
"gratona_id": 42,
"display_name": "Jane Recipient",
"site_id": 12,
"cohort_id": 18,
"score": 95,
"agreed": [
"name"
],
"conflicted": [
"gender"
]
}
],
"errors": [
"placement_conflict"
],
"warnings": [
"candidate_confirmation_required"
],
"participation_session_id": 120
}
],
"total": 25,
"current_page": 1,
"per_page": 50,
"last_page": 1
},
"recipient_fields": [
{
"key": "student_id",
"label": "Student ID",
"type": "hysCustomID",
"is_title": false
}
]
}{
"id": 42,
"program_id": 12,
"participation_period_id": 18,
"original_filename": "attendance.xlsx",
"source_type": "xlsx",
"status": "review",
"progress": 100,
"mapping": {
"evidence_source": "official_record",
"existing_session_action": "block",
"symbols": {},
"sheets": [
{
"sheet": "Sheet1",
"header_row": 1,
"columns": {
"name": 0,
"gratona_id": 0,
"student_id": 0,
"gender": 0
},
"site": {
"fixed_id": 42,
"column": 0,
"value_map": {}
},
"cohort": {
"fixed_id": 42,
"column": 0,
"value_map": {}
},
"attendance_columns": [
{
"column": 4,
"date": "2026-10-20"
}
],
"enabled": true,
"profile_columns": {}
}
],
"external_student_id_field_key": "student_id",
"gender_field_key": "gender"
},
"inspection": [
{
"name": "Sheet1",
"suggested_header_row": 1,
"columns": [
{
"index": 0,
"letter": "A"
}
],
"sample_rows": [
{
"row_number": 2,
"values": [
"Jane Recipient"
]
}
]
}
],
"summary": {
"total_rows": 1,
"ready_rows": 1,
"review_rows": 1,
"blocked_rows": 1,
"unresolved_rows": 1,
"committed_rows": 1,
"skipped_rows": 1,
"exact_id_matches": 1,
"provisional_rows": 1,
"estimated_rows": 1,
"maximum_rows": 1
},
"validation_errors": [
{
"sheet": "Sheet1",
"row": 2,
"date": "2026-10-20",
"codes": [
"placement_conflict"
]
}
],
"error_message": "The attendance file could not be validated. Review the mapping and retry.",
"failure_stage": "validation",
"can_commit": true,
"can_void": false,
"created_at": "2026-10-20T12:00:00Z",
"completed_at": "2026-10-20T12:05:00Z",
"voided_at": "2023-11-07T05:31:56Z",
"void_reason": "Imported the incorrect workbook.",
"created_checks": [
{
"id": 120,
"scheduled_for": "2026-10-20",
"status": "submitted",
"revision": 1,
"site": {
"id": 12,
"name": "Main campus"
},
"cohort": {
"id": 12,
"name": "Main campus"
},
"counts": {
"expected": 25,
"seen": 23,
"unresolved": 2
}
}
],
"rows": {
"items": [
{
"id": 84,
"sheet": "Sheet1",
"source_row_number": 2,
"attendance_date": "2026-10-20",
"display_name": "Jane Recipient",
"gratona_id": "42",
"external_student_id": "STU-001",
"site_id": 12,
"cohort_id": 18,
"site_source_value": "Main campus",
"cohort_source_value": "Group A",
"symbol": "P",
"encounter_status": "seen",
"enrollment_confirmation": "confirmed_enrolled",
"match_type": "suggested_candidate",
"decision": "match",
"status": "review",
"entity_id": 42,
"candidates": [
{
"entity_id": 42,
"gratona_id": 42,
"display_name": "Jane Recipient",
"site_id": 12,
"cohort_id": 18,
"score": 95,
"agreed": [
"name"
],
"conflicted": [
"gender"
]
}
],
"errors": [
"placement_conflict"
],
"warnings": [
"candidate_confirmation_required"
],
"participation_session_id": 120
}
],
"total": 25,
"current_page": 1,
"per_page": 50,
"last_page": 1
},
"recipient_fields": [
{
"key": "student_id",
"label": "Student ID",
"type": "hysCustomID",
"is_title": false
}
]
}{
"message": "Unauthorized",
"status": "error"
}{
"message": "Not Found",
"status": "error"
}{
"errors": {},
"status": "error",
"message": "The given data was invalid."
}Authorizations
Passport bearer token authentication for legacy admin sessions.
Path Parameters
Program id in the current organization.
Body
Validated request fields for this operation.
CSV or XLSX attendance workbook, maximum20480KiB. MIME and extension are checked.
Existing participation period in this program.
x >= 118
Stable upload retry key; scoped across the current organization.
255"attendance-upload-2026-10-20"
Response
Original batch returned for an idempotent upload retry, including paged rows and recipient fields.
42
12
18
"attendance.xlsx"
csv, xlsx "xlsx"
pending, validating, review, processing, completed, failed, voided "review"
100
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Counts after validation; empty array before counts exist. Limit failures add estimated_rows/maximum_rows.
Show child attributes
Show child attributes
100Show child attributes
Show child attributes
"The attendance file could not be validated. Review the mapping and retry."
validation, commit, null "validation"
True only in review with zero blocked and review rows.
true
True only while completed.
false
"2026-10-20T12:00:00Z"
"2026-10-20T12:05:00Z"
"Imported the incorrect workbook."
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
curl --request POST \
--url https://api.gratona.com/v1/admin/programs/{program_id}/participation/imports \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form file=@example-file \
--form participation_period_id=18 \
--form idempotency_key=attendance-upload-2026-10-20import requests
url = "https://api.gratona.com/v1/admin/programs/{program_id}/participation/imports"
files = { "file": ("example-file", open("example-file", "rb")) }
payload = {
"participation_period_id": "18",
"idempotency_key": "attendance-upload-2026-10-20"
}
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('file', '<string>');
form.append('participation_period_id', '18');
form.append('idempotency_key', 'attendance-upload-2026-10-20');
const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
options.body = form;
fetch('https://api.gratona.com/v1/admin/programs/{program_id}/participation/imports', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.gratona.com/v1/admin/programs/{program_id}/participation/imports",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"participation_period_id\"\r\n\r\n18\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"idempotency_key\"\r\n\r\nattendance-upload-2026-10-20\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: multipart/form-data"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.gratona.com/v1/admin/programs/{program_id}/participation/imports"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"participation_period_id\"\r\n\r\n18\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"idempotency_key\"\r\n\r\nattendance-upload-2026-10-20\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.gratona.com/v1/admin/programs/{program_id}/participation/imports")
.header("Authorization", "Bearer <token>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"participation_period_id\"\r\n\r\n18\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"idempotency_key\"\r\n\r\nattendance-upload-2026-10-20\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/admin/programs/{program_id}/participation/imports")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"participation_period_id\"\r\n\r\n18\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"idempotency_key\"\r\n\r\nattendance-upload-2026-10-20\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"id": 42,
"program_id": 12,
"participation_period_id": 18,
"original_filename": "attendance.xlsx",
"source_type": "xlsx",
"status": "review",
"progress": 100,
"mapping": {
"evidence_source": "official_record",
"existing_session_action": "block",
"symbols": {},
"sheets": [
{
"sheet": "Sheet1",
"header_row": 1,
"columns": {
"name": 0,
"gratona_id": 0,
"student_id": 0,
"gender": 0
},
"site": {
"fixed_id": 42,
"column": 0,
"value_map": {}
},
"cohort": {
"fixed_id": 42,
"column": 0,
"value_map": {}
},
"attendance_columns": [
{
"column": 4,
"date": "2026-10-20"
}
],
"enabled": true,
"profile_columns": {}
}
],
"external_student_id_field_key": "student_id",
"gender_field_key": "gender"
},
"inspection": [
{
"name": "Sheet1",
"suggested_header_row": 1,
"columns": [
{
"index": 0,
"letter": "A"
}
],
"sample_rows": [
{
"row_number": 2,
"values": [
"Jane Recipient"
]
}
]
}
],
"summary": {
"total_rows": 1,
"ready_rows": 1,
"review_rows": 1,
"blocked_rows": 1,
"unresolved_rows": 1,
"committed_rows": 1,
"skipped_rows": 1,
"exact_id_matches": 1,
"provisional_rows": 1,
"estimated_rows": 1,
"maximum_rows": 1
},
"validation_errors": [
{
"sheet": "Sheet1",
"row": 2,
"date": "2026-10-20",
"codes": [
"placement_conflict"
]
}
],
"error_message": "The attendance file could not be validated. Review the mapping and retry.",
"failure_stage": "validation",
"can_commit": true,
"can_void": false,
"created_at": "2026-10-20T12:00:00Z",
"completed_at": "2026-10-20T12:05:00Z",
"voided_at": "2023-11-07T05:31:56Z",
"void_reason": "Imported the incorrect workbook.",
"created_checks": [
{
"id": 120,
"scheduled_for": "2026-10-20",
"status": "submitted",
"revision": 1,
"site": {
"id": 12,
"name": "Main campus"
},
"cohort": {
"id": 12,
"name": "Main campus"
},
"counts": {
"expected": 25,
"seen": 23,
"unresolved": 2
}
}
],
"rows": {
"items": [
{
"id": 84,
"sheet": "Sheet1",
"source_row_number": 2,
"attendance_date": "2026-10-20",
"display_name": "Jane Recipient",
"gratona_id": "42",
"external_student_id": "STU-001",
"site_id": 12,
"cohort_id": 18,
"site_source_value": "Main campus",
"cohort_source_value": "Group A",
"symbol": "P",
"encounter_status": "seen",
"enrollment_confirmation": "confirmed_enrolled",
"match_type": "suggested_candidate",
"decision": "match",
"status": "review",
"entity_id": 42,
"candidates": [
{
"entity_id": 42,
"gratona_id": 42,
"display_name": "Jane Recipient",
"site_id": 12,
"cohort_id": 18,
"score": 95,
"agreed": [
"name"
],
"conflicted": [
"gender"
]
}
],
"errors": [
"placement_conflict"
],
"warnings": [
"candidate_confirmation_required"
],
"participation_session_id": 120
}
],
"total": 25,
"current_page": 1,
"per_page": 50,
"last_page": 1
},
"recipient_fields": [
{
"key": "student_id",
"label": "Student ID",
"type": "hysCustomID",
"is_title": false
}
]
}{
"id": 42,
"program_id": 12,
"participation_period_id": 18,
"original_filename": "attendance.xlsx",
"source_type": "xlsx",
"status": "review",
"progress": 100,
"mapping": {
"evidence_source": "official_record",
"existing_session_action": "block",
"symbols": {},
"sheets": [
{
"sheet": "Sheet1",
"header_row": 1,
"columns": {
"name": 0,
"gratona_id": 0,
"student_id": 0,
"gender": 0
},
"site": {
"fixed_id": 42,
"column": 0,
"value_map": {}
},
"cohort": {
"fixed_id": 42,
"column": 0,
"value_map": {}
},
"attendance_columns": [
{
"column": 4,
"date": "2026-10-20"
}
],
"enabled": true,
"profile_columns": {}
}
],
"external_student_id_field_key": "student_id",
"gender_field_key": "gender"
},
"inspection": [
{
"name": "Sheet1",
"suggested_header_row": 1,
"columns": [
{
"index": 0,
"letter": "A"
}
],
"sample_rows": [
{
"row_number": 2,
"values": [
"Jane Recipient"
]
}
]
}
],
"summary": {
"total_rows": 1,
"ready_rows": 1,
"review_rows": 1,
"blocked_rows": 1,
"unresolved_rows": 1,
"committed_rows": 1,
"skipped_rows": 1,
"exact_id_matches": 1,
"provisional_rows": 1,
"estimated_rows": 1,
"maximum_rows": 1
},
"validation_errors": [
{
"sheet": "Sheet1",
"row": 2,
"date": "2026-10-20",
"codes": [
"placement_conflict"
]
}
],
"error_message": "The attendance file could not be validated. Review the mapping and retry.",
"failure_stage": "validation",
"can_commit": true,
"can_void": false,
"created_at": "2026-10-20T12:00:00Z",
"completed_at": "2026-10-20T12:05:00Z",
"voided_at": "2023-11-07T05:31:56Z",
"void_reason": "Imported the incorrect workbook.",
"created_checks": [
{
"id": 120,
"scheduled_for": "2026-10-20",
"status": "submitted",
"revision": 1,
"site": {
"id": 12,
"name": "Main campus"
},
"cohort": {
"id": 12,
"name": "Main campus"
},
"counts": {
"expected": 25,
"seen": 23,
"unresolved": 2
}
}
],
"rows": {
"items": [
{
"id": 84,
"sheet": "Sheet1",
"source_row_number": 2,
"attendance_date": "2026-10-20",
"display_name": "Jane Recipient",
"gratona_id": "42",
"external_student_id": "STU-001",
"site_id": 12,
"cohort_id": 18,
"site_source_value": "Main campus",
"cohort_source_value": "Group A",
"symbol": "P",
"encounter_status": "seen",
"enrollment_confirmation": "confirmed_enrolled",
"match_type": "suggested_candidate",
"decision": "match",
"status": "review",
"entity_id": 42,
"candidates": [
{
"entity_id": 42,
"gratona_id": 42,
"display_name": "Jane Recipient",
"site_id": 12,
"cohort_id": 18,
"score": 95,
"agreed": [
"name"
],
"conflicted": [
"gender"
]
}
],
"errors": [
"placement_conflict"
],
"warnings": [
"candidate_confirmation_required"
],
"participation_session_id": 120
}
],
"total": 25,
"current_page": 1,
"per_page": 50,
"last_page": 1
},
"recipient_fields": [
{
"key": "student_id",
"label": "Student ID",
"type": "hysCustomID",
"is_title": false
}
]
}{
"message": "Unauthorized",
"status": "error"
}{
"message": "Not Found",
"status": "error"
}{
"errors": {},
"status": "error",
"message": "The given data was invalid."
}