File URL (type: "url")
Pass a public HTTPS URL to a resume file.
Format Extension Content-Type PDF .pdfapplication/pdfMicrosoft Word .docapplication/mswordMicrosoft Word .docxapplication/vnd.openxmlformats-officedocument.wordprocessingml.document
{
"resume" : {
"type" : "url" ,
"url" : "https://storage.example.com/resumes/abc123.pdf"
}
}
Inline text (type: "text")
Pass resume content directly as plain text or markdown. Min 50 characters, max 100 KB.
{
"resume" : {
"type" : "text" ,
"content" : "# Jane Smith \n\n ## Experience \n Senior Backend Engineer at Acme Corp (2020-present) \n - Led migration to Node.js microservices \n - Reduced API latency by 40% \n\n ## Skills \n TypeScript, Node.js, PostgreSQL, AWS"
}
}
Markdown preserves resume structure (headings, lists, sections) which boosts scoring accuracy.
Size limits
Input type Max size File URL 50 MB Inline text 100 KB Request body 4.5 MB
URL requirements
Publicly accessible without authentication
For scoring submissions, Nova downloads the resume URL during the submission request, validates the file, and stores it before creating a scoring job. Set URL expiry long enough for the request to complete; 1 hour is recommended.
Generating pre-signed URLs
AWS S3
Google Cloud Storage
Azure Blob Storage
import { GetObjectCommand , S3Client } from '@aws-sdk/client-s3' ;
import { getSignedUrl } from '@aws-sdk/s3-request-presigner' ;
const s3 = new S3Client ({ region: 'us-east-1' });
async function getResumeUrl ( key ) {
const command = new GetObjectCommand ({
Bucket: 'your-resume-bucket' ,
Key: key ,
});
return getSignedUrl ( s3 , command , {
expiresIn: 3600 // 1 hour in seconds
});
}
const { Storage } = require ( '@google-cloud/storage' );
const storage = new Storage ();
async function getResumeUrl ( filename ) {
const bucket = storage . bucket ( 'your-resume-bucket' );
const file = bucket . file ( filename );
const [ url ] = await file . getSignedUrl ({
action: 'read' ,
expires: Date . now () + 60 * 60 * 1000 , // 1 hour
});
return url ;
}
const {
BlobServiceClient ,
generateBlobSASQueryParameters ,
BlobSASPermissions ,
} = require ( '@azure/storage-blob' );
async function getResumeUrl ( containerName , blobName ) {
const blobServiceClient = BlobServiceClient . fromConnectionString ( connectionString );
const containerClient = blobServiceClient . getContainerClient ( containerName );
const blobClient = containerClient . getBlobClient ( blobName );
const startsOn = new Date ();
const expiresOn = new Date ( startsOn );
expiresOn . setHours ( expiresOn . getHours () + 1 );
const sasToken = generateBlobSASQueryParameters ({
containerName ,
blobName ,
permissions: BlobSASPermissions . parse ( 'r' ),
startsOn ,
expiresOn ,
}, sharedKeyCredential ). toString ();
return ` ${ blobClient . url } ? ${ sasToken } ` ;
}
Common issues
URL expired, not publicly accessible, or storage returned a non-2xx response. Test the URL in an incognito browser window.
The response Content-Type isn’t PDF, DOC, or DOCX. If your storage returns application/octet-stream, configure correct Content-Type metadata.
File exceeds 50 MB or inline text exceeds 100 KB.
PDF is password-protected. Provide an unprotected version.
PDF bytes are malformed or incomplete, such as a truncated file missing the final EOF marker. Submit a corrected PDF.
Nova could not process a structurally valid resume document. Check the URL returns the actual file and contact support if the file opens normally.