Attrove Search (Metered) API
The Search (Metered) API from Attrove — 1 operation(s) for search (metered).
The Search (Metered) API from Attrove — 1 operation(s) for search (metered).
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/attrove-com:attrove-com-search-metered-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Attrove Search (Metered) API
description: Attrove public API, partner, and A2A endpoints
version: v1
servers:
- url: http://0.0.0.0:3000
tags:
- name: Search (Metered)
paths:
/v1/users/{user_id}/search:
post:
summary: Semantic search across user's context
tags:
- Search (Metered)
description: 'Performs semantic search across the user''s connected integrations and returns raw matches from messages, meetings, and calendar events.
**Billing**: This endpoint is metered. Each call consumes AI query credits.
**Use this when you need**:
- Raw communication data without AI summarization
- Full conversation threads plus matching meetings/events
- To build your own UI or processing on top of search results
**Response structure**:
- `key_messages`: Messages most relevant to the query
- `conversations`: Conversation threads containing the key messages
- `key_meetings`: Matched meetings (empty array when no meetings match)
- `key_events`: Matched calendar events (empty array when no events match)
- Every returned record includes `external_id` (partner-provided ID from ingest, or `null`)
**Parameters**:
- `query`: The search query (semantic, not keyword-based)
- `integration_ids`: Optional filter to specific integrations (opaque IDs like `int_xxx`)
- `conversation_ids`: Optional filter to specific conversations (opaque IDs, e.g., "conv_xxx")
- `after_date`: Optional date filter (YYYY-MM-DD)
- `before_date`: Optional date filter (YYYY-MM-DD)
- `sender_domains`: Optional filter by sender email domains (e.g., ["acme.com"])
- `entity_ids`: Optional filter by entity IDs (UUIDs)
- `retrieval_mode`: Optional retrieval strategy — `"fast"` (lowest latency, default), `"auto"` (adaptive), or `"deep"` (full pipeline)
- `expand`: Optional comma-separated fields to include (e.g., "body_text,summary,description")
**Expand parameter**:
By default, expandable detail fields are omitted to reduce payload size.
Use `expand=body_text` for message content, `expand=summary,short_summary,action_items,attendees,meeting_link` for meetings, and `expand=description,location,html_link,event_link,attendees` for calendar events.'
requestBody:
content:
application/json:
schema:
type: object
additionalProperties: false
properties:
query:
type: string
minLength: 1
maxLength: 10000
integration_ids:
type: array
items:
anyOf:
- type: string
pattern: ^(int_[A-Za-z0-9]+|\d+)$
- type: integer
minimum: 1
description: Filter to specific integrations by opaque ID (int_xxx). Numeric IDs are accepted for backward compatibility.
conversation_ids:
type: array
items:
type: string
description: Filter to specific conversations by opaque ID (conv_xxx)
after_date:
type: string
format: date
description: Filter results after this date (YYYY-MM-DD)
before_date:
type: string
format: date
description: Filter results before this date (YYYY-MM-DD)
allow_bot_messages:
type: boolean
sender_domains:
type: array
items:
type: string
minLength: 1
nullable: true
description: Filter by sender email domains (e.g., ['acme.com'])
entity_ids:
type: array
items:
type: string
format: uuid
nullable: true
description: Filter by entity IDs (UUIDs)
retrieval_mode:
type: string
enum:
- fast
- auto
- deep
description: Optional retrieval strategy. Defaults to 'fast' for /search requests.
debug_retrieval_plan:
type: boolean
description: When true, asks the retrieval backend to include extra planner diagnostics.
max_results:
type: integer
minimum: 1
maximum: 200
description: Maximum number of chunks to return. Chunks beyond rerank_top_k are appended in score order up to this cap.
expand:
type: string
description: Comma-separated list of fields to include (e.g., 'body_text,summary,action_items')
required:
- query
required: true
parameters:
- schema:
type: string
in: query
name: expand
required: false
description: 'Comma-separated list of fields to include. Valid options: body_text, body_html, raw, headers, summary, short_summary, action_items, attendees, meeting_link, description, location, html_link, event_link, visibility, response_status'
- schema:
type: string
format: uuid
in: path
name: user_id
required: true
responses:
'200':
description: Default Response
content:
application/json:
schema:
type: object
additionalProperties: false
properties:
success:
type: boolean
enum:
- true
data:
type: object
additionalProperties: false
properties:
key_messages:
type: array
items:
type: object
additionalProperties: false
properties:
message_id:
type: number
external_id:
anyOf:
- type: string
- type: 'null'
description: Partner-provided external_id from ingest, or null when absent
thread_id:
anyOf:
- type: number
- type: 'null'
conversation_id:
anyOf:
- type: number
- type: 'null'
rank:
type: number
required:
- message_id
- external_id
conversations:
type: object
description: Map of conversation ID to conversation data with threads
additionalProperties:
type: object
properties:
conversation_name:
type: string
nullable: true
threads:
type: object
additionalProperties:
type: array
items:
type: object
additionalProperties: false
properties:
message_id:
type: number
external_id:
anyOf:
- type: string
- type: 'null'
description: Partner-provided external_id from ingest, or null when absent
received_at:
type: string
integration_type:
type: string
integration_type_generic:
type: string
sender_name:
type: string
recipient_names:
type: array
items:
type: string
body_text:
type: string
display_source:
anyOf:
- type: string
- type: 'null'
thread_id:
anyOf:
- type: number
- type: 'null'
thread_message_count:
anyOf:
- type: number
- type: 'null'
thread_position:
anyOf:
- type: number
- type: 'null'
parent_message_id:
anyOf:
- type: number
- type: 'null'
conversation_type:
anyOf:
- type: string
- type: 'null'
conversation_id:
anyOf:
- type: number
- type: 'null'
conversation_participants:
type: array
items:
type: object
additionalProperties: false
properties:
name:
type: string
required:
- name
required:
- message_id
- external_id
- received_at
- integration_type
- integration_type_generic
- sender_name
- recipient_names
- thread_id
- thread_message_count
- thread_position
- parent_message_id
- conversation_type
- conversation_id
- conversation_participants
- display_source
key_meetings:
type: array
items:
type: object
additionalProperties: true
properties:
id:
type: string
description: Opaque meeting ID (mtg_xxx)
external_id:
anyOf:
- type: string
- type: 'null'
description: Partner-provided external_id from ingest, or null when absent
title:
type: string
start_time:
type: string
format: date-time
end_time:
type: string
format: date-time
summary:
type: string
nullable: true
short_summary:
type: string
nullable: true
action_items:
type: array
attendees:
type: array
meeting_link:
type: string
nullable: true
has_transcript:
type: boolean
has_notes:
type: boolean
content_status:
type: string
enum:
- none
- notes_only
- transcript_only
- transcript_and_notes
provider:
type: string
event_id:
type: string
nullable: true
meeting_code:
type: string
nullable: true
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
nullable: true
rank:
type: number
required:
- id
- external_id
- title
- start_time
- end_time
- has_transcript
- has_notes
- content_status
- provider
- created_at
key_events:
type: array
items:
type: object
additionalProperties: true
properties:
id:
type: string
description: Opaque event ID (evt_xxx)
external_id:
anyOf:
- type: string
- type: 'null'
description: Partner-provided external_id from ingest, or null when absent
calendar_id:
type: string
title:
type: string
nullable: true
description:
type: string
nullable: true
start_time:
type: string
format: date-time
end_time:
type: string
format: date-time
location:
type: string
nullable: true
status:
type: string
nullable: true
all_day:
type: boolean
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
nullable: true
rank:
type: number
required:
- id
- external_id
- calendar_id
- title
- start_time
- end_time
- all_day
- created_at
key_notes:
type: array
items:
type: object
additionalProperties: false
properties:
note_id:
type: number
external_id:
anyOf:
- type: string
- type: 'null'
description: Partner-provided external_id from ingest, or null when absent
rank:
type: number
required:
- note_id
- external_id
rerank_provider:
type: string
enum:
- cohere
- tinybert
- none
description: Reranking model used in the retrieval pipeline
degradations:
type: array
items:
type: string
description: Stable degradation codes emitted by the retrieval pipeline when results may be incomplete
warnings:
type: array
items:
type: object
additionalProperties: false
properties:
code:
type: string
enum:
- records_truncated_for_token_budget
- retrieval_degraded
- thread_fetch_failed
- meeting_hydration_failed
- event_hydration_failed
- note_hydration_failed
- identifiers_partial
message:
type: string
dropped_record_count:
type: integer
degradations:
type: array
items:
type: string
failed_count:
type: integer
missing_count:
type: integer
required:
- code
- message
description: Structured warnings about degraded or partially hydrated results
required:
- key_messages
- conversations
- key_meetings
- key_events
- key_notes
required:
- success
- data
'400':
description: Default Response
content:
application/json:
schema:
type: object
additionalProperties: false
properties:
success:
type: boolean
enum:
- false
error:
type: object
additionalProperties: false
properties:
code:
type: string
description: Machine-readable error code (e.g., AUTH_INVALID_TOKEN, RESOURCE_NOT_FOUND)
message:
type: string
description: Human-readable error message
details:
description: Optional additional error context
required:
- code
- message
required:
- success
- error
'500':
description: Default Response
content:
application/json:
schema:
type: object
additionalProperties: false
properties:
success:
type: boolean
enum:
- false
error:
type: object
additionalProperties: false
properties:
code:
type: string
description: Machine-readable error code (e.g., AUTH_INVALID_TOKEN, RESOURCE_NOT_FOUND)
message:
type: string
description: Human-readable error message
details:
description: Optional additional error context
required:
- code
- message
required:
- success
- error
operationId: postV1UsersByUserIdSearch
x-operation-id-source: derived