Pref
Gets a paginated list of Preference signups for the calling organisation(s), sorted by id. Archived signups are added when includeArchived is true; search filters on the signup name.
Type "Bearer" followed by a space and a token.
OK
Bad Request
Not Found
Internal Server Error
GET /api/v1/CcaSignUp/Pref HTTP/1.1
Host: publicapi-eu.schoolsbuddy.net
Authorization: YOUR_API_KEY
Accept: */*
{
"isSuccess": true,
"errors": [
"text"
],
"messageTranslationParameters": null,
"data": [
{
"id": 1,
"organisationId": 1,
"containerTypeId": 1,
"preferenceTypeId": 1,
"preferenceSelectionScope": "Daily",
"eventCategoryId": 1,
"name": "text",
"description": "text",
"activitiesStartDate": "2026-01-01",
"activitiesEndDate": "2026-01-01",
"activitiesDefaultStartTime": "16:00:00",
"activitiesDefaultEndTime": "16:00:00",
"responsibilityForConfirmation": "None",
"signupOpens": "2026-01-01T00:00:00.000Z",
"signupCloses": "2026-01-01T00:00:00.000Z",
"useOrganisationBlockDates": true,
"termsAndConditions": "text",
"additionalInfoUrl": "text",
"isArchived": true,
"timeZone": "text",
"createdAtUtc": "2026-01-01T00:00:00.000Z",
"updatedAtUtc": "2026-01-01T00:00:00.000Z"
}
],
"pageNumber": 1,
"pageSize": 1,
"firstPage": "https://example.com",
"lastPage": "https://example.com",
"totalPages": 1,
"totalRecords": 1,
"nextPage": "https://example.com",
"previousPage": "https://example.com",
"baseUri": "https://example.com",
"searchParameters": [
{
"key": "text",
"value": "text"
}
]
}Creates a Preference signup. The container type and the preference type are both derived from the URL — the server always creates Preference rows. preferenceSelectionScope chooses whether a pupil's 1-5 ranking restarts each day (Daily, the default) or runs across the whole week (Weekly); it accepts the name or its ordinal. The signup always starts unarchived. The name must be unique among the organisation's active signups.
Type "Bearer" followed by a space and a token.
The organisation to create the signup in — required when the client has access to multiple organisations
16:00:0016:00:00Created
16:00:0016:00:00Bad Request
Not Found
Internal Server Error
POST /api/v1/CcaSignUp/Pref HTTP/1.1
Host: publicapi-eu.schoolsbuddy.net
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 414
{
"name": "text",
"description": "text",
"preferenceSelectionScope": "Daily",
"eventCategoryId": 1,
"activitiesStartDate": "2026-01-01",
"activitiesEndDate": "2026-01-01",
"activitiesDefaultStartTime": "16:00:00",
"activitiesDefaultEndTime": "16:00:00",
"responsibilityForConfirmation": "None",
"signupOpens": "2026-01-01T00:00:00.000Z",
"signupCloses": "2026-01-01T00:00:00.000Z",
"termsAndConditions": "text",
"additionalInfoUrl": "text"
}{
"id": 1,
"organisationId": 1,
"containerTypeId": 1,
"preferenceTypeId": 1,
"preferenceSelectionScope": "Daily",
"eventCategoryId": 1,
"name": "text",
"description": "text",
"activitiesStartDate": "2026-01-01",
"activitiesEndDate": "2026-01-01",
"activitiesDefaultStartTime": "16:00:00",
"activitiesDefaultEndTime": "16:00:00",
"responsibilityForConfirmation": "None",
"signupOpens": "2026-01-01T00:00:00.000Z",
"signupCloses": "2026-01-01T00:00:00.000Z",
"useOrganisationBlockDates": true,
"termsAndConditions": "text",
"additionalInfoUrl": "text",
"isArchived": true,
"timeZone": "text",
"createdAtUtc": "2026-01-01T00:00:00.000Z",
"updatedAtUtc": "2026-01-01T00:00:00.000Z"
}Gets a single Preference signup by id. Archived signups — and signups of any other container type (Instant Book & Pay, PTC) — return 404 CCASIGNUP_NOT_FOUND.
Type "Bearer" followed by a space and a token.
The signup id (CcaSignUp.CcaSignUpId)
The organisation to look the signup up in — required when the client has access to multiple organisations
OK
16:00:0016:00:00Bad Request
Not Found
Internal Server Error
GET /api/v1/CcaSignUp/Pref/{id} HTTP/1.1
Host: publicapi-eu.schoolsbuddy.net
Authorization: YOUR_API_KEY
Accept: */*
{
"id": 1,
"organisationId": 1,
"containerTypeId": 1,
"preferenceTypeId": 1,
"preferenceSelectionScope": "Daily",
"eventCategoryId": 1,
"name": "text",
"description": "text",
"activitiesStartDate": "2026-01-01",
"activitiesEndDate": "2026-01-01",
"activitiesDefaultStartTime": "16:00:00",
"activitiesDefaultEndTime": "16:00:00",
"responsibilityForConfirmation": "None",
"signupOpens": "2026-01-01T00:00:00.000Z",
"signupCloses": "2026-01-01T00:00:00.000Z",
"useOrganisationBlockDates": true,
"termsAndConditions": "text",
"additionalInfoUrl": "text",
"isArchived": true,
"timeZone": "text",
"createdAtUtc": "2026-01-01T00:00:00.000Z",
"updatedAtUtc": "2026-01-01T00:00:00.000Z"
}Partially updates a Preference signup — omitted fields preserve their existing values (§3.7e). The URL {id} is the canonical identifier; the body carries no id. The signup's archive state cannot be changed here: it follows its groups — archiving the last live group archives the signup, unarchiving any group re-activates it. Any write against an archived signup returns 409 RESOURCE_ARCHIVED.
Type "Bearer" followed by a space and a token.
The signup id (CcaSignUp.CcaSignUpId)
The organisation the signup belongs to — required when the client has access to multiple organisations
16:00:0016:00:00OK
16:00:0016:00:00Bad Request
Not Found
Internal Server Error
PUT /api/v1/CcaSignUp/Pref/{id} HTTP/1.1
Host: publicapi-eu.schoolsbuddy.net
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 414
{
"name": "text",
"description": "text",
"preferenceSelectionScope": "Daily",
"eventCategoryId": 1,
"activitiesStartDate": "2026-01-01",
"activitiesEndDate": "2026-01-01",
"activitiesDefaultStartTime": "16:00:00",
"activitiesDefaultEndTime": "16:00:00",
"responsibilityForConfirmation": "None",
"signupOpens": "2026-01-01T00:00:00.000Z",
"signupCloses": "2026-01-01T00:00:00.000Z",
"termsAndConditions": "text",
"additionalInfoUrl": "text"
}{
"id": 1,
"organisationId": 1,
"containerTypeId": 1,
"preferenceTypeId": 1,
"preferenceSelectionScope": "Daily",
"eventCategoryId": 1,
"name": "text",
"description": "text",
"activitiesStartDate": "2026-01-01",
"activitiesEndDate": "2026-01-01",
"activitiesDefaultStartTime": "16:00:00",
"activitiesDefaultEndTime": "16:00:00",
"responsibilityForConfirmation": "None",
"signupOpens": "2026-01-01T00:00:00.000Z",
"signupCloses": "2026-01-01T00:00:00.000Z",
"useOrganisationBlockDates": true,
"termsAndConditions": "text",
"additionalInfoUrl": "text",
"isArchived": true,
"timeZone": "text",
"createdAtUtc": "2026-01-01T00:00:00.000Z",
"updatedAtUtc": "2026-01-01T00:00:00.000Z"
}Gets a paginated list of a Preference signup's child groups, sorted by id. Archived groups are added when includeArchived is true. The sub-resource list has no search parameter (locked 2026-06-23). The parent may be archived — its groups stay listable so callers can find the ids to unarchive.
Type "Bearer" followed by a space and a token.
The parent signup id (CcaSignUp.CcaSignUpId)
OK
Bad Request
Not Found
Internal Server Error
GET /api/v1/CcaSignUp/Pref/{id}/groups HTTP/1.1
Host: publicapi-eu.schoolsbuddy.net
Authorization: YOUR_API_KEY
Accept: */*
{
"isSuccess": true,
"errors": [
"text"
],
"messageTranslationParameters": null,
"data": [
{
"id": 1,
"organisationId": 1,
"groupName": "text",
"description": "text",
"groupCode": "text",
"billingCode": "text",
"leadStaffId": 1,
"staffIds": [
1
],
"activityId": 1,
"showInSportsPortal": true,
"locationId": 1,
"informationOnly": true,
"day1": "Monday",
"day1StartTime": "16:00:00",
"day1EndTime": "16:00:00",
"day2": "Monday",
"day2StartTime": "16:00:00",
"day2EndTime": "16:00:00",
"maximumPlaces": 1,
"minimumPlaces": 1,
"cost": 1,
"costType": "FreeOfCharge",
"joinRequestsOn": true,
"availableTo": [
{
"id": 1,
"type": "Group"
}
],
"preRequisite": [
{
"id": 1,
"type": "Group"
}
],
"notAvailableTo": [
{
"id": 1,
"type": "Group"
}
],
"genderAvailableTo": "Female",
"taxCode": "text",
"shortName": "text",
"isArchived": true,
"timeZone": "text",
"createdAtUtc": "2026-01-01T00:00:00.000Z",
"updatedAtUtc": "2026-01-01T00:00:00.000Z"
}
],
"pageNumber": 1,
"pageSize": 1,
"firstPage": "https://example.com",
"lastPage": "https://example.com",
"totalPages": 1,
"totalRecords": 1,
"nextPage": "https://example.com",
"previousPage": "https://example.com",
"baseUri": "https://example.com",
"searchParameters": [
{
"key": "text",
"value": "text"
}
]
}Creates a child group under a Preference signup. The parent signup must exist as a Preference signup (404 CCASIGNUP_NOT_FOUND) and must not be archived (409 RESOURCE_ARCHIVED — unarchive one of its groups first, which re-activates the signup). The day1 triple (day1, day1StartTime, day1EndTime) is required; supplying the day2 triple adds a second weekly session. Day times are organisation-local and are interpreted via the timeZone on the response. costType is derived from cost and is ignored if sent. joinRequestsOn defaults to true when omitted. The group always starts unarchived.
Type "Bearer" followed by a space and a token.
The parent signup id (CcaSignUp.CcaSignUpId)
The organisation the signup belongs to — required when the client has access to multiple organisations
16:00:0016:00:0016:00:0016:00:00Created
16:00:0016:00:0016:00:0016:00:00Bad Request
Not Found
Internal Server Error
POST /api/v1/CcaSignUp/Pref/{id}/groups HTTP/1.1
Host: publicapi-eu.schoolsbuddy.net
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 583
{
"groupName": "text",
"description": "text",
"groupCode": "text",
"billingCode": "text",
"leadStaffId": 1,
"staffIds": [
1
],
"activityId": 1,
"showInSportsPortal": true,
"locationId": 1,
"informationOnly": true,
"day1": "Monday",
"day1StartTime": "16:00:00",
"day1EndTime": "16:00:00",
"day2": "Monday",
"day2StartTime": "16:00:00",
"day2EndTime": "16:00:00",
"maximumPlaces": 1,
"minimumPlaces": 1,
"cost": 1,
"joinRequestsOn": true,
"availableTo": [
{
"id": 1,
"type": "Group"
}
],
"preRequisite": [
{
"id": 1,
"type": "Group"
}
],
"notAvailableTo": [
{
"id": 1,
"type": "Group"
}
],
"genderAvailableTo": "Female",
"taxCode": "text",
"shortName": "text"
}{
"id": 1,
"organisationId": 1,
"groupName": "text",
"description": "text",
"groupCode": "text",
"billingCode": "text",
"leadStaffId": 1,
"staffIds": [
1
],
"activityId": 1,
"showInSportsPortal": true,
"locationId": 1,
"informationOnly": true,
"day1": "Monday",
"day1StartTime": "16:00:00",
"day1EndTime": "16:00:00",
"day2": "Monday",
"day2StartTime": "16:00:00",
"day2EndTime": "16:00:00",
"maximumPlaces": 1,
"minimumPlaces": 1,
"cost": 1,
"costType": "FreeOfCharge",
"joinRequestsOn": true,
"availableTo": [
{
"id": 1,
"type": "Group"
}
],
"preRequisite": [
{
"id": 1,
"type": "Group"
}
],
"notAvailableTo": [
{
"id": 1,
"type": "Group"
}
],
"genderAvailableTo": "Female",
"taxCode": "text",
"shortName": "text",
"isArchived": true,
"timeZone": "text",
"createdAtUtc": "2026-01-01T00:00:00.000Z",
"updatedAtUtc": "2026-01-01T00:00:00.000Z"
}Partially updates a child group under a Preference signup — omitted fields preserve their existing values (§3.7e). Each day triple is atomic: send all three of its fields to change that session, or none to leave it as it is (omitting them does not clear the session). cost re-derives costType only when it is present and non-null. For the availableTo / preRequisite / notAvailableTo lists an omitted field preserves the stored set while an empty array clears it. Setting isArchived = true archives the group — rejected with 409 CCASIGNUP_ARCHIVE_BLOCKED_ACTIVE while the group has future events; archiving the LAST live group also archives the signup. Sending isArchived = false unarchives an archived group (EC-1 as amended 2026-07-31, never blocked) and re-activates an archived signup — subject to the signup's NAME_NOT_UNIQUE unarchive-into-collision guard; any other write against an archived group returns 409 RESOURCE_ARCHIVED.
Type "Bearer" followed by a space and a token.
The parent signup id (CcaSignUp.CcaSignUpId)
The child group id (Team.Id)
The organisation the signup belongs to — required when the client has access to multiple organisations
16:00:0016:00:0016:00:0016:00:00OK
16:00:0016:00:0016:00:0016:00:00Bad Request
Not Found
Internal Server Error
PUT /api/v1/CcaSignUp/Pref/{id}/groups/{groupId} HTTP/1.1
Host: publicapi-eu.schoolsbuddy.net
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 601
{
"groupName": "text",
"description": "text",
"groupCode": "text",
"billingCode": "text",
"leadStaffId": 1,
"staffIds": [
1
],
"activityId": 1,
"showInSportsPortal": true,
"locationId": 1,
"informationOnly": true,
"day1": "Monday",
"day1StartTime": "16:00:00",
"day1EndTime": "16:00:00",
"day2": "Monday",
"day2StartTime": "16:00:00",
"day2EndTime": "16:00:00",
"maximumPlaces": 1,
"minimumPlaces": 1,
"cost": 1,
"joinRequestsOn": true,
"availableTo": [
{
"id": 1,
"type": "Group"
}
],
"preRequisite": [
{
"id": 1,
"type": "Group"
}
],
"notAvailableTo": [
{
"id": 1,
"type": "Group"
}
],
"genderAvailableTo": "Female",
"taxCode": "text",
"shortName": "text",
"isArchived": true
}{
"id": 1,
"organisationId": 1,
"groupName": "text",
"description": "text",
"groupCode": "text",
"billingCode": "text",
"leadStaffId": 1,
"staffIds": [
1
],
"activityId": 1,
"showInSportsPortal": true,
"locationId": 1,
"informationOnly": true,
"day1": "Monday",
"day1StartTime": "16:00:00",
"day1EndTime": "16:00:00",
"day2": "Monday",
"day2StartTime": "16:00:00",
"day2EndTime": "16:00:00",
"maximumPlaces": 1,
"minimumPlaces": 1,
"cost": 1,
"costType": "FreeOfCharge",
"joinRequestsOn": true,
"availableTo": [
{
"id": 1,
"type": "Group"
}
],
"preRequisite": [
{
"id": 1,
"type": "Group"
}
],
"notAvailableTo": [
{
"id": 1,
"type": "Group"
}
],
"genderAvailableTo": "Female",
"taxCode": "text",
"shortName": "text",
"isArchived": true,
"timeZone": "text",
"createdAtUtc": "2026-01-01T00:00:00.000Z",
"updatedAtUtc": "2026-01-01T00:00:00.000Z"
}Creates child groups under a Preference signup in bulk. The parent signup gates the whole request (validated before any per-item work); items are then processed independently.
Type "Bearer" followed by a space and a token.
The parent signup id (CcaSignUp.CcaSignUpId)
Request body for POST /api/v1/CcaSignUp/Pref/{id}/groups/BulkCreate (SB-15666). The parent signup id in the URL gates the whole request (CCASIGNUP_NOT_FOUND, validated before any per-item work — closes SB-15244 / SB-15245).
Gets or sets the organisation the batch operates on. Optional when the calling client has access to a single organisation; required for multi-org clients.
OK
Standard envelope returned by every Public API bulk endpoint (BulkCreate / BulkUpdate / BulkArchive). Each item in the request is processed independently — one item failing does not roll back the others — and the envelope reports per-item outcome. See cross-cutting-design.md §4.
Gets or sets the ids of the items that were processed successfully. On BulkCreate these are the newly-created ids.
Gets or sets the total number of items in the request. Set by the caller (it is not derivable from the success/failure lists alone — items rejected before per-item processing may appear in neither).
Gets the number of items processed successfully (computed).
Gets the number of items that failed (computed).
Bad Request
Not Found
Internal Server Error
POST /api/v1/CcaSignUp/Pref/{id}/groups/BulkCreate HTTP/1.1
Host: publicapi-eu.schoolsbuddy.net
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 641
{
"organisationId": 1,
"items": [
{
"groupName": "text",
"description": "text",
"groupCode": "text",
"billingCode": "text",
"leadStaffId": 1,
"staffIds": [
1
],
"activityId": 1,
"showInSportsPortal": true,
"locationId": 1,
"informationOnly": true,
"day1": "Monday",
"day1StartTime": "16:00:00",
"day1EndTime": "16:00:00",
"day2": "Monday",
"day2StartTime": "16:00:00",
"day2EndTime": "16:00:00",
"maximumPlaces": 1,
"minimumPlaces": 1,
"cost": 1,
"joinRequestsOn": true,
"availableTo": [
{
"id": 1,
"type": "Group"
}
],
"preRequisite": [
{
"id": 1,
"type": "Group"
}
],
"notAvailableTo": [
{
"id": 1,
"type": "Group"
}
],
"genderAvailableTo": "Female",
"taxCode": "text",
"shortName": "text",
"clientReferenceId": "text"
}
]
}{
"successfulIds": [
1
],
"failedItems": [
{
"index": 1,
"clientReferenceId": "text",
"name": "text",
"code": "text",
"error": "text"
}
],
"totalRequested": 1,
"totalSuccessful": 1,
"totalFailed": 1
}Partially updates child groups under a Preference signup in bulk. The parent signup gates the whole request (validated before any per-item work); each item carries the target group id and items are processed independently. Day-triple, cost and archive semantics per item match the single-resource PUT.
Type "Bearer" followed by a space and a token.
The parent signup id (CcaSignUp.CcaSignUpId)
Request body for PUT /api/v1/CcaSignUp/Pref/{id}/groups/BulkUpdate (SB-15666). The parent signup id in the URL gates the whole request (CCASIGNUP_NOT_FOUND, validated before any per-item work); each item carries its target group Id (EC-7).
Gets or sets the organisation the batch operates on. Optional when the calling client has access to a single organisation; required for multi-org clients.
OK
Standard envelope returned by every Public API bulk endpoint (BulkCreate / BulkUpdate / BulkArchive). Each item in the request is processed independently — one item failing does not roll back the others — and the envelope reports per-item outcome. See cross-cutting-design.md §4.
Gets or sets the ids of the items that were processed successfully. On BulkCreate these are the newly-created ids.
Gets or sets the total number of items in the request. Set by the caller (it is not derivable from the success/failure lists alone — items rejected before per-item processing may appear in neither).
Gets the number of items processed successfully (computed).
Gets the number of items that failed (computed).
Bad Request
Not Found
Internal Server Error
PUT /api/v1/CcaSignUp/Pref/{id}/groups/BulkUpdate HTTP/1.1
Host: publicapi-eu.schoolsbuddy.net
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 666
{
"organisationId": 1,
"items": [
{
"groupName": "text",
"description": "text",
"groupCode": "text",
"billingCode": "text",
"leadStaffId": 1,
"staffIds": [
1
],
"activityId": 1,
"showInSportsPortal": true,
"locationId": 1,
"informationOnly": true,
"day1": "Monday",
"day1StartTime": "16:00:00",
"day1EndTime": "16:00:00",
"day2": "Monday",
"day2StartTime": "16:00:00",
"day2EndTime": "16:00:00",
"maximumPlaces": 1,
"minimumPlaces": 1,
"cost": 1,
"joinRequestsOn": true,
"availableTo": [
{
"id": 1,
"type": "Group"
}
],
"preRequisite": [
{
"id": 1,
"type": "Group"
}
],
"notAvailableTo": [
{
"id": 1,
"type": "Group"
}
],
"genderAvailableTo": "Female",
"taxCode": "text",
"shortName": "text",
"isArchived": true,
"id": 1,
"clientReferenceId": "text"
}
]
}{
"successfulIds": [
1
],
"failedItems": [
{
"index": 1,
"clientReferenceId": "text",
"name": "text",
"code": "text",
"error": "text"
}
],
"totalRequested": 1,
"totalSuccessful": 1,
"totalFailed": 1
}Archives or unarchives child groups under a Preference signup in bulk (toggleable via the isArchived body flag). Archiving is rejected per item (CCASIGNUP_ARCHIVE_BLOCKED_ACTIVE) while a group has future events; archiving the LAST live group also archives the signup. Unarchiving is never blocked and re-activates an archived signup — subject to the signup's NAME_NOT_UNIQUE unarchive-into-collision guard. Alongside PUT / BulkUpdate items carrying isArchived = false, the write verbs allowed against already-archived groups (EC-1 as amended 2026-07-31).
Type "Bearer" followed by a space and a token.
The parent signup id (CcaSignUp.CcaSignUpId)
Request body for POST /api/v1/CcaSignUp/Pref/{id}/groups/BulkArchive (SB-15666, mirroring SB-15665 §10 C3). Toggleable: isArchived true archives each group (Team.StatusId = Archive) — blocked per item with CCASIGNUP_ARCHIVE_BLOCKED_ACTIVE while the group has future events (§10 D2); false unarchives (StatusId = Active, never blocked). The container cascade runs per item: archiving the last live group archives the container (CcaSignUp.Status = 4); unarchiving any group re-activates it. The parent signup id in the URL gates the whole request (CCASIGNUP_NOT_FOUND, validated before any per-item work) — an ARCHIVED parent is allowed here, since unarchiving a group is the container's recovery path (§10 D5).
Gets or sets the organisation the batch operates on. Optional when the calling client has access to a single organisation; required for multi-org clients.
Gets or sets the ids (Team.Id) of the child groups to transition. Id validity is checked per item (EC-7) — 0 / negative ids fail that item only.
Gets or sets a value indicating whether the groups are archived (true, default) or unarchived (false).
OK
Standard envelope returned by every Public API bulk endpoint (BulkCreate / BulkUpdate / BulkArchive). Each item in the request is processed independently — one item failing does not roll back the others — and the envelope reports per-item outcome. See cross-cutting-design.md §4.
Gets or sets the ids of the items that were processed successfully. On BulkCreate these are the newly-created ids.
Gets or sets the total number of items in the request. Set by the caller (it is not derivable from the success/failure lists alone — items rejected before per-item processing may appear in neither).
Gets the number of items processed successfully (computed).
Gets the number of items that failed (computed).
Bad Request
Not Found
Internal Server Error
POST /api/v1/CcaSignUp/Pref/{id}/groups/BulkArchive HTTP/1.1
Host: publicapi-eu.schoolsbuddy.net
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 48
{
"organisationId": 1,
"ids": [
1
],
"isArchived": true
}{
"successfulIds": [
1
],
"failedItems": [
{
"index": 1,
"clientReferenceId": "text",
"name": "text",
"code": "text",
"error": "text"
}
],
"totalRequested": 1,
"totalSuccessful": 1,
"totalFailed": 1
}Last updated