--- title: invoices.createFromTm | Doing Work API description: Bill a signed time and materials quote: approved time not billed yet at the signed rate, and materials at what the shop paid plus the signed markup. Stops url: https://doingwork.work/docs/reference/invoices-createfromtm/ --- # invoices.createFromTm Bill a signed time and materials quote: approved time not billed yet at the signed rate, and materials at what the shop paid plus the signed markup. Stops at the not-to-exceed amount plus approved change orders and says needs_change_order. Draft; send it with invoices.send. Owner or office with see_costs only. | | | |---|---| | Who | Agents can call this | | REST | `POST /v1/invoices/tm` | | MCP tool | `invoices_createFromTm` | | Writes | yes, send an Idempotency-Key | | Area | [Shop](https://doingwork.work/docs/reference/#shop) | ## When to use it Lead rules (requests.setLeadSettings, owner or office) decide what happens to a new request. With auto_reply on, Doing Work sends one first reply within a minute: a text only where the customer already agreed to texts or texted the shop, and the shop's own number is approved for business texting; otherwise an email; otherwise nothing. ## What to tell the owner Say what you did in plain words and what happens next. ## Input | Field | Type | Required | |---|---|---| | `quote_id` | string (uuid) | yes | | `rush_entry_ids` | array | no | | `due_on` | string | no | | `memo` | string | no | ## Example ```http POST https://doingwork.work/v1/invoices/tm content-type: application/json Idempotency-Key: 3f1c... { "quote_id": "00000000-0000-4000-8000-000000000000" } ``` ## Output JSON. The response shape isn't published yet; read the fields you need and ignore the rest. Errors are `{code, message, status}`. ## Errors | Code | Status | What to do | |---|---|---| | `invalid_input`, `invalid_token`, `rate_limited` | | Can happen on any call. See [errors](https://doingwork.work/docs/errors/). |