---
title: "Send a quote for a lead: amount (USD), crew, arrival window, what is included. Idempotent on (lead, amount, window): a retry returns already:true. The renter sees quotes side by side in their calendar. On a sandbox key the only id you can exercise is the sample lead's, from POST /v1/leads/sample: it is validated and accepted, but never recorded."
method: POST
path: "/v1/leads/{id}/quotes"
tags: ["move_intake"]
---

# Send a quote for a lead: amount (USD), crew, arrival window, what is included. Idempotent on (lead, amount, window): a retry returns already:true. The renter sees quotes side by side in their calendar. On a sandbox key the only id you can exercise is the sample lead's, from POST /v1/leads/sample: it is validated and accepted, but never recorded.

`POST /v1/leads/{id}/quotes`

## Request

- Base URL: `https://www.putroots.com`
- URL: `https://www.putroots.com/v1/leads/{id}/quotes`
- Auth: HTTP bearer

Send a quote for a lead: amount (USD), crew, arrival window, what is included. Idempotent on (lead, amount, window): a retry returns already:true. The renter sees quotes side by side in their calendar. On a sandbox key the only id you can exercise is the sample lead's, from POST /v1/leads/sample: it is validated and accepted, but never recorded.

## Path parameters

- `id` string, required

## Request body

- object
  - `amount` number, required: 美元
  - `crew` integer
  - `window` string: 到场时段,如 8–10am
  - `includes` string[]: 含什么:packing / insurance / ……
  - `note` string

## Response `200`

OK

- object
  - `source` unknown, required
  - `fetched_at` string, date-time, required
  - `ok` boolean, required
  - `lead_id` string, required
  - `already` boolean: true when this exact quote was already recorded
  - `dry_run` boolean
  - `sample` boolean: Sandbox only: this was the sample lead from POST /v1/leads/sample. Your call was validated and accepted, but nothing was recorded — there is no renter behind it.

## Other responses

- `400`: Bad input — error says which field.
- `401`: No key / bad token.
- `403`: Key is fine but not for this: pending approval, revoked, scope missing, or an operation only the renter's own account may call.
- `404`: No such lead / hand-off / listing under this key.
- `409`: Conflict: the code is already registered.
- `429`: Rate limited; Retry-After in seconds.

---

[API](https://skmtc.dev/putroots/apis/putroots-api.md) · [All operations](https://skmtc.dev/putroots/apis/putroots-api/llms.txt) · [OpenAPI document](https://skmtc.dev/putroots/apis/putroots-api/revisions/a859d719878d?raw)
