Estimates
Create estimate from files
Creates an estimate from uploaded files. The type parameter determines whether to process as a MATERIAL_LIST or BLUEPRINT. Processing occurs asynchronously with results delivered via webhook.
Type-Specific Requirements:
- BLUEPRINT: Requires fileIds to be provided (blueprint files must be uploaded)
- MATERIAL_LIST: Requires either fileIds or prompt (or both)
Workflow:
- Upload files using POST /v1/files/upload-urls
- Submit file IDs to this endpoint for estimate creation
- Receive results via webhook or poll using GET /v1/estimate/{estimateJobId}
Response Delivery:
- Results are delivered via webhook to the provided callbackUrl
- Alternatively, poll the job status using GET /v1/estimate/{estimateJobId}
post/v1/estimate
Request
- Base URL: https://api.handoff.ai
- URL: https://api.handoff.ai/v1/estimate
- Auth: HTTP bearer
Request body
Example request
{
"type": "MATERIAL_LIST",
"fileIds": [
"f1a2b3c4-d5e6-4f7a-8b9c-0d1e2f3a4b5c",
"f2b3c4d5-e6f7-4a8b-9c0d-1e2f3a4b5c6d"
],
"address": "Austin, TX 78701",
"prompt": "Create an estimate for framing and painting.",
"callbackUrl": "https://partners.example.com/webhooks/estimate",
"externalId": "EST-12345",
"storeReference": "STORE-NYC-001",
"customerReference": "CUST-ORD-789",
"takeoffProduct": "WINDOWS_DOORS",
"takeoffTrades": [
"WINDOWS",
"DOORS"
],
"metadata": {
"includeMEP": true,
"source": "takeoff-api",
"projectId": "proj-123"
}
}Response
Estimate job created successfully
Example response
{
"estimateJobId": "e1a2b3c4-d5e6-4f7a-8b9c-0d1e2f3a4b5c",
"status": "PROCESSING",
"createdAt": "2025-12-05T14:30:00Z",
"estimatedCompletionTime": "2025-12-05T14:31:00Z",
"metadata": {
"includeMEP": true,
"source": "takeoff-api",
"projectId": "proj-123"
}
}Changes
No recorded changes to this operation across all 1 revision of this API.