1. Home
  2. Partner API Integration

Partner API Integration

The Bromcom Partner Support Programme gives you Free Support to the Bromcom MIS Read and Write APIs. To become a registered partner, you need to sign an NDA. Please send your registration request to PartnerSupport@bromcom.com with your company details and purpose of your integration.

We have test systems for both Read Only Data and Write Data that you will be able to use to to help develop your own Interface to the Bromcom MIS and will give Login details for these when requested.

For any queries you can contact PartnerSupport@bromcom.com. Our team will get back to you within 2 working days.

Meanwhile you can click here to download a C# Sample Project for Read Only Data Service Bromcom APIs.

Note: All of our Entities are linked to the Adhoc Reporting module so it is possible to retrieve Data via the API, mirroring any report possible in the MIS. These are also being regularly expanded.

The following table lists the available functions in the Read Only Data Service:

findEntitiesBySchoolID(…)
Purpose: This function allows you to retrieve the most up-to-date list of entities

Parameters:
SchoolID (int), Username (string), Password (string)
getEntityDataBySchoolID(…)
Purpose: This function allows you to retrieve the data required for a related entity

Parameters:
SchoolID (int), EntityName (string), EntityFilter (string), Username (string), Password (string)

EntityName: use the name of the entity which you retrieved from findEntitiesBySchoolID(…) method. For Example: Students

EntityFilter: you can apply any filter to the returned data set using SQL syntax. For Example: StartDate > '20100901' AND FirstName LIKE 'S%'

The following table lists the available functions in the Write Data Service:

deregisterSingleSignOnUser(…)
Purpose: This method allows to detach linked Single Sign-On (Microsoft or Google) account from Bromcom MIS account

Parameters:
schoolId (int), username (string), password (string), userId (int), emailAddress (string)
getSingleSignOnAccount(…)
Purpose: This method returns attached Single Sign-On (Microsoft or Google) account name

Parameters:
schoolId (int), username (string), password (string), userId (int)
registerSingleSignOnUser(…)
Purpose: This method allows attach Single Sign-On (Microsoft or Google) account to Bromcom MIS account

Parameters:
schoolId (int), username (string), password (string), userId (int), emailAddress (string), ssoProvider (string)
saveAssessmentStudentResult(…)
Parameters:
schoolId (int), username (string), password (string), studentResultID (int), studentID (int)
assessmentTypeID (int), termID (int), yearGroupID (int), subjectID (int), result (string), resultDate (datetime), modifiedBy (int), modifiedDate (datetime), notes (string), foreColour (string), backgroundColour (string), isProtected (bit)
saveAttendance(…)
Purpose: This method allows you to write attendance data of students to specific period on a date

Parameters:
schoolId (int), username (string), password (string), studentId (int), calendarId (int), attendanceMark (string), minutesLate (int), attendanceComment (string), attendanceTakenBy (int), attendanceTakenDateTime (DateTime)
saveBehaviourEventType(…)
Purpose: This method allows you to create event type that can be attached to event records
eventTypeName – 10 characters
eventTypeDescription – 80 characters


Parameters:
schoolId (int), username (string), password (string), eventTypeId (int), eventTypeName (string), eventTypeDescription (string)
saveBehaviourEventGroup(…)
Purpose: This method allows you to create event group that can be attached to event records
eventGroupName – 20 characters
eventGroupDescription – 80 characters


Parameters:
schoolId (int), username (string), password (string), eventGroupId (int), eventGroupName (string), eventGroupDescription (string)
saveBehaviourEvent(…)
Purpose: This method allows you to create events that can be attached to event records

Parameters:
schoolId (int), username (string), password (string), eventId (int), eventName (string), eventDescription (string), eventTypeId (int), eventGroupId (int), adjustment (int)
saveBehaviourEventRecord(…)
Purpose: This method allows you to write behaviour event record data against to student

Parameters:
schoolId (int), username (string), password (string), eventRecordId (int), studentId (int), eventId (int), ownerId (int), classId (int), locationId (int), witnessId (int), eventDate (DateTime), adjustment (int), comment (string), internalComment (string)
saveDinnerTransaction(…)
Purpose: This method allows to push back dinner transactions from cashless catering solutions to enable schools to show dinner histories on our parent portal (MyChildAtSchool)

