import requests
url = "https://eu.app.clarifeye.ai/api/v1/projects/{project_id}/interviews/search-transcripts/"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://eu.app.clarifeye.ai/api/v1/projects/{project_id}/interviews/search-transcripts/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));curl --request GET \
--url https://eu.app.clarifeye.ai/api/v1/projects/{project_id}/interviews/search-transcripts/ \
--header 'Authorization: Bearer <token>'{
"query": "<string>",
"terms": [
"<string>"
],
"count_interviews_matched": 123,
"interviews_scanned": 123,
"scan_limit_reached": true,
"truncated": true,
"hits": [
{
"interview_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"interview_name": "<string>",
"type": "<string>",
"status": "<string>",
"campaign": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
},
"role": "<string>",
"speaker": "<string>",
"timestamp": "<string>",
"query_id": 123,
"snippet": "<string>",
"matched_terms": [
"<string>"
],
"interview_total_matches": 123
}
]
}{
"error": "User not found"
}{
"error": "Authentication credentials were not provided."
}{
"error": "You do not have permission to perform this action."
}{
"error": "Not found."
}Search interview transcripts
Keyword search over interview transcripts, returning short snippets that point at where something was said (agent-oriented: read the interview itself for the full context).
The query is split into whitespace-separated keywords; a message matches when it contains any term (case-insensitive substring), so extra words broaden rather than narrow the search and there is no phrase matching. Punctuation is stripped from each term’s edges, and stopwords and single-character terms are dropped — a query consisting only of those is rejected with 400. Only conversational message turns are searched — tool-call payloads and reasoning entries never match. Hits are ranked by distinct terms matched, then interview recency, and capped at 3 per interview and 30 in total. All interview conversation types (onboarding, interview, guided-interview, imported-interview) are always searched. Visibility scoping matches the interviews list (non-admins only search their own or assigned interviews).
import requests
url = "https://eu.app.clarifeye.ai/api/v1/projects/{project_id}/interviews/search-transcripts/"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://eu.app.clarifeye.ai/api/v1/projects/{project_id}/interviews/search-transcripts/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));curl --request GET \
--url https://eu.app.clarifeye.ai/api/v1/projects/{project_id}/interviews/search-transcripts/ \
--header 'Authorization: Bearer <token>'{
"query": "<string>",
"terms": [
"<string>"
],
"count_interviews_matched": 123,
"interviews_scanned": 123,
"scan_limit_reached": true,
"truncated": true,
"hits": [
{
"interview_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"interview_name": "<string>",
"type": "<string>",
"status": "<string>",
"campaign": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
},
"role": "<string>",
"speaker": "<string>",
"timestamp": "<string>",
"query_id": 123,
"snippet": "<string>",
"matched_terms": [
"<string>"
],
"interview_total_matches": 123
}
]
}{
"error": "User not found"
}{
"error": "Authentication credentials were not provided."
}{
"error": "You do not have permission to perform this action."
}{
"error": "Not found."
}Authorizations
Use Authorization: Bearer
Path Parameters
UUID of the project
Query Parameters
Search keywords (whitespace-separated; a message matches any term). Minimum 2 characters; stopwords and single-character terms are ignored.
Filter by campaign: a campaign UUID, or "none" for interviews without a campaign.
Comma-separated interview UUIDs to search within.
Response
Successful response
The parsed search terms (unique, lowercased).
Interviews with at least one matching message (before the total-hit cap).
Candidate interviews whose transcripts were examined.
True when more interviews matched the prefilter than could be scanned, so older ones were not examined at all and matches may be missing entirely (not merely trimmed).
True when more matches exist than were returned (per-interview cap, total cap, or scan bound reached).
Show child attributes
Show child attributes