curl --request GET \
--url https://api.example.com/api/search{
"data": [
{
"asset": {
"id": "<string>",
"device_asset_id": "<string>",
"device_id": "<string>",
"mime_type": "<string>",
"original_file_name": "<string>",
"file_created_at": "2023-11-07T05:31:56Z",
"file_modified_at": "2023-11-07T05:31:56Z",
"local_datetime": "2023-11-07T05:31:56Z",
"checksum": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"checksum_sha1": "<string>",
"exif": {
"asset_id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"make": "<string>",
"model": "<string>",
"orientation": 123,
"modified_datetime": "2023-11-07T05:31:56Z",
"original_datetime": "2023-11-07T05:31:56Z",
"digitized_datetime": "2023-11-07T05:31:56Z",
"lens_model": "<string>",
"f_number": 123,
"focal_length": 123,
"iso": 123,
"exposure_time": 123,
"exposure_bias": 123,
"latitude": 123,
"longitude": 123,
"altitude": 123,
"city": "<string>",
"state": "<string>",
"country": "<string>",
"description": "<string>",
"fps": 123,
"live_photo_cid": "<string>",
"projection_type": "<string>",
"profile_description": "<string>",
"auto_stack_id": "<string>",
"rating": 123
},
"metadata": {
"asset_id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"make": "<string>",
"model": "<string>",
"orientation": 123,
"modified_datetime": "2023-11-07T05:31:56Z",
"original_datetime": "2023-11-07T05:31:56Z",
"digitized_datetime": "2023-11-07T05:31:56Z",
"lens_model": "<string>",
"f_number": 123,
"focal_length": 123,
"iso": 123,
"exposure_time": 123,
"exposure_bias": 123,
"latitude": 123,
"longitude": 123,
"altitude": 123,
"city": "<string>",
"state": "<string>",
"country": "<string>",
"country_code": "<string>",
"sublocation": "<string>",
"place_name": "<string>",
"timezone": "<string>",
"display_label": "<string>",
"description": "<string>",
"fps": 123,
"live_photo_cid": "<string>",
"projection_type": "<string>",
"auto_stack_id": "<string>",
"rating": 123
},
"metrics": {},
"asset_urls": {},
"description": "<string>",
"faces": [
{
"id": "<string>",
"asset_id": "<string>",
"bounding_box": {},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"person_id": "<string>",
"timestamp_ms": 123,
"asset_urls": {}
}
],
"people": [
{
"id": "<string>",
"is_hidden": true,
"is_favorite": true,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"name": "<string>",
"birth_date": "2023-12-25",
"asset_count": 123,
"thumbnail_face_id": "<string>",
"asset_urls": {}
}
],
"width": 0,
"height": 0,
"file_size_bytes": 0,
"trashed_at": "2023-11-07T05:31:56Z"
},
"distance": 123
}
]
}Searches for assets using semantic (CLIP-based) image-content matching and/or structured filters. Use this tool when the user describes what’s in the photos they want — subjects, scenes, places, activities, moods, objects — as opposed to browsing by album membership or exact ID.
A natural-language query can be combined with structured filters (person_ids, captured_before, captured_after) for precision. For example, ‘photos of my kids at the beach last summer’ becomes query='kids at the beach' + captured_after=2025-06-01 + captured_before=2025-09-01.
Use list_assets instead when the request can be answered with exact filters alone (album, person, date range, ID) — it’s cheaper and more deterministic than semantic search.
Does not filter by location/place today; pass place names as part of query and rely on semantic matching until a structured location filter lands.
At least one of query, person_ids, captured_before, or captured_after must be provided.
curl --request GET \
--url https://api.example.com/api/search{
"data": [
{
"asset": {
"id": "<string>",
"device_asset_id": "<string>",
"device_id": "<string>",
"mime_type": "<string>",
"original_file_name": "<string>",
"file_created_at": "2023-11-07T05:31:56Z",
"file_modified_at": "2023-11-07T05:31:56Z",
"local_datetime": "2023-11-07T05:31:56Z",
"checksum": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"checksum_sha1": "<string>",
"exif": {
"asset_id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"make": "<string>",
"model": "<string>",
"orientation": 123,
"modified_datetime": "2023-11-07T05:31:56Z",
"original_datetime": "2023-11-07T05:31:56Z",
"digitized_datetime": "2023-11-07T05:31:56Z",
"lens_model": "<string>",
"f_number": 123,
"focal_length": 123,
"iso": 123,
"exposure_time": 123,
"exposure_bias": 123,
"latitude": 123,
"longitude": 123,
"altitude": 123,
"city": "<string>",
"state": "<string>",
"country": "<string>",
"description": "<string>",
"fps": 123,
"live_photo_cid": "<string>",
"projection_type": "<string>",
"profile_description": "<string>",
"auto_stack_id": "<string>",
"rating": 123
},
"metadata": {
"asset_id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"make": "<string>",
"model": "<string>",
"orientation": 123,
"modified_datetime": "2023-11-07T05:31:56Z",
"original_datetime": "2023-11-07T05:31:56Z",
"digitized_datetime": "2023-11-07T05:31:56Z",
"lens_model": "<string>",
"f_number": 123,
"focal_length": 123,
"iso": 123,
"exposure_time": 123,
"exposure_bias": 123,
"latitude": 123,
"longitude": 123,
"altitude": 123,
"city": "<string>",
"state": "<string>",
"country": "<string>",
"country_code": "<string>",
"sublocation": "<string>",
"place_name": "<string>",
"timezone": "<string>",
"display_label": "<string>",
"description": "<string>",
"fps": 123,
"live_photo_cid": "<string>",
"projection_type": "<string>",
"auto_stack_id": "<string>",
"rating": 123
},
"metrics": {},
"asset_urls": {},
"description": "<string>",
"faces": [
{
"id": "<string>",
"asset_id": "<string>",
"bounding_box": {},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"person_id": "<string>",
"timestamp_ms": 123,
"asset_urls": {}
}
],
"people": [
{
"id": "<string>",
"is_hidden": true,
"is_favorite": true,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"name": "<string>",
"birth_date": "2023-12-25",
"asset_count": 123,
"thumbnail_face_id": "<string>",
"asset_urls": {}
}
],
"width": 0,
"height": 0,
"file_size_bytes": 0,
"trashed_at": "2023-11-07T05:31:56Z"
},
"distance": 123
}
]
}Documentation Index
Fetch the complete documentation index at: https://docs.gumnut.ai/llms.txt
Use this file to discover all available pages before exploring further.
Library to search. Optional if the user has a single library; required when they have multiple. Use list_libraries to enumerate available libraries.
Natural-language description of the image content to search for. Matched against CLIP image embeddings, so it works best with concrete visual concepts: subjects, scenes, objects, settings ('beach sunset', 'birthday cake', 'mountain hike').
Prefer structured params when available: use person_ids for people (not names in query) and captured_before/captured_after for dates (not phrases like 'in 2023' in query).
Filter to assets containing ALL of these person IDs (intersection, not union). Accepts multiple person_ids= query params or a single comma-delimited value (e.g., person_123,person_abc). Get person IDs from list_people. Plural on this tool; the sibling list_assets uses person_id (singular).
Only include assets captured strictly before this instant (ISO 8601; exclusive). Equivalent in purpose to local_datetime_before on list_assets (naming inconsistency is tracked as a follow-up).
Only include assets captured strictly after this instant (ISO 8601; exclusive). Equivalent in purpose to local_datetime_after on list_assets (naming inconsistency is tracked as a follow-up).
1-indexed page number. search_assets uses page-number pagination; the sibling list_assets uses cursor pagination via starting_after_id. Increment page to fetch subsequent pages.
x >= 1Maximum number of results per page (1–200). Defaults to 20.
1 <= x <= 200Maximum semantic distance for a result to be included (0.0 = identical, 1.0 = unrelated). Lower values return fewer, more confident matches; higher values return more results with looser matching. Default 0.8 is moderate — try 0.6 for high-precision queries, 0.9 for exploratory searches. Note: this is inverted from the usual 'similarity score' convention where higher means more similar.
0 <= x <= 1Successful Response
Matching assets ordered by semantic distance (closest first) when query is set.
Show child attributes