Parameters:
schoolId (int), username (string), password (string), personId(int), transactionDetails (string), amount (decimal), remainingBalance (Decimal), Instant (DateTime), transactionType (string)
externalId (int)
UpdateDinnerBalance(…)
Purpose: This method allows to cashless catering solutions to update student’s dinner balance to allow parents to see and pay dinner balance via our parent portal (MyChildAtSchool)

Parameters:
schoolId (int), username (string), password (string), personId(int), amount (decimal)
saveStudentGroup(…)
Purpose: This method allows to insert student and group membership into the system for given start date and end date range. This method only supports to insert non-existing record. Method does not update or amend existing membership record

Parameters:
schoolId (int), username (string), password (string), groupId (int), studentId (int), startDate (DateTime), endDate (DateTime)
saveUserDefinedFieldData(…)
Parameters:
schoolId (int), username (string), password (string), personId (int), UserDefineFieldInstanceId (int), dataValue (string)
savePreAdmissionStudent(…)
Purpose: This method allows to create new or updated existing pre-admission students in the system. Method returns “studentId” as integer

Parameters:
schoolId (int), username (string), password (string), studentId (int), preAdmissionGroupId (int), legalFirstName (string), legalLastName (string), preferredFirstName (string), preferredLastName (string), middleName (string), dateOfBirth (DateTime), gender (character), homeAddress (string), homeTelephone (string), mobileTelephone (string), emailAddress (string), siblingIDs (string), usualMealType (string), medicalConditionsDietaryNeeds (string), ethnicityName (string), religiousAffiliationName (string), homeLanguageName (string), firstLanguageNames (string), modeOfTravelName (string), parentalConsentNames (string), schoolHistories (string), doctorSurgery (string), contacts (string), upn (string), additionalInfo (string)

Special variable formats:
siblingIDs: comma separated i.e. 123,345
parentalConsentNames: comma separated i.e. ABC,DEF
firstLanguageNames: comma separated i.e. ENG,TUR
homeAddress: xml (multiple nodes)
<addresses>
   <address>
          <addressid>40</addressid> //if this is empty a new address will be created. Please try not to duplicate addresses
          <town> LONDONDERRY</town>
          <street> Stockwell Road</street>
          <postcode>SE10 8EY</postcode>
          <nationalityid>183</nationalityid>
          <flatnamenumber></flatnamenumber>
          <buildingnamenumber>40</buildingnamenumber>
          <addressstartdate>20200901</addressstartdate>
          <addressenddate></addressenddate>
          <addresssortorder>1</addresssortorder>
          <addresstypename>H</addresstypename>
   </address>
   <address>
          <town> LONDONDERRY</town>
          <street> Stockwell Street</street>
          <postcode>SE10 8EY</postcode>
          <nationalityid>183</nationalityid>
          <flatnamenumber></flatnamenumber>
          <buildingnamenumber>42</buildingnamenumber>
          <addressstartdate>20200901</addressstartdate>
          <addressenddate>99991231</addressenddate>
          <addresssortorder>2</addresssortorder>
          <addresstypename>A</addresstypename>
   </address>
</addresses>

medicalConditionsDietaryNeeds: xml (multiple nodes)
<medicalconditionsdietaryneeds>
<medicalconditionsdietaryneed>
<conditionname>NUT</conditionname>
<priority>1</priority>
<notes>He has very sensitive nut allergy</notes>
</medicalconditionsdietaryneed>
<medicalconditionsdietaryneed>
<conditionname>SAT</conditionname>
<priority>2</priority>
<notes></notes>
</medicalconditionsdietaryneed>
</medicalconditionsdietaryneeds>

schoolHistories: xml (multiple nodes)
<schoolhistories>
            <schoolhistory>
                        <schoolname>School A</schoolname>
                        <startdate>2020-09-01</startdate>
                        <enddate>2021-07-20</enddate>
                        <la>22</la>
                        <establishmentnumber>3333</establishmentnumber>
            </schoolhistory>
            <schoolhistory>
                        <schoolname>School B</schoolname>
                        <startdate>2021-09-01</startdate>
                        <la>40</la>
                        <establishmentnumber>1234</establishmentnumber>
            </schoolhistory>
