- Change History
- SIS Environments
- Endpoints
- Address
- Agency
- Applicant
- ApplicantCredential
- ApplicantName
- ApplicantCollegeDetails
- ApplicantProficiency
- ApplicantProficiencySubScore
- ApplicantSupportingDocument
- Application
- ApplicationFull
- BinaryDocument
- DeclineProgramSelection
- EmergencyContact
- ExchangePartner
- Intake
- NewBinaryDocumentInfo
- NewOfferInfo
- NewPaymentReceiptInfo
- OfferAccepted
- OfferDetails
- OfferCondition
- OfferDeclined
- OfferPreRegistered
- OfferRevoked
- OfferWithdrawn
- OfferPaymentReceipt
- Phone
- PreAdmitOfferAccepted
- Program
- ProgramDecision
- ProgramSelection
- ProgramSelectionDecisionUpdated
- ProgramSelectionDeclined
- Referrals
- RevokeOffer
- SisEvent
- SisInboundEvent
- Term
- UpdateOffer
- ApplicationCycle
- CanadianStatus
- Country and Provinces
- EducationCredentialStatus
- EducationCredentialType
- EntryLevelType
- Gender
- IntakeDeliveryOption
- InternationalProgramType
- InternshipType
- Languages
- NamePrefix
- NameSuffix
- OfferConditionType
- OfferRevokeType
- OfferState
- PhoneType
- ProgramCredentialType
- ProgramDecisionState
- ProgramDeclineReason
- ReceiptType
- SchoolType
- SisInboundEventType
- SisOutboundEventType
- SupportingDocumentType
- TermCode
- TestSubType
- TestType
- WithdrawType
- Database Connectivity
- Sleep Interval
- Logging Configuration
- Identity Configuration
- Service Installation
- Windows Event Log Monitoring
- Database Structure
- Error and Warning Codes
- How to Get a Bearer Token
- Appendix: ApplicationFull
- Appendix: Application
- Appendix: ApplicantCollegeDetails
- Appendix: CreateOffer
- Appendix: OfferCreated
- Appendix: OfferPaymentReceipt
- Appendix: RevokeOffer
Version | Date | Editor |
---|---|---|
1.8.2 | Oct 05, 2018 | Jay Dobson |
1.8.1 | Aug 30, 2018 | Jaime Valencia |
1.8.0 | Aug 28, 2018 | Jay Dobson |
1.7.6 | Aug 20, 2018 | Jaime Valencia |
1.7.5 | Jul 17, 2018 | Michael Aldworth |
1.7.4 | Jul 16, 2018 | Jay Dobson |
1.7.3 | Jun 27, 2018 | Jay Dobson |
1.7.2 | May 29, 2018 | Michael Aldworth |
1.7.1 | May 14, 2018 | Jaime Valencia |
1.7.0 | May 08, 2018 | Jaime Valencia |
1.6.6 | Apr 30, 2018 | Jaime Valencia |
1.6.5 | Apr 05, 2018 | Jaime Valencia |
1.6.4 | Mar 26, 2018 | Darren O'Shea |
1.6.3 | Mar 07, 2018 | Jay Dobson |
1.6.2 | Mar 07, 2018 | Michael Aldworth |
1.6.1 | Mar 06, 2018 | Jaime Valencia |
1.6.0 | Mar 02, 2018 | Jay Dobson |
1.5.4 | Feb 15, 2018 | Michael Aldworth |
1.5.3 | Feb 08, 2018 | Kevin Schneider |
1.5.2 | Feb 02, 2018 | Kevin Schneider |
1.5.1 | Jan 30, 2018 | Jay Dobson |
1.5.0 | Jan 26, 2018 | Michael Aldworth |
1.4.0 | Jan 18, 2018 | Michael Aldworth |
1.3.1 | Jan 10, 2018 | Michael Aldworth |
1.3.0 | Jan 05, 2018 | Michael Aldworth |
1.2.1 | Dec 19, 2017 | Jay Dobson |
1.2.0 | Dec 18, 2017 | Michael Aldworth |
1.1.1 | Dec 13, 2017 | Jay Dobson |
1.1.0 | Dec 12, 2017 | Kevin Schneider |
1.0.4 | Dec 08, 2017 | Michael Aldworth |
1.0.3 | Dec 07, 2017 | Michael Aldworth |
1.0.2 | Dec 06, 2017 | Jay Dobson |
1.0.1 | Nov 28, 2017 | Jay Dobson |
1.0.0 | Nov 24, 2017 | Michael Aldworth |
- Add CountryOfBirth and PrimaryLanguage to Applicant
- Add PSIS codes to LanguageMappings.csv
- Add new inbound ProgramSelectionDecisionUpdated event
- Mark inbound ProgramSelectionDeclined event deprecated
- Add new inbound ApplicationClosed event
- Add new ProgramDecision to ProgramSelection Object
- Add observation futureintake cannot have an english program
- Add property passportNumber to Applicant Object
- Add new inbound ApplicationUpdated event
- Mark inbound ProgramSelectionsUpdated event deprecated
- Added new program selection declined reasons
- Added new event AddOfferPaymentReceipt
- Add new property to PayOffer event "generateReceiptInfo", which will generate a receipt from the receipt template
- Add ReceiptType Lookup
- Added intakeId to NewOfferInfo, OfferDetails, OfferWithdrawn, PayOffer, RevokeOffer and UpdateOffer so now the intake can be identified using campusCode, deliveryOption, programCode and startDate or intakeId.
- Added intakeId to OfferAccepted, OfferDeclined, OfferPreRegistered, OfferRevoked and PreAdmitOfferAccepted.
- Added OfferRevoked to SisInboundEventType table.
- Added OfferRevoked inbound event types
- Added PreferredIntakeId to ProgramSelection
- Added new state PreAdmitAccepted to offer
- Added new event PreAdmitOfferAccepted to offer
- Added FutureIntake property to OfferDetails, NewOfferInfo, and UpdateOffer
- Added UnpaidPlacement InternshipType option
- Added new inbound event types OfferCreated and OfferUpdated
- Added New inbound event type OfferAccepted.
- Add New Outbound Event DeclinedProgramSelection
- Fix typo with one of the RevokeOfferTypes (nopaymentnoseats -> nopayment)
- Renamed EmergencyContact property from "firstLanguage" -> "spokenLanguage". Nuget Package updated to 2.2.2 to reflect this property name change.
- Update application cycle in JSON/XML samples to have proper year values
- Add financial aid fields NewOfferInfo and UpdateOffer objects
- Fixed bad Term link in ProgramSelection section
- Added updated field to ApplicationFull object
- Updated Offer Term to StartDate
- Add New Outbound Event UpdateOffer
- Updated CampusPreference field on programSelection to be PreferredCampusCode
- Added Nuget Package for Sis Models
- Updated Sender/Receiver Clients to v2.0.0 (existing clients will continue to work
but it is recommended to upgrade to v2.0.0 as soon as possible, making sure to take
note of the possible breaking changes in the following 3 bullets)
- Improvements with Sender/Receiver Clients XML Serialization/Deserialization to nest arrays into <item> elements. Examples in Appendix are updated to reflect this change.
- Receiver Client version v1.1.0 and earlier were improperly converting json into an xml string with leading and trailing quotes. The data was correct, but we eliminated the leading and trailing quotations.
- Receiver Client version v2.0.0 had update to
SisInboundEvents.Insert.sql
in both Oracle and MsSql. So if you have customized table names or values in this file, you will need to make sure you merge those changes with our updated file. Otherwise you can ignore this.
- Fixed Appendix example for BinaryDocument. Had old "addedOn", changed to "uploaded" and also added "uploadedBy" property to example.
- Added "Parent Event" column to the inbound events table.
- Added agency property to Application object.
- Added ProgramSelectionsUpdated inbound event type
- Renamed ApplicantUpdated inbound event type to ApplicantProfileUpdated
- Renamed Application object to ApplicationFull. This object includes the applicant object, and now the Application object only contains details about the application.
- Added submitted and screened properties to Application and ApplicationFull objects.
- Added updated property to Applicant object.
- Added RevokeOffer outbound event type
- Added ApplicantUpdated, OfferDeclined, OfferPreRegistered and Offer Withdrawn inbound event types
- Renamed OfferPaid to PayOffer (keep naming consistent, no effect on object)
- Added DeclineProgramChoice and RevokeOffer outbound event types
- Renamed BinaryDocument to NewBinaryDocumentInfo (again, to keep naming consistent)
- Created BinaryDocument object, to represent binary document with embedded link
- Add ApplicantSupportingDocument, which will have the supporting document type
- Updated error codes table to include 404.13 when maximum content length is exceeded
- Added CreateOffer outbound event type
- Added generic events SISAPI endpoint details
- Deprecated SISAPI endpoint: UpdateCollegeApplicantDetails
- Deprecated SISAPI endpoint: PayOffer
- Updated XML and JSON Appendix Sample with some middle names and casual names.
- Updated expected XML output formats within Appendix
- Added ApplicationFull Screened event type
- Added new response information for endpoints that previously only returned 200 OK
- Added error and warning codes that SISAPI can return
- Added information for Pay Offer endpoint
- Created Documentation
This document will help you integrate your SIS system with the OCAS International System.
All interaction with the OCAS International Application System (IAS) will be done through the SISAPI. The SISAPI is secured with the OpenId Protocol. In order to receive data from the HTTP Endpoint, each call will need to be passed a Bearer Token in the Authorization Header. Please see the Authentication and Authorization section to learn how to retrieve a Bearer Token. If you are using the OCAS Supplied Sender Client or Receiver Client, we have taken care of the work of acquiring a Bearer Token for you.
OCAS will provide an environment for testing/integration.
Partner(s) can start to integrate with the EXT environment.
Environment | Endpoint Info |
---|---|
EXT | https://<provided-in-separate-documentation>/swagger |
PROD | https://<provided-in-separate-documentation>/swagger |
Accessing the Swagger URL mentioned in the previous section will present you with a user friendly grouping of REST API Functionality:
- Applicants
- Diagnostics
- Events
The table below lists the actions that can be made from each controller and their access limitation.
Note that the SISAPI has a maximum request limit of 10MB.
Method | Event Direction | Access | Relative Path | |
---|---|---|---|---|
Events | GET | OCAS -> Partner | Protected | /api/v1/events/peek |
PUT | N/A | Protected | /api/v1/events/{id}/ack | |
Diagnostics | GET | N/A | Public | /api/v1/diagnostics/servertime |
GET | N/A | Public | /api/v1/diagnostics/logging | |
GET | N/A | Public | /api/v1/diagnostics/database | |
GET | N/A | Protected | /api/v1/diagnostics/authorization |
Accessing one of the public endpoints will get its respective response back. If you access one of the Protected endpoints, you will get an 'Authorization denied' response.
{
"message": "Authorization has been denied for this request."
}
Please see the Authentication and Authorization section.
You will notice that all events are transmitted to the Partner through the *Peek endpoint. This is deliberate, as the payload will contain the event action type and payload. You can see available events below, which must be individually toggled on individually through configuration by OCAS in order to start receiving them.
Send an event to OCAS. The action and accompanying data describe the type of change to be reflected in OCAS International System.
Request Body | Value |
---|---|
id | long (Unique for every event. Auto-incrementing ID recommended) |
action | string (SisOutboundEventType) - Key |
data | variable (Refer to SisOutboundEventType - Data Object Type) |
Example:
{
"id": 18,
"action": "[action name goes here]",
"data": { }
}
Example Request:
POST /api/v1/events HTTP/1.1
Host: <ocas-sis-api-environment>
Content-Type: application/json
Authorization: Bearer <token received from identity server>
Cache-Control: no-cache
Example Response:
200 (Success)
{
"operationId": "00000000-0000-0000-0000-000000000000",
"errors": [
{
"code": "string",
"message": "string"
}
],
"warnings": [
{
"code": "string",
"message": "string"
}
]
}
Receive a list of all un-acked events (ordered by EventId).
Url Query Parameters | Value |
---|---|
count | number greater than 0. Max is 500 at a time. |
Example Request:
GET /api/v1/events/peek?count={number} HTTP/1.1
Host: <ocas-sis-api-environment>
Content-Type: application/json
Authorization: Bearer <token received from identity server>
Cache-Control: no-cache
Example Response:
[
{
"id": 1,
"eventInfo":
{
"action": "SomeEventTitle",
"data": { }
}
},
{
"id": 4,
"eventInfo":
{
"action": "AnotherEventTitle",
"data": { }
}
},
{
"id": 5,
"eventInfo":
{
"action": "CouldBeSameEventTitle",
"data": { }
}
}
]
In the above example, you can see we have 3 SisInboundEvents.
The ack endpoint is intended to acknowledge the successful retrieval of the specified event.
Url Query Parameters | Value |
---|---|
id | the id of the event you are confirming. |
Example Request:
PUT /api/v1/events/{id}/ack HTTP/1.1
Host: <ocas-sis-api-environment>
Content-Type: application/json
Authorization: Bearer <token received from identity server>
Cache-Control: no-cache
Example Response:
200 (Success)
{
"operationId": "00000000-0000-0000-0000-000000000000",
"errors": [
{
"code": "string",
"message": "string"
}
],
"warnings": [
{
"code": "string",
"message": "string"
}
]
}
If you are developing in .NET you are in luck! OCAS has provided a nuget package with all of the Class Objects mentioned below. This will let you serialize and deserialize easily (we recommend using Newtonsoft.Json).
Nuget Package: Ocas.International.Sis.Core
Install-Package Ocas.International.Sis.Core
JSON Serialization/Deserialization
We recommend using Newtonsoft.Json package for serializing and deserializing to the objects. And when using Newtonsoft, we recommend setting the default converter settings as follows:
// This only needs to be set once in your startup code
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
Formatting = Formatting.None,
ContractResolver = new CamelCasePropertyNamesContractResolver(),
DateTimeZoneHandling = DateTimeZoneHandling.Utc
};
And now to Deserialize or Serialize, please look at the example in JsonConvert section
Property | Type |
---|---|
street | string (min 1, max 80) |
apartment | [nullable] string (min 1, max 40) |
city | string (min 1, max 30) |
province | [nullable] string ISO3166-2 see mappings |
country | string ISO3166-1 alpha-2 see mappings |
postalCode | string (min 1, max 17) |
Example:
{
"street": "131 Gottlieb Squares",
"apartment": "2148",
"city": "Johnton",
"province": null,
"country": "YE",
"postalCode": "35625-6412"
}
Property | Type |
---|---|
name | string (min 1, max 255) |
sisIdentifier | [nullable] string (min 1, max 100) |
Example:
{
"name": "Agency Test",
"sisIdentifier": "ABC123"
}
Property | Type |
---|---|
id | string guid |
number | string (min 1, max 20) the Applicant Number (not Application Number) |
version | number (used for historical profile tracking) |
created | string ISO 8601 Date Formatted String |
updated | string ISO 8601 Date Formatted String |
legalName | ApplicantName |
dateOfBirth | string date string in format yyyy-MM-dd |
canadianStatus | CanadianStatus |
primaryCitizenshipCountry | string ISO3166-1 alpha-2 see mappings |
countryOfBirth | string ISO3166-1 alpha-2 see mappings |
primaryLanguage | string ISO639-1 alpha-2 see mappings |
passportNumber | string matches regular expression [0-9A-Z]{1,9} |
fullLegalName | string (min 1, max 450) |
casualNames | Array[0..10] of ApplicantName |
gender | string Gender |
mailingAddress | Address |
currentAddress | [nullable] Address |
phones | Array[1..10] of Phone |
emails | Array[1..10] of strings (each email, min 5, max 128) |
emergencyContact | EmergencyContact |
credentials | Array[1..10] of ApplicantCredential |
proficiencies | Array[0..10] of ApplicantProficiency |
identificationDocuments | Array[1..10] of ApplicantSupportingDocument |
visaDocuments | Array[0..10] of ApplicantSupportingDocument |
otherDocuments | Array[0..10] of ApplicantSupportingDocument |
timestamp | string ISO 8601 Date Formatted String |
by | string (min 1, max 255) |
Example: See Appendix: ApplicationFull
Property | Type |
---|---|
schoolType | string (Lookup) |
schoolName | string (min 1, max 100) |
country | string ISO3166-1 alpha-2 see mappings |
programName | [nullable] string (min 1, max 80) |
status | string (Lookup) |
completionDate | [nullable] string date string in format yyyy-MM-dd |
credentialType | [nullable] string (Lookup) |
supportingDocuments | Array[1..10] of ApplicantSupportingDocument |
Example:
{
"schoolType": "college",
"schoolName": "Some School Name",
"country": "AI",
"programName": "Something",
"status": "Completed",
"completionDate": "2016-04-30",
"credentialType": null,
"supportingDocuments": [{}]
}
Property | Type |
---|---|
firstName | string (min 0, max 35) |
middleNames | Array[0..10] of strings (each item, min 1, max 20) |
lastName | string (min 0, max 35) |
prefix | [nullable] string (Lookup) |
suffix | [nullable] string (Lookup) |
Notes:
The applicant must have a firstName or a lastName, but does not need to have both.
So it's possible to get "firstName": "", "lastName": "Smith"
. This might require
that upon ingestion into your systems, you substitute an empty character, or marker
character which indicates the applicant does not have a first or last name.
Example:
{
"firstName": "John",
"middleNames": [],
"lastName": "O'Keefe",
"prefix": "mr",
"suffix": null
}
Property | Type |
---|---|
number | string required (min 1, max 20) |
studentId | string (min 0, max 30) |
Example:
{
"number": "string",
"studentId": "string"
}
Property | Type |
---|---|
type | string (Lookup) |
otherName | [nullable] string (min 1, max 80) |
score | [nullable] string (min 1, max 80) |
completionDate | [nullable] string date string in format yyyy-MM-dd |
subScores | Array[0 or 4] of ApplicantProficiencySubScore |
supportingDocuments | Array[0..10] of ApplicantSupportingDocument |
Example:
{
"type": "melab",
"otherName": null,
"score": "50",
"completionDate": "2017-01-28",
"subScores": [],
"supportingDocuments": []
}
Property | Type |
---|---|
type | string (Lookup) |
score | string (min 1, max 80) |
Example:
{
"type": "listening",
"score": "100",
}
Property | Type |
---|---|
type | string (Code from Lookup) |
category | string (Category from Lookup) |
binaryDocuments | Array[1..10] of BinaryDocument |
Example:
{
"type" : "provisionalcertificate",
"category" : "credential-university",
"binaryDocuments": [{}]
}
Property | Type |
---|---|
id | string guid |
number | string (min 1, max 20) the Application Number |
agency | Agency |
referrals | Referrals |
created | string ISO 8601 Date Formatted String |
updated | string ISO 8601 Date Formatted String |
submitted | string ISO 8601 Date Formatted String |
screened | [nullable] string ISO 8601 Date Formatted String |
selections | Array of ProgramSelection |
timestamp | string ISO 8601 Date Formatted String |
by | string (min 1, max 255) |
Example: See Appendix: Application
Property | Type |
---|---|
id | string guid |
number | string (min 1, max 20) the Application Number |
agency | Agency |
applicant | Applicant |
selections | Array of ProgramSelection |
screened | [nullable] string ISO 8601 Date Formatted String |
referrals | Referrals |
submitted | string ISO 8601 Date Formatted String |
created | string ISO 8601 Date Formatted String |
updated | string ISO 8601 Date Formatted String |
timestamp | string ISO 8601 Date Formatted String |
by | string (min 1, max 255) |
Example: See Appendix: ApplicationFull
Property | Type |
---|---|
id | string guid |
link | string Base 64 encoded string |
name | string (min 1, max 255) |
mimeType | string (min 1, max 255) |
uploaded | string ISO 8601 Date Formatted String |
uploadedBy | string identity server name of user |
Example:
{
"id": "00000000-0000-0000-0000-000000000000",
"link": "https://someurltodownloadfile",
"name": "filename.jpg",
"mimeType": "image/jpeg",
"uploaded": "2017-12-08T17:19:02.3269001Z",
"uploadedBy": "Jane Smith"
}
Property | Type |
---|---|
applicationNumber | string (min 1, max 20) |
applicationCycle | number (Lookup) |
programCode | string (min 1, max 10) |
term | string (Lookup) |
declineReasonCode | string (Lookup) |
declineReasonOther | [nullable] string (min 1, max 100) |
Example:
{
"applicationNumber" : "X1484934",
"applicationCycle" : 2017,
"term" : "spring",
"programCode" : "TST1DG5",
"declineReasonCode" : "admissionrequirement"
}
Property | Type |
---|---|
name | string (min 1, max 100) |
phone | Phone |
string (min 5, max 128) | |
relationship | string (min 1, max 50) |
spokenLanguage | string (Lookup) ISO 6392-1 |
Example:
{
"name" : "Beth Smith",
"phone" : {},
"email" : "[email protected]",
"relationship" : "Mother",
"spokenLanguage" : "en"
}
Property | Type |
---|---|
name | string (min 1, max 255) |
sisIdentifier | string (min 1, max 100) |
Example:
{
"name": "Test College 1",
"sisIdentifier": "TST1"
}
Property | Type |
---|---|
campusCode | string (min 1, max 4) |
deliveryOption | string (Lookup) |
programCode | string (min 1, max 10) |
startDate | string date string in format yyyy-MM-dd |
intakeId | [nullable] string guid |
Example:
{
"campusCode" : "C4",
"deliveryOption" : "fulltime",
"programCode" : "TST1DG5",
"startDate" : "2018-01-01",
}
Property | Type |
---|---|
data | string Base 64 encoded string |
name | string (min 1, max 255) |
mimeType | string (min 1, max 255) |
length | long File size in bytes |
Example:
{
"data": "[base 64 encoded string]",
"name": "filename.jpg",
"mimeType": "image/jpeg",
"length": 96041
}
Property | Type |
---|---|
applicationNumber | string (min 1, max 20) |
campusCode | string (min 1, max 4) [nullable] if intakeId is provided |
deliveryOption | string (Lookup) [nullable] if intakeId is provided |
programCode | string (min 1, max 10) [nullable] if intakeId is provided |
startDate | string date string in format yyyy-MM-dd [nullable] if intakeId is provided |
intakeId | [nullable] string guid if provided, then campusCode-deliveryOption-programCode-startDate must be null |
studentId | [nullable] string (min 1, max 30) |
isPreAdmit | boolean |
entryLevelType | [nullable] string (Lookup) |
isExchange | [nullable] boolean |
internshipType | [nullable] string (Lookup) |
internshipLength | [nullable] decimal(18,1) ([required] if internshipType == optional or required or unpaidplacement ) |
internshipDescription | [nullable] string (min 1, max 100) |
instructionHours | [nullable] decimal(18,1) |
expirationDate | [nullable] string date string in format yyyy-MM-dd |
intakeExpectedEndDate | [nullable] string date string in format yyyy-MM-dd |
firstPaymentAmount | [nullable] decimal(18,2) |
firstPaymentDate | [nullable] string date string in format yyyy-MM-dd |
secondPaymentAmount | [nullable] decimal(18,2) |
secondPaymentDate | [nullable] string date string in format yyyy-MM-dd |
tuitionFees | [nullable] decimal(18,2) |
ancillaryFees | [nullable] decimal(18,2) |
hasFinancialAid | boolean |
financialAidDescription | string_ (min 1, max 100) ([required] if hasFinancialAid == true ) |
conditions | Array[0..5] of OfferCondition |
customOfferLetter | [nullable] NewBinaryDocumentInfo |
futureIntake | [nullable] Intake (Can not include an english Program.) |
Example:
{
"applicationNumber" : "X1484934",
"campusCode" : "C4",
"deliveryOption" : "fulltime",
"programCode" : "TST1DG5",
"startDate" : "2018-01-01",
"intakeId" : "00000000-0000-0000-0000-000000000000",
"isPreAdmit" : false,
"isExchange" : true,
"internshipType" : "notavailable",
"instructionHours" : 5,
"expirationDate" : "2018-01-01",
"intakeExpectedEndDate" : "2018-12-01",
"firstPaymentAmount" : 100,
"firstPaymentDate" : "2018-01-01",
"secondPaymentAmount": 200,
"secondPaymentDate" : "2018-05-01",
"tuitionFees" : 50,
"ancillaryFees" : 50,
"hasFinancialAid": true,
"financialAidDescription": "Acme Scholarship",
"conditions": [],
"customOfferLetter" : {},
"futureIntake": {
"campusCode" : "C4",
"deliveryOption" : "fulltime",
"programCode" : "TST1DG5",
"startDate" : "2018-01-01",
"intakeId" : "00000000-0000-0000-0000-000000000000"
}
}
Notes:
Many of the fields on the NewOfferInfo model can be left undefined. The values will then be drawn from the program catalogue within the OCAS International System.
Be warned, however, that if a value has not been configured in the IAS catalogue and is also left undefined as part of this event an error will be raised.
These fields are as follows:
- entryLevelType
- isExchange
- internshipType
- internshipLength
- internshipDescription
- instructionHours
- expirationDate
- intakeExpectedEndDate
- firstPaymentAmount
- firstPaymentDate
- secondPaymentAmount
- secondPaymentDate
- tuitionFees
- ancillaryFees
If a value is provided for customOfferLetter
then that will be used,
otherwise the IAS will generate an offer letter on your behalf.
Property | Type |
---|---|
receiptType | string (Lookup) |
paymentDate | string date string in format yyyy-MM-dd |
amount | number (min 0.00, max 999,999,999.00) |
number | [nullable] string the receipt number, invoice number, or college identifier |
Example:
{
"receiptType": "Deposit",
"paymentDate": "2018-04-20",
"amount": 2000.00,
"number": "INV54321"
}
Property | Type |
---|---|
applicationNumber | string (min 1, max 20) |
campusCode | string (min 1, max 4) |
deliveryOption | string (Lookup) |
programCode | string (min 1, max 10) |
startDate | string date string in format yyyy-MM-dd |
intakeId | string guid |
timestamp | string ISO 8601 Date Formatted String |
by | string (min 1, max 255) |
Example:
{
"applicationNumber" : "X12345",
"campusCode" : "main",
"deliveryOption" : "fulltime",
"programCode" : "TSTAD1",
"startDate" : "2017-01-20",
"intakeId" : "00000000-0000-0000-0000-000000000000",
"timestamp" : "2017-12-08T17:19:02.3269001Z",
"by" : "John Doe"
}
Property | Type |
---|---|
applicationNumber | string (min 1, max 20) |
campusCode | string (min 1, max 4) [nullable] if intakeId is provided |
deliveryOption | string (Lookup) [nullable] if intakeId is provided |
programCode | string (min 1, max 10) [nullable] if intakeId is provided |
startDate | string date string in format yyyy-MM-dd [nullable] if intakeId is provided |
intakeId | [nullable] string guid if provided, then campusCode-deliveryOption-programCode-startDate must be null |
state | string (min 1, max 50) (Lookup) |
studentId | [nullable] string (min 1, max 30) |
entryLevelType | string (Lookup) |
isExchange | boolean |
internshipType | string (Lookup) |
internshipLength | [nullable] decimal(18,1) ([required] if internshipType == optional or required or unpaidplacement ) |
internshipDescription | [nullable] string (min 1, max 100) |
instructionHours | [nullable] decimal(18,1) |
expirationDate | string date string in format yyyy-MM-dd |
intakeExpectedEndDate | string date string in format yyyy-MM-dd |
firstPaymentAmount | decimal(18,2) |
firstPaymentDate | string date string in format yyyy-MM-dd |
secondPaymentAmount | decimal(18,2) |
secondPaymentDate | string date string in format yyyy-MM-dd |
tuitionFees | decimal(18,2) |
ancillaryFees | decimal(18,2) |
hasFinancialAid | boolean |
financialAidDescription | string (min 1, max 100) ([required] if hasFinancialAid == true ) |
conditions | Array[0..5] of OfferCondition |
offerLetter | BinaryDocument |
timestamp | string ISO 8601 Date Formatted String |
by | string (min 1, max 255) |
futureIntake | [nullable] Intake (Can not include an english Program.) |
Example:
{
"applicationNumber" : "X1484934",
"campusCode" : "C4",
"deliveryOption" : "fulltime",
"programCode" : "TST1DG5",
"startDate" : "2018-01-01",
"intakeId" : "00000000-0000-0000-0000-000000000000",
"state" : "Sent",
"isExchange" : true,
"internshipType" : "notavailable",
"expirationDate" : "2018-01-01",
"intakeExpectedEndDate" : "2018-12-01",
"firstPaymentAmount" : 100,
"firstPaymentDate" : "2018-01-01",
"secondPaymentAmount": 200,
"secondPaymentDate" : "2018-05-01",
"tuitionFees" : 50,
"ancillaryFees" : 50,
"hasFinancialAid": true,
"financialAidDescription": "Acme Scholarship",
"conditions": [],
"offerLetter" : {
"id": "00000000-0000-0000-0000-000000000000",
"link": "https://someurltodownloadfile",
"name": "filename.jpg",
"mimeType": "image/jpeg",
"uploaded": "2017-12-08T17:19:02.3269001Z",
"uploadedBy": "Jane Smith"
},
"timestamp" : "2017-12-08T17:19:02.3269001Z",
"by" : "John Doe",
"futureIntake": {
"campusCode" : "C4",
"deliveryOption" : "fulltime",
"programCode" : "TST1DG5",
"startDate" : "2018-01-01",
"intakeId" : "00000000-0000-0000-0000-000000000000"
}
}
XML Example: See Appendix: OfferCreated
Property | Type |
---|---|
offerConditionType | string (Lookup) |
other | [nullable] string (min 1, max 255) set when type is other |
Property | Type |
---|---|
applicationNumber | string (min 1, max 20) |
campusCode | string (min 1, max 4) |
deliveryOption | string (Lookup) |
programCode | string (min 1, max 10) |
startDate | string date string in format yyyy-MM-dd |
intakeId | string guid |
timestamp | string ISO 8601 Date Formatted String |
by | string (min 1, max 255) |
Example:
{
"applicationNumber" : "X12345",
"campusCode" : "main",
"deliveryOption" : "fulltime",
"programCode" : "TSTAD1",
"startDate" : "2017-01-20",
"intakeId" : "00000000-0000-0000-0000-000000000000",
"timestamp" : "2017-12-08T17:19:02.3269001Z",
"by" : "John Doe"
}
Property | Type |
---|---|
applicationNumber | string (min 1, max 20) |
campusCode | string (min 1, max 4) |
deliveryOption | string (Lookup) |
programCode | string (min 1, max 10) |
startDate | string date string in format yyyy-MM-dd |
intakeId | string guid |
timestamp | string ISO 8601 Date Formatted String |
by | string (min 1, max 255) |
Example:
{
"applicationNumber" : "X12345",
"campusCode" : "main",
"deliveryOption" : "fulltime",
"programCode" : "TSTAD1",
"startDate" : "2017-01-20",
"intakeId" : "00000000-0000-0000-0000-000000000000",
"timestamp" : "2017-12-08T17:19:02.3269001Z",
"by" : "John Doe"
}
Property | Type |
---|---|
applicationNumber | string (min 1, max 20) |
campusCode | string (min 1, max 4) |
deliveryOption | string (Lookup) |
programCode | string (min 1, max 10) |
startDate | string date string in format yyyy-MM-dd |
intakeId | string guid |
timestamp | string ISO 8601 Date Formatted String |
by | string (min 1, max 255) |
revokeType | string (Lookup) |
otherReason | [nullable] string (min 1, max 100) |
Example:
{
"applicationNumber" : "X12345",
"campusCode" : "main",
"deliveryOption" : "fulltime",
"programCode" : "TSTAD1",
"startDate" : "2017-01-20",
"intakeId" : "00000000-0000-0000-0000-000000000000",
"timestamp" : "2017-12-08T17:19:02.3269001Z",
"by" : "John Doe",
"revokeType" : "other",
"otherReason" : "something that isn't covered in the list of common responses"
}
Property | Type |
---|---|
applicationNumber | string (min 1, max 20) |
campusCode | string (min 1, max 4) [nullable] if intakeId is provided |
deliveryOption | string (Lookup) [nullable] if intakeId is provided |
programCode | string (min 1, max 10) [nullable] if intakeId is provided |
startDate | string date string in format yyyy-MM-dd [nullable] if intakeId is provided |
intakeId | [nullable] string guid if provided, then campusCode-deliveryOption-programCode-startDate must be null |
timestamp | string ISO 8601 Date Formatted String |
by | string (min 1, max 255) |
withdrawnType | string (Lookup) |
otherReason | [null if withdrawnType != other] string (min 1, max 100) |
Example:
{
"applicationNumber" : "X12345",
"campusCode" : "main",
"deliveryOption" : "fulltime",
"programCode" : "TSTAD1",
"startDate" : "2018-01-20",
"intakeId" : "00000000-0000-0000-0000-000000000000",
"withdrawnType" : "visadeclined",
"otherReason" : null,
"timestamp" : "2017-12-08T17:19:02.3269001Z",
"by" : "John Doe"
}
Property | Type |
---|---|
applicationNumber | string (min 1, max 20) |
campusCode | string (min 1, max 4) [nullable] if intakeId is provided |
deliveryOption | string (Lookup) [nullable] if intakeId is provided |
programCode | string (min 1, max 10) [nullable] if intakeId is provided |
startDate | string date string in format yyyy-MM-dd [nullable] if intakeId is provided |
intakeId | [nullable] string guid if provided, then campusCode-deliveryOption-programCode-startDate must be null |
receipt | [nullable] NewBinaryDocumentInfo cannot provide both 'receipt' and 'generateReceiptInfo' |
generateReceiptInfo | [nullable] NewPaymentReceiptInfo |
sendReceiptNotification | [nullable] boolean will send an e-mail notification to the applicant/agent indicating receipt is attached to offer |
Notes:
For 'sendReceiptNotification', null and false are treated the same. Only a true value will send the e-mail notification.
When using this object for the AddOfferPaymentReceipt event, the offer must be in the Paid or PreRegistered state. Unlike PayOffer, this will not transition the offer state, and can be called repeatedly (no limit). You must provide one of 'receipt' or 'generateReceiptInfo' with this event (but not both).
When using this object for the PayOffer event, the offer must be in the Sent or Accepted state. This event can only be called once, because it transitions the offer state into Paid.
Example:
{
"applicationNumber" : "X12345",
"campusCode" : "main",
"deliveryOption" : "fulltime",
"programCode" : "TSTAD1",
"startDate" : "2018-01-20",
"intakeId" : "00000000-0000-0000-0000-000000000000",
"receipt" : null
}
XML Example: See Appendix: OfferPaymentReceipt
Property | Type |
---|---|
type | string (Lookup) |
number | string (min 1, max 20) follows format "<iso3166-1 alpha-2>-01234567890" |
ext | [nullable] string (min 1, max 5) |
Example:
{
"type": "mobile",
"number": "US+1234567890",
"ext": null
}
Property | Type |
---|---|
applicationNumber | string (min 1, max 20) |
campusCode | string (min 1, max 4) |
deliveryOption | string (Lookup) |
programCode | string (min 1, max 10) |
startDate | string date string in format yyyy-MM-dd |
intakeId | string guid |
timestamp | string ISO 8601 Date Formatted String |
by | string (min 1, max 255) |
Example:
{
"applicationNumber" : "X12345",
"campusCode" : "main",
"deliveryOption" : "fulltime",
"programCode" : "TSTAD1",
"startDate" : "2017-01-20",
"intakeId" : "00000000-0000-0000-0000-000000000000",
"timestamp" : "2017-12-08T17:19:02.3269001Z",
"by" : "John Doe"
}
Property | Type |
---|---|
code | string (min 1, max 10) |
title | string |
credential | string (Lookup) |
internationalProgramType | string (Lookup) |
Example:
{
"code": "X1423",
"title": "Some Test Program",
"credential": "diploma",
"internationalProgramType": "Normal"
}
Property | Type |
---|---|
state | string (Lookup) |
declineReasonCode | [nullable] string (Lookup) |
declineReasonOther | [nullable] string (min 1, max 100) |
Example: See Appendix: ApplicationFull
Property | Type |
---|---|
term | Term |
program | Program |
preferredCampusCode | [nullable] string (min 1, max 4) (college assigned Campus Code) |
preferredIntakeId | [nullable] string Intake selected |
choiceNumber | number (less than 0 = EAP/ESL Program, greater than 0 = Normal Program) |
decision | [nullable] ProgramDecision |
Example: See Appendix: ApplicationFull
Property | Type |
---|---|
applicationNumber | string (min 1, max 20) |
applicationCycle | number (Lookup) |
programCode | string (min 1, max 10) |
term | string (Lookup) |
state | string (Lookup) |
declineReasonCode | [nullable] string (Lookup) |
declineReasonOther | [nullable] string (min 1, max 100) |
timestamp | string ISO 8601 Date Formatted String |
by | string (min 1, max 255) |
Example:
{
"applicationNumber" : "X1484934",
"applicationCycle" : 2017,
"by" : "John Doe",
"term" : "spring",
"state" : "Declined",
"programCode" : "TST1DG5",
"declineReasonCode" : "other",
"declineReasonOther" : "Unspecified",
"timestamp" : "2017-12-08T17:19:02.3269001Z"
}
Property | Type |
---|---|
applicationNumber | string (min 1, max 20) |
applicationCycle | number (Lookup) |
programCode | string (min 1, max 10) |
term | string (Lookup) |
declineReasonCode | string (Lookup) |
declineReasonOther | [nullable] string (min 1, max 100) |
timestamp | string ISO 8601 Date Formatted String |
by | string (min 1, max 255) |
Example:
{
"applicationNumber" : "X1484934",
"applicationCycle" : 2017,
"by" : "John Doe",
"term" : "spring",
"programCode" : "TST1DG5",
"declineReasonCode" : "other",
"declineReasonOther" : "Unspecified",
"timestamp" : "2017-12-08T17:19:02.3269001Z"
}
Property | Type |
---|---|
exchangePartner | ExchangePartner |
Example:
{
"exchangePartner": {
"name": "Test College 1",
"sisIdentifier": "TST1"
}
}
Property | Type |
---|---|
applicationNumber | string (min 1, max 20) |
campusCode | string (min 1, max 4) [nullable] if intakeId is provided |
deliveryOption | string (Lookup) [nullable] if intakeId is provided |
programCode | string (min 1, max 10) [nullable] if intakeId is provided |
startDate | string date string in format yyyy-MM-dd [nullable] if intakeId is provided |
intakeId | [nullable] string guid if provided, then campusCode-deliveryOption-programCode-startDate must be null |
revokeType | string (Lookup) |
otherReason | [nullable] string (min 1, max 100) |
Example:
{
"applicationNumber" : "X12345",
"campusCode" : "main",
"deliveryOption" : "fulltime",
"programCode" : "TSTAD1",
"startDate" : "2018-01-20",
"intakeId" : "00000000-0000-0000-0000-000000000000",
"revokeType" : "other",
"otherReason" : "something that isn't covered in the list of common responses"
}
Property | Type |
---|---|
action | string SisInboundEventType |
data | Varies based on the Action |
Example:
{
"action": "SomeEvent",
"data": { }
}
Property | Type | Comment |
---|---|---|
id | number | unique number, should always be processed from smallest to largest |
eventInfo | SisEvent |
{
"id": 0,
"eventInfo": { }
}
Property | Type |
---|---|
applicationCycle | number (Lookup) |
code | string (Lookup) |
startDate | string date string in format yyyy-MM-dd |
endDate | string date string in format yyyy-MM-dd |
Example:
{
"applicationCycle":2019,
"code":"fall",
"startDate":"2019-08-01",
"endDate":"2019-11-30"
}
Property | Type |
---|---|
applicationNumber | string (min 1, max 20) |
campusCode | string (min 1, max 4) [nullable] if intakeId is provided |
deliveryOption | string (Lookup) [nullable] if intakeId is provided |
programCode | string (min 1, max 10) [nullable] if intakeId is provided |
startDate | string date string in format yyyy-MM-dd [nullable] if intakeId is provided |
intakeId | [nullable] string guid if provided, then campusCode-deliveryOption-programCode-startDate must be null |
studentId | [nullable] string (min 1, max 30) |
isPreAdmit | boolean |
entryLevelType | [nullable] string (Lookup) |
isExchange | [nullable] boolean |
internshipType | [nullable] string (Lookup) |
internshipLength | [nullable] decimal(18,1) ([required] if internshipType == optional or required or unpaidplacement ) |
internshipDescription | [nullable] string (min 1, max 100) |
instructionHours | [nullable] decimal(18,1) |
expirationDate | [nullable] string date string in format yyyy-MM-dd |
intakeExpectedEndDate | [nullable] string date string in format yyyy-MM-dd |
firstPaymentAmount | [nullable] decimal(18,2) |
firstPaymentDate | [nullable] string date string in format yyyy-MM-dd |
secondPaymentAmount | [nullable] decimal(18,2) |
secondPaymentDate | [nullable] string date string in format yyyy-MM-dd |
tuitionFees | [nullable] decimal(18,2) |
ancillaryFees | [nullable] decimal(18,2) |
hasFinancialAid | boolean |
financialAidDescription | string_ (min 1, max 100) ([required] if hasFinancialAid == true ) |
conditions | Array[0..5] of OfferCondition |
customOfferLetter | [nullable] NewBinaryDocumentInfo |
futureIntake | [nullable] Intake (Can not include an english Program.) |
Example:
{
"applicationNumber" : "X1484934",
"campusCode" : "C4",
"deliveryOption" : "fulltime",
"programCode" : "TST1DG5",
"startDate" : "2018-01-01",
"intakeId" : "00000000-0000-0000-0000-000000000000",
"isPreAdmit" : false,
"isExchange" : true,
"internshipType" : "notavailable",
"instructionHours" : 5,
"expirationDate" : "2018-01-01",
"intakeExpectedEndDate" : "2018-12-01",
"firstPaymentAmount" : 100,
"firstPaymentDate" : "2018-01-01",
"secondPaymentAmount": 200,
"secondPaymentDate" : "2018-05-01",
"tuitionFees" : 50,
"ancillaryFees" : 50,
"conditions": [],
"customOfferLetter" : {},
"futureIntake": {
"campusCode" : "C4",
"deliveryOption" : "fulltime",
"programCode" : "TST1DG5",
"startDate" : "2018-01-01",
"intakeId" : "00000000-0000-0000-0000-000000000000"
}
}
Notes:
Many of the fields on the UpdateOffer model can be left undefined. The values will then be drawn from the already existing offer within the OCAS International System.
Note: Offer Conditions will always be reset each update. So if a previous offer had condition A, B and C, and then you want to update only the offer expiration date, you will need to provide condition A, B and C again. If you don't provide conditions, it will mean they have been lifted (removed) from the offer.
If a value is provided for customOfferLetter
then that will be used,
otherwise the IAS will generate an offer letter on your behalf.
4-digit Year (e.g. 2016, 2024)
Code |
---|
none |
aboriginal |
conventionrefugee |
offshoreschool |
pr |
refugee |
study |
visa |
other |
Code |
---|
Completed |
InProgress |
NotCompleted |
Code |
---|
secondary-diploma |
secondary-other |
university-degree |
university-other |
college-diploma |
college-other |
Code |
---|
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
10 |
11 |
12 |
20 |
21 |
Code |
---|
male |
female |
other |
Code |
---|
fulltime |
parttime |
Code |
---|
Normal |
Esl |
Eap |
Code |
---|
required |
optional |
notavailable |
unpaidplacement |
Code |
---|
mr |
mrs |
ms |
miss |
dr |
Code |
---|
jr |
sr |
i |
ii |
iii |
iv |
v |
vi |
vii |
viii |
ix |
x |
Code |
---|
engproficiency |
eapcomplete |
eslcomplete |
escpathway |
highschoolcomplete |
collegeprogramcomplete |
universitycomplete |
resume |
portfolio |
other |
Code |
---|
deadline |
nopayment |
noshow |
noseats |
novisa |
other |
Code |
---|
PreAdmitted |
PreAdmitAccepted |
Sent |
Accepted |
Paid |
PreRegistered |
Withdrawn |
Revoked |
Declined |
Code |
---|
home |
mobile |
other |
Code |
---|
advanceddiploma |
certificate |
degree |
diploma |
graduatecertificate |
other |
Code |
---|
Declined |
None |
Offer |
PreAdmitted |
Waitlisted |
Code |
---|
admissionrequirement |
alternateoffer |
alternatedecision |
intakefull |
programsuspended |
programcancelled |
other |
Code |
---|
Deposit |
Tuition |
Code |
---|
secondary |
college |
university |
Key | Data Object Type | Parent Event(s) |
---|---|---|
ApplicantProfileUpdated | Applicant | ApplicationScreened or ApplicationSubmitted |
ApplicationScreened | ApplicationFull | |
ApplicationSubmitted | ApplicationFull | |
ApplicationUpdated | Application | |
ApplicationClosed | ApplicationFull | |
PreAdmitOfferAccepted | PreAdmitOfferAccepted | |
OfferAccepted | OfferAccepted | |
OfferCreated | OfferDetails | |
OfferDeclined | OfferDeclined | |
OfferUpdated | OfferDetails | |
OfferRevoked | OfferRevoked | |
OfferWithdrawn | OfferWithdrawn | |
OfferPreRegistered | OfferPreRegistered | |
Application | ApplicationScreened or ApplicationSubmitted | |
ProgramSelectionDeclined | ApplicationScreened or ApplicationSubmitted | |
ProgramDecisionUpdated | ProgramSelectionDecisionUpdated | ApplicationScreened or ApplicationSubmitted |
Special Note for Parent Event(s): These two events are dependent on being subscribed to the parent event. This means you have to be subscribed to at least one of the parent events. These events also behave slightly different depending on which parent event you are subscribed to.
E.g. If you are subscribed to the ApplicationScreened, then you will not receive any ApplicantProfileUpdates or ProgramSelectionUpdates until the application has had it's screened flag marked. This eliminates unnecessary notifications for events that you might receive during the screening process.
Key | Data Object Type |
---|---|
CreateOffer | NewOfferInfo |
UpdateOffer | UpdateOffer |
DeclineProgramSelection | DeclineProgramSelection |
PayOffer | OfferPaymentReceipt |
AddOfferPaymentReceipt | OfferPaymentReceipt |
RevokeOffer | RevokeOffer |
UpdateApplicantCollegeDetails | ApplicantCollegeDetails |
Category | Code |
---|---|
credential-college | diploma |
credential-college | proofofenrollment |
credential-college | provisionalcertificate |
credential-college | transcript |
credential-secondary | diploma |
credential-secondary | incompletetranscript |
credential-secondary | transcript |
credential-secondary | seniorexamcertificate |
credential-secondary | gcsecertificate |
credential-secondary | necoexamcertificate |
credential-secondary | necoscratchcardinfo |
credential-university | degree |
credential-university | provisionalcertificate |
credential-university | transcript |
identification | birthcertificate |
identification | citizenshippapers |
identification | conventionrefugee |
identification | passport |
identification | pr |
other | portfolio |
other | resume |
other | depositproof |
proficiency | testresults |
visa | approvalletter |
visa | coopworkpermit |
visa | studypermit |
visa | visitor |
Each application cycle will have the following 3 codes corresponding to to each year. A code + year combo gives us a unique way to represent the time an intake is being offered.
Code |
---|
fall |
winter |
spring |
Code |
---|
listening |
reading |
writing |
speaking |
Code |
---|
cael |
cambridge |
cefr |
eap |
eps |
ielts |
melab |
plte |
toefl |
other |
Code |
---|
visadeclined |
transfer |
other |
OCAS has built two Windows services (C# .NET Framework 4.6) to help facilitate the two-way transportation between our SISAPI and the College's SIS systems. You don't need to use them, if you are comfortable following the above documentation above.
The following section outlines the various configuration options found in both the Receiver and Sender Clients.
The sender and receiver clients support Microsoft SQL Server and Oracle 11G and above.
Property | Default |
---|---|
ocasIntlSis | Database Connection String |
Example SQL Server Connection String
Data Source=(SERVER_HERE)\INSTANCE_HERE;Initial Catalog=ocas_sis_intl;UserId=USERID_HERE;Password=PASSWORD_HERE
Example Oracle Connection String
Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=HOST_HERE)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=SERVICE_NAME_HERE)));Password=PASSWORD_HERE;User ID=USERID_HERE;
The following configuration will dictate how often the Sender and Receiver client will poll for new events to process.
Property | Default |
---|---|
client:scheduleSleep:duration | 300ms (5 min) |
The Sender and Receiver clients leverage Serilog for event and error logging.
Property | Default |
---|---|
serilog:minimum-level | Information |
The rolling file feature creates application event logs within a series of rolling files.
Property | Default |
---|---|
serilog:write-to:RollingFileAlternate.logDirectory | C:\Logs\ocas-sis-intl-receiver |
serilog:write-to:RollingFileAlternate.fileSizeLimitBytes | 10485760 (10MB) |
serilog:write-to:RollingFileAlternate.retainedFileCountLimit | 50 |
serilog:write-to:RollingFileAlternate.outputTemplate
{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] [{SourceContext}] {Message}{NewLine}{Exception}
The event log feature creates application event logs within the Windows Event Viewer.
Property | Default |
---|---|
serilog:write-to:EventLog.source | ocas-sis-intl-receiver |
serilog:write-to:EventLog.logName | ApplicationFull |
serilog:write-to:EventLog.manageEventSource | false |
serilog:write-to:EventLog.restrictedToMinimumLevel | 3 (Error) |
serilog:write-to:EventLog.outputTemplate
{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] [{SourceContext}] {Message}{NewLine}{Exception}
The console feature outputs process information to the console window.
Property | Default |
---|---|
serilog:write-to:console | (blank) |
See Authentication for more details on how to obtain a username, password and secret.
Property | Default |
---|---|
ocas:idsvr:publicOrigin | <ToBeProvided> |
ocas:idsvr:sts | <ToBeProvided> |
ocas:idsvr:clientId | <ToBeProvided> |
ocas:idsvr:scope | <ToBeProvided> |
ocas:idsvr:secret | See Authentication |
ocas:idsvr:username | See Authentication |
ocas:idsvr:password | See Authentication |
The receiver client will retrieve pending SIS Events from the OCAS SIS API in the sequence they were generated. These events will be inserted into the SisInboundEvents table in the JSON (default) or XML format (if specified).
You can configure the output format by setting the following configuration property.
Property | Default |
---|---|
client:eventFormat | json/xml (Default: json) |
The sender client will read pending SIS Events sequentially from the source database. Data will always be transmitted as JSON to the OCAS SIS API. Data in XML format will be converted prior to transmission.
No custom sender configurations.
The following commands will install the Receiver and Sender clients as Windows Services.
Ocas.Sis.International.ReceiverClient.Service.exe install -displayname:Ocas.Sis.Intl.ReceiverClient -servicename:Ocas.Sis.Intl.ReceiverClient --delayed
Ocas.Sis.International.SenderClient.Service.exe install -displayname:Ocas.Sis.Intl.SenderClient -servicename:Ocas.Sis.Intl.SenderClient --delayed
The following commands will allow the SIS Receiver and Sender applications to create logging entries within the Windows Event Viewer without administrative rights.
> [System.Diagnostics.EventLog]::CreateEventSource("ocas-sis-intl-receiver", "Application")
> [System.Diagnostics.EventLog]::CreateEventSource("ocas-sis-intl-sender", "Application")
The SIS Receiver and Sender applications each have an individual database table required to write and read events respectively.
Name | Type | Purpose |
---|---|---|
SisOutboundEvents | table | Sis Outbound Event Queue |
SisInboundEvents | table | Sis Inbound Event Queue |
Column Name | Column Type | Purpose |
---|---|---|
id | bigint | Event Unique Primary Key |
eventInfo | nvarchar(max) | Event Payload Data |
eventFormat | nvarchar(5) | Event Format Type (json, xml) |
createdDate | datetime2 | Created Date |
Column Name | Column Type | Purpose |
---|---|---|
id | bigint | Event Unique Primary Key |
status | nvarchar(50) | Event Status (Default: Pending) |
type | nvarchar(50) | Event Type |
eventInfo | nvarchar(max) | Event Payload Data |
eventFormat | nvarchar(5) | Event Format Type (json, xml) |
createdDate | datetime2 | Created Date |
lastModifiedDate | datetime2 | Last Modified Date |
Below is a table of error codes that may be returned from the SisApi
Code | Description |
---|---|
404.13 | Request content size too large |
E0001 | Unknown Middleware Exception |
E0030 | Not Found Error |
E0056 | Invalid Feature Configuration |
E0070 | Error In State Machine |
E0071 | Invalid state transition |
E0080 | Invalid Term Code |
E0081 | Invalid Program Code |
E0082 | Invalid Campus Code |
E0083 | Invalid Delivery Option Code |
E0084 | Invalid Application Cycle |
E0086 | Duplicate Event Id Race Condition |
E0085 | Duplicate Event Id With Different Payload |
E0090 | Ack Out of Order |
E0091 | Invalid Offer State Transition |
Below is a table of warning codes that may be returned from the SisApi
Code | Description |
---|---|
W0010 | Duplicate Event Id and Payload Sent to API |
W0110 | Attempt to Pay Offer In Revoked, Declined, or Withdrawn State |
If you are using the Sender and Receiver Clients, you can skip this whole section. We've done the work for you!
You can get a Bearer Token through making an HTTP POST to our OCAS Identity Server (OIDS). We will provide you the OIDS in a separate e-mail.
If you've made it this far, you are acquiring the token on your own. Great! You will need to craft an HTTP POST as shown below in Step 1.
-
OCAS will provide you with
<base64secret>, <username>, and <password>
, which should be replaced in the urlencoded params.Example Request:
POST /core/connect/token HTTP/1.1 Host: <OIDS>.ca Content-Type: application/x-www-form-urlencoded Authorization: Basic <base64secret> Cache-Control: no-cache username=<username>&password=<password>&grant_type=password&scope=intlsis_api
Example Response:
{ "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ", "expires_in": 3600, "token_type": "Bearer" }
-
In the above response, 'access_token' is the actual token needed to make further API calls. When the token is generated, that access_token is valid for 1 hour (3600 seconds), which should be more than enough for any scheduled task or cronjob, consuming data. You will want to copy/store the value for access_token in a variable, then construct another HTTP Request with the word
Bearer <token_value>
in the Authorization Header as follows:GET /api/v1/diagnostics/authorization HTTP/1.1 Host: <IAS>.ca Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ Accept: application/json Cache-Control: no-cache
Example Response:
{ "name": "Partner User", "customerCode": "TEST", "roles": "Sis" }
You now have a token that you can use for any number of subsequent protected SIS endpoint calls. Remember that the token will last only for 1 hour and you will need a new token to make any protected API call requests after an hour.
The appendix includes models and examples too large for the above document.
Used by:
- SisInboundEventType.ApplicationSubmitted
- SisInboundEventType.ApplicationScreened
- SisInboundEventType.ApplicationClosed
The ApplicationFull object includes a variety of Applicant and Application data. Note: Empty JSON collections are not represented within the XML.
{
"id": "85aee8dc-3bdc-e711-8737-e4b318b38df4",
"number": "X1485152",
"agency": {
"name": "Agency Test",
"sisIdentifier": "ABC123"
},
"applicant": {
"id": "7036e524-305c-4fb6-b45c-61a9f828f35c",
"number": "X1185682",
"version": 2,
"created": "2017-12-08T17:19:02.3269001Z",
"legalName": {
"firstName": "Esperanza",
"middleNames": [
"Jon",
"Al"
],
"lastName": "Medhurst",
"prefix": null,
"suffix": null
},
"dateOfBirth": "1908-03-02",
"canadianStatus": "none",
"primaryCitizenshipCountry": "ET",
"countryOfBirth": "ET",
"primaryLanguage": "EN",
"passportNumber": "AB1234567",
"fullLegalName": "Esperanza Abe Lexus Jeromy Edmond Kristian Alan Henry Medhurst",
"casualNames": [
{
"firstName": "Lexus",
"middleNames": [],
"lastName": "Abe",
"prefix": null,
"suffix": null
}
],
"gender": "female",
"mailingAddress": {
"street": "083 Ismael Lock",
"apartment": "4579",
"city": "Sybletown",
"province": null,
"country": "BS",
"postalCode": "16178"
},
"currentAddress": {
"street": "35775 Jessica Street",
"apartment": "59129",
"city": "South Sandrine",
"province": null,
"country": "TW",
"postalCode": "97474"
},
"phones": [
{
"type": "home",
"number": "US+19083680301",
"ext": null
},
{
"type": "mobile",
"number": "US+15259228253",
"ext": null
}
],
"emails": [
"[email protected]",
"[email protected]"
],
"emergencyContact": {
"name": "Lina Streich",
"phone": {
"type": "other",
"number": "US+8899746991",
"ext": null
},
"email": "[email protected]",
"relationship": "suscipit",
"spokenLanguage": "gv"
},
"credentials": [
{
"schoolType": "university",
"schoolName": "quo-eaque-nemo",
"country": "VI",
"programName": "velit",
"status": "NotCompleted",
"completionDate": "2016-08-07",
"credentialType": "university-degree",
"supportingDocuments": [
{
"id": "00000000-0000-00C0-0000-0000C0000001",
"link": "https://somelinktodocument",
"name": "my-university-proof.pdf",
"mimeType": "application/pdf",
"uploaded": "2017-12-08T16:19:02.3269001Z",
"uploadedBy": "Beth Smith"
}
]
},
{
"schoolType": "college",
"schoolName": "sit-qui-omnis",
"country": "UZ",
"programName": null,
"status": "InProgress",
"completionDate": "2016-03-01",
"credentialType": "college-other",
"supportingDocuments": [
{
"id": "00000000-0000-0F00-0000-000000000006",
"link": "https://somelinktodocument",
"name": "my-college-proof.pdf",
"mimeType": "application/pdf",
"uploaded": "2017-12-08T16:19:02.3269001Z",
"uploadedBy": "Beth Smith"
}
]
},
{
"schoolType": "secondary",
"schoolName": "rerum-nihil-necessitatibus",
"country": "AD",
"programName": "fuga",
"status": "InProgress",
"completionDate": "2014-12-21",
"credentialType": "secondary-other",
"supportingDocuments": [
{
"id": "00000C00-0000-0000-0000-000000000000",
"link": "https://somelinktodocument",
"name": "my-secondary-proof.pdf",
"mimeType": "application/pdf",
"uploaded": "2017-12-08T16:19:02.3269001Z",
"uploadedBy": "Beth Smith"
}
]
}
],
"proficiencies": [
{
"type": "eap",
"otherName": null,
"score": "64",
"completionDate": "2017-11-05",
"subScores": [],
"supportingDocuments": []
},
{
"type": "ielts",
"otherName": null,
"score": "71",
"completionDate": "2017-10-19",
"supportingDocuments": [
{
"id": "00000000-0000-0000-0000-000000000001",
"link": "https://somelinktodocument",
"name": "my-testscore-pg1.pdf",
"mimeType": "application/pdf",
"uploaded": "2017-12-08T16:22:02.3269001Z",
"uploadedBy": "Beth Smith"
},
{
"id": "00000000-0000-0A00-0000-00000000000",
"link": "https://somelinktodocument",
"name": "my-testscore-pg2.pdf",
"mimeType": "application/pdf",
"uploaded": "2017-12-08T16:22:32.3269001Z",
"uploadedBy": "Beth Smith"
}
]
},
{
"type": "eap",
"otherName": null,
"score": "94",
"completionDate": "2015-02-05",
"subScores": [],
"supportingDocuments": []
}
]
},
"selections": [
{
"term": {
"applicationCycle": 2018,
"code": "fall",
"startDate": "2018-08-01",
"endDate": "2018-11-30"
},
"program": {
"code": "TST1ESL1",
"title": "ESL Program 1",
"credential": "other",
"internationalProgramType": "Esl"
},
"preferredCampusCode": null,
"preferredIntakeId": null,
"choiceNumber": -1,
"decision": {
"state": "declined",
"declineReasonCode": "alternateoffer",
"declineReasonOther": null
}
},
{
"term": {
"applicationCycle": 2016,
"code": "fall",
"startDate": "2016-08-01",
"endDate": "2016-11-30"
},
"program": {
"code": "TST1O2",
"title": "Other 2",
"credential": "other",
"internationalProgramType": "Normal"
},
"preferredCampusCode": null,
"preferredIntakeId": null,
"choiceNumber": 1,
"decision": null
},
{
"term": {
"applicationCycle": 2018,
"code": "fall",
"startDate": "2018-08-01",
"endDate": "2018-11-30"
},
"program": {
"code": "TST1DG1",
"title": "Degree 1",
"credential": "degree",
"internationalProgramType": "Normal"
},
"preferredCampusCode": null,
"preferredIntakeId": null,
"choiceNumber": 2,
"decision": null
}
],
"referrals": {
"exchangePartner": {
"name": "Test College 1",
"sisIdentifier": "TST1"
}
},
"screened": null,
"submitted": "2017-12-09T11:19:46.6378594Z",
"created": "2017-12-08T17:19:02.3269001Z",
"updated": "2017-12-10T11:19:46.6378594Z",
"by": "Esperanza Abe Lexus Jeromy Edmond Kristian Alan Henry Medhurst",
"timestamp": "2017-12-09T11:19:46.6378594Z"
}
<root>
<id>85aee8dc-3bdc-e711-8737-e4b318b38df4</id>
<number>X1485152</number>
<agency>
<name>Agency Test</name>
<sisIdentifier>ABC123</sisIdentifier>
</agency>
<applicant>
<id>7036e524-305c-4fb6-b45c-61a9f828f35c</id>
<number>X1185682</number>
<version>2</version>
<created>2017-12-08T17:19:02.3269001Z</created>
<legalName>
<firstName>Esperanza</firstName>
<middleNames>
<item>Jon</item>
<item>Al</item>
</middleNames>
<lastName>Medhurst</lastName>
<prefix />
<suffix />
</legalName>
<dateOfBirth>1908-03-02</dateOfBirth>
<canadianStatus>none</canadianStatus>
<primaryCitizenshipCountry>ET</primaryCitizenshipCountry>
<countryOfBirth>ET</countryOfBirth>
<primaryLanguage>EN</primaryLanguage>
<passportNumber>AB1234567</passportNumber>
<fullLegalName>Esperanza Abe Lexus Jeromy Edmond Kristian Alan Henry Medhurst</fullLegalName>
<casualNames>
<item>
<firstName>Lexus</firstName>
<middleNames />
<lastName>Abe</lastName>
<prefix />
<suffix />
</item>
</casualNames>
<gender>female</gender>
<mailingAddress>
<street>083 Ismael Lock</street>
<apartment>4579</apartment>
<city>Sybletown</city>
<province />
<country>BS</country>
<postalCode>16178</postalCode>
</mailingAddress>
<currentAddress>
<street>35775 Jessica Street</street>
<apartment>59129</apartment>
<city>South Sandrine</city>
<province />
<country>TW</country>
<postalCode>97474</postalCode>
</currentAddress>
<phones>
<item>
<type>home</type>
<number>US+19083680301</number>
<ext />
</item>
<item>
<type>mobile</type>
<number>US+15259228253</number>
<ext />
</item>
</phones>
<emails>
<item>[email protected]</item>
<item>[email protected]</item>
</emails>
<emergencyContact>
<name>Lina Streich</name>
<phone>
<type>other</type>
<number>US+8899746991</number>
<ext />
</phone>
<email>[email protected]</email>
<relationship>suscipit</relationship>
<spokenLanguage>gv</spokenLanguage>
</emergencyContact>
<credentials>
<item>
<schoolType>university</schoolType>
<schoolName>quo-eaque-nemo</schoolName>
<country>VI</country>
<programName>velit</programName>
<status>NotCompleted</status>
<completionDate>2016-08-07</completionDate>
<credentialType>university-degree</credentialType>
<supportingDocuments>
<item>
<id>00000000-0000-00C0-0000-0000C0000001</id>
<link>https://somelinktodocument</link>
<name>my-university-proof.pdf</name>
<mimeType>application/pdf</mimeType>
<uploaded>2017-12-08T16:19:02.3269001Z</uploaded>
<uploadedBy>Beth Smith</uploadedBy>
</item>
</supportingDocuments>
</item>
<item>
<schoolType>college</schoolType>
<schoolName>sit-qui-omnis</schoolName>
<country>UZ</country>
<programName />
<status>InProgress</status>
<completionDate>2016-03-01</completionDate>
<credentialType>college-other</credentialType>
<supportingDocuments>
<item>
<id>00000000-0000-0F00-0000-000000000006</id>
<link>https://somelinktodocument</link>
<name>my-college-proof.pdf</name>
<mimeType>application/pdf</mimeType>
<uploaded>2017-12-08T16:19:02.3269001Z</uploaded>
<uploadedBy>Beth Smith</uploadedBy>
</item>
</supportingDocuments>
</item>
<item>
<schoolType>secondary</schoolType>
<schoolName>rerum-nihil-necessitatibus</schoolName>
<country>AD</country>
<programName>fuga</programName>
<status>InProgress</status>
<completionDate>2014-12-21</completionDate>
<credentialType>secondary-other</credentialType>
<supportingDocuments>
<item>
<id>00000C00-0000-0000-0000-000000000000</id>
<link>https://somelinktodocument</link>
<name>my-secondary-proof.pdf</name>
<mimeType>application/pdf</mimeType>
<uploaded>2017-12-08T16:19:02.3269001Z</uploaded>
<uploadedBy>Beth Smith</uploadedBy>
</item>
</supportingDocuments>
</item>
</credentials>
<proficiencies>
<item>
<type>eap</type>
<otherName />
<score>64</score>
<completionDate>2017-11-05</completionDate>
<subScores />
<supportingDocuments />
</item>
<item>
<type>ielts</type>
<otherName />
<score>71</score>
<completionDate>2017-10-19</completionDate>
<supportingDocuments>
<item>
<id>00000000-0000-0000-0000-000000000001</id>
<link>https://somelinktodocument</link>
<name>my-testscore-pg1.pdf</name>
<mimeType>application/pdf</mimeType>
<uploaded>2017-12-08T16:22:02.3269001Z</uploaded>
<uploadedBy>Beth Smith</uploadedBy>
</item>
<item>
<id>00000000-0000-0A00-0000-00000000000</id>
<link>https://somelinktodocument</link>
<name>my-testscore-pg2.pdf</name>
<mimeType>application/pdf</mimeType>
<uploaded>2017-12-08T16:22:32.3269001Z</uploaded>
<uploadedBy>Beth Smith</uploadedBy>
</item>
</supportingDocuments>
</item>
<item>
<type>eap</type>
<otherName />
<score>94</score>
<completionDate>2015-02-05</completionDate>
<subScores />
<supportingDocuments />
</item>
</proficiencies>
</applicant>
<selections>
<item>
<term>
<applicationCycle>2018</applicationCycle>
<code>fall</code>
<startDate>2018-08-01</startDate>
<endDate>2018-11-30</endDate>
</term>
<program>
<code>TST1ESL1</code>
<title>ESL Program 1</title>
<credential>other</credential>
<internationalProgramType>Esl</internationalProgramType>
</program>
<preferredCampusCode />
<preferredIntakeId />
<choiceNumber>-1</choiceNumber>
<decision>
<state>declined</state>
<declineReasonCode>alternateoffer</declineReasonCode>
<declineReasonOther />
</decision>
</item>
<item>
<term>
<applicationCycle>2016</applicationCycle>
<code>fall</code>
<startDate>2016-08-01</startDate>
<endDate>2016-11-30</endDate>
</term>
<program>
<code>TST1O2</code>
<title>Other 2</title>
<credential>other</credential>
<internationalProgramType>Normal</internationalProgramType>
</program>
<preferredCampusCode />
<preferredIntakeId />
<choiceNumber>1</choiceNumber>
<decision />
</item>
<item>
<term>
<applicationCycle>2018</applicationCycle>
<code>fall</code>
<startDate>2018-08-01</startDate>
<endDate>2018-11-30</endDate>
</term>
<program>
<code>TST1DG1</code>
<title>Degree 1</title>
<credential>degree</credential>
<internationalProgramType>Normal</internationalProgramType>
</program>
<preferredCampusCode />
<preferredIntakeId />
<choiceNumber>2</choiceNumber>
<decision />
</item>
</selections>
<screened />
<referrals>
<exchangePartner>
<name>Test College 1</name>
<sisIdentifier>TST1</sisIdentifier>
</exchangePartner>
</referrals>
<submitted>2017-12-09T11:19:46.6378594Z</submitted>
<created>2017-12-08T17:19:02.3269001Z</created>
<updated>2017-12-10T11:19:46.6378594Z</updated>
<by>Esperanza Abe Lexus Jeromy Edmond Kristian Alan Henry Medhurst</by>
<timestamp>2017-12-09T11:19:46.6378594Z</timestamp>
</root>
Used by:
- SisInboundEventType.ApplicationUpdated
SisInboundEventType.ProgramSelectionsUpdated(deprecated)
{
"id": "85aee8dc-3bdc-e711-8737-e4b318b38df4",
"number": "X1485152",
"agency": {
"name": "Agency Test",
"sisIdentifier": "ABC123"
},
"selections": [
{
"term": {
"applicationCycle": 2018,
"code": "fall",
"startDate": "2018-08-01",
"endDate": "2018-11-30"
},
"program": {
"code": "TST1ESL1",
"title": "ESL Program 1",
"credential": "other",
"internationalProgramType": "Esl"
},
"preferredCampusCode": null,
"preferredIntakeId": null,
"choiceNumber": -1,
"decision": {
"state": "declined",
"declineReasonCode": "alternateoffer",
"declineReasonOther": null
}
},
{
"term": {
"applicationCycle": 2016,
"code": "fall",
"startDate": "2016-08-01",
"endDate": "2016-11-30"
},
"program": {
"code": "TST1O2",
"title": "Other 2",
"credential": "other",
"internationalProgramType": "Normal"
},
"preferredCampusCode": null,
"preferredIntakeId": null,
"choiceNumber": 1,
"decision": null
},
{
"term": {
"applicationCycle": 2018,
"code": "fall",
"startDate": "2018-08-01",
"endDate": "2018-11-30"
},
"program": {
"code": "TST1DG1",
"title": "Degree 1",
"credential": "degree",
"internationalProgramType": "Normal"
},
"preferredCampusCode": null,
"preferredIntakeId": null,
"choiceNumber": 2,
"decision": null
}
],
"referrals": {
"exchangePartner": {
"name": "Test College 1",
"sisIdentifier": "TST1"
}
},
"screened": null,
"submitted": "2017-12-09T11:19:46.6378594Z",
"created": "2017-12-08T17:19:02.3269001Z",
"by": "Esperanza Abe Lexus Jeromy Edmond Kristian Alan Henry Medhurst",
"timestamp": "2017-12-09T11:19:46.6378594Z"
}
<root>
<id>85aee8dc-3bdc-e711-8737-e4b318b38df4</id>
<number>X1485152</number>
<agency>
<name>Agency Test</name>
<sisIdentifier>ABC123</sisIdentifier>
</agency>
<selections>
<item>
<term>
<applicationCycle>2018</applicationCycle>
<code>fall</code>
<startDate>2018-08-01</startDate>
<endDate>2018-11-30</endDate>
</term>
<program>
<code>TST1ESL1</code>
<title>ESL Program 1</title>
<credential>other</credential>
<internationalProgramType>Esl</internationalProgramType>
</program>
<preferredCampusCode />
<preferredIntakeId />
<choiceNumber>-1</choiceNumber>
<decision>
<state>declined</state>
<declineReasonCode>alternateoffer</declineReasonCode>
<declineReasonOther />
</decision>
</item>
<item>
<term>
<applicationCycle>2016</applicationCycle>
<code>fall</code>
<startDate>2016-08-01</startDate>
<endDate>2016-11-30</endDate>
</term>
<program>
<code>TST1O2</code>
<title>Other 2</title>
<credential>other</credential>
<internationalProgramType>Normal</internationalProgramType>
</program>
<preferredCampusCode />
<preferredIntakeId />
<choiceNumber>1</choiceNumber>
<decision />
</item>
<item>
<term>
<applicationCycle>2018</applicationCycle>
<code>fall</code>
<startDate>2018-08-01</startDate>
<endDate>2018-11-30</endDate>
</term>
<program>
<code>TST1DG1</code>
<title>Degree 1</title>
<credential>degree</credential>
<internationalProgramType>Normal</internationalProgramType>
</program>
<preferredCampusCode />
<preferredIntakeId />
<choiceNumber>2</choiceNumber>
<decision />
</item>
</selections>
<screened />
<referrals>
<exchangePartner>
<name>Test College 1</name>
<sisIdentifier>TST1</sisIdentifier>
</exchangePartner>
</referrals>
<submitted>2017-12-09T11:19:46.6378594Z</submitted>
<created>2017-12-08T17:19:02.3269001Z</created>
<by>Esperanza Abe Lexus Jeromy Edmond Kristian Alan Henry Medhurst</by>
<timestamp>2017-12-09T11:19:46.6378594Z</timestamp>
</root>
{
"number": "X12345",
"studentId": "SID-1234"
}
<root>
<number>X12345</number>
<studentId>SID-1234</studentId>
</root>
{
"applicationNumber" : "X1484934",
"campusCode" : "C4",
"deliveryOption" : "fulltime",
"programCode" : "TST1DG5",
"startDate" : "2018-06-25",
"isPreAdmit" : false,
"isExchange" : true,
"internshipType" : "notavailable",
"instructionHours" : 5,
"expirationDate" : "2018-01-01",
"intakeExpectedEndDate" : "2018-12-01",
"firstPaymentAmount" : 100,
"firstPaymentDate" : "2018-01-01",
"secondPaymentAmount": 200,
"secondPaymentDate" : "2018-05-01",
"tuitionFees" : 50,
"ancillaryFees" : 50,
"hasFinancialAid": true,
"financialAidDescription": "Acme Scholarship",
"conditions": [
{
"offerConditionType": "eslcomplete"
},
{
"offerConditionType": "other",
"other": "Must get straight A's"
}
],
"customOfferLetter" : {
"data": "[base 64 encoded string]",
"name": "filename.pdf",
"mimeType": "application/pdf",
"length": 96041
},
"futureIntake": null
}
<root>
<applicationNumber>X1484934</applicationNumber>
<campusCode>C4</campusCode>
<deliveryOption>fulltime</deliveryOption>
<programCode>TST1DG5</programCode>
<startDate>2018-06-25</startDate>
<isPreAdmit>false</isPreAdmit>
<isExchange>true</isExchange>
<internshipType>notavailable</internshipType>
<instructionHours>5</instructionHours>
<expirationDate>2018-01-01</expirationDate>
<intakeExpectedEndDate>2018-12-01</intakeExpectedEndDate>
<firstPaymentAmount>100</firstPaymentAmount>
<firstPaymentDate>2018-01-01</firstPaymentDate>
<secondPaymentAmount>200</secondPaymentAmount>
<secondPaymentDate>2018-05-01</secondPaymentDate>
<tuitionFees>50</tuitionFees>
<ancillaryFees>50</ancillaryFees>
<hasFinancialAid>true</hasFinancialAid>
<financialAidDescription>Acme Scholarship</financialAidDescription>
<conditions>
<item>
<offerConditionType>eslcomplete</offerConditionType>
</item>
<item>
<offerConditionType>other</offerConditionType>
<other>Must get straight A's</other>
</item>
</conditions>
<customOfferLetter>
<data>[base 64 encoded string]</data>
<name>filename.pdf</name>
<mimeType>application/pdf</mimeType>
<length>96041</length>
</customOfferLetter>
<futureIntake />
</root>
{
"applicationNumber" : "X1484934",
"campusCode" : "C4",
"deliveryOption" : "fulltime",
"programCode" : "TST1DG5",
"intakeId": "00000000-0000-0000-0000-000000000000",
"state" : "Sent",
"startDate" : "2018-06-25",
"isExchange" : true,
"internshipType" : "notavailable",
"instructionHours" : 5,
"expirationDate" : "2018-01-01",
"intakeExpectedEndDate" : "2018-12-01",
"firstPaymentAmount" : 100,
"firstPaymentDate" : "2018-01-01",
"secondPaymentAmount": 200,
"secondPaymentDate" : "2018-05-01",
"tuitionFees" : 50,
"ancillaryFees" : 50,
"hasFinancialAid": true,
"financialAidDescription": "Acme Scholarship",
"conditions": [
{
"offerConditionType": "eslcomplete"
},
{
"offerConditionType": "other",
"other": "Must get straight A's"
}
],
"offerLetter" : {
"id": "00000000-0000-0000-0000-000000000000",
"link": "https://someurltodownloadfile",
"name": "myofferletter.pdf",
"mimeType": "application/pdf",
"uploaded": "2018-12-08T16:22:01Z",
"uploadedBy": "Jane Smith"
},
"timestamp" : "2018-03-07T16:22:02Z",
"by" : "Beth MacDonald"
}
<root>
<applicationNumber>X1484934</applicationNumber>
<campusCode>C4</campusCode>
<deliveryOption>fulltime</deliveryOption>
<programCode>TST1DG5</programCode>
<intakeId>00000000-0000-0000-0000-000000000000</intakeId>
<state>Sent</state>
<startDate>2018-06-25</startDate>
<isExchange>true</isExchange>
<internshipType>notavailable</internshipType>
<instructionHours>5</instructionHours>
<expirationDate>2018-01-01</expirationDate>
<intakeExpectedEndDate>2018-12-01</intakeExpectedEndDate>
<firstPaymentAmount>100</firstPaymentAmount>
<firstPaymentDate>2018-01-01</firstPaymentDate>
<secondPaymentAmount>200</secondPaymentAmount>
<secondPaymentDate>2018-05-01</secondPaymentDate>
<tuitionFees>50</tuitionFees>
<ancillaryFees>50</ancillaryFees>
<hasFinancialAid>true</hasFinancialAid>
<financialAidDescription>Acme Scholarship</financialAidDescription>
<conditions>
<item>
<offerConditionType>eslcomplete</offerConditionType>
</item>
<item>
<offerConditionType>other</offerConditionType>
<other>Must get straight A's</other>
</item>
</conditions>
<offerLetter>
<id>00000000-0000-0000-0000-000000000000</id>
<link>https://somelinktodocument</link>
<name>myofferletter.pdf</name>
<mimeType>application/pdf</mimeType>
<uploaded>2018-12-08T16:22:01Z</uploaded>
<uploadedBy>Beth Smith</uploadedBy>
</offerLetter>
<timestamp>2018-03-07T16:22:02Z</timestamp>
<by>Beth MacDonald</by>
<futureIntake>
<campusCode>C4</campusCode>
<deliveryOption>fulltime</deliveryOption>
<programCode>TST1DG5</programCode>
<startDate>2019-06-25</startDate>
</futureIntake>
</root>
{
"applicationNumber": "X1484937",
"campusCode": "main",
"deliveryOption": "fulltime",
"programCode": "TSTA01",
"startDate": "2018-11-14",
"receipt": {
"data": "[base 64 encoded string]",
"name": "filename.jpg",
"mimeType": "image/jpeg",
"length": 96041
},
"generateReceiptInfo": null,
"sendReceiptNotification": true
}
<root>
<applicationNumber>X1484937</applicationNumber>
<campusCode>main</campusCode>
<deliveryOption>fulltime</deliveryOption>
<programCode>TSTA01</programCode>
<startDate>2018-11-14</startDate>
<receipt>
<data>[base 64 encoded string]</data>
<name>filename.jpg</name>
<mimeType>image/jpeg</mimeType>
<length>96041</length>
</receipt>
<sendReceiptNotification>true</sendReceiptNotification>
</root>
{
"applicationNumber": "X1484937",
"campusCode": "main",
"deliveryOption": "fulltime",
"programCode": "TSTA01",
"startDate": "2018-08-17",
"revokeType": "other",
"otherReason" : "something that isn't covered in the list of common responses"
}
<root>
<applicationNumber>X1484937</applicationNumber>
<campusCode>main</campusCode>
<deliveryOption>fulltime</deliveryOption>
<programCode>TSTA01</programCode>
<startDate>2018-08-17</startDate>
<revokeType>other</revokeType>
<otherReason>something that isn't covered in the list of common responses</otherReason>
</root>