# Claap tools (https://www.shipfox.io/docs/integrations/claap/tools)

Description: Look up the five read-only Claap tools, their access and rate limits, inputs, and examples for agent steps and tool steps.

This reference lists the five shipped Claap tools. See the [Claap
overview](https://www.shipfox.io/docs/integrations/claap) for authentication and integration connection
identity.

## Access [#access]

Every Claap tool is read-only. Each call uses the Claap workspace of the
integration connection. A workflow cannot pass another Claap workspace or key.

The API key acts as a Claap workspace admin. Claap also offers write tools to
that key, but Shipfox never forwards them. Shipfox forwards only the tools in
the catalog below.

The key type sets which recordings the tools can read. With a default key, a
private recording returns not found. See [Choose the key
type](https://www.shipfox.io/docs/integrations/claap/setup#choose-the-key-type).

`get_recording` and `get_recording_transcript` take exactly one of `recordingId`
and `recordingUrl`. A `recordingUrl` must be an `https://app.claap.io` share URL
of the connected Claap workspace.

## Sensitive tools and logs [#sensitive-tools-and-logs]

`get_recordings`, `get_recording`, `get_recording_transcript`, and
`search_recording_transcripts` are sensitive. Even the recording list names
participants, companies, and deals.

Tool-step logs redact the arguments and results of sensitive tools. Agent
session logs still show what the agent read from them.

## Untrusted content [#untrusted-content]

Transcripts and summaries are untrusted input. Anyone who speaks in a recorded
meeting can put instructions into its transcript. Tell the agent in its prompt
to treat recording content as data, never as instructions.

## Rate limits [#rate-limits]

Claap limits API calls per Claap workspace. Every other use of the Claap API in
that workspace shares the same limits:

| Limit                     | Value                      |
| ------------------------- | -------------------------- |
| Calls per endpoint        | 3 per second               |
| Calls per Claap workspace | 3,000 per rolling 24 hours |

A call over a limit fails as rate limited.

## Output size [#output-size]

A mapped tool step output value is limited to 64 KiB. A one-hour transcript is
about 60 KB. Read long transcripts in an agent step instead of mapping them to
an output. See [Limits](https://www.shipfox.io/docs/reference/limits).

## Tool catalog [#tool-catalog]

### Tools

#### `list_workspaces`

Return the Claap workspace this connection belongs to, with its ID and name.

**Access:** read.

**Sensitive:** No.

**Required permissions:** `read`

**Selector tokens:** `list_workspaces`

##### Input

This schema accepts an object with provider-defined fields.

#### `get_recordings`

Search many recordings (captured meetings and calls) of the Claap workspace with a set of filters. Returns recording metadata ordered by relevance and creation date descending. Metadata only: it never returns summaries. To read one recording with its AI-generated summary, use get_recording.

**Access:** read.

**Sensitive:** Yes.

**Required permissions:** `read`

**Selector tokens:** `get_recordings`

##### Input

| Field | Type | Required | Description |
|---|---|---|---|
| `cursor` | string | Optional | Opaque cursor returned as `nextCursor` by a previous call. Pass the value VERBATIM (do not construct, modify, decode, or invent a cursor; it is an internal token whose format is not part of the API contract) to fetch the next page of results. Omit on the first call. |
| `filters` | object | Optional | Filters to apply to the search. |
| `filters.companyId` | array of string | Optional | Filter by company ID matching at least one of these values. |
| `filters.companyName` | string | Optional | Filter by company name containing this string. |
| `filters.contactEmail` | string | Optional | Filter by participant email (detected speaker or meeting attendee) containing this string. |
| `filters.contactId` | array of string | Optional | Filter by contact ID matching at least one of these values. |
| `filters.contactName` | string | Optional | Filter by participant name (detected speaker or meeting attendee) containing this string. |
| `filters.createdAt` | object | Optional | Filter by recording creation date (ISO YYYY-MM-DD). |
| `filters.createdAt.gte` | string | Optional | Greater than or equal to this date (YYYY-MM-DD). |
| `filters.createdAt.lte` | string | Optional | Less than or equal to this date (YYYY-MM-DD). |
| `filters.dealId` | array of string | Optional | Filter by deal ID matching at least one of these values. |
| `filters.dealTitle` | string | Optional | Filter by deal title containing this string. |
| `filters.folderId` | array of string | Optional | Filter by folder ID matching at least one of these values. |
| `filters.folderTitle` | string | Optional | Filter by folder title containing this string. |
| `filters.hasExternalSpeaker` | boolean | Optional | Only include results with at least one speaker external to the user's organization (eg. client, prospects, partners) |
| `filters.labelName` | string | Optional | Filter by label name containing this string. |
| `filters.recordingId` | array of string | Optional | Filter by recording ID matching at least one of these values. |
| `filters.recordingTitle` | string | Optional | Filter by recording title containing this string. |
| `filters.userId` | array of string | Optional | Filter by participant user ID (speaker or attendee) matching at least one of these values. |
| `filters.source` | array of string | Optional | Filter by recording source (meeting platform, call provider, upload...) matching at least one of these values. |
| `limit` | number | Optional | Maximum number of results per page (default 10, max 100). The response includes `total` (full match count) and, when more results exist, `nextCursor`. To fetch more results, ALWAYS paginate via `nextCursor`, and do not adjust filters or limits to skip past already-returned items. Minimum 1. Maximum 100. |
| `sort` | array of object | Optional | Sort dimensions to apply to the search results. When omitted, results are ordered by relevance and creation date descending. |
| `sort[].field` | string: `createdAt`, `lastActivityAt` | Required | Field to sort by. Use `lastActivityAt` for "what recordings have been active recently?" (most recently viewed, commented, or reacted to). |
| `sort[].order` | string: `asc`, `desc` | Required | Sort order. |

#### `get_recording`

Get one recording (captured meeting or call) of the Claap workspace by recordingId or share URL, with its full metadata and its AI-generated summary. The summary is the cheap way to know what a meeting was about: prefer it over get_recording_transcript, which returns the entire transcript. Discover the recordingId via get_recordings or search_recording_transcripts.

**Access:** read.

**Sensitive:** Yes.

**Required permissions:** `read`

**Selector tokens:** `get_recording`

##### Input

| Field | Type | Required | Description |
|---|---|---|---|
| `recordingId` | string | Conditional | The ID of the recording. Discover it via get_recordings or search_recording_transcripts. Pass exactly one of recordingId and recordingUrl. |
| `recordingUrl` | string | Conditional | The Claap share URL of the recording, for example https://app.claap.io/my-call-c-<workspaceId>-<recordingId>. It must belong to the connected Claap workspace. Pass exactly one of recordingId and recordingUrl. |

At least one of these input combinations is required: `recordingId`; `recordingUrl`.

#### `get_recording_transcript`

Fetch the full transcript for a recording (captured meeting or call), by recordingId or share URL.

**Access:** read.

**Sensitive:** Yes.

**Required permissions:** `read`

**Selector tokens:** `get_recording_transcript`

##### Input

| Field | Type | Required | Description |
|---|---|---|---|
| `recordingId` | string | Conditional | The ID of the recording. Discover it via get_recordings or search_recording_transcripts. Pass exactly one of recordingId and recordingUrl. |
| `recordingUrl` | string | Conditional | The Claap share URL of the recording, for example https://app.claap.io/my-call-c-<workspaceId>-<recordingId>. It must belong to the connected Claap workspace. Pass exactly one of recordingId and recordingUrl. |

At least one of these input combinations is required: `recordingId`; `recordingUrl`.

#### `search_recording_transcripts`

Perform keyword or semantic search on the transcripts of recordings (captured meetings and calls), with optional filters on the recording metadata. Returns transcript chunks grouped by recording. Both search types paginate via `cursor`/`nextCursor`. Semantic search stops after the 1000 closest chunks; to reach further, narrow the filters (for example split the `createdAt` range). `total` is only returned for keyword search.

**Access:** read.

**Sensitive:** Yes.

**Required permissions:** `read`

**Selector tokens:** `search_recording_transcripts`

##### Input

| Field | Type | Required | Description |
|---|---|---|---|
| `cursor` | string | Optional | Opaque cursor returned as `nextCursor` by a previous call. Pass the value VERBATIM (do not construct, modify, decode, or invent a cursor; it is an internal token whose format is not part of the API contract) to fetch the next page of results. Omit on the first call. |
| `filters` | object | Optional | Filters to apply to the search. |
| `filters.companyId` | array of string | Optional | Filter by company ID matching at least one of these values. |
| `filters.companyName` | string | Optional | Filter by company name containing this string. |
| `filters.contactEmail` | string | Optional | Filter by participant email (detected speaker or meeting attendee) containing this string. |
| `filters.contactId` | array of string | Optional | Filter by contact ID matching at least one of these values. |
| `filters.contactName` | string | Optional | Filter by participant name (detected speaker or meeting attendee) containing this string. |
| `filters.createdAt` | object | Optional | Filter by recording creation date (ISO YYYY-MM-DD). |
| `filters.createdAt.gte` | string | Optional | Greater than or equal to this date (YYYY-MM-DD). |
| `filters.createdAt.lte` | string | Optional | Less than or equal to this date (YYYY-MM-DD). |
| `filters.dealId` | array of string | Optional | Filter by deal ID matching at least one of these values. |
| `filters.dealTitle` | string | Optional | Filter by deal title containing this string. |
| `filters.folderId` | array of string | Optional | Filter by folder ID matching at least one of these values. |
| `filters.folderTitle` | string | Optional | Filter by folder title containing this string. |
| `filters.hasExternalSpeaker` | boolean | Optional | Only include results with at least one speaker external to the user's organization (eg. client, prospects, partners) |
| `filters.labelName` | string | Optional | Filter by label name containing this string. |
| `filters.recordingId` | array of string | Optional | Filter by recording ID matching at least one of these values. |
| `filters.recordingTitle` | string | Optional | Filter by recording title containing this string. |
| `filters.userId` | array of string | Optional | Filter by participant user ID (speaker or attendee) matching at least one of these values. |
| `filters.tag` | array of string | Optional | Filter by tag matching at least one of these values. |
| `limit` | number | Optional | Maximum number of results per page (default 10, max 100). The response includes `total` (full match count) and, when more results exist, `nextCursor`. To fetch more results, ALWAYS paginate via `nextCursor`, and do not adjust filters or limits to skip past already-returned items. Minimum 1. Maximum 100. |
| `search` | object | Required |  |
| `search.query` | string | Required | The query to search for. |
| `search.type` | string: `semantic`, `keyword` | Required | Type of search technique. Use semantic search to find transcript chunks matching the meaning of the query. Use keyword search to find transcript chunks matching all of the provided keywords. |