# 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](https://docs.slingdata.io/sling-cli/cli-pro) or [Platform Plan](https://docs.slingdata.io/sling-platform/platform).
{% 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/sling-cli/environment#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/sling-cli/environment#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).
