File URL (type: "url")
Pass a public HTTPS URL to a resume file.
| Format | Extension | Content-Type |
|---|
| PDF | .pdf | application/pdf |
| Microsoft Word | .doc | application/msword |
| Microsoft Word | .docx | application/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\nSenior Backend Engineer at Acme Corp (2020-present)\n- Led migration to Node.js microservices\n- Reduced API latency by 40%\n\n## Skills\nTypeScript, 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
The resume is downloaded during scoring processing (not during the submission request). Set URL expiry to at least 10 minutes (1 hour 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.
File isn’t a valid PDF, DOC, or DOCX despite the Content-Type header. Check the URL returns the actual file, not an error page.