Get a download URL for an estimate file
Returns file metadata plus a short-lived presigned URL for downloading the file's bytes.
Which files:
- Takeoff deliverables announced in the estimate webhook's takeoffFiles array
- The input files you uploaded for this estimate job
Flexible ID lookup: The estimateJobId parameter accepts either the UUID returned from estimate creation or your internal externalId, matching the behaviour of GET /v1/estimate/{estimateJobId}.
Why a separate call: The presigned URL is deliberately not embedded in the webhook. Webhook payloads are signed when queued and retried for up to six hours, so an embedded URL could arrive already expired. Call this endpoint when you are ready to download.
URL lifetime: The URL is valid for 15 minutes and is a bearer credential that cannot be revoked once issued — do not log or share it. Request a fresh one whenever you need it; there is no limit beyond the usual rate limit.
Request
- Base URL: https://api.handoff.ai
- URL: https://api.handoff.ai/v1/estimate/{estimateJobId}/files/{fileId}/download
- Auth: HTTP bearer
Path parameters
Estimate identifier - either the UUID job ID or your internal externalId
File identifier, as reported in the webhook payload
Response
File metadata and a presigned download URL
Example response
{
"id": "a7c31c2b-9f4e-5d3a-8b1c-2e6f4a5b6c7d",
"filename": "takeoff-markup.pdf",
"contentType": "application/pdf",
"sizeBytes": 2456789,
"downloadUrl": "https://bucket.s3.amazonaws.com/enterprise/...?X-Amz-Signature=...",
"expiresAt": "2026-08-31T16:00:00.000Z"
}Changes
No recorded changes to this operation across all 1 revision of this API.