</schoolhistories>

doctorSurgery: xml (single node)
<doctorsurgery>
            <surgeryname>Surgery A</surgeryname>
            <surgeryaddress>
                        <postcode>BR2 9JG</postcode>
                        <nationalityid>183</nationalityid>
                        <town>Bromley</town>
                        <locality></locality>
                        <street>Masons Hill</street>
                        <flatnamenumber></flatnamenumber>
                        <buildingnamenumber>44</buildingnamenumber>
                        <administrativearea>Kent</administrativearea>
                        <addressid>123</addressid>
            </surgeryaddress>
</doctorsurgery>

contacts: xml (multiple nodes)
<contacts>
    <contact>
        <contactid></contactid> //if this is empty a new contact will be created – otherwise it will map to the ID you have provided. Please try not to duplicate contacts
        <title>Mrs</title>
        <gender>F</gender>
        <lastname>Smith</lastname>
        <priority>1</priority>
        <firstname>Carmela</firstname>
        <courtorder>F</courtorder>
        <correspondence>F</correspondence>
        <parentalballot>F</parentalballot>
        <studentreports>T</studentreports>
        <mobiletelephone>11111111111</mobiletelephone>
        <transferaddress>F</transferaddress>
        <relationtypename>PAM</relationtypename>
        <hasparentalresponsibility>T</hasparentalresponsibility>
          <addresses>
          <address>
            <town>LONDONDERRY</town>
            <street>Lupus Road</street>
            <postcode>SW1V 3DY</postcode>
            <nationalityid>183</nationalityid>
            <locality>Ben</locality>
            <flatnamenumber>ABS</flatnamenumber>
            <buildingnamenumber>2</buildingnamenumber>
            <administrativearea>tbh</administrativearea>
            <addressstartdate>20210905</addressstartdate>
            <addressenddate></addressenddate>
            <addresssortorder>1</addresssortorder>
            <addresstypename>H</addresstypename>
            <addressid></addressid> //if this is empty a new address will be created. Please try not to duplicate addresses
          </address>
        </addresses>
        <telephones>
          <telephone>
                 <telephonenumber>22222222222</telephonenumber>
                 <telephonenumbertype>H</telephonenumbertype>
                 <telephonenumbersortorder>1</telephonenumbersortorder>
          </telephone>
        <telephone>
                 <telephonenumber>073333333333</telephonenumber>
                 <telephonenumbertype>M</telephonenumbertype>
                 <telephonenumbersortorder>2</telephonenumbersortorder>
          </telephone>
          </telephones>
          <emails>
                 <email>
                        <emailtypename>H</emailtypename>
                        <emailaddress>a@b.com</emailaddress>
                        <emailsortorder>1</emailsortorder>
                 </email>
                 <email>
                        <emailtypename>W</emailtypename>
                        <emailaddress>3@4.com</emailaddress>
                        <emailsortorder>2</emailsortorder>
                 </email>
          </emails>
     </contact>
</contacts>

additionalInfo: xml nationality uses CBDS code set CS088/D0026
<additionalinfo>
<nationality>VNM</nationality>
</additionalinfo>
saveStaff(…)
Purpose: EmployeeID: If NULL or 0 create new staff, else update existing staff – Same as StaffID from Staff read only entity

Returns EmployeeID INT

Parameters:
schoolId (int), username (string), password (string), employeeId (int) PK, title (string), firstName (string), lastName (string), middleName (string), preferredFirstName (string), preferredLastName (string), gender (char), dateOfBirth (datetime), staffCode (string), startDate (datetime), endDate (datetime), continuousServiceStartDate (datetime), localAuthorityStartDate (datetime), nationalInsuranceNumber (string), payrollNumber (string), jobTitle (string), religiousAffiliationName (string), ethnicity (string), disabilities (XML), doNotIncludeInCensus (bit), additionalInfo (XML)

