Scout Camp Developers

OAuth2

Scopes

Each scope unlocks specific endpoints. The tables below are what you pass (request) and what you get back (response). Medical and contact data can be submitted on write scopes; it is never returned.

ScopeMeaningYou pass
camp.readRead camp name, dates, and public settingsNothing. Send the bearer token only.
registration.urlsList registration URLs for groups and sectionsNothing. Send the bearer token only.
registration.submitSubmit young person or leader registration formsJSON body: token, type, then the same fields as creating a child or leader. Do not send camp_consent. Comma-separate dietary, allergies, and disabilities.
children.readList young people (first name, last initial, id, profile link)Nothing on the list. Path id only when fetching one record.
children.writeCreate young person records (you submit details; they are not returned)JSON body of young person fields. Tag lists must be comma-separated (or a JSON array of tags).
leaders.readList leaders (first name, last initial, id, profile link)Nothing on the list. Path id only when fetching one record.
leaders.writeCreate leader records (you submit details; they are not returned)JSON body of leader fields. Tag lists must be comma-separated (or a JSON array of tags).
subcamps.readRead sub-camps, details, and management (staff/patrols without personal data)Nothing on the list. Path id for details and management.
modules.readRead other module data that is not personal (groups, sections, activities, schedule)Nothing. Send the bearer token only.

camp.read

Read camp name, dates, and public settings

You pass: Nothing. Send the bearer token only.

Endpoints

  • GET /camp — Camp name, dates, plan, access code
  • GET /me — Token metadata plus the same camp object (no extra scope)

Request

No body fields. Authenticate with Authorization: Bearer only.

Response

FieldTypeNotes
camp.idintegerCamp id
camp.namestringCamp name
camp.access_codestringCamp access code
camp.statusstringCamp status
camp.planstringPlan type
camp.arrival_datestringArrival date
camp.departure_datestringDeparture date

registration.urls

List registration URLs for groups and sections

You pass: Nothing. Send the bearer token only.

Endpoints

  • GET /registration-urls — Public registration links for groups and sections

Request

No body fields. Authenticate with Authorization: Bearer only.

Response

FieldTypeNotes
registration_urls[].idintegerRow id
registration_urls[].scout_group_idintegerGroup this link belongs to
registration_urls[].section_idintegerSection, or 0 if the link is group-wide
registration_urls[].typestringchild or leader
registration_urls[].tokenstringPass this to POST /registrations
registration_urls[].urlstringPublic form URL

registration.submit

Submit young person or leader registration forms

You pass: JSON body: token, type, then the same fields as creating a child or leader. Do not send camp_consent. Comma-separate dietary, allergies, and disabilities.

Endpoints

  • POST /registrations — Submit a young person or leader registration form

Request

FieldTypeRequiredNotes
tokenstringYesToken from GET /registration-urls (the path segment, not the full URL)
typechild | leaderYesMust match the token type
— young person fields —NoWhen type is child, also send the children.write body (scout_group_id / section_id are taken from the token)
— leader fields —NoWhen type is leader, also send the leaders.write body

Response

FieldTypeNotes
okbooleantrue on success
typestringchild or leader
registrationobjectPrivacy-safe person object (same as a GET). Submitted medical and contact data is not echoed
consent_pendingbooleantrue. Camp consent is collected by email, not via OAuth2
consent_emails_sentbooleanWhether the permission slip and signature emails were sent to the primary contact

children.read

List young people (first name, last initial, id, profile link)

You pass: Nothing on the list. Path id only when fetching one record.

Endpoints

  • GET /children — List young people
  • GET /children/:id — One young person

Request

No body fields. Authenticate with Authorization: Bearer only.

Response

FieldTypeNotes
idintegerInternal record id
first_namestringGiven name only
last_initialstringFirst letter of surname. Full last names are never returned
profile_urlstringPublic profile / QR link
scout_group_idintegerScout group id
section_idintegerSection id
camp_statusstringOn-camp status if the module is in use

