> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs-unsw-v6.advance-uac.com/unsw-advance-institution-api/applications/correct-an-application/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs-unsw-v6.advance-uac.com/_mcp/server. # Correct an application PATCH https://unsw-v6-dev.advance-uac.com/institution-api/institution/applications/{id} Content-Type: application/json Corrects an application you have already sent us, following JSON Merge Patch (RFC 7386): * a field you **omit** is left alone * a field you send as **null** is cleared * an **unknown** field name is a 400, rather than a silent no-op you would never notice You can correct `sourceName`, `sourceRef`, `programCode`, `year`, `stream`, `intakeCode`, `specialisations` and `description`. `programCode` and `year` name a program together, so sending only one keeps the other: send `year` alone to move the same program code to a different commencement year. `specialisations` replaces the whole set, the way `sources` does — send them all to change one, an empty array to remove them. It is NOT refused after assessment: nothing is assessed against a specialisation. **Three things it will refuse.** * `programCode`, `year` or `stream` on an application that has already been assessed. The credit granted was worked out against the ones it had then, and nothing here can work it out again — that is a 409, and the answer is a new application. * A `sourceRef` already recorded against a different application of yours: also a 409, naming the application that holds it. * Clearing `programCode` or `year`, or clearing `sourceName` while a `sourceRef` remains — an id with no system to interpret it is not findable. Qualifications are not patched here. Add one with POST /institution/applications/\{id}/qualifications. Reference: https://docs-unsw-v6.advance-uac.com/unsw-advance-institution-api/applications/correct-an-application ## Authentication - `Authorization` header (bearer token, required) — Paste a Keycloak access token (no "Bearer " prefix) ## Servers - `https://unsw-v6-dev.advance-uac.com/institution-api` (Dev, default) - `https://unsw-v6-test.advance-uac.com/institution-api` (Test) ## Request ### Path parameters - `id` (string, required) ### Body (application/json) This endpoint expects an ApplicationPatch. - `sourceName` (string, optional) — The system this record was fed from, in your own vocabulary. Free text, and required whenever you send a sourceRef. - `sourceRef` (string, optional) — Your own unique id for this application, e.g. an application number. Unique per `sourceName`. - `sources` (list of ApplicationSourceReference, optional) — Replaces ALL of your references for this record. Omit the field to leave them alone; send an empty array to remove them. `sourceName` and `sourceRef` still edit the FIRST reference on its own and leave any others untouched, so an existing integration is unaffected. If you send both forms, `sources` wins. - `programCode` (string, optional) — The programme applied for, e.g. "4825". Resolved together with `year`. - `year` (integer, optional) — Commencement (cohort) year. Resolved together with `programCode`: send just this to keep the same programme code in a different year. - `stream` (string, optional) — Admission stream, e.g. "DOMESTIC_FP". - `intakeCode` (string, optional) — Your own code for the intake, e.g. "5269". Send null to clear it. Correctable even after the application has been assessed, unlike `programCode`, `year` and `stream`. Nothing is assessed against the intake — it says which term the applicant is starting, not which rules their credit was worked out under — so changing it leaves the credit already granted true. - `description` (string, optional) — Free-text note. ## Response ### 200 The supplied fields were applied; everything else is unchanged. - `id` (string, optional) - `applicantId` (string, optional) - `programCode` (string, optional) - `year` (integer, optional) - `stream` (string, optional) - `intakeCode` (string, optional) — Your own code for the intake the applicant is starting, e.g. "5269" for Term 3 2026. Optional, but worth sending: our officers work applications in intake order, and one with no intake cannot be prioritised against the rest. Send the code rather than the name. These are YOUR term codes, loaded from the intake schedule you supply us, so a code you use is a code we hold; one we do not recognise is refused with a 400 naming it. - `intake` (string, optional) — The intake's name, e.g. "Term 3 2026". Null when no intake is set. - `status` (string, optional) — Application status: RECEIVED, READY, PROCESSING, WITHDRAWN or FAILED. - `statusDetail` (string, optional) — Failure detail when status is FAILED; null otherwise. - `workflowStatus` (string, optional) — Assessment workflow status once processed (e.g. DECIDED, CREDIT_TEAM_REVIEW); null while RECEIVED. - `qualifications` (list of QualificationView, optional) - `sourceName` (string, optional) — The system this record was fed from, in your own vocabulary. Free text, and required whenever you send a sourceRef. - `sourceRef` (string, optional) — Your own unique id for this application, e.g. an application number. Unique per `sourceName`. - `sources` (list of ApplicationSourceReference, optional) — Your own references for this record, one per system you keep it in. A person or an application known by a different id in SITS than elsewhere carries both. Optional. `sourceName` and `sourceRef` still work exactly as before and count as the FIRST entry here, so nothing you have already built needs to change. Send both forms and they are combined, with duplicates collapsed. Order matters: the first entry is the one echoed back as `sourceRef`, and the one shown in lists and in the change feed. - `specialisations` (list of ApplicationSpecialisation, optional) — The specialisations this application is for, in the order they were chosen. Empty when there are none. - `submittedAt` (datetime, optional) - `updatedAt` (datetime, optional) ## Errors ### 400 Bad Request Error An unknown field name, a value of the wrong type, or a programCode and year naming no programme. - `status` (integer, optional) — Repeats the HTTP status code. - `error` (string, optional) — What went wrong, in a form safe to show a developer. ### 404 Not Found Error No such resource for this institution. - `status` (integer, optional) — Repeats the HTTP status code. - `error` (string, optional) — What went wrong, in a form safe to show a developer. ### 409 Conflict Error Either the sourceRef is already on another application, or the application has been assessed and you tried to move its programme, year or stream. - `status` (integer, optional) — Repeats the HTTP status code. - `error` (string, optional) — What went wrong, in a form safe to show a developer. ## Types ### ApplicationSourceReference One of your own references for this record: the system it came from, and its id there. - `sourceName` (string, optional) — The system this record was fed from, in your own vocabulary. Free text, and required whenever you send a sourceRef. - `sourceRef` (string, optional) — Your own unique id for this application, e.g. an application number. Unique per `sourceName`. ### QualificationView A qualification as stored. - `id` (string, optional) - `type` (string, optional) — tertiary | subject | work_experience. - `parentId` (string, optional) — The qualification this one sits under — a subject's degree. Null for a top-level qualification. - `data` (map from string to any, optional) — The type-specific fields, consolidated across every source that has reported this qualification. - `documentCount` (integer, optional) — How many supporting documents are attached, so you can tell at a glance whether evidence has been uploaded. Counts confirmed uploads only; list them with GET /institution/qualifications/\{id}/documents. ### ApplicationSpecialisation One specialisation an application is for. `code` and `year` are what the application recorded; `name` and `type` are the catalogue's own words and are null if the catalogue no longer holds that specialisation. - `code` (string, optional) - `year` (integer, optional) — Handbook year, the application's own year. - `name` (string, optional) - `type` (string, optional) — Major, Minor, Honours, Specialisation or Research. ## Examples **Request** ```json { "sourceName": "SITS", "sourceRef": "APP-2026-00123", "stream": "DOMESTIC_FP", "specialisations": [ "SOCAE1", "THSTC1" ] } ``` **Response** ```json { "id": "string", "applicantId": "string", "programCode": "string", "year": 1, "stream": "string", "intakeCode": "5269", "intake": "string", "status": "string", "statusDetail": "string", "workflowStatus": "string", "qualifications": [ { "id": "string", "type": "string", "parentId": "string", "data": {}, "documentCount": 1 } ], "sourceName": "SITS", "sourceRef": "APP-2026-00123", "sources": [ { "sourceName": "SITS", "sourceRef": "APP-2026-00123" } ], "specialisations": [ { "code": "SOCAE1", "year": 2026, "name": "Sociology", "type": "Major" } ], "submittedAt": "2022-03-10T12:15:50-04:00", "updatedAt": "2022-03-10T12:15:50-04:00" } ``` **SDK Code** ```python Correct the stream and add your own reference import requests url = "https://unsw-v6-dev.advance-uac.com/institution-api/institution/applications/id" payload = { "sourceName": "SITS", "sourceRef": "APP-2026-00123", "stream": "DOMESTIC_FP", "specialisations": ["SOCAE1", "THSTC1"] } headers = { "Authorization": "Bearer ", "Content-Type": "application/json" } response = requests.patch(url, json=payload, headers=headers) print(response.json()) ``` ```javascript Correct the stream and add your own reference const url = 'https://unsw-v6-dev.advance-uac.com/institution-api/institution/applications/id'; const options = { method: 'PATCH', headers: {Authorization: 'Bearer ', 'Content-Type': 'application/json'}, body: '{"sourceName":"SITS","sourceRef":"APP-2026-00123","stream":"DOMESTIC_FP","specialisations":["SOCAE1","THSTC1"]}' }; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go Correct the stream and add your own reference package main import ( "fmt" "strings" "net/http" "io" ) func main() { url := "https://unsw-v6-dev.advance-uac.com/institution-api/institution/applications/id" payload := strings.NewReader("{\n \"sourceName\": \"SITS\",\n \"sourceRef\": \"APP-2026-00123\",\n \"stream\": \"DOMESTIC_FP\",\n \"specialisations\": [\n \"SOCAE1\",\n \"THSTC1\"\n ]\n}") req, _ := http.NewRequest("PATCH", url, payload) req.Header.Add("Authorization", "Bearer ") req.Header.Add("Content-Type", "application/json") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby Correct the stream and add your own reference require 'uri' require 'net/http' url = URI("https://unsw-v6-dev.advance-uac.com/institution-api/institution/applications/id") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Patch.new(url) request["Authorization"] = 'Bearer ' request["Content-Type"] = 'application/json' request.body = "{\n \"sourceName\": \"SITS\",\n \"sourceRef\": \"APP-2026-00123\",\n \"stream\": \"DOMESTIC_FP\",\n \"specialisations\": [\n \"SOCAE1\",\n \"THSTC1\"\n ]\n}" response = http.request(request) puts response.read_body ``` ```java Correct the stream and add your own reference import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.patch("https://unsw-v6-dev.advance-uac.com/institution-api/institution/applications/id") .header("Authorization", "Bearer ") .header("Content-Type", "application/json") .body("{\n \"sourceName\": \"SITS\",\n \"sourceRef\": \"APP-2026-00123\",\n \"stream\": \"DOMESTIC_FP\",\n \"specialisations\": [\n \"SOCAE1\",\n \"THSTC1\"\n ]\n}") .asString(); ``` ```php Correct the stream and add your own reference request('PATCH', 'https://unsw-v6-dev.advance-uac.com/institution-api/institution/applications/id', [ 'body' => '{ "sourceName": "SITS", "sourceRef": "APP-2026-00123", "stream": "DOMESTIC_FP", "specialisations": [ "SOCAE1", "THSTC1" ] }', 'headers' => [ 'Authorization' => 'Bearer ', 'Content-Type' => 'application/json', ], ]); echo $response->getBody(); ``` ```csharp Correct the stream and add your own reference using RestSharp; var client = new RestClient("https://unsw-v6-dev.advance-uac.com/institution-api/institution/applications/id"); var request = new RestRequest(Method.PATCH); request.AddHeader("Authorization", "Bearer "); request.AddHeader("Content-Type", "application/json"); request.AddParameter("application/json", "{\n \"sourceName\": \"SITS\",\n \"sourceRef\": \"APP-2026-00123\",\n \"stream\": \"DOMESTIC_FP\",\n \"specialisations\": [\n \"SOCAE1\",\n \"THSTC1\"\n ]\n}", ParameterType.RequestBody); IRestResponse response = client.Execute(request); ``` ```swift Correct the stream and add your own reference import Foundation let headers = [ "Authorization": "Bearer ", "Content-Type": "application/json" ] let parameters = [ "sourceName": "SITS", "sourceRef": "APP-2026-00123", "stream": "DOMESTIC_FP", "specialisations": ["SOCAE1", "THSTC1"] ] as [String : Any] let postData = JSONSerialization.data(withJSONObject: parameters, options: []) let request = NSMutableURLRequest(url: NSURL(string: "https://unsw-v6-dev.advance-uac.com/institution-api/institution/applications/id")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "PATCH" request.allHTTPHeaderFields = headers request.httpBody = postData as Data let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume() ```