Insights Company

Interviews

Retrieve video recordings, transcripts, screener responses, and participant metadata for interviews.

Returns a paginated list of all interviews for a project, regardless of status. Each record includes the current status, video recording URL, and participant metadata. Transcripts are optional — omit them for lightweight responses when you only need the video or participant data.

If you need a project_id, use the Projects endpoint to list your organisation's projects. For aggregated AI analysis across all interviews, see Reports.

Endpoint

Returns a paginated list of all interviews for a project, regardless of status. Each record includes the status, video recording URL and participant metadata. Pass `transcripts=true` to include the full structured transcript — omit it for lightweight responses when transcripts are not needed.

Authentication

x-api-key header

Path Parameters

NameTypeDescription
project_id*string

Query Parameters

NameTypeDescription
transcriptsbooleanInclude the full structured transcript in each record. Transcripts can be large — only request when needed.
screenerbooleanInclude screener questions and participant answers in each record.
interview_idstringFilter to a single interview by its ID (`id` field on each interview record).
pageintegerPage number (1-indexed).
limitintegerRecords per page. Maximum 100.

Headers

NameTypeDescription
x-api-keystring

Responses

FieldTypeDescription
itemsrequired
object[]
idrequired
string
statusrequired
string
completed_atrequired
stringCompleted At
duration_minutesrequired
integerDuration Minutes
video_urlrequired
stringVideo Url
video_url_expires_atrequired
stringVideo Url Expires At
thumbnail_urlrequired
stringThumbnail Url
participantrequired
object
transcriptrequired
object[]
screenerrequired
object
totalrequired
integer
pagerequired
integer
limitrequired
integer
has_morerequired
booleanHas More

Example request

GET /v1/projects/<project_id>/interviews
curl "https://external-api.prod.insightscompany.io/v1/projects/<project_id>/interviews?page=1&limit=20" \
-H "x-api-key: <api_key>"

Fetch a single interview by its ID:

GET /v1/projects/<project_id>/interviews?interview_id=<interview_id>
curl "https://external-api.prod.insightscompany.io/v1/projects/<project_id>/interviews?interview_id=<interview_id>" \
-H "x-api-key: <api_key>"

With transcripts included:

GET /v1/projects/<project_id>/interviews?transcripts=true
curl "https://external-api.prod.insightscompany.io/v1/projects/<project_id>/interviews?transcripts=true&limit=5" \
-H "x-api-key: <api_key>"

With screener responses included:

GET /v1/projects/<project_id>/interviews?screener=true
curl "https://external-api.prod.insightscompany.io/v1/projects/<project_id>/interviews?screener=true" \
-H "x-api-key: <api_key>"

Example response

Response 200
{
  "has_more": true,
  "items": [
    {
      "completed_at": "2026-07-09T14:32:00Z",
      "duration_minutes": 18,
      "id": "a1b2c3d4-0000-0000-0000-000000000000",
      "participant": {
        "email": "jane@example.com",
        "name": "Jane Smith"
      },
      "status": "COMPLETE",
      "thumbnail_url": "https://cdn.example.com/thumbnails/a1b2c3d4.jpg",
      "video_url": "https://cdn.example.com/recordings/a1b2c3d4.mp4",
      "video_url_expires_at": "2026-07-10T14:32:00Z"
    }
  ],
  "limit": 20,
  "page": 1,
  "total": 42
}

Pagination

Results are ordered by completed_at descending — newest first. Increment page until has_more is false:

Page 2
curl "https://external-api.prod.insightscompany.io/v1/projects/<project_id>/interviews?page=2&limit=20" \
-H "x-api-key: <api_key>"

Transcripts

Each transcript turn has a role of "AI" (the interviewer) or "User" (the participant), the spoken text, and start/end timestamps relative to the recording.

Transcripts are excluded by default because they can be large. Only request them when you need them — for bulk exports or processing pipelines, fetch without transcripts first, then retrieve individual records as needed.

Screener responses

If the project has a screener configured, each interview record includes a screener field with the questions that were shown to the participant and their responses. Pass screener=true to include it — omit it for lightweight responses when you only need the recording or transcript.

Screener response shape
"screener": {
"approved": true,
"questions": {
  "q_abc": { "text": "Do you use this product daily?" }
},
"answers": {
  "q_abc": "Yes"
}
}
  • questions — the screener definition, keyed by question ID.
  • answers — the participant's responses, keyed by the same question IDs.
  • approved — whether the participant passed the screener.
  • screener is null if the project has no screener configured and the participant recorded no answers.

Query parameters

ParameterTypeDefaultDescription
interview_idUUIDFilter to a single interview by its ID
transcriptsbooleanfalseInclude full transcript in each record
screenerbooleanfalseInclude screener questions and participant answers in each record
pageinteger1Page number (1-indexed)
limitinteger20Records per page. Maximum 100

Notes

video_url is a private, signed link. It expires at video_url_expires_at (normally 24 hours after the response is generated). Store the stable id, not the URL, and re-fetch the record when you need a fresh link.

  • status is one of STARTED, INCOMPLETE, or COMPLETE.
  • participant contains the metadata collected from the participant at interview start — name, email, and any custom fields configured on the project.
  • duration_minutes is the length of the recorded session, not the scheduled interview length.
  • screener contains the screener questions and the participant's answers. null if no screener was configured.

On this page