Applications
API version
Select a version to change the base URI
in syntax and code examples. Learn about versions:
in syntax and code examples. Learn about versions
Represents a list of submitted applications.
URI
/api/v9/applicationsView all API requests
| API request | Return Type | Verb | Description |
|---|---|---|---|
/api/v9/applications | C | GET, HEAD | Get a list of applications that match the set filtering criterion |
/api/v9/applications | C | POST | Create an application with minimal initial data |
/api/v9/applications/ID | R | GET, HEAD | Get the application contents (data input by the application) |
/api/v9/applications/ID | R | PATCH | Update specific application contents |
/api/v9/applications/ID/freeze | R | POST | Freeze the application data |
/api/v9/applications/ID/unfreeze | R | POST | Unfreeze the application data |
/api/v9/applications/ID/close | R | POST | Close an application |
/api/v9/applications/ID/courses | C | GET, HEAD | List courses that have been added to this application |
/api/v9/applications/ID/courses | C | POST | Add a course to the application |
/api/v9/applications/ID/courses/ID | A | GET, HEAD | Get information about a course and application association |
/api/v9/applications/ID/courses/ID | A | DELETE | Delete a course from the application |
/api/v9/applications/ID/courses/ID/priority | A | GET, HEAD | Get the priority of the course in the application |
/api/v9/applications/ID/courses/ID/priority | A | PUT | Set the priority of the course in the application |
/api/v9/applications/ID/flags | C | GET, HEAD | List all flags assigned to the application in question |
/api/v9/applications/ID/flags/ID | A | GET, HEAD | Get information about a specific flag set to an application |
/api/v9/applications/ID/flags/ID | A | PUT | Set the flag to the application in question |
/api/v9/applications/ID/flags/ID | A | DELETE | Remove the flag from the application in question |
/api/v9/applications/ID/offers | C | GET, HEAD | List offers created for this application |
/api/v9/applications/ID/offers/ID | R | GET, HEAD | Get information about a specific application offer |
/api/v9/applications/ID/offers/ID/type | R | GET, HEAD | Get the offer type of a specific application offer |
/api/v9/applications/ID/offers/ID/type | R | PUT | Set the offer type of the application offer in question |
/api/v9/applications/ID/offers/ID/subject | R | GET, HEAD | Get the subject line of a specific application offer |
/api/v9/applications/ID/offers/ID/subject | R | PUT | Set the subject line of the application offer in question |
/api/applications/ID/offers/ID/comments | R | GET, HEAD | Get the offer letter text/comments of a specific application offer |
/api/v9/applications/ID/offers/ID/comments | R | PUT | Set the offer letter text/comments of the application offer in question |
/api/v9/applications/ID/offers/ID/attachments | R | GET, HEAD | Get the offer attachments |
/api/v9/applications/ID/offers/ID/attachments /ID | R | GET, HEAD | Get an offer attachment |
/api/v9/applications/ID/offers/ID/attachments /ID/download | R | GET, HEAD | Get an offer attachment (the binary blob) |
/api/v9/applications/ID/offers/ID/letters | R | GET, HEAD | Get the offer letters |
/api/v9/applications/ID/offers/ID/letters/ID | R | POST | Generate an offer letter |
/api/v9/applications/ID/offers/ID/letters/ID | R | GET, HEAD | Get an offer letter |
/api/v9/applications/ID/offers/ID/confirm | R | POST | Confirm an offer |
/api/v9/applications/ID/offers/ID/decision | R | GET, HEAD | Get the decision of a specific application offer |
/api/v9/applications/ID/offers/ID/decision | R | PUT | Set the decision of the application offer in question |
/api/v9/applications/ID/offers/ID/notes | R | GET, HEAD | Get the notes on the offer |
/api/v9/applications/ID/offers/ID/notes | R | POST | Create a new offer note |
/api/v9/applications/ID/offers/ID/notes/ID | R | GET, HEAD | Get information about a specific offer note |
/api/v9/applications/ID/offers/ID/notes/ID | R | PUT | Update a specific offer note |
/api/v9/applications/ID/offers/ID/score/extra | R | GET, HEAD | Get the extra score of a specific application offer |
/api/v9/applications/ID/offers/ID/score/extra | R | PUT | Set the extra score of the application offer in question |
/api/v9/applications/ID/offers/ID/score/extra | R | DELETE | Clear the extra score of the application offer in question |
/api/v9/applications/ID/tasks | C | GET, HEAD | List tasks created for this application |
/api/v9/applications/ID/tasks | C | POST | Add a new task to the application |
/api/v9/applications/ID/tasks/ID | R | GET, HEAD | Get information about a specific application task |
/api/v9/applications/ID/tasks/ID | R | DELETE | Delete a specific application task |
/api/v9/applications/ID/tasks/ID/status | R | GET, HEAD | Get the status of a specific application task |
/api/v9/applications/ID/tasks/ID/status | R | PUT | Set the status to the application task in question |
/api/v9/applications/ID/tasks/ID/documents | C | GET, HEAD | Get a list of documents attached to this task |
/api/v9/applications/ID/tasks/ID/documents | C | POST | Upload a new document to a task |
/api/v9/applications/ID/tasks/ID/documents/zip | R | GET, HEAD | Get all documents attached to a task (binary data) |
/api/v9/applications/ID/tasks/ID/documents/ID | R | GET, HEAD | Get a specific document from this task (binary data) |
/api/v9/applications/ID/exports | C | GET, HEAD | List all exports that have been generated from the application in question |
/api/v9/applications/ID/exports/ID | R | GET, HEAD | Fetch a specific application export identified by the export ID |
/api/v9/applications/ID/exports/ID/blobs | C | GET, HEAD | Get a list of the downloadable files (blobs) regarding this export |
/api/v9/applications/ID/exports/ID/blobs/blob | R | GET, HEAD | Retrieve a downloadable file (blob) regarding this export |
/api/v9/applications/ID/documents | C | GET, HEAD | Get a list of documents attached to this application |
/api/v9/applications/ID/documents | C | POST | Upload a new document to this application |
/api/v9/applications/ID/documents/zip | R | GET, HEAD | Get all documents attached to an application (binary data) |
/api/v9/applications/ID/documents/ID | R | GET, HEAD | Get a specific applicant document (binary data) |
/api/v9/applications/ID/scores | C | GET, HEAD | Get a list of scores for this application |
/api/v9/applications/ID/pdf | C | GET, HEAD | Get the PDF printout of this application |
/api/v9/applications/ID/invoices | C | GET, HEAD | List invoices for this application |
/api/v9/applications/ID/invoices | C | POST | Create an invoice for this application |
/api/v9/applications/ID/invoices/ID | R | GET, HEAD | Get information about an application invoice |
/api/v9/applications/ID/references | C | GET, HEAD | List references submitted for the application |
/api/v9/applications/ID/references/ID | R | GET, HEAD | Get information about a reference submitted for the application |
/api/v9/applications/flags | C | GET, HEAD | Get a list of all flags |
/api/v9/applications/flags | C | POST | Create a new flag |
/api/v9/applications/flags/ID | R | GET, HEAD | Get information about a specific flag |
/api/v9/applications/flags/ID | R | DELETE | Delete a flag, removing it from all applications |
/api/v9/applications/statuses | R | GET, HEAD | Get a list of all application statuses |
/api/v9/applications/offers/types | R | GET, HEAD | Get a list of all offer types |
/api/v9/applications/offers/types/id | R | GET, HEAD | Get information about a specific offer type |
GET List applications
Retrieve a list of applications that match the set filtering criteria. As per norm, the HEAD verb is useful to just test if such an application exists (and how many).
There is a hard limit of 32768 items returned, which is capped to 8192 if the expand parameter is used.
Syntax
GET /api/v9/applications
Host: apply.example.edu
Authorization: DREAM apikey="..."Parameters
| Name | Required/Optional | Description | Notes |
|---|---|---|---|
byAcademicTermID | Required (either one) | The academic term to filter by. | |
byAcademicYear | The academic year to filter by. | ||
byAcademicYears | The academic years to filter by. | ||
byCommenceYear | Year number, for example "2015". Please use the academic year or term now. | ||
byApplicantIDs | Optional | List of applicant IDs. An application will match if it belongs to one of the listed applicants. | [1] |
byStatuses | Optional | List of application statuses. | [1] |
byCreatedSince | Optional | ISO 8601 datetime. Only show applications created after this. | |
byRevisedSince | Optional | ISO 8601 datetime. Only show applications revised after this. | |
bySubmittedSince | Optional | ISO 8601 datetime. Only show applications submitted after this. | |
byCourseIDs | Optional | List of course IDs. An application will match if it contains at least one of the listed courses. | [1] |
byCourseTypes | Optional | List of course types. An application will match if it contains at least one course of the listed types. | [1] |
byCourseInstitutionIDs | Optional | List of institution IDs. An application will match if it contains at least one course from the listed institutions. | [1] |
byCourseIntakeIDs | Optional | List of intake IDs. An application will match if it contains at least one course under the listed intakes. | [1] |
byOfferTypes | Optional | List of offer types. An application will match if it contains at least one offer of the listed types. | [1], [2] |
byOfferDecisions | Optional | List of offer decisions. | [1], [2] |
byOfferInstitutionIDs | Optional | List of institution IDs. An application will match if it contains at least one offer from the listed institutions. | [1] |
byFlagIDs | Optional | List of flag IDs. | [1], [3] |
limit | Optional | How many applications to return (Allowed range is normally 1..32768, 32768 being the default). If the expand parameter is used, the limit is 8192. | |
expand | Optional | Expand the chosen relational element(s), for example applicant,offer. | [4] |
Notes
- Note [1]: Lists can be either comma or space separated. All list items are combined with logical
ORoperators — in other words an application is considered matching if it matches to any of the values in the list. - Note [2]: This limits selection to applications that have been submitted, since offers (initially in “Unreplied” status) will be created while submitting an application. An application may contain any number of courses, but they will be turned into offers only at submission. This also applies to edits made after submission. For example an applicant may add a course after submission, but the corresponding offer will appear only after submission.
- Note [3]: Currently only one flag ID can be listed. This limitation will be lifted at a later date.
- Note [4]: Some elements in the returned objects are links to other API requests. Using the
expandparameter, it is possible to expand this data to the actual records, saving additional API requests. The full list of possible expansions isapplicant,flags,courses,offers,documents,tasks,scores,references. You can set one or multiple expansions, combining them in a comma-separated fashion to theexpandparameter. Note also that using this parameter caps tolimitto 8192 due to performance reasons.
Example request
Request
curl
curl \
-X GET \
-H "Authorization: DREAM apikey=\"YOUR-API-KEY\"" \
"https://apply.example.edu/api/v9/applications?byAcademicTermID=27&byCreatedSince=2025-10-01T00:00:00&byFlagIds=8"Response headers
| Header | Value | Description |
|---|---|---|
Content-Type | application/json | Media type of the resource |
Content-Length | 1456 | Size of the response body in bytes |
X-Count | 15 | Number of matching applications |
Response codes
| Response code | Description |
|---|---|
200 OK | The list of applications was returned |
400 Bad Request | One of query parameters is invalid, see the error description |
Example response
Response
{
"123": {
"id": 123,
"created": "2025-10-07T07:09:15+00:00",
"revised": "2025-10-08T12:20:17+00:00",
"submitted": "2025-10-10T07:00:06+00:00",
"status": "Reopened",
"category": {
"id": 2,
"title": "International",
"colour": "#00ff00",
"mode": "Public"
},
"academic_term": "/api/v9/academic-terms/27",
"applicant": "/api/v9/applicants/321",
"flags": "/api/v9/applications/123/flags",
"courses": "/api/v9/applications/123/courses",
"offers": "/api/v9/applications/123/offers",
"exports": "/api/v9/applications/123/exports",
"documents": "/api/v9/applications/123/documents",
"references": "/api/v9/applications/123/references",
"scores": "/api/v9/applications/123/scores",
"tasks": "/api/v9/applications/123/tasks",
"pdf": "/api/v9/applications/123/pdf"
},
"124": {
"id": 124,
"created": "2025-10-27T08:22:40+00:00",
"revised": "2025-11-25T12:00:50+00:00",
"submitted": "2025-11-03T14:32:32+00:00",
"status": "Submitted",
"category": {
"id": 2,
"title": "International",
"colour": "#00ff00",
"mode": "Public"
},
"academic_term": "/api/v9/academic-terms/27",
"applicant": "/api/v9/applicants/322",
"flags": "/api/v9/applications/124/flags",
"courses": "/api/v9/applications/124/courses",
"offers": "/api/v9/applications/124/offers",
"exports": "/api/v9/applications/124/exports",
"documents": "/api/v9/applications/124/documents",
"references": "/api/v9/applications/124/references",
"scores": "/api/v9/applications/124/scores",
"tasks": "/api/v9/applications/124/tasks",
"pdf": "/api/v9/applications/124/pdf"
}
}POST Create an application
Create a new application with minimal initial data: applicant, intake and course.
Depending on the provided parameters, the request can result in two possible outcomes:
- Create a new application: If no application exists for the applicant and intake, a new standalone application is created
- Add a course to the application: If an application already exists for the applicant in the intake, the provided course is added to the application.
After creating an application, you can manage its content using the following requests:
- Update application data:
PATCH/api/v9/applications/ID/ - Add courses to the application:
POST/api/v9/applications/ID/courses - Set course priority:
PUT/api/v9/applications/ID/courses/ID/priority
Validation rules
The API validates the following conditions before processing the request:
- The applicant must have the citizenship set.
- The applicant must have the category set (if public categories are set up).
- The application limits must not be exceeded.
- An existing application must not be closed, withdrawn or expired.
The following limitations are not enforced during this request:
- Course-level restrictions (such as territory requirements)
- Intake limitations (such as category eligibility or territory-specific deadlines)
- Course status checks (for example,
Onlinevs.Standby)
If legacy business rules are enabled for the DreamApply instance, the request will be blocked.
Syntax
POST /api/v9/applications
Host: apply.example.edu
Authorization: DREAM apikey="..."Parameters
| Name | Required/Optional | Description |
|---|---|---|
applicant | Required | The applicant ID |
intake | Required | The ID of the intake with which the course is associated |
course | Required | The ID of the course to be added to the application |
Example request
Request
curl
curl \
-X POST \
-H "Authorization: DREAM apikey=\"YOUR-API-KEY\"" \
"https://apply.example.edu/api/v9/applications?applicant=123&intake=1&course=2"Response headers
| Header | Value | Description |
|---|---|---|
Content-Type | text/html; charset=UTF-8 | Media type of the resource |
Content-Length | 0 | Size of the response body in bytes |
Location | /api/applications/123 | URI of the created/updated application |
Response codes
| Response code | Description |
|---|---|
201 Created | A new application was successfully created/ The existing application was updated |
400 Bad Request | The required parameters are not set, see the error description |
400 Bad Request | A data validation check has failed, see the error description |
400 Bad Request | The course is already added to the application |