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

# API keys and requests

> Create your organization API key, authenticate requests, and read responses from the Sales Ask API.

Every request to the Sales Ask API uses your organization API key. The key is scoped to your organization, so every response only includes your organization's data.

## Create your API key

<Steps>
  <Step title="Open organization settings">
    As an organization admin, log in to [Sales Ask](https://app.salesask.com) and go to **Settings → Organization**.
  </Step>

  <Step title="Generate the key">
    In the **Organization API Key** section, click the refresh icon.
  </Step>

  <Step title="Copy it somewhere safe">
    Copy the key with the button next to the field, and store it in your secrets manager.
  </Step>
</Steps>

<Warning>
  Regenerating the key immediately invalidates the old one, everywhere it's used: API calls, dialer webhook URLs, and the check your webhook endpoint does on incoming requests. Store the key securely. It gives access to every recording in your organization.
</Warning>

## Send the key

Pass the key in the `x-api-key` header on every request:

```bash theme={null}
x-api-key: <YOUR_API_KEY>
```

`Authorization: Bearer <YOUR_API_KEY>` also works. Keys in query parameters aren't accepted. A missing or wrong key returns `401` with `{ "message": "Invalid Api Key" }`.

## Base URL

```text theme={null}
https://integrations.salesask.com
```

All endpoints are under `/v1`.

## Try a request

This request returns your 10 most recent processed recordings:

```bash theme={null}
curl "https://integrations.salesask.com/v1/recordings?limit=10" \
  -H "x-api-key: <YOUR_API_KEY>"
```

```json theme={null}
{
  "recordings": [
    {
      "id": "abc123",
      "name": "Call with John Doe",
      "status": "processed",
      "createdAt": "2026-03-01T14:22:00.000Z",
      "duration": 1800000,
      "summary": "Rep discussed pricing and timeline...",
      "recording": "https://integrations.salesask.com/meetings/abc123"
    }
  ],
  "nextCursor": "2026-02-28T09:10:00.000Z",
  "hasMore": true
}
```

### Filter and paginate

Use `fromDate` and `toDate` to limit results to a date range:

```bash theme={null}
curl "https://integrations.salesask.com/v1/recordings?fromDate=2026-03-01&toDate=2026-03-31&limit=50" \
  -H "x-api-key: <YOUR_API_KEY>"
```

When `hasMore` is `true`, pass `nextCursor` as `startAfter` to get the next page:

```bash theme={null}
curl "https://integrations.salesask.com/v1/recordings?startAfter=2026-02-28T09:10:00.000Z" \
  -H "x-api-key: <YOUR_API_KEY>"
```

## Responses and errors

All endpoints return JSON. Successful responses have a top-level key named after the resource, such as `recordings` or `appointment`.

Errors return an HTTP status code and a JSON body with a `message`. Validation errors for a missing field also include `code` and `field`, which tell you what to fix:

```json theme={null}
{ "message": "...", "code": "MISSING_REQUIRED_FIELD", "field": "user_email" }
```

## Timestamps

Timestamps are ISO 8601 strings in UTC, for example `2026-03-01T14:22:00.000Z`. Times you send must also be UTC.

Durations, such as `duration` and `avgDurationMs`, are in milliseconds.

<CardGroup cols={2}>
  <Card title="Connect your CRM" icon="arrows-rotate" href="/build/crm">
    Keep appointments in sync and get recording results back by webhook.
  </Card>

  <Card title="Connect your phone system" icon="phone-volume" href="/build/phone-system">
    Send finished calls from any dialer to Sales Ask.
  </Card>
</CardGroup>

Questions about the API? Email [support@salesask.com](mailto:support@salesask.com). Never include your API key.


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