> ## Documentation Index
> Fetch the complete documentation index at: https://docs.paraform.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Read your call transcripts

> List your recorded Parascribe calls, search and filter them, and read a call's full transcript.

Paraform records and transcribes your calls with Parascribe. Two endpoints read them: one lists your calls, the other returns one call with its full transcript. You need a personal key with `calls:read`.

## List your calls

[`GET /recruiter/parascribe-calls`](/recruiter/api-reference/list-parascribe-calls) returns your own recorded calls that have a transcript, newest first.

```bash theme={null}
curl "https://external-api.paraform.com/api/external/v1/recruiter/parascribe-calls" \
  -H "Authorization: Bearer $PARAFORM_API_KEY"
```

Each row describes the call so you can pick the right one:

| Field | What it tells you |
| - | - |
| `callId` | The id you pass to get the transcript |
| `title`, `scheduledAt`, `platform` | The calendar title, when the call was scheduled, and where it happened, such as `GOOGLE_MEET`, `ZOOM`, or `PHONE` |
| `durationSeconds` | How long the recording runs. `null` when the transcript has no timestamps. |
| `participants` | The names on the calendar invite. Empty for phone calls and calls without an invite. |
| `candidate`, `role` | The candidate and role the call is linked to, or `null` |
| `summary` | The first 600 characters of the call summary, or `null` when none was generated |
| `url` | The call in the Paraform app |

Rows never include transcript text. A page holds at most 50 calls (`limit`, default 20). See [Pagination](/pagination) for paging through more than one page.

## Get a transcript

[`GET /recruiter/parascribe-calls/{callId}`](/recruiter/api-reference/get-parascribe-call) returns the call's metadata, its full `summary`, and the whole `transcript`.

```bash theme={null}
curl "https://external-api.paraform.com/api/external/v1/recruiter/parascribe-calls/$CALL_ID" \
  -H "Authorization: Bearer $PARAFORM_API_KEY"
```

The transcript is a list of speaker turns in call order:

```json theme={null}
{
  "callId": "…",
  "title": "Intro call with Jane Doe",
  "transcript": [
    { "speaker": "Alex Recruiter", "startSeconds": 1, "endSeconds": 2, "text": "Hi Jane, thanks for making the time." },
    { "speaker": "Jane Doe", "startSeconds": 3, "endSeconds": 9.5, "text": "Of course, happy to chat." }
  ]
}
```

`startSeconds` and `endSeconds` are offsets from the start of the recording. They're `null` when the recording has no timestamps. The whole transcript comes back in one response.

Speaker labels come from the recording provider. A label can be a name or a generic label such as `Speaker A`. A label never contains an email address. A speaker the provider identified only by email shows as that person's name on the calendar invite, or as `Unnamed participant` when the invite has no name.

## Narrow the list

All filters are optional and combine with AND. Results stay newest first. When you page, send the same filters with each `cursor`.

### Search by title, summary, or name

`query` searches the call title, the call summary, and the linked candidate's name, ignoring case. Every word must appear in one of them, so `jane intro` finds the intro call with Jane. It doesn't search the transcript.

```bash theme={null}
curl -G "https://external-api.paraform.com/api/external/v1/recruiter/parascribe-calls" \
  -H "Authorization: Bearer $PARAFORM_API_KEY" \
  --data-urlencode "query=jane intro"
```

### Calls in a time window

`scheduledAfter` (inclusive) and `scheduledBefore` (exclusive) take a full ISO 8601 timestamp with a timezone, such as `2026-10-01T00:00:00Z` or `2026-10-01T00:00:00-07:00`. A date without a time or timezone returns `400`, and so does a `scheduledAfter` at or after `scheduledBefore`.

```bash theme={null}
# Calls scheduled in October 2026, Pacific time
curl -G "https://external-api.paraform.com/api/external/v1/recruiter/parascribe-calls" \
  -H "Authorization: Bearer $PARAFORM_API_KEY" \
  --data-urlencode "scheduledAfter=2026-10-01T00:00:00-07:00" \
  --data-urlencode "scheduledBefore=2026-11-01T00:00:00-07:00"
```

### Every call with one candidate

First find the candidate's `candidateId` with [`GET /recruiter/candidates`](/recruiter/guides/recommended-roles#find-the-candidate), for example by LinkedIn profile link or email. That lookup needs `candidates:read` on the key as well. Then pass it to the list:

```bash theme={null}
curl -G "https://external-api.paraform.com/api/external/v1/recruiter/parascribe-calls" \
  -H "Authorization: Bearer $PARAFORM_API_KEY" \
  --data-urlencode "candidateId=$CANDIDATE_ID"
```

### Calls for one role

`roleId` keeps the calls linked to that role. Most calls aren't linked to a role, so expect few results.

A candidate or role with none of your calls returns an empty list, not an error.

## What you can read

* **Only your own calls.** Calls your agency teammates recorded are never included, even if you can see them in the app. There's no parameter for reading another recruiter's calls.
* **Only transcribed calls.** A call that is still processing, or has no transcript, isn't listed.
* **No participant emails.** Calls carry names only.

<Warning>
  Transcripts contain what candidates said about themselves. They also include internal meetings you recorded. Any key with `calls:read` can read them, so only add that scope when a tool needs calls, store the key securely, and only give it to tools you trust.
</Warning>

## Errors

See [Errors](/errors) for the envelope.

| Status | `type` | What to do |
| - | - | - |
| `400` | `invalid_request_error` | A parameter is malformed or misspelled, a timestamp has no timezone, or the time window is empty. `details` names the field. |
| `404` | `not_found` | The call doesn't exist, isn't yours, or has no transcript. Get a `callId` from the list. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.