# 15Five

15Five is an employee engagement and performance management platform that helps organizations run check-ins, 1-on-1s, OKRs, high fives, pulse surveys, and Best-Self Reviews. The Sling 15Five connector extracts data from the 15Five Public API, supporting users, groups, check-ins, answers, objectives, high fives, 1-on-1s, review cycles, and more.

{% hint style="success" %}
**CLI Pro Required**: APIs require a [CLI Pro token](/sling-cli/cli-pro.md) or [Platform Plan](/sling-platform/platform.md).
{% endhint %}

## Setup

The following credentials are accepted:

**Secrets:**

* `api_key` **(required)** -> Your 15Five API key (32-character token)

**Inputs (optional):**

* `anchor_date` -> Starting date for first sync of incremental endpoints (ISO 8601 format, e.g., `2024-01-01T00:00:00Z`). Defaults to 1 year ago.

### Getting Your Credentials

1. Log in to your [15Five account](https://my.15five.com/)
2. Click the **Settings gear** (bottom-left corner)
3. Select **Features** from the dropdown
4. Scroll to the **Integrations** section
5. Click **Enable** next to "Public API"
6. Click **Create new key**
7. Name the key (e.g., "Sling Integration")
8. Click **Save**
9. Copy the **Access token** from the API keys table

{% hint style="warning" %}
**Important:** Only account admins can create and view API keys. API keys expire 1 year from creation. The API key is passed directly in the `Authorization` header (no "Bearer" prefix).
{% endhint %}

### Using `sling conns`

{% code overflow="wrap" %}

```bash
sling conns set FIFTEEN_FIVE type=api spec=15five secrets='{ api_key: your_api_key_here }'
```

{% endcode %}

### Environment Variable

See [here](https://docs.slingdata.io/connections/api-connections/pages/eAdVs2BHCgdr6RS8GoJC#dot-env-file-.env.sling) to learn more about the `.env.sling` file.

{% code overflow="wrap" %}

```bash
export FIFTEEN_FIVE='{ type: api, spec: 15five, secrets: { api_key: "your_api_key_here" } }'
```

{% endcode %}

### Sling Env File YAML

See [here](https://docs.slingdata.io/connections/api-connections/pages/eAdVs2BHCgdr6RS8GoJC#sling-env-file-env.yaml) to learn more about the sling `env.yaml` file.

```yaml
connections:
  FIFTEEN_FIVE:
    type: api
    spec: 15five
    secrets:
      api_key: "your_api_key_here"
```

## Replication

Here's an example replication configuration to sync 15Five data to a PostgreSQL database:

```yaml
source: FIFTEEN_FIVE
target: MY_POSTGRES

defaults:
  mode: full-refresh
  object: fifteen_five.{stream_name}

streams:
  # sync all endpoints
  '*':
```

**Incremental sync for supported endpoints:**

```yaml
source: FIFTEEN_FIVE
target: MY_POSTGRES

defaults:
  object: fifteen_five.{stream_name}

streams:
  users:
    mode: incremental
    primary_key: [id]
    update_key: update_ts
  groups:
    mode: full-refresh
  group_types:
    mode: full-refresh
  departments:
    mode: full-refresh
  attributes:
    mode: full-refresh
  attribute_values:
    mode: full-refresh
  questions:
    mode: full-refresh
  reports:
    mode: incremental
    primary_key: [id]
    update_key: create_ts
  answers:
    mode: incremental
    primary_key: [id]
    update_key: create_ts
  pulses:
    mode: incremental
    primary_key: [id]
    update_key: create_ts
  priorities:
    mode: incremental
    primary_key: [id]
    update_key: create_ts
  objectives:
    mode: incremental
    primary_key: [id]
    update_key: update_ts
  high_fives:
    mode: incremental
    primary_key: [id]
    update_key: create_ts
  one_on_ones:
    mode: incremental
    primary_key: [id]
    update_key: create_ts
  review_cycles:
    mode: full-refresh
  vacations:
    mode: incremental
    primary_key: [id]
    update_key: create_ts
  security_audit:
    mode: full-refresh
```

## Endpoints

| Endpoint           | Description                       | Incremental |
| ------------------ | --------------------------------- | ----------- |
| `users`            | All users in the organization     | Yes         |
| `groups`           | Groups (teams, squads, etc.)      | No          |
| `group_types`      | Group type definitions            | No          |
| `departments`      | Departments                       | No          |
| `attributes`       | People attributes (custom fields) | No          |
| `attribute_values` | People attribute values           | No          |
| `questions`        | Check-in questions                | No          |
| `reports`          | Check-in reports                  | Yes         |
| `answers`          | Check-in answers                  | Yes         |
| `pulses`           | Weekly pulse scores               | Yes         |
| `priorities`       | Check-in priorities               | Yes         |
| `objectives`       | Objectives (OKRs)                 | Yes         |
| `high_fives`       | High fives (recognition/kudos)    | Yes         |
| `one_on_ones`      | 1-on-1 meetings                   | Yes         |
| `review_cycles`    | Best-Self Review cycles           | No          |
| `vacations`        | Vacations / time off entries      | Yes         |
| `security_audit`   | Security audit events             | No          |

To discover available endpoints:

```bash
sling conns discover FIFTEEN_FIVE
```

## Incremental Sync

Endpoints with incremental support use `created_after` or `updated_after` query parameters:

* **First run:** Fetches all records from the last year (or since `anchor_date` if provided)
* **Subsequent runs:** Only fetches records created/modified after the last sync timestamp
* **Update key:** `update_ts` for users and objectives; `create_ts` for all other incremental endpoints

## Rate Limiting

The 15Five API enforces a rate limit of 5 requests per second per IP. The connector automatically:

* Uses conservative rate limiting (4 requests/second with concurrency of 2)
* Retries with exponential backoff on 429 (rate limit) responses, up to 5 attempts

If you are facing issues connecting, please reach out to us at <support@slingdata.io>, on [discord](https://discord.gg/q5xtaSNDvp) or open a Github Issue [here](https://github.com/slingdata-io/sling-cli/issues).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.slingdata.io/connections/api-connections/15five.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
