The 3-step upload flow
Create a staged file upload
Call the Variables:Response:
stagedFileUploadCreate mutation with the filename and MIME type of the
document you want to upload:Request
Variables
Response
Upload the file to the signed URL
Use an HTTP
PUT request to upload the file binary to the signedUploadUrl
returned in step 1. Set the Content-Type header to match the file’s MIME type:This is a direct upload to the storage service — it does not go through the
GraphQL API and does not require your API authentication headers.
Uploading multiple files
You can upload multiple files by repeating steps 1 and 2 for each file, then passing all of theFileRecordGID values in the newMortgageFileIds array:
Supported MIME types
TheFileMimeType enum defines the file types you can upload:
| Enum value | MIME type | Description |
|---|---|---|
DOCUMENT_PDF | application/pdf | PDF documents |
DOCUMENT_DOC | application/msword | Word documents |
DOCUMENT_DOCX | application/vnd.openxmlformats-officedocument.wordprocessingml.documents | Word documents |
IMAGE_JPEG | image/jpeg | JPEG images |
IMAGE_PNG | image/png | PNG images |
IMAGE_HEIC | image/heic | HEIC images |
IMAGE_TIFF | image/tiff | TIFF images |
Error handling
Staged upload errors
ThestagedFileUploadCreate mutation can return:
| Code | Description |
|---|---|
INVALID_FILENAME | The supplied filename is invalid or unsupported |
Engagement creation errors (file-related)
When passing file IDs toengagementCreate, you may encounter:
| Code | Description |
|---|---|
FILE_RECORD_NOT_FOUND | A FileRecordGID in newMortgageFileIds could not be found |
FILE_RECORD_NOT_STAGED | The file hasn’t been uploaded to the signed URL yet |
The
FILE_RECORD_NOT_STAGED error means you created the staged upload (step 1) but
haven’t completed the actual file upload (step 2) before trying to use the file in
step 3. Make sure the HTTP PUT to the signed URL completes successfully before
referencing the file.