---
title: "Tamloot — Search contacts"
description: "Search contacts: parameters, request examples, and response schemas for GET /v1/contacts."
canonical: "https://tamloot.cc/en/docs/developers/api-reference/search-contacts"
last-updated: "2026-10-18"
---

# Search contacts

`GET /v1/contacts`

Send your API key in the `Authorization: Bearer $TAMLOOT_API_KEY` header. Only data visible to the key owner is accessible.

Based on the published [OpenAPI description](https://tamloot.cc/openapi.json). Schema names and code identifiers are shown exactly as the API defines them.

## Parameters

| Parameter | Location | Required | Type | Constraints |
| --- | --- | --- | --- | --- |
| `query` | query | Yes | string | `{"minLength":2,"maxLength":100}` |

## Request examples

```bash
curl "https://api.tamloot.cc/v1/contacts?query=maya" \
  --header "Authorization: Bearer $TAMLOOT_API_KEY"
```

```javascript
const response = await fetch("https://api.tamloot.cc/v1/contacts?query=maya", {
  headers: { Authorization: `Bearer ${process.env.TAMLOOT_API_KEY}` },
});
if (!response.ok) throw new Error('HTTP ' + response.status);
const result = await response.json();
```

## Responses

| Status | Meaning |
| --- | --- |
| 200 | Successful response |
| 401 | Missing or invalid API key |
| 422 | Invalid request parameters |
| 429 | Rate limit exceeded; wait according to Retry-After |

### Success response schema

```json
{
  "type": "object",
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "full_name": {
            "type": "string",
            "nullable": true
          },
          "email": {
            "type": "string",
            "nullable": true
          },
          "phone": {
            "type": "string",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "nullable": true
          },
          "memory": {
            "type": "string",
            "nullable": true,
            "description": "AI-maintained memory of this contact"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "notes_timeline": {
            "type": "array",
            "description": "Manually written notes about this contact, newest first",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "content": {
                  "type": "string"
                },
                "source": {
                  "type": "string"
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "updated_at": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "recent_sessions": {
            "type": "array",
            "description": "This contact’s most recent past sessions",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "title": {
                  "type": "string",
                  "nullable": true
                },
                "subtitle": {
                  "type": "string",
                  "nullable": true
                },
                "session_date": {
                  "type": "string",
                  "format": "date-time",
                  "nullable": true
                },
                "recording_status": {
                  "type": "string",
                  "nullable": true
                }
              }
            }
          },
          "inferred_name": {
            "type": "string",
            "nullable": true,
            "description": "System-inferred name for imported contacts without a user-set full_name."
          },
          "archived_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "null for active contacts; timestamp when archived. Direct lookup includes archived contacts."
          }
        }
      }
    }
  }
}
```

### Error response schema

```json
{
  "type": "object",
  "required": [
    "error"
  ],
  "properties": {
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "string",
          "description": "HTTP status code as a string, e.g. \"404\""
        },
        "message": {
          "type": "string"
        }
      }
    }
  }
}
```

### Response headers

```json
{
  "RateLimit-Limit": {
    "description": "Requests allowed per one-second window.",
    "schema": {
      "type": "integer"
    }
  },
  "RateLimit-Policy": {
    "description": "The rate-limit policy, as `<limit>;w=<window seconds>`.",
    "schema": {
      "type": "string"
    }
  }
}
```

See the [quickstart](/en/docs/developers/quickstart) for API key setup and [API overview](/en/docs/developers/api) for rate limits and versioning.

## Where to look next

- [Tamloot](https://tamloot.cc/en)
- [All guides](https://tamloot.cc/en/docs)
- [llms.txt](https://tamloot.cc/docs/llms.txt)
- [Sitemap](https://tamloot.cc/sitemaps/sitemap.xml)