Title: Mr, Mrs, Ms etc
Gender: M / F
StaffCode: Must not clash with another staff member, cannot be empty
StartDate: Must not be empty
ReligiousAffiliationName: CBDS codeset CS053
Ethnicity: CBDS codeset CS080 – DfES Main Code
Disabilities: XML uses CBDS codeset CS029

Disabilities XML Structure:
<Disabilities>
<Disability>BEH</Disability>
<Disability>AUT</Disability>
</Disabilities>

additionalInfo – Unused, exists for later expansion of the API if needed
saveWorkEmail(…)
Purpose: This method allows to write staff work email addresses. If overwrite is set TRUE, then existing work email records are deleted

Parameters:
schoolId (int), username (string), password (string), userId (int), emailAddress (string),
overwrite (bool)
saveStaffContract(…)
Purpose: ContractID: If NULL or 0 create new contract, else update existing contract

Returns ContractID INT

Parameters:
schoolId (int), username (string), password (string), employeeId (int), contractId (int) PK, startDate (datetime), endDate (datetime), postSWF (string), contractNumber (string), contractTermName (string), doNotIncludeInCensus (bit), additionalInfo (XML)

StartDate: Must not be empty
POST SWF: CBDS code set CS083
ContractTermName: CBDS code set CS041

NB: ContractCategoryDescription: Defined by POST SWF – cannot be written back

additionalInfo – Unused, exists for later expansion of the API if needed
saveStaffContractEmployeeRole(…)
Purpose: EmployeeRoleTypeName: CBDS code set CS050
Returns EmployeeRoleID INT

Parameters:
schoolId (int), username (string), password (string), employeeRoleId (int) PK, employeeRoleTypeName (string), startDate (datetime), endDate (datetime), contractId (int)
saveStaffContractBasePaymentType(…)
Purpose: BasePaymentCategoryName: CBDS code set CS067

Parameters:
schoolId (int), username (string), password (string), basePaymentId (int), basePaymentName (string), basePaymentDescription (string), isActive (bit), basePayHoursPerWeek (decimal), basePayWeekPerYear (decimal), basePaymentCategoryName (string), basePaymentFinancialGroupName (string), scalePointGroups (XML), scalePoints (XML), teachersPayVersions (XML), teachersPay (XML)

ScalePointGroups XML structure:
<ScalePointGroups>
<ScalePointGroup>
<ScalePointGroupCode>ABC</ScalePointGroupCode>
<ScalePointGroupDescription>A REALLY BIG LONG DESCRIPTION</ScalePointGroupDescription>
<IsActive>1</IsActive>
</ScalePointGroup>
<ScalePointGroup>
<ScalePointGroupCode>ABCD</ScalePointGroupCode>
<ScalePointGroupDescription>A REALLY MASSIVE DESCRIPTION</ScalePointGroupDescription>
<IsActive>0</IsActive>
</ScalePointGroup>
</ScalePointGroups>

ScalePoints XML structure:
<ScalePoints>
<ScalePoint>
<ScalePointName>ABC</ScalePointName>
<ScalePointDescription>A REALLY BIG LONG DESCRIPTION</ScalePointDescription>
<IsActive>1</IsActive>
<ScalePointGroupName>ABCD</ScalePointGroupName>
</ScalePoint>
<ScalePoint>
<ScalePointGroup>
<ScalePointName>ABCD</ScalePointName>
<ScalePointDescription>A REALLY MASSIVE DESCRIPTION</ScalePointDescription>
<IsActive>0</IsActive>
<ScalePointGroupName>ABC</ScalePointGroupName>
</ScalePoint>
</ScalePoints>

TeachersPayVersions XML Structure:
<TeachersPayVersions>
<TeachersPayVersions>
<TeachersPayVersionID>1</TeachersPayVersionID>
<StartDate>2021-09-01</StartDate>
<EndDate>2022-08-31</EndDate>
</TeachersPayVersion>
<TeachersPayVersion>
<TeachersPayVersionID>2</TeachersPayVersionID>
<StartDate>2021-09-01</StartDate>
<EndDate></EndDate>
</TeachersPayVersion>
</TeachersPayVersions>

