---
title: search.global | Doing Work API
description: Search one shop for customers (name, email, phone), properties (address), jobs (summary) and requests (title). Case-insensitive substring match; you see on
url: https://doingwork.work/docs/reference/search-global/
---

# search.global

Search one shop for customers (name, email, phone), properties (address), jobs (summary) and requests (title). Case-insensitive substring match; you see only what your role can read.

|  |  |
|---|---|
| Who | Agents can call this |
| REST | `GET /v1/search` |
| MCP tool | `search_global` |
| Writes | no |
| Area | [Imports, custom fields, tags and search](https://doingwork.work/docs/reference/#imports-custom-fields-tags-and-search) |

## When to use it

Search across customers, jobs, quotes, invoices and requests in one call, or look in one place when you know where it is.

## What to tell the owner

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

## Input

| Field | Type | Required |
|---|---|---|
| `shop_id` | string (uuid) | yes |
| `q` | string | yes |
| `limit` | integer | no |

## Example

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

## Output

| Field | Type | Always there |
|---|---|---|
| `customers` | array | yes |
| `customers[].customer_id` | string (uuid) | yes |
| `customers[].name` | string | yes |
| `customers[].email` | ['string', 'null'] | yes |
| `customers[].phone` | ['string', 'null'] | yes |
| `properties` | array | yes |
| `properties[].property_id` | string (uuid) | yes |
| `properties[].customer_id` | string (uuid) | yes |
| `properties[].label` | ['string', 'null'] | yes |
| `properties[].address_line1` | string | yes |
| `jobs` | array | yes |
| `jobs[].job_id` | string (uuid) | yes |
| `jobs[].customer_id` | ['string', 'null', ' ', '(', 'u', 'u', 'i', 'd', ')'] | yes |
| `jobs[].status` | string | yes |
| `jobs[].summary` | ['string', 'null'] | yes |
| `requests` | array | yes |
| `requests[].request_id` | string (uuid) | yes |
| `requests[].customer_id` | ['string', 'null', ' ', '(', 'u', 'u', 'i', 'd', ')'] | yes |
| `requests[].title` | string | yes |

```json
{
  "customers": [
    {
      "customer_id": "00000000-0000-4000-8000-000000000000",
      "name": "Ruiz Plumbing",
      "email": "owner@example.com",
      "phone": "..."
    }
  ],
  "properties": [
    {
      "property_id": "00000000-0000-4000-8000-000000000000",
      "customer_id": "00000000-0000-4000-8000-000000000000",
      "label": "...",
      "address_line1": "..."
    }
  ],
  "jobs": [
    {
      "job_id": "00000000-0000-4000-8000-000000000000",
      "customer_id": "00000000-0000-4000-8000-000000000000",
      "status": "...",
      "summary": "..."
    }
  ],
  "requests": [
    {
      "request_id": "00000000-0000-4000-8000-000000000000",
      "customer_id": "00000000-0000-4000-8000-000000000000",
      "title": "..."
    }
  ]
}
```

## Errors

| Code | Status | What to do |
|---|---|---|
| `invalid_input`, `invalid_token`, `rate_limited` |  | Can happen on any call. See [errors](https://doingwork.work/docs/errors/). |
