> For the complete documentation index, see [llms.txt](https://synap.ac/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://synap.ac/docs/api/reference/preflight/get-preflightrun.md).

# Get PreflightRun

```json
{"openapi":"3.0.1","info":{"title":"Synap API","version":"3.0.0"},"tags":[{"name":"Preflight","description":"Endpoints related to the checks a candidate runs before an exam."}],"servers":[{"url":"https://api.synap.ac/v3","description":"Production"},{"url":"https://api-stage.synap.ac/v3","description":"Staging"}],"security":[{"SessionAuth":[]},{"PATAuth":[]},{"AutomationAuth":[]},{"LegacySessionAuth":[]}],"components":{"securitySchemes":{"SessionAuth":{"type":"http","scheme":"bearer","description":"Authorize the request using a Session Token.","bearerFormat":"r:<token>"},"PATAuth":{"type":"http","scheme":"bearer","description":"Authorise the request using a personal access token.","bearerFormat":"p:"},"AutomationAuth":{"type":"http","scheme":"bearer","description":"Authorise the request with a short-lived token signed by the automations engine on behalf of a workflow owner.","bearerFormat":"a:<token>"},"LegacySessionAuth":{"type":"apiKey","description":"[Legacy] Authorize the request using a Session Token.","in":"header","name":"X-Syn-Session-Token"}},"schemas":{"ObjectId":{"type":"string","description":"The primary key for each resource."},"PreflightRun":{"type":"object","required":["id","type"],"properties":{"id":{"$ref":"#/components/schemas/ObjectId"},"type":{"type":"string","description":"Identifies the Resource.","enum":["PreflightRun"]},"attributes":{"type":"object","properties":{"type":{"type":"string","enum":["exam_preflight","exam_systems_check"],"description":"What the run is for. exam_preflight leads into the exam and is refused before the entry window opens. exam_systems_check is a practice check a candidate can run at any time before submitting: it never starts the exam and never counts towards admission."},"createdAt":{"type":"string","format":"date-time","readOnly":true},"client":{"type":"object","readOnly":true,"nullable":true,"description":"What the candidate was using when the run began. Only served to reviewers.","properties":{"ipAddress":{"type":"string"},"userAgent":{"type":"string"},"region":{"type":"string"},"webVersion":{"type":"string"},"desktopVersion":{"type":"string"},"extensionVersion":{"type":"string"},"os":{"type":"string"},"browser":{"type":"string"},"timezone":{"type":"string"},"locale":{"type":"string"},"synopticLevel":{"type":"string"},"systemsCheckRunId":{"type":"string"}}},"payloadRedactedAt":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"When the personal details of client (IP address, user agent, time zone and locale) were removed. Only served to reviewers."},"authoritative":{"type":"boolean","readOnly":true,"description":"Whether this is the newest preflight of its attempt. Progress updates also return false when another browser or desktop session has resumed the run and replaced the writer."},"writerGeneration":{"type":"integer","minimum":1,"description":"Issued on creation and resume. Progress updates must send the generation issued to that reporter; resuming invalidates earlier generations."},"requestSequence":{"type":"integer","minimum":1,"maximum":9007199254740991,"writeOnly":true,"description":"Increasing request number within the issued writer generation. Older or repeated updates are ignored."},"source":{"type":"string","enum":["browser","desktop"],"writeOnly":true,"description":"Create or resume: whether this reporter is the browser or desktop app."},"progress":{"type":"object","readOnly":true,"nullable":true,"description":"Where the candidate is up to in the preflight journey. Only served to reviewers.","required":["lastSeenAt"],"properties":{"lastSeenAt":{"type":"string","format":"date-time"},"writer":{"type":"object","required":["generation","source","startedAt"],"properties":{"generation":{"type":"integer","minimum":1},"source":{"type":"string","enum":["browser","desktop"]},"startedAt":{"type":"string","format":"date-time"},"environment":{"type":"object","properties":{"webVersion":{"type":"string"},"desktopVersion":{"type":"string"},"extensionVersion":{"type":"string"},"os":{"type":"string"},"browser":{"type":"string"}}}}},"requestSequence":{"type":"integer","minimum":1,"maximum":9007199254740991},"currentStep":{"type":"string","pattern":"^[a-z][a-z0-9-]{0,31}$","description":"The key of a preflight journey step."},"visible":{"type":"boolean","description":"Whether the preflight page was visible when last seen."},"route":{"type":"string","maxLength":128},"completedAt":{"type":"string","format":"date-time"},"plannedSteps":{"type":"array","maxItems":30,"description":"The steps the journey will take the candidate through, in order.","items":{"type":"string","pattern":"^[a-z][a-z0-9-]{0,31}$","description":"The key of a preflight journey step."}},"device":{"type":"object","required":["clientTime","screenWidth","screenHeight","windowWidth","windowHeight","isFullscreen"],"description":"What the candidate's device reported when it last checked in: its clock, screen and window size, whether the page is full screen, and its connection.","properties":{"clientTime":{"type":"string","format":"date-time","description":"The time on the device's own clock."},"pageUrl":{"type":"string","maxLength":300,"description":"The address the candidate is using, without any query string or fragment."},"screenWidth":{"type":"integer","minimum":0,"maximum":32768},"screenHeight":{"type":"integer","minimum":0,"maximum":32768},"windowWidth":{"type":"integer","minimum":0,"maximum":32768},"windowHeight":{"type":"integer","minimum":0,"maximum":32768},"windowX":{"type":"integer","description":"Distance from the left of the screen to the browser window.","minimum":-32768,"maximum":32768},"windowY":{"type":"integer","description":"Distance from the top of the screen to the browser window.","minimum":-32768,"maximum":32768},"isExtendedDisplay":{"type":"boolean","description":"Whether the device has more than one screen, when the browser says."},"mediaDevices":{"type":"array","description":"The cameras and microphones the browser can see.","maxItems":20,"items":{"type":"object","required":["kind"],"properties":{"kind":{"type":"string","enum":["audioinput","videoinput"]},"label":{"type":"string","maxLength":120},"selectable":{"type":"boolean","description":"Whether this device appears in the candidate picker after filtering and deduplication."}}}},"screenShare":{"type":"object","description":"The active screen capture track, when available. This does not identify a primary or external display.","required":["active"],"properties":{"active":{"type":"boolean"},"label":{"type":"string","maxLength":120},"surface":{"type":"string","enum":["monitor","window","browser"]},"width":{"type":"integer","minimum":0,"maximum":32768},"height":{"type":"integer","minimum":0,"maximum":32768}}},"pixelRatio":{"type":"number","minimum":0,"maximum":16},"isFullscreen":{"type":"boolean"},"memoryGb":{"type":"number","minimum":0},"cpuCores":{"type":"integer","minimum":0},"architecture":{"type":"string","maxLength":16},"bitness":{"type":"string","maxLength":8},"connection":{"type":"object","description":"What the browser reports about the connection. Not every browser reports it.","properties":{"effectiveType":{"type":"string","enum":["slow-2g","2g","3g","4g"]},"type":{"type":"string","maxLength":16},"downlinkMbps":{"type":"number","minimum":0},"rttMs":{"type":"integer","minimum":0},"saveData":{"type":"boolean"}}}}},"status":{"type":"object","description":"A snapshot of what the candidate page can see right now. It replaces the previous snapshot.","properties":{"stage":{"type":"string","pattern":"^[a-z][a-z0-9-]{0,31}$","description":"Where the candidate is within the current step."},"blockedApps":{"type":"array","maxItems":20,"description":"Names of prohibited apps found running. Only a systems check reports these, and only reviewers see them.","items":{"type":"string","maxLength":60}},"facts":{"type":"object","description":"Things that are true or false right now, such as whether the camera is live.","additionalProperties":{"type":"boolean"}},"checks":{"type":"object","description":"The live readiness of each requirement the journey checks before the exam can start.","additionalProperties":{"type":"string","enum":["ok","attention","blocked"]}}}},"steps":{"type":"object","additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string","enum":["started","completed","failed","skipped"]},"startedAt":{"type":"string","format":"date-time"},"completedAt":{"type":"string","format":"date-time"},"errorCode":{"type":"string","pattern":"^[a-z][a-z0-9_-]{0,63}$","description":"The key of the error the candidate was shown."}}}},"events":{"type":"array","description":"The most recent milestones, oldest first.","items":{"type":"object","required":["at","type"],"properties":{"at":{"type":"string","format":"date-time"},"writerGeneration":{"type":"integer","minimum":1},"source":{"type":"string","enum":["browser","desktop"]},"type":{"type":"string","enum":["step_started","step_completed","step_failed","step_skipped","journey_completed","restarted","handed_off"]},"step":{"type":"string","pattern":"^[a-z][a-z0-9-]{0,31}$","description":"The key of a preflight journey step."},"errorCode":{"type":"string","pattern":"^[a-z][a-z0-9_-]{0,63}$","description":"The key of the error the candidate was shown."}}}}}},"network":{"type":"object","readOnly":true,"nullable":true,"description":"How the network checks of this run went, including the results the candidate is not shown. Only served to reviewers.","properties":{"checksStarted":{"type":"integer","minimum":0},"checks":{"type":"array","description":"The most recent checks, oldest first.","items":{"type":"object","required":["id","tier","startedAt"],"properties":{"id":{"type":"string"},"tier":{"type":"string","enum":["basic","audio","video"],"description":"What the exam asks of the candidate’s connection: nothing recorded, audio, or video."},"startedAt":{"type":"string","format":"date-time"},"writerGeneration":{"type":"integer","minimum":1},"completedAt":{"type":"string","format":"date-time"},"metrics":{"type":"object","additionalProperties":false,"required":["durationMs"],"description":"What the candidate’s browser measured. Every part is optional except how long the check took, and a part the browser could not measure is left out.","properties":{"durationMs":{"type":"number","minimum":0,"maximum":600000},"reachability":{"type":"object","additionalProperties":false,"description":"Whether the browser got any answer at all from the exam’s own hosts, which the probes it was handed point at. A part the browser could not test is left out.","properties":{"files":{"type":"boolean","description":"The host exam media is served from."},"storage":{"type":"boolean","description":"The accelerated storage endpoint answers are uploaded to."},"synoptic":{"type":"boolean","description":"The proctoring server answered over a WebSocket. Only for a proctored attempt."},"turn":{"type":"boolean","description":"The video relay handed out a relay candidate. Only for a proctored attempt."}}},"synopticSocket":{"type":"object","additionalProperties":false,"required":["heldMs","closedEarly"],"description":"How the proctoring socket fared once it had answered: the browser holds it open for the rest of the check, so a network that lets a WebSocket open and then cuts it off shows up here. Left out when the socket never answered.","properties":{"heldMs":{"type":"number","minimum":0,"maximum":600000,"description":"How long the socket stayed open before the browser let it go, or before the network closed it."},"closedEarly":{"type":"boolean","description":"The network closed the socket before the browser let it go."},"closeCode":{"type":"integer","minimum":0,"maximum":65535,"description":"The WebSocket close code, when the network closed it."}}},"probes":{"type":"object","additionalProperties":false,"required":["attempts","failures"],"description":"Every small request made during the check: reachability probes, API pings and the latency requests.","properties":{"attempts":{"type":"integer","minimum":0,"maximum":10000},"failures":{"type":"integer","minimum":0,"maximum":10000}}},"api":{"type":"object","additionalProperties":false,"required":["count","failures"],"properties":{"count":{"type":"integer","minimum":0,"maximum":10000},"failures":{"type":"integer","minimum":0,"maximum":10000},"medianMs":{"type":"number","minimum":0,"maximum":600000},"p95Ms":{"type":"number","minimum":0,"maximum":600000}},"description":"Authenticated pings of the API."},"latency":{"type":"object","additionalProperties":false,"description":"Small requests to the download host, while nothing else was moving and while a transfer was.","properties":{"idle":{"type":"object","additionalProperties":false,"required":["count","failures"],"properties":{"count":{"type":"integer","minimum":0,"maximum":10000},"failures":{"type":"integer","minimum":0,"maximum":10000},"medianMs":{"type":"number","minimum":0,"maximum":600000},"p95Ms":{"type":"number","minimum":0,"maximum":600000}}},"loaded":{"type":"object","additionalProperties":false,"required":["count","failures"],"properties":{"count":{"type":"integer","minimum":0,"maximum":10000},"failures":{"type":"integer","minimum":0,"maximum":10000},"medianMs":{"type":"number","minimum":0,"maximum":600000},"p95Ms":{"type":"number","minimum":0,"maximum":600000}}}}},"download":{"type":"object","additionalProperties":false,"required":["bytes","durationMs","failed","aborted"],"properties":{"bytes":{"type":"number","minimum":0,"maximum":1000000000},"durationMs":{"type":"number","minimum":0,"maximum":600000},"throughputMbps":{"type":"number","minimum":0,"maximum":100000},"longestStallMs":{"type":"number","minimum":0,"maximum":600000,"description":"The longest stretch in which no data moved while the transfer was under way."},"failed":{"type":"boolean","description":"The request errored."},"aborted":{"type":"boolean","description":"The client gave up because no data moved for several seconds. A transfer that was only cut off by the time allowed, while still moving, is neither failed nor aborted."}}},"upload":{"type":"object","additionalProperties":false,"required":["bytes","durationMs","failed","aborted"],"properties":{"bytes":{"type":"number","minimum":0,"maximum":1000000000},"durationMs":{"type":"number","minimum":0,"maximum":600000},"throughputMbps":{"type":"number","minimum":0,"maximum":100000},"longestStallMs":{"type":"number","minimum":0,"maximum":600000,"description":"The longest stretch in which no data moved while the transfer was under way."},"failed":{"type":"boolean","description":"The request errored."},"aborted":{"type":"boolean","description":"The client gave up because no data moved for several seconds. A transfer that was only cut off by the time allowed, while still moving, is neither failed nor aborted."}}},"connection":{"type":"object","additionalProperties":false,"description":"What the browser says about the connection, kept as context only.","properties":{"effectiveType":{"type":"string","maxLength":16},"downlinkMbps":{"type":"number","minimum":0,"maximum":100000},"rttMs":{"type":"number","minimum":0,"maximum":600000},"saveData":{"type":"boolean"}}}}},"verdict":{"type":"object","required":["thresholdsVersion","overall","candidateOverall","findings"],"properties":{"thresholdsVersion":{"type":"integer","minimum":1},"overall":{"type":"string","enum":["ok","warn","error"]},"candidateOverall":{"type":"string","enum":["ok","warn","error"],"description":"What the candidate was shown, which only counts the results that clearly mean trouble."},"findings":{"type":"array","items":{"type":"object","required":["id","status","candidateVisible"],"properties":{"id":{"type":"string"},"status":{"type":"string","enum":["ok","warn","error"]},"reason":{"type":"string"},"candidateVisible":{"type":"boolean"}}}}}}}}}}},"systemsCheckRunId":{"type":"string","maxLength":64,"writeOnly":true,"description":"Preflight create only: the id of the systems check the candidate completed in this browser. Kept on the run when it is a completed systems check of the same attempt, and ignored otherwise."},"webVersion":{"type":"string","writeOnly":true,"description":"The version of the web app in use. Best effort: it is cut to 64 characters if longer and never causes the run to be refused."},"desktopVersion":{"type":"string","writeOnly":true,"description":"The version of the desktop proctoring application, when one is in use. Best effort: it is cut to 64 characters if longer and never causes the run to be refused."},"extensionVersion":{"type":"string","writeOnly":true,"description":"The version of the browser extension, when one is in use. Best effort: it is cut to 64 characters if longer and never causes the run to be refused."},"os":{"type":"string","writeOnly":true,"description":"The operating system, as the browser reports it. Best effort: it is cut to 64 characters if longer and never causes the run to be refused."},"browser":{"type":"string","writeOnly":true,"description":"The browser, as it reports itself. Best effort: it is cut to 64 characters if longer and never causes the run to be refused."},"timezone":{"type":"string","writeOnly":true,"description":"The time zone of the device. Best effort: it is cut to 64 characters if longer and never causes the run to be refused."},"locale":{"type":"string","writeOnly":true,"description":"The language the device is set to. Best effort: it is cut to 64 characters if longer and never causes the run to be refused."},"synopticLevel":{"type":"string","writeOnly":true,"description":"The level of proctoring software the journey is running in. Best effort: it is cut to 64 characters if longer and never causes the run to be refused."},"resumeRunId":{"type":"string","maxLength":64,"writeOnly":true,"description":"Create: the run this browser holds the key for, to resume it instead of starting another."},"resumeKey":{"type":"string","minLength":16,"maxLength":128,"writeOnly":true,"description":"Create: the key issued when that run was created."},"takeover":{"type":"boolean","writeOnly":true,"description":"Create: end a preflight that is in progress on another device and start one here."},"key":{"type":"string","minLength":16,"maxLength":128,"description":"Returned once, when a run is created, and never again. The browser keeps it and sends it with every progress update, so only that browser can write to the run."},"resumed":{"type":"boolean","readOnly":true,"description":"True when creating returned a run that was already in progress on this browser, restarted, rather than a new one."},"completedAt":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"When the journey was completed, if it has been."},"currentStep":{"type":"string","enum":["welcome","connect","confirm","system","network","displays","apps","tabs","media","speakers","room-scan","second-camera","identity","screen","full-screen","ready","results"],"description":"Progress update: the step the candidate is on. Sent with every heartbeat.","writeOnly":true},"visible":{"type":"boolean","writeOnly":true,"description":"Progress update: whether the preflight page is visible to the candidate."},"route":{"type":"string","maxLength":128,"writeOnly":true,"description":"Progress update: the name of the route the candidate is on, never a URL."},"plannedSteps":{"type":"array","writeOnly":true,"maxItems":30,"description":"Progress update: the steps the journey will take the candidate through, in order. Sent when it starts and whenever it changes.","items":{"type":"string","enum":["welcome","connect","confirm","system","network","displays","apps","tabs","media","speakers","room-scan","second-camera","identity","screen","full-screen","ready","results"],"description":"The key of a preflight journey step."}},"device":{"type":"object","required":["clientTime","screenWidth","screenHeight","windowWidth","windowHeight","isFullscreen"],"description":"What the candidate's device reported when it last checked in: its clock, screen and window size, whether the page is full screen, and its connection.","properties":{"clientTime":{"type":"string","format":"date-time","description":"The time on the device's own clock."},"pageUrl":{"type":"string","maxLength":300,"description":"The address the candidate is using, without any query string or fragment."},"screenWidth":{"type":"integer","minimum":0,"maximum":32768},"screenHeight":{"type":"integer","minimum":0,"maximum":32768},"windowWidth":{"type":"integer","minimum":0,"maximum":32768},"windowHeight":{"type":"integer","minimum":0,"maximum":32768},"windowX":{"type":"integer","description":"Distance from the left of the screen to the browser window.","minimum":-32768,"maximum":32768},"windowY":{"type":"integer","description":"Distance from the top of the screen to the browser window.","minimum":-32768,"maximum":32768},"isExtendedDisplay":{"type":"boolean","description":"Whether the device has more than one screen, when the browser says."},"mediaDevices":{"type":"array","description":"The cameras and microphones the browser can see.","maxItems":20,"items":{"type":"object","required":["kind"],"properties":{"kind":{"type":"string","enum":["audioinput","videoinput"]},"label":{"type":"string","maxLength":120},"selectable":{"type":"boolean","description":"Whether this device appears in the candidate picker after filtering and deduplication."}}}},"screenShare":{"type":"object","description":"The active screen capture track, when available. This does not identify a primary or external display.","required":["active"],"properties":{"active":{"type":"boolean"},"label":{"type":"string","maxLength":120},"surface":{"type":"string","enum":["monitor","window","browser"]},"width":{"type":"integer","minimum":0,"maximum":32768},"height":{"type":"integer","minimum":0,"maximum":32768}}},"pixelRatio":{"type":"number","minimum":0,"maximum":16},"isFullscreen":{"type":"boolean"},"memoryGb":{"type":"number","minimum":0},"cpuCores":{"type":"integer","minimum":0},"architecture":{"type":"string","maxLength":16},"bitness":{"type":"string","maxLength":8},"connection":{"type":"object","description":"What the browser reports about the connection. Not every browser reports it.","properties":{"effectiveType":{"type":"string","enum":["slow-2g","2g","3g","4g"]},"type":{"type":"string","maxLength":16},"downlinkMbps":{"type":"number","minimum":0},"rttMs":{"type":"integer","minimum":0},"saveData":{"type":"boolean"}}}},"writeOnly":true},"status":{"type":"object","description":"A snapshot of what the candidate page can see right now. It replaces the previous snapshot.","properties":{"stage":{"type":"string","pattern":"^[a-z][a-z0-9-]{0,31}$","description":"Where the candidate is within the current step."},"blockedApps":{"type":"array","maxItems":20,"description":"Names of prohibited apps found running. Only a systems check reports these, and only reviewers see them.","items":{"type":"string","maxLength":60}},"facts":{"type":"object","description":"Things that are true or false right now, such as whether the camera is live.","additionalProperties":{"type":"boolean"}},"checks":{"type":"object","description":"The live readiness of each requirement the journey checks before the exam can start.","additionalProperties":{"type":"string","enum":["ok","attention","blocked"]}}},"writeOnly":true},"events":{"type":"array","writeOnly":true,"maxItems":20,"description":"Progress update: milestones since the last update. step is required for every type except journey_completed.","items":{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["step_started","step_completed","step_failed","step_skipped","journey_completed","restarted","handed_off"]},"step":{"type":"string","enum":["welcome","connect","confirm","system","network","displays","apps","tabs","media","speakers","room-scan","second-camera","identity","screen","full-screen","ready","results"],"description":"The key of a preflight journey step."},"errorCode":{"type":"string","pattern":"^[a-z][a-z0-9_-]{0,63}$","description":"The key of the error the candidate was shown."}}}}}},"relationships":{"type":"object","required":["attempt"],"properties":{"attempt":{"type":"object","description":"This is a resource linkage for a to-one relationship. It is like a Parse Pointer.","readOnly":false,"properties":{"data":{"type":"object","required":["id","type"],"nullable":true,"properties":{"id":{"$ref":"#/components/schemas/ObjectId"},"type":{"type":"string","description":"Identifies the Resource.","enum":["Attempt"]}}}}},"owner":{"type":"object","description":"This is a resource linkage for a to-one relationship. It is like a Parse Pointer.","readOnly":false,"properties":{"data":{"type":"object","required":["id","type"],"nullable":true,"properties":{"id":{"$ref":"#/components/schemas/ObjectId"},"type":{"type":"string","description":"Identifies the Resource.","enum":["User"]}}}}}}}}},"BadRequestApiError":{"type":"object","description":"The request was invalid.","properties":{"id":{"type":"string","description":"Unique ID of this error occurrence."},"status":{"type":"string","description":"HTTP status code."},"code":{"type":"string","description":"Synap internal error code."},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"}}}}},"UnauthorizedApiError":{"type":"object","description":"Unauthorized request.","properties":{"id":{"type":"string","description":"Unique ID of this error occurrence."},"status":{"type":"string","description":"HTTP status code."},"code":{"type":"string","description":"Synap internal error code."},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"}}}}},"ForbiddenApiError":{"type":"object","description":"Forbidden request.","properties":{"id":{"type":"string","description":"Unique ID of this error occurrence."},"status":{"type":"string","description":"HTTP status code."},"code":{"type":"string","description":"Synap internal error code."},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"}}}}},"NotFoundApiError":{"type":"object","description":"The request resource could not be found.","properties":{"id":{"type":"string","description":"Unique ID of this error occurrence."},"status":{"type":"string","description":"HTTP status code."},"code":{"type":"string","description":"Synap internal error code."},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"}}}}},"ApiError":{"type":"object","description":"This is an error response structure. The id, status, code, title and detail will vary based on the error situation.","properties":{"id":{"type":"string","description":"Unique ID of this error occurrence."},"status":{"type":"string","description":"HTTP status code."},"code":{"type":"string","description":"Synap internal error code."},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","properties":{"pointer":{"type":"string"},"parameter":{"type":"string"}}}}}}},"paths":{"/preflight-runs/{object_id}":{"get":{"summary":"Get PreflightRun","tags":["Preflight"],"parameters":[{"name":"object_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/ObjectId"}}],"responses":{"200":{"description":"Success","content":{"application/vnd.api+json":{"schema":{"required":["data"],"type":"object","properties":{"data":{"$ref":"#/components/schemas/PreflightRun"}}}}}},"400":{"description":"Bad Request","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/BadRequestApiError"}}}}}}},"401":{"description":"Unauthorized","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/UnauthorizedApiError"}}}}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ForbiddenApiError"}}}}}}},"404":{"description":"Not Found","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/NotFoundApiError"}}}}}}},"422":{"description":"Unprocessable Entity","content":{"application/vnd.api+json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ApiError"}}}}}}}},"operationId":"preflightRuns.getPreflightRun"}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://synap.ac/docs/api/reference/preflight/get-preflightrun.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