TeachersPay XML Structure:
<TeachersPays>
<TeachersPay>
<ScalePointName>M1</ScalePointName>
<RegionSpine>EW</RegionSpine>
<Salary>25000</Salary>
<TeachersPayVersionID>1</TeachersPayVersionID>
</TeachersPay>
<TeachersPay>
<ScalePointName>M2</ScalePointName>
<RegionSpine>EW</RegionSpine>
<Salary>26000</Salary>
<TeachersPayVersionID>1</TeachersPayVersionID>
</TeachersPay>
<TeachersPay>
<ScalePointName>M3</ScalePointName>
<RegionSpine>EW</RegionSpine>
<Salary>27000</Salary>
<TeachersPayVersionID>1</TeachersPayVersionID>
</TeachersPay>
<TeachersPay>
<ScalePointName>M3</ScalePointName>
<RegionSpine>EW</RegionSpine>
<Salary>25000</Salary>
<TeachersPayVersionID>1</TeachersPayVersionID>
</TeachersPay>
<TeachersPay>
<ScalePointName>M1</ScalePointName>
<RegionSpine>EW</RegionSpine>
<Salary>25500</Salary>
<TeachersPayVersionID>2</TeachersPayVersionID>
</TeachersPay>
<TeachersPay>
<ScalePointName>M2</ScalePointName>
<RegionSpine>EW</RegionSpine>
<Salary>26500</Salary>
<TeachersPayVersionID>2</TeachersPayVersionID>
</TeachersPay>
<TeachersPay>
<ScalePointName>M3</ScalePointName>
<RegionSpine>EW</RegionSpine>
<Salary>27500</Salary>
<TeachersPayVersionID>2</TeachersPayVersionID>
</TeachersPay>
</TeachersPay>

Returns BasepaymentID INT
saveStaffContractBasePayment(…)
Purpose: BasePaymentName, ScalePointGroupName, ScalePointName combination must match one created in system and viewable from EntityName BasePayStructureSpinePoints

Returns ContractBasepaymentID INT

Parameters:
schoolId (int), username (string), password (string)
contractBasePaymentId (int) PK, contractId (int), basePaymentName (string), scalePointGroupName (string), scalePointName (string), startDate (datetime), endDate (datetime), annualSalary (decimal), payRangeMinimum (decimal), payRangeMaximum (decimal), payChangeReasonName (string), safeguarded (bit), hoursPerWeek (decimal), weeksPerYear (decimal)
saveStaffContractAdditionalPaymentType(…)
Purpose: AdditionalPaymentTypeCategoryName uses CBDS code set CS082

Returns AdditionalPaymentTypeID INT

Parameters:
schoolId (int), username (string), password (string), additionalPaymentTypeId (int)PK, additionalPaymentTypeName (string), additionalPaymentTypeDescription (string), isActive (bit), additionalPaymentTypeCategoryName (string)
saveStaffContractAdditionalPayment(…)
Purpose: AllowanceTypeName can only be one of Temporary, Permanent, Spot Allowance

Returns ContractAdditionalPaymentTypeID INT

Parameters:
schoolId (int), username (string), password (string), contractAdditionalPaymentId (int) PK, additionalPaymentTypeName (string), amount (decimal), contractId (int), startDate (datetime), endDate (datetime), notes (string), allowanceTypeName (string), payFactor (decimal), superAnnuation (bit), niStatus (bit), benefitInKind (bit)
saveStaffAbsenceCode(…)
Purpose: StaffAbsenceCodeTypeName uses CBDS code set CS043

SortOrder – Allows user to order the absence codes, should be unique

Read only related API is EntityName StaffAbsenceCodes (for validation)

Returns StaffAbsenceCodeID INT

Parameters:
schoolId (int), username (string), password (string), staffAbsenceCodeId (int) PK, staffAbsenceCodeName (string), staffAbsenceCodeDescription (string), staffAbsenceCodeTypeName (string), status (bit), notifyToPayroll (bit), isPersonal (bit), sortOrder (int)
saveStaffAbsence(…)
Purpose: Parameter IllnessCategoryName accepts values found in read only related API EntityName StaffAbsenceillnessCategories

