quotes.search

Search a shop's past quotes by scope words (for example "water heater 50 gallon garage"). Matches the job summary and line items, most words matched first, signed quotes first at a tie, then newest. Read only. Prices show only to people who can see prices.

WhoAgents can call this
RESTGET /v1/quotes/search
MCP toolquotes_search
Writesno
AreaShop

When to use it

Turn what the worker said and what you saw into quote lines without ever setting a price on your own. Call quotes.draftFromVisit with lines in the worker's words.

What to tell the owner

Tell them what you found in plain words. Don't read back raw fields.

Input

FieldTypeRequired
shop_idstring (uuid)yes
qstringyes
statusstring (one of draft, sent, signed, declined, superseded, withdrawn)no
exclude_job_idstring (uuid)no
limitintegerno

Example

GET https://doingwork.work/v1/quotes/search?shop_id=00000000-0000-4000-8000-000000000000&q=...

Output

FieldTypeAlways there
wordsarrayyes
quotesarrayyes
quotes[].quote_idstring (uuid)yes
quotes[].job_idstring (uuid)yes
quotes[].statusstringyes
quotes[].created_atstring (date-time)yes
quotes[].job_summary['string', 'null']yes
quotes[].customer_name['string', 'null']yes
quotes[].total_minor['integer', 'null']yes
quotes[].matchedarrayyes
quotes[].linesarrayyes
quotes[].lines[].descriptionstringyes
quotes[].lines[].quantitynumberyes
quotes[].lines[].unit_price_minor['integer', 'null']yes
next_actionsarrayyes
next_actions[].saystringyes
next_actions[].op['string', 'null']yes
{
  "words": [
    "..."
  ],
  "quotes": [
    {
      "quote_id": "00000000-0000-4000-8000-000000000000",
      "job_id": "00000000-0000-4000-8000-000000000000",
      "status": "...",
      "created_at": "...",
      "job_summary": "...",
      "customer_name": "...",
      "total_minor": "...",
      "matched": [
        "..."
      ],
      "lines": [
        {
          "description": "40 gallon gas heater, installed",
          "quantity": "...",
          "unit_price_minor": "..."
        }
      ]
    }
  ],
  "next_actions": [
    {
      "say": "...",
      "op": "..."
    }
  ]
}

Errors

CodeStatusWhat to do
invalid_input, invalid_token, rate_limitedCan happen on any call. See errors.