children.write

Create young person records (you submit details; they are not returned)

You pass: JSON body of young person fields. Tag lists must be comma-separated (or a JSON array of tags).

Endpoints

  • POST /children — Create a young person

Request

FieldTypeRequiredNotes
first_namestringYesGiven name
last_namestringYesFull surname is stored. Reads only return the initial
dobstring (YYYY-MM-DD)YesDate of birth
section_idintegerYesFrom GET /sections
scout_group_idintegerYesFrom GET /groups. Ignored on registration.submit (taken from the token)
emergency_namestringYesPrimary emergency contact name
emergency_phonestringYesPrimary emergency contact phone
emergency_emailstringYesPrimary contact email. The permission slip and a separate signature request are sent here
emergency_2_namestringNoSecond emergency contact name
emergency_2_phonestringNoSecond emergency contact phone
emergency_2_emailstringNoSecond emergency contact email
camp_consentstringNoNot accepted. If sent, the request is rejected. The primary contact signs by email after submit
photography_consentYES | NONoDefaults to NO
dietarycomma-separated tags | string[]NoDietary requirements. Alias: dietary_requirements
allergiescomma-separated tags | string[]NoAllergies. Alias: allergy
health_othercomma-separated tags | string[]NoDisabilities and other conditions. Aliases: disabilities, conditions, medical_conditions
medical_infostringNoMedication / treatment notes. Free text, not a tag list
infectious_contactstringNoRecent infectious disease contact notes
notes_otherstringNoOther notes
shooting_medicalstringNoShooting medical notes if relevant
line_1stringNoAddress line 1
line_2stringNoAddress line 2
citystringNoTown or city
countystringNoCounty
postcodestringNoPostcode
doctor_namestringNoGP name
doctor_surgerystringNoGP surgery
doctor_addressstringNoGP address
doctor_phonestringNoGP phone
doctor_emailstringNoGP email
otc_pain_relief_consentYES | NONoOver-the-counter pain relief consent
parent_alert_emailbooleanNoWhether to email the parent on medical incidents
has_asthmabooleanNoPass 1, true, or "yes". Same pattern for the flags below
has_diabetesbooleanNoDiabetes flag
has_epilepsybooleanNoEpilepsy flag
has_migrainesbooleanNoMigraines flag
has_fits_faintsbooleanNoFits or faints flag
can_swim_50mbooleanNoCan swim 50 metres
can_bathe_supervisedbooleanNoCan bathe when supervised
shooting_air_riflebooleanNoAlso: shooting_small_bore, shooting_full_bore, shooting_clay_pigeon, shooting_crossbow, shooting_target_sprint, shooting_muzzle_loaded

Response

FieldTypeNotes
okbooleantrue on success
consent_pendingbooleantrue. Camp consent is collected by email, not via OAuth2
consent_emails_sentbooleanWhether the permission slip and signature emails were sent
child.idintegerInternal record id
child.first_namestringGiven name only
child.last_initialstringFirst letter of surname. Full last names are never returned
child.profile_urlstringPublic profile / QR link
child.scout_group_idintegerScout group id
child.section_idintegerSection id
child.camp_statusstringOn-camp status if the module is in use

leaders.read

List leaders (first name, last initial, id, profile link)

You pass: Nothing on the list. Path id only when fetching one record.

Endpoints

  • GET /leaders — List leaders
  • GET /leaders/:id — One leader

Request

No body fields. Authenticate with Authorization: Bearer only.

Response

FieldTypeNotes
idintegerInternal record id
first_namestringGiven name only
last_initialstringFirst letter of surname. Full last names are never returned
profile_urlstringPublic profile / QR link
scout_group_idintegerScout group id
section_idintegerSection id
camp_statusstringOn-camp status if the module is in use
rolestringLeader role title

leaders.write

Create leader records (you submit details; they are not returned)

You pass: JSON body of leader fields. Tag lists must be comma-separated (or a JSON array of tags).