Only populated when StaffAbsenceCodeName has StaffAbsenceCodeTypeName = ‘SIC’ (check read only entityName StaffAbsenceCodes)

Parameter staffAbsenceTypeName accepts values found in read only related API EntityName StaffAbsenceTypes

Parameter staffAbsencePayDecisionTypeName accepts values found in read only related API EntityName StaffAbsencePayDecisionTypes

Returns StaffAbsenceID INT

Parameters:
schoolId (int), username (string), password (string), staffAbsenceId (int) PK
employeeId (int), staffAbsenceCodeName (string), staffAbsencePayDecisionTypeName (string), notes (string), startDate (datetime), endDate (datetime), staffAbsenceTypeName (string), duration (decimal), illnessCategoryName (string), hoursLost (decimal)
savePersonAddress(…)
Purpose: AddressTypeDescription can only be: Home, Additional Home, Mailing, address, Transport, Work

SortOrder is Unique to PersonID

Returns PersonAddressID INT

Parameters:
schoolId (int), username (string), password (string), personAddressId (int) PK, personId (int), addressId (int), buildingNameNumber (string), street (string), locality (string), town (string), administrativeArea (string), postCode (string), addressTypeDescription (string), uprn (string), startDate (datetime), endDate (datetime), sortOrder (int)
savePersonEmail(…)
Purpose:
EmailAddressTypeName can only be: HOME, WORK, ALLTIME, OTHER

SortOrder is Unique to PersonID

Returns PersonEmailID INT

Parameters:
schoolId (int), username (string), password (string), personEmailId (int) PK, personId (int)
emailId (int), emailAddress (string), emailAddressTypeName (string), sortOrder (int)
savePersonTelephone(…)
Purpose:
TelephoneNumberTypeName can only be: All Day, EvnWk, Wkday, Notes

TelephoneNumberDeviceTypeName can only be: LANDLINE, MOBILE, FAX, PAGER

TelephoneTypeCategoryName can only be: Fax, Home, Alternate Home, Mobile, Work, Minicom (hearing impaired/disabled)

SortOrder is Unique to PersonID

ForTextMessage – Allows sending text messages to this number

Returns PersonTelephoneID INT
updateGovernorReference(…)
Parameters:
schoolId (int), username (string), password (string), governorId (int), governorReference (string)
deleteStaffContract(…)
Parameters:
schoolId (int), username (string), password (string), contractId (int)
deleteStaffContractEmployeeRole(…)
Parameters:
schoolId (int), username (string), password (string), employeeRoleId (int)
deleteStaffContractBasePayment(…)
Parameters:
schoolId (int), username (string), password (string), contractBasePaymentId (int)
deleteStaffContractAdditionalPayment(…)
Parameters:
schoolId (int), username (string), password (string), contractAdditionaPaymentId (int)
deleteStaffAbsence(…)
Parameters:
schoolId (int), username (string), password (string), staffAbsenceId (int)
deletePersonAddress(…)
Parameters:
schoolId (int), username (string), password (string), personAddressId (int)
deletePersonEmail(…)
Parameters:
schoolId (int), username (string), password (string), personEmailId (int)
deletePersonTelephone(…)
Parameters:
schoolId (int), username (string), password (string), personAddressId (int)
Please see below for retrieving people photos from the Bromcom MIS System via APIs
“PersonPhotos” entity will return an encrypted key under “Photo” column and this key needs to be replaced within the URL below to retrieve the photo:

https://<ServerDomain>/Nucleus/Framework/Components/Controls/ImageDisplay.ashx?EncID=<PhotoEncryptionKey>

You will need to retrieve photos of people one by one. This approach has been implemented in this way to avoid the potential huge data transfer problems in a single transaction due to photo sizes.

As a signed up Interface Partner, you will be able to call yourself an Official Partner of Bromcom and your Name and Logo will be added to our list of Partners.

For more information contact us at PartnerSupport@bromcom.com

Updated on July 22, 2022

Was this article helpful?