Endpoints

  • POST /leaders — Create a leader

Request

FieldTypeRequiredNotes
first_namestringYesGiven name
last_namestringYesFull surname is stored. Reads only return the initial
emailstringYesMust be unique on the camp
dobstring (YYYY-MM-DD)YesDate of birth
section_idintegerYesAlias: section. From GET /sections
scout_group_idintegerYesAlias: scout_group. Ignored on registration.submit
camp_consentstringNoNot accepted. If sent, the request is rejected. The leader is emailed the permission slip and a separate signature request
rolestringNoDefaults to Leader
levelintegerNoPermission level. Defaults to 1
passwordstringNoOptional login password. Must meet camp password rules if set
phonestringNoLeader phone
photography_consentYES | NONoDefaults to NO
dietarycomma-separated tags | string[]NoDietary requirements. Alias: dietary_requirements
allergiescomma-separated tags | string[]NoAllergies. Alias: allergy
medical_infostringNoMedication / treatment notes. Free text
emergency_namestringNoEmergency contact name
emergency_phonestringNoEmergency contact phone
emergency_emailstringNoEmergency contact email
line_1stringNoAddress line 1
line_2stringNoAddress line 2
citystringNoTown or city
countystringNoCounty
postcodestringNoPostcode
otc_pain_relief_consentYES | NONoOver-the-counter pain relief consent

Response

FieldTypeNotes
okbooleantrue on success
consent_pendingbooleantrue. Camp consent is collected by email, not via OAuth2
consent_emails_sentbooleanWhether the permission slip and signature emails were sent
leader.idintegerInternal record id
leader.first_namestringGiven name only
leader.last_initialstringFirst letter of surname. Full last names are never returned
leader.profile_urlstringPublic profile / QR link
leader.scout_group_idintegerScout group id
leader.section_idintegerSection id
leader.camp_statusstringOn-camp status if the module is in use
leader.rolestringLeader role title

subcamps.read

Read sub-camps, details, and management (staff/patrols without personal data)

You pass: Nothing on the list. Path id for details and management.

Endpoints

  • GET /subcamps — Sub-camp list
  • GET /subcamps/:id — One sub-camp
  • GET /subcamps/:id/management — Patrols and staff without contact details

Request

No body fields. Authenticate with Authorization: Bearer only.

Response

FieldTypeNotes
subcamps[].idintegerSub-camp id
subcamps[].namestringName
subcamps[].codestringShort code
subcamps[].colorstringDisplay colour
subcamps[].map_x / map_ynumberMap position
subcamps[].patrol_capacityintegerPatrol capacity
management.patrols[].members[].child_idintegerYoung person id only — no names on membership rows
management.staff[].leader_idintegerStaff leader id
management.staff[].first_name / last_initialstringPrivacy-safe staff names
management.staff[].rolestringStaff role on that sub-camp

modules.read

Read other module data that is not personal (groups, sections, activities, schedule)

You pass: Nothing. Send the bearer token only.

Endpoints

  • GET /groups — Scout groups
  • GET /sections — Sections
  • GET /activities — Activities
  • GET /schedule — Programme sessions and scheduled activities
  • GET /kit-lists — Kit list templates

Request

No body fields. Authenticate with Authorization: Bearer only.

Response

FieldTypeNotes
groups[].id / nameinteger / stringScout group
groups[].registration_openbooleanWhether that group is accepting registrations
sections[].id / nameinteger / stringSection
sections[].child_registration_enabledbooleanWhether young people can register into the section
activities[].id / name / typemixedActivity catalogue
activities[].slot_costintegerProgramme slot cost
activities[].is_swim / is_gunbooleanSwim or shooting activity flags
sessions[]objectid, day_name, session_date, sort_order
scheduled_activities[].young_people_countintegerHeadcount only — no child names
scheduled_activities[].leaders[]objectid, first_name, last_initial
kit_lists[].id / name / event_type / is_activemixedTemplate metadata, not packed-kit personal data