# Welcome

Welcome to Simple OKR documentation!


# FAQ

Answers to the Frequently Asked Questions

### Features

#### Is it possible to setup OKRs for everyone at the company?

Yes! We offer OKRs at three different levels: company, team and personal.

### Pricing & Plans

#### How much does Simple OKR cost?

We believe in simple and transparent pricing. Simple OKR costs a flat $49.99 USD/month.

#### I no longer want to use Simple OKR, what now?

Sorry to hear that. Simple OKR subscription can be cancelled at any time. There are no contracts or obligations.

#### What happens after my free trial ends?

After your trial period ends, you will not be allowed to add any new content. You will be able to access all existing content. Full service will be resumed once you upgrade to paid subscription.

### Support

#### I want to talk to a person

We use Drift service for customer support. Click the chatbox in the corner to talk to the person that's available. You can find the chatbox on almost every page.

You can also write us an email to <email@stepwisemethods.com>.


# Objectives & Key Results


# Quick Start

A short guide to get you started with Simple OKR

We prepared this guide to help you get started with Simple OKR. We will show you how to invite your team, set OKRs, perform status updates, and monitor OKR performance.

### 1. Create Account

To get started, you need to create a Simple OKR account. We offer a free trial which gives you an opportunity to try out the product and see how everything fits together.

If you use Google, you can sign up with your Google account. If you don’t have a Google account, or you don’t want to use Google to log in, you can complete the regular email sign up form.

[Sign up for Simple OKR](https://app.simpleokr.com/auth/signup)

### 2. Invite your Team

Simple OKR is meant for teams. You can invite your team to the app by going to `Settings -> Users`

<div align="center"><img src="/files/-LlSmJPxnPtRCgBiVzNS" alt=""></div>

Click on `Create Invitation Link` to create a new invitation link. Copy this link and share it with anyone you’d like to join your account. You can share the link via email, a chat application, or any other means of communication you use at work.

{% hint style="warning" %}
As a security precaution, make sure to turn off the link after everyone joined your account. Anyone who gains access to the link will be able to join your account while the invitation link is active.
{% endhint %}

### 3. Create Leadership Team

In order to create company Objectives, you need to create and configure a leadership team. The members of this team will be allowed to draft and set company level objectives.

Go to `Settings -> Teams` and create a leadership team. Let's call it `Executive Team`. Then go to `Settings -> Company` to update company settings. Set the team you created as your leadership team.

![](/files/-LlSpCvvtzz1cL1XXTYf)

{% hint style="info" %}
If you're a member of the leadership team, don't forget to add yourself as a team member. Only team members can create company objectives. Team members can only be added to the team by the team manager.
{% endhint %}

### 4. Create your first Objective

You can create new objectives by going to `Objectives` page. Let's create a company Objective by going to the `Company` tab and clicking `New Objective`. You will be presented with a New Objective dialog.

![](/files/-LlT5uaqP-loV6LwvR8g)

Enter details about the Objective and click on `Create Objective`.

After the Objective is created we need to set Key Results for tracking Objective's performance. Click on the name of the objective to get to the Objective's page. Once there, Click on `Add Key Result` to add a new Key Result. You will be presented with a dialog setup new Key Result.

![](/files/-LlT6wFKnP-DaAh94D23)

Fill out the details and click on `Create Key Result`. You can repeat this step to add as many OKRs as you want.

### 5. Submit a Status Update

It's important to keep the Objective's up to date. You can do so by submitting a status update. Status updates can be submitted either from the Objective's page or from `Objectives` tab on `My Homepage` page. Let's go to `My Homepage -> Objectives`. You should see a status update button next to the Key Result. You will be presented with a status update dialog.

![](/files/-LlT97pE2aG-zIRCgPFW)

### 6. Track Progress and Performance

Once you have your Objectives set,  you can track their progress and performance from the `Performance` page.


# Terminology

Here you can find a list of terms we use throughout Simple OKR app

### Objective

An Objective is a description of a goal to be achieved in the future. An Objective sets a clear direction and provides motivation. In OKR methodology objectives should be hard to reach, but not impossible, goals.

### Key Result

A Key Result is a metric with a starting value and a target value that measures progress towards an Objective. While and Objective is like a destination on a map, a Key Result is like a signpost with a distance that shows you how close you are.

### Delivery Cycle

OKR delivery cycle is a time period used to add time constraint to your objectives. Cycles can be freely defined by your company. Typically a cycle lasts one quarter.

Example: 2018 1st Quarter

### Alignment

Objectives can be vertically or horizontally aligned. Alignment indicates support for another objective, usually owned by another team at your company. For example, a company objective to *Grow business* might be supported by Marketing team's objective *Create more leads*.

### Team

Teams can be set as objective owners. Objectives are generally large in scope and will have several people working on the objective in order to reach it. You can designate team responsibilities by assigning objectives to teams.

Example: Product Engineering Team

### Lead

Lead is a person who oversees an objective. Lead is a point person for any OKR related questions. Lead can be part of the team that owns the objective or someone completely outside the team.


# Key Result Metric Types

Key Result metrics allow you to quantify Key Results and automatically track the progress of your Objectives. Simple OKR offers five types of metric types.

### **Milestone**

Milestone metric lets you track binary outcomes. You either reached your milestone, or you didn't. Use this metric when you can't express your Key Result as a numeric value. It is often the case when you are just starting out with OKRs and most of your Key Results milestones.

### **Baseline**

Baseline metric lets you capture a baseline value for a metric. Imagine a scenario where you want to track coupon redemptions with a goal to optimize coupon usage. When starting out, you may not have an available coupon redemption rate. You want to capture baseline value first before you can start work on improving coupon performance.

### **Positive**

Positive metric lets you move toward a specific target value. Use this metric when more is better. An example could be "sign 100 new customers". Your target would be 100 customers, and starting value is probably 0. You can track the total number of customer signed throughout the quarter.

### **Negative**

Negative metric lets you move toward a specific target value. Negative metric is similar to the Positive one; however, the metric value moves toward a smaller target value. Use this metric to track things such as risk and cost reductions. You can use this metric to track anything where you want to go from higher value to a smaller one.

### **Range**

With range metric, you can establish a range within which you want your metric to stay. You can use this metric to capture things like weekly resource utilization, or weekly spend.


# Configuration & Settings


# User Management

## What is a User?

A User is an email address linked to an organization. The same email address can be linked to several organizations through the user invitation process.

## Inviting Users

You can invite new users to your organization by creating and sharing an invitation link. To create an invitation link go to `Settings -> Users` and click on `Create Invitation Link`.

![](/files/-LlchUoQEltY7Kpi2Ju2)

A new invitation link will be created. Share the link with anyone who you'd like to join your organization. The invitation link can be used to invite many people.

{% hint style="danger" %}
Remember, anyone who has access to the link can join your organization and access your data. After you're done inviting people, make sure to turn off the invitation link for security reasons.
{% endhint %}

## Updating or Deactivating a User

A user can be updated by going to the `Settings -> Users` page and click on the tripple doc button next to the user.

![](/files/-LlckD8OuigTCX7vYUVk)

### **Changing User Profile and Roles**

To update user's name, job title, manager or role, click on the `Edit` menu item. You will be presented with a screen to update user's information.

### **Deactivating a User**

To deactivate a user, click on the `Deactivate` menu item. When a user is deactivated she will no longer be able to access the organization. The data that's linked to the user (comments, objectives, etc.) will remain intact.

## User Roles

### Administrator

A user with administrator permissions has full access to the system. An administrator can:

* Invite people to the organization.
* Deactivate other users.
* Manage teams.
* Manage subscription and billing information.

### Employee

A user with Employee permissions has limited access to the system. The user will not be able to change any organization level settings.


# Team Management

## What is a Team?

In Simple OKR we use teams to create logical groupings of people. This usually translates directly to the teams or departments at your company.

Every team must have a manager responsible for maintaining team structure. Each team can have zero or more team members. A single person can be a member of several teams.

When running an OKR cycle, teams can draft and own a set of Objectives.

### Leadership Team

Simple OKR has a concept of a leadership (or executive) team. The leadership team has special rights to draft and set Company level Objectives. You can designate the leadership team through from the company settings page, `Settings -> Company`.

### Team Manager

Team manager is a person responsible for maintaining team's structure. The manager can add or remove members to the team and change team's name.

The team manager cannot delete a team or change team manager to a different one. These actions are only permitted to the people with Administrator access rights.

### Team Member

Team member is a user that belongs to a team. Team members can draft, edit and create team objectives.

## Create a Team

New teams can be created by users who have Administrator access rights. To create a new team go to `Settings -> Teams` page and click on `New Team`.

![](/files/-LlUN6HYKupvTN88ZYGk)

You will be presented with a dialog windows where you can enter the details about the team.

{% hint style="info" %}
Remember, only the team manager can add or remove people from the team. Make, sure you set the correct team manager in order to add members to the team later.
{% endhint %}

## Update or Delete a Team

Team details can be updated by clicking on the tripple dot button next to the team. Go to `Settings -> Teams` and click on the tripple dot button next to the team to reveal a menu.

![](/files/-LlUOftfJnySnjiE5-d9)

You can update or delete a team by selected an action item from the menu.

## Add or Remove Team Members

People can be added to or removed from the team by the team's manager. To do so, go to the team's page by going to `People -> Teams` and selecting a team from the list. Go to the `Members` tab and click on `Add New Member` button.

![](/files/-LlUPxdBsF-9YpTGQlD1)

Select a user from the list that you'd like to add to the team and click on `Add User to Team`.

To remove user from the team click the tripple dot button next to the team member to reveal action menu.

![](/files/-LlUQaTDYOxwnsuzGOSq)

Select `Remove` to remove the user from the team.


# Security


# Single Sign-On

Learn how to configure Simple OKR for Single Sign-On


# G Suite Configuration

To configure G Suite as Identity Provider for Simple OKR follow the steps on this page.

### Enable SSO on G Suite

Head to `Google Admin -> Security -> Setup single sign on SSO`. Under Setup SSO with Google Identity provider section, generate a new certificate if none are available.

![](/files/-LpxiI291OmB2B8dgIRh)

Click on `Download IDP Metadata` to download XML metadata containing information about the identity provider. We will need this file later to configure Simple OKR.

### Create a new SAML App

Head to `Google Admin -> Apps -> SAML Apps`. Click on the `+` button to add a new app. Then click on Setup Custom SAML app. Follow the configuration wizard until you reach the Service Provider configuration page:

![](/files/-Lpxln32mv_XOZmTlp57)

Under ACS URL enter: `https://app.simpleokr.com/auth/saml/acs`

Under Entity ID enter: `https://app.simpleokr.com/auth/saml/metadata`

Leave the remaining settings as shown in the screenshot above.

You can provide additional information to Simple OKR from the identity provider. This step is optional, however we advise you to fill out the attribute mapping. On the attribute mapping screen enter the configuration as shown below.

![](/files/-LpxnEyuZv9talAC3GZW)

Click Finish to create the application. Make sure the application is enabled for it to work.

Configure Simple OKR

Follow the instructions on [Custom Identity Provider page on how to configure Simple OKR](/simple-okr-manual/settings/security/single-sign-on/custom-identity-provider#configure-simple-okr).


# Custom Identity Provider

Learn how to setup custom SAML v2 Identity Provider

### Configure Identity Provider

Use the information below when configuring your Identity Provider.

**SAML Metadata URL:**\
<https://app.simpleokr.com/auth/saml/metadata>

**SAML ACS URL:**\
<https://app.simpleokr.com/auth/saml/acs>

**Entity ID:**\
<https://app.simpleokr.com/auth/saml/metadata>

### Configure Simple OKR

To enable SSO for simple OKR you will need a XML metadata file from your identity provider. This file must contain SAML EntityDescriptor configuration.

Once you have the file, head to `Settings -> Security` and click on Configure Single Sign-On.

![](/files/-LpxfAHX45eMINwzRYBc)

![](/files/-LpxfG4KEo8KsBYRuBVV)

Click on Choose file to select and upload the metadata file. After the file is uploaded, you will be able to enable the SSO.

{% hint style="danger" %}
Make sure to test SSO sign-in link before enabling SSO for your account. Once SSO is enabled, users will only be allowed to login via the sign-in link that was generated for you. You can test the link by signing out and visiting the sign-in link. If everything works fine, you will be logged back into Simple OKR.
{% endhint %}

Test the SSO link and if everything the new sign-in flow works enable SSO by clicking on `Enable SSO`.


# Domain Restriction

Restrict which domains can access your organization.

With Domain Restriction setting you can enable domain checks for your users. Only users with the whitelisted domain email addresses will be allowed to join the organization or sign-in.

To enable Domain Restriction go to `Settings -> Security` and find Domain Restriction setting.

![](/files/-LlTSlbKN9KKzfEIW5RR)

Enter the domain that domain that you would like to grant access to your organization and click `Save`.

{% hint style="danger" %}
Make sure the domain you enter has correct capitalization and does not have any white spaces around it. Entering domain incorrectly will lock you and everyone else from the app.
{% endhint %}


# Password Sign-In

Enable or disable password sign-in for your organization

You can use Password Sign-In setting to disable or enable capability to sign-in with a password. When password sign-in is disabled, users will only be allowed to use Google to sign into your organization.

To disable or enable password sign-in go to `Settings -> Security` and find Password Sign-In setting.

![](/files/-LlTUY2f55OkPZtyDtK6)


# Authentication

Learn how to authenticate to Simple OKR before you can use the APIs

Simple OKR uses API keys to authenticate requests. You can manage API keys via [Simple OKR website](https://simpleokr.com).

### API Keys

API keys consist of public and secret components.

Public component (called `Credential`) is used to identify the API key on Simple OKR servers. The secret component (called `Secret Key`) is used to construct a request signature. The secret component should be kept private and not shared with anyone.

### S1-HMAC-SHA256 authentication protocol <a href="#s1-hmac-sha256-authentication-protocol" id="s1-hmac-sha256-authentication-protocol"></a>

`S1-HMAC-SHA256` is the first version of authentication protocol used by the Simple OKR API.

All requests must include HTTP `Authorization` header in the following format:

```
Authorization: S1-HMAC-SHA256 Credential=<credential>&Timestamp=<timestamp>&Signature=<signature>
```

Authorization header arguments:

* **credential** is the public component of the API key.
* **timestamp** is the RFC 3339 timestamp of the current time in UTC. Your clock must be synchronized. We will allow 10 minute clock skew in either direction.
* **signature** is a signature constructed using the secret key, credential and the timestamp.

The signature is constructed by concatenating `credential` with `timestamp` and applying HMAC-SHA256 with the secret key. The output of HMAC must be encoded in hex and converted to lower case. This value becomes the signature.

Below are examples API keys and the signature they should produce. Use this example to validate your own signature generation methods:

* Credential: `mycredential`
* Secret key: `mysecret`
* Timestamp: `2019-02-03T01:55:37Z`
* Signature: `ab9b15c8321dd0e00bbbcc8e33629adcb273b1dfeedb54387cb305fca6c409fa`

Example signature generation with Go:

```go
import (
  "crypto/hmac"
  "crypto/sha256"
  "encoding/hex"
  "strings"
  "time"
)

func hmacSign(secret string, data string) string {
  mac := hmac.New(sha256.New, []byte(secret))
  mac.Write([]byte(data))
  return strings.ToLower(hex.EncodeToString(mac.Sum(nil)))
}

func main() {
  credential := "mycredential"
  secret := "mysecret"
  timestamp := time.Now().UTC().Format(time.RFC3339)

  signature := hmacSign(secret, credential+timestamp)
  println(credential, secret, timestamp, signature)
}
```

Example signature generation with Python 3:

```python
import hmac
import hashlib

credential = b"mycredential"
secret = b"mysecret"
timestamp = b"2019-02-03T01:55:37Z"

mac = hmac.new(bytearray(secret), digestmod=hashlib.sha256)
mac.update(bytearray(credential + timestamp))
digest = mac.hexdigest()

print(credential, secret, timestamp, digest)
```


# Errors

Error object structure and errors response codes

Simple OKR uses conventional HTTP response codes to indicate the success or failure of an API request. In general: codes in the `2xx` range indicate success. Codes in the `4xx` range indicate an error that failed given the information provided (e.g., a required parameter was omitted). Codes in the `5xx` range indicate an error with Simple OKR servers.

### Error response object <a href="#error-response-object" id="error-response-object"></a>

Errors returned by all Simple OKR APIs use the same error response structure:

| Attribute | Type             | Description                                                     |
| --------- | ---------------- | --------------------------------------------------------------- |
| code      | integer          | HTTP status code                                                |
| message   | string           | Human readable error summary                                    |
| details   | object, optional | A free form object providing additional details about the error |

Example:

```javascript
{
  "code": 400,
  "message": "invalid request",
  "details": {
    "name": "name is required"
  }
}
```


# API Reference

Here you can find API reference for Simple OKR.

All API calls should be made over HTTPS to `api.simpleokr.com` server.


# Users

User object holds information about a user of an organization.

### The User object

| Attribute   | Type   | Description                                                                              |
| ----------- | ------ | ---------------------------------------------------------------------------------------- |
| id          | string | Unique user identifier                                                                   |
| name        | string | Full name of the user                                                                    |
| email       | string | Email address associated with the user                                                   |
| is\_active  | bool   | Indicator whether the user is active or not. Inactive users cannot sign into Simple OKR. |
| created\_at | string | Time when the user was created. RFC 3339 format.                                         |

Example:

```javascript
{
  "id": "16682617-f25d-4df2-9f51-3c38298996b8",
  "name": "John Doe",
  "email": "email@example.com",
  "is_active": true,
  "created_at": "2018-02-20T12:32:56Z"
}
```

## List users

<mark style="color:blue;">`GET`</mark> `https://api.simpleokr.com/v1/users`

Returns a list of your users.

#### Query Parameters

| Name        | Type   | Description     |
| ----------- | ------ | --------------- |
| page\_token | string | Page identifier |

{% tabs %}
{% tab title="200 " %}

```javascript
{
  "next_page_token": null,
  "users": [
    {
      "id": "16682617-f25d-4df2-9f51-3c38298996b8",
      "name": "John Doe",
      "email": "email@example.com",
      "is_active": true,
      "created_at": "2018-02-20T12:32:56Z"
    },
    {...},
    {...}
  ]
}
```

{% endtab %}
{% endtabs %}

## Retrieve user

<mark style="color:blue;">`GET`</mark> `https://api.simpleokr.com/v1/users/:id`

Retrieve details about the existing user. Supply a unique user ID from a user list response.<br>

#### Path Parameters

| Name | Type   | Description |
| ---- | ------ | ----------- |
| id   | string | User ID     |

{% tabs %}
{% tab title="200 " %}

```javascript
{
  "id": "16682617-f25d-4df2-9f51-3c38298996b8",
  "name": "John Doe",
  "email": "email@example.com",
  "is_active": true,
  "created_at": "2018-02-20T12:32:56Z"
}
```

{% endtab %}
{% endtabs %}


# Teams

Team objects are used to group users into teams.

### The Team object

| Attribute   | Type   | Description                                      |
| ----------- | ------ | ------------------------------------------------ |
| id          | string | Unique team identifier                           |
| name        | string | Team name                                        |
| created\_at | string | Time when the team was created. RFC 3339 format. |

Example:

```javascript
{
  "id": "16682617-f25d-4df2-9f51-3c38298996b8",
  "name": "Product Engineering",
  "created_at": "2018-02-20T12:32:56Z"
}
```

## Create Team

<mark style="color:green;">`POST`</mark> `https://api.simpleokr.com/v1/teams`

Create a new Team object.

#### Request Body

| Name | Type   | Description      |
| ---- | ------ | ---------------- |
| name | string | Name of the team |

{% tabs %}
{% tab title="200 On success, a new Team object is returned." %}

```javascript
{
  "id": "16682617-f25d-4df2-9f51-3c38298996b8",
  "name": "Product Engineering",
  "created_at": "2018-02-20T12:32:56Z"
}
```

{% endtab %}
{% endtabs %}

## List Teams

<mark style="color:blue;">`GET`</mark> `https://api.simpleokr.com/v1/teams`

Returns a list of your teams.

#### Query Parameters

| Name        | Type   | Description |
| ----------- | ------ | ----------- |
| page\_token | string | Page number |

{% tabs %}
{% tab title="200 " %}

```javascript
{
  "next_page_token": null,
  "teams": [
    {
      "id": "16682617-f25d-4df2-9f51-3c38298996b8",
      "name": "Product Engineering",
      "created_at": "2018-02-20T12:32:56Z"
    },
    {...},
    {...}
  ]
}
```

{% endtab %}
{% endtabs %}

## Retrieve Team

<mark style="color:blue;">`GET`</mark> `https://api.simpleokr.com/v1/teams/:id`

Retrieve details about the existing Team. Supply the unique Team ID from either a team creation response or team list response.

#### Path Parameters

| Name | Type   | Description |
| ---- | ------ | ----------- |
| id   | string | Team ID     |

{% tabs %}
{% tab title="200 " %}

```javascript
{
  "id": "16682617-f25d-4df2-9f51-3c38298996b8",
  "name": "Product Engineering",
  "created_at": "2018-02-20T12:32:56Z"
}
```

{% endtab %}
{% endtabs %}

## Update Team

<mark style="color:green;">`POST`</mark> `https://api.simpleokr.com/v1/teams/:id`

Update details of an existing team

#### Path Parameters

| Name | Type   | Description |
| ---- | ------ | ----------- |
| id   | string | Team ID     |

#### Request Body

| Name | Type   | Description   |
| ---- | ------ | ------------- |
| name | string | New team name |

{% tabs %}
{% tab title="200 Responds with an updated Team object." %}

```javascript
{
  "id": "16682617-f25d-4df2-9f51-3c38298996b8",
  "name": "Product Engineering",
  "created_at": "2018-02-20T12:32:56Z"
}
```

{% endtab %}
{% endtabs %}

## Delete Team

<mark style="color:red;">`DELETE`</mark> `https://api.simpleokr.com/v1/teams/:id`

Delete an existing Team.

{% tabs %}
{% tab title="200 " %}

```
```

{% endtab %}
{% endtabs %}


# Cycles

Delivery cycles are used to organize objectives into time-bound groups. Delivery cycle is how we track performance and progress of your OKRs.

### The cycle object

| Attribute   | Type   | Description                                                |
| ----------- | ------ | ---------------------------------------------------------- |
| id          | string | Unique delivery cycle identifier                           |
| name        | string | Name of the delivery cycle                                 |
| created\_at | string | Time when the delivery cycle was created. RFC 3339 format. |

Example:

```javascript
{
  "id": "16682617-f25d-4df2-9f51-3c38298996b8",
  "name": "2019 Q1",
  "created_at": "2018-02-20T12:32:56Z"
}
```

## Create Cycle

<mark style="color:green;">`POST`</mark> `https://api.simpleokr.com/v1/cycles`

Create a new Cycle object.

#### Request Body

| Name | Type   | Description                     |
| ---- | ------ | ------------------------------- |
| name | string | Name of the Cycle. E.g. 2019 Q1 |

{% tabs %}
{% tab title="200 " %}

```javascript
{
  "id": "16682617-f25d-4df2-9f51-3c38298996b8",
  "name": "2019 Q1",
  "created_at": "2018-02-20T12:32:56Z"
}
```

{% endtab %}
{% endtabs %}

## List Cycles

<mark style="color:blue;">`GET`</mark> `https://api.simpleokr.com/v1/cycles`

Retrieve a list of available Cycles.

#### Query Parameters

| Name        | Type   | Description      |
| ----------- | ------ | ---------------- |
| page\_token | string | Page identifier. |

{% tabs %}
{% tab title="200 " %}

```javascript
{
  "next_page_token": null,
  "cycles": [
    {
      "id": "16682617-f25d-4df2-9f51-3c38298996b8",
      "name": "2019 Q1",
      "created_at": "2018-02-20T12:32:56Z"
    },
    {...},
    {...}
  ]
}
```

{% endtab %}
{% endtabs %}

## Retrieve Cycle

<mark style="color:blue;">`GET`</mark> `https://api.simpleokr.com/v1/cycles/:id`

Retrieve details about an existing Cycle.

#### Path Parameters

| Name | Type   | Description |
| ---- | ------ | ----------- |
| id   | string | Cycle ID    |

{% tabs %}
{% tab title="200 " %}

```javascript
{
  "id": "16682617-f25d-4df2-9f51-3c38298996b8",
  "name": "2019 Q1",
  "created_at": "2018-02-20T12:32:56Z"
}
```

{% endtab %}
{% endtabs %}

## Update Cycle

<mark style="color:green;">`POST`</mark> `https://api.simpleokr.com/v1/cycles/:id`

Update an existing Cycle object.

#### Path Parameters

| Name | Type   | Description |
| ---- | ------ | ----------- |
| id   | string | Cycle ID    |

#### Request Body

| Name | Type   | Description              |
| ---- | ------ | ------------------------ |
| name | string | New Cycle name to be set |

{% tabs %}
{% tab title="200 " %}

```javascript
{
  "id": "16682617-f25d-4df2-9f51-3c38298996b8",
  "name": "2019 Q1",
  "created_at": "2018-02-20T12:32:56Z"
}
```

{% endtab %}
{% endtabs %}

## Delete Cycle

<mark style="color:red;">`DELETE`</mark> `https://api.simpleokr.com/v1/cycles/:id`

Delete an existing Cycle object and all data associated with it.

#### Path Parameters

| Name | Type   | Description |
| ---- | ------ | ----------- |
| id   | string | Cycle ID    |

{% tabs %}
{% tab title="200 " %}

```
```

{% endtab %}
{% endtabs %}


# Objectives

Objectives let you capture company, team or personal goals as part of the OKR process.

### The Objective Object

| Attribute             | Type             | Description                                                                              |
| --------------------- | ---------------- | ---------------------------------------------------------------------------------------- |
| id                    | string           | Unique objective identifier                                                              |
| name                  | string           | Name of the objective                                                                    |
| created\_at           | string           | Time when the objective was created. RFC 3339 format                                     |
| modified\_at          | string           | Time when the objective was last updated. RFC 3339 format                                |
| team\_id              | string, nullable | Unique team identifier. Indicates the team assigned to the objective                     |
| assignee\_id          | string, nullable | Unique user identifier. Indicates the user assigned to the objective                     |
| description           | string, nullable | Description of the objective                                                             |
| is\_personal          | bool             | Flag indicating whether this is a personal objective                                     |
| is\_company           | bool             | Flag indicating whether this is a company objective                                      |
| parent\_objective\_id | string, nullable | Unique objective identifier. Indicates objective alignment                               |
| cycle\_id             | string           | Unique delivery cycle identifier. Indicates the delivery cycle this objective belongs to |

Example:

```javascript
{
  "id": "16682617-f25d-4df2-9f51-3c38298996b8",
  "name": "Become best at OKRs",
  "created_at": "2018-02-20T12:32:56Z",
  "modified_at": "2018-02-20T12:32:56Z",
  "team_id": null,
  "assignee_id": null,
  "description": null,
  "is_personal": false,
  "is_company": true,
  "parent_objective_id": null,
  "cycle_id": "12345678-f25d-4df2-9f51-3c38298996b8"
}
```

## Create Objective

<mark style="color:green;">`POST`</mark> `https://api.simpleokr.com/v1/objectives`

Create a new Objective.

#### Request Body

| Name                  | Type    | Description                                            |
| --------------------- | ------- | ------------------------------------------------------ |
| parent\_objective\_id | string  | Existing Objective ID. Indicates parent objective.     |
| cycle\_id             | string  | Cycle ID.                                              |
| is\_company           | boolean | When true, mark objective as company objective.        |
| is\_personal          | boolean | When true, mark objective as personal objective.       |
| description           | string  | Short objective description.                           |
| assignee\_id          | string  | User ID. Indicates the user assigned to the objective. |
| team\_id              | string  | Team ID. Indicates the team assigned to the objective. |
| name                  | string  | Name of the objective.                                 |

{% tabs %}
{% tab title="200 " %}

```javascript
{
  "id": "16682617-f25d-4df2-9f51-3c38298996b8",
  "name": "Become best at OKRs",
  "created_at": "2018-02-20T12:32:56Z",
  "modified_at": "2018-02-20T12:32:56Z",
  "team_id": null,
  "assignee_id": null,
  "description": null,
  "is_personal": false,
  "is_company": true,
  "parent_objective_id": null,
  "cycle_id": "12345678-f25d-4df2-9f51-3c38298996b8"
}
```

{% endtab %}
{% endtabs %}

## Update Objective

<mark style="color:green;">`POST`</mark> `https://api.simpleokr.com/v1/objectives/:id`

Update an existing new Objective.

#### Path Parameters

| Name | Type   | Description                                  |
| ---- | ------ | -------------------------------------------- |
| id   | string | ID of the objective that you want to update. |

#### Request Body

| Name                  | Type    | Description                                            |
| --------------------- | ------- | ------------------------------------------------------ |
| parent\_objective\_id | string  | Existing Objective ID. Indicates parent objective.     |
| cycle\_id             | string  | Cycle ID.                                              |
| is\_company           | boolean | When true, mark objective as company objective.        |
| is\_personal          | boolean | When true, mark objective as personal objective.       |
| description           | string  | Short objective description.                           |
| assignee\_id          | string  | User ID. Indicates the user assigned to the objective. |
| team\_id              | string  | Team ID. Indicates the team assigned to the objective. |
| name                  | string  | Name of the objective.                                 |

{% tabs %}
{% tab title="200 " %}

```javascript
{
  "id": "16682617-f25d-4df2-9f51-3c38298996b8",
  "name": "Become best at OKRs",
  "created_at": "2018-02-20T12:32:56Z",
  "modified_at": "2018-02-20T12:32:56Z",
  "team_id": null,
  "assignee_id": null,
  "description": null,
  "is_personal": false,
  "is_company": true,
  "parent_objective_id": null,
  "cycle_id": "12345678-f25d-4df2-9f51-3c38298996b8"
}
```

{% endtab %}
{% endtabs %}

## List Objectives

<mark style="color:blue;">`GET`</mark> `https://api.simpleokr.com/v1/objectives`

Returns a list of available objectives.

#### Query Parameters

| Name        | Type   | Description                             |
| ----------- | ------ | --------------------------------------- |
| page\_token | string | Page identifier                         |
| cycle\_id   | string | Cycle ID for which to return Objectives |

{% tabs %}
{% tab title="200 " %}

```javascript
{
  "next_page_token": null,
  "objectives": [
    {
      "name": "Become best at OKRs",
      "cycle_id": "12345678-f25d-4df2-9f51-3c38298996b8",
      "description": null,
      "team_id": null,
      "assignee_id": null,
      "parent_objective_id": null,
      "is_company": true,
      "is_personal": false
    },
    {...},
    {...}
  ]
}
```

{% endtab %}
{% endtabs %}

## Retrieve Objective

<mark style="color:blue;">`GET`</mark> `https://api.simpleokr.com/v1/objectives/:id`

Retrieve details about the existing objective.

#### Path Parameters

| Name | Type   | Description  |
| ---- | ------ | ------------ |
| id   | string | Objective ID |

{% tabs %}
{% tab title="200 " %}

```javascript
{
  "id": "16682617-f25d-4df2-9f51-3c38298996b8",
  "name": "Become best at OKRs",
  "created_at": "2018-02-20T12:32:56Z",
  "modified_at": "2018-02-20T12:32:56Z",
  "team_id": null,
  "assignee_id": null,
  "description": null,
  "is_personal": false,
  "is_company": true,
  "parent_objective_id": null,
  "cycle_id": "12345678-f25d-4df2-9f51-3c38298996b8"
}
```

{% endtab %}
{% endtabs %}

## Delete Objective

<mark style="color:red;">`DELETE`</mark> `https://api.simpleokr.com/v1/objectives/:id`

Delete an existing Objective and all data associated with it.

{% tabs %}
{% tab title="200 " %}

```
```

{% endtab %}
{% endtabs %}

## List Key Results

<mark style="color:blue;">`GET`</mark> `https://api.simpleokr.com/v1/objectives/:id/keyresults`

List Key Results for an existing objective.

#### Path Parameters

| Name | Type   | Description  |
| ---- | ------ | ------------ |
| id   | string | Objective ID |

{% tabs %}
{% tab title="200 " %}

```
```

{% endtab %}
{% endtabs %}

## Create Key Result

<mark style="color:green;">`POST`</mark> `https://api.simpleokr.com/v1/objectives/:id/keyresults`

Add a new Key Result to an existing Objective

#### Path Parameters

| Name | Type   | Description  |
| ---- | ------ | ------------ |
| id   | string | Objective ID |

#### Request Body

| Name               | Type   | Description                                 |
| ------------------ | ------ | ------------------------------------------- |
| confidence         | string | Decimal string value between 0 and 1.       |
| target\_value\_max | string | Maximum target value where applicable.      |
| target\_value\_min | string | Minimum target value where applicable.      |
| current\_value     | string | Decimal string representing starting value. |
| type               | string | Key Result type.                            |
| name               | string | Key Result name.                            |

{% tabs %}
{% tab title="200 " %}

```javascript
{
  "id": "16682617-f25d-4df2-9f51-3c38298996b8",
  "name": "$40K in revenue from subscription sales",
  "created_at": "2018-02-20T12:32:56Z",
  "modified_at": "2018-02-20T12:32:56Z",
  "objective_id": "12345678-f25d-4df2-9f51-3c38298996b8",
  "type": "positive",
  "confidence": "0.50",
  "current_value": "10000.00",
  "target_value_min": "40000.00",
  "target_value_max": null
}
```

{% endtab %}
{% endtabs %}


# Key Results

Key Results are quantitative metrics that let you track Objective's performance.

### The Key Result Object

| Attribute          | Type             | Description                                                                      |
| ------------------ | ---------------- | -------------------------------------------------------------------------------- |
| id                 | string           | Unique key result identifier.                                                    |
| name               | string           | Name of the key result.                                                          |
| created\_at        | string           | Time when the key result was created. RFC 3339 format.                           |
| modified\_at       | string           | Time when the key result was last updated. RFC 3339 format.                      |
| objective\_id      | string           | Objective identifier.                                                            |
| confidence         | string           | Decimal string between 0.0 and 1.0 indicating confidence of reaching the target. |
| type               | string           | Metric type. One of `milestone`, `baseline`, `range`, `positive`, `negative`.    |
| current\_value     | string           | Decimal. Current metric value.                                                   |
| target\_value\_min | string, nullable | Decimal. Minimum target value.                                                   |
| target\_value\_max | string, nullable | Decimal. Maximum target value.                                                   |

Target values are optional for some metric types.

* `postive` and `negative` metrics will have only `target_value_min` set.
* `range` metrics will have both `target_value_min` and `target_value_max` set.
* `baseline` will not have either of the target values set.
* `milestone` will always have `target_value_min` set to `1.00`.

Example:

```javascript
{
  "id": "16682617-f25d-4df2-9f51-3c38298996b8",
  "name": "$40K in revenue from subscription sales",
  "created_at": "2018-02-20T12:32:56Z",
  "modified_at": "2018-02-20T12:32:56Z",
  "objective_id": "12345678-f25d-4df2-9f51-3c38298996b8",
  "type": "positive",
  "confidence": "0.50",
  "current_value": "10000.00",
  "target_value_min": "40000.00",
  "target_value_max": null
}
```

## List Key Results

<mark style="color:blue;">`GET`</mark> `https://api.simpleokr.com/v1/keyresults`

Returns a list of your Key Results.

#### Query Parameters

| Name        | Type   | Description     |
| ----------- | ------ | --------------- |
| page\_token | string | Page identifier |
| cycle\_id   | string | Cycle ID        |

{% tabs %}
{% tab title="200 " %}

```javascript
{
  "next_page_token": null,
  "keyresults": [
    {
      "id": "16682617-f25d-4df2-9f51-3c38298996b8",
      "name": "$40K in revenue from subscription sales",
      "created_at": "2018-02-20T12:32:56Z",
      "modified_at": "2018-02-20T12:32:56Z",
      "objective_id": "12345678-f25d-4df2-9f51-3c38298996b8",
      "type": "positive",
      "confidence": "0.50",
      "current_value": "10000.00",
      "target_value_min": "40000.00",
      "target_value_max": null
    },
    {...},
    {...}
  ]
}
```

{% endtab %}
{% endtabs %}

## Retrieve Key Result

<mark style="color:blue;">`GET`</mark> `https://api.simpleokr.com/v1/keyresults/:id`

Retrieve an existing Key Result.

#### Path Parameters

| Name | Type   | Description   |
| ---- | ------ | ------------- |
| id   | string | Key Result ID |

{% tabs %}
{% tab title="200 " %}

```javascript
{
  "id": "16682617-f25d-4df2-9f51-3c38298996b8",
  "name": "$40K in revenue from subscription sales",
  "created_at": "2018-02-20T12:32:56Z",
  "modified_at": "2018-02-20T12:32:56Z",
  "objective_id": "12345678-f25d-4df2-9f51-3c38298996b8",
  "type": "positive",
  "confidence": "0.50",
  "current_value": "10000.00",
  "target_value_min": "40000.00",
  "target_value_max": null
}
```

{% endtab %}
{% endtabs %}

## Update Key Result

<mark style="color:green;">`POST`</mark> `https://api.simpleokr.com/v1/keyresults/:id`

#### Path Parameters

| Name | Type   | Description   |
| ---- | ------ | ------------- |
| id   | string | Key Result ID |

#### Request Body

| Name               | Type   | Description                                         |
| ------------------ | ------ | --------------------------------------------------- |
| target\_value\_max | string | Maximum  target value where applicable.             |
| target\_value\_min | string | Minimum target value where applicable.              |
| objective\_id      | string | Objective ID.                                       |
| current\_value     | string | A decimal string representing current value.        |
| confidence         | string | Confidence. A decimal string value between 0 and 1. |
| type               | string | Key Result type.                                    |
| name               | string | Key Result name.                                    |

{% tabs %}
{% tab title="200 " %}

```javascript
{
  "id": "16682617-f25d-4df2-9f51-3c38298996b8",
  "name": "$40K in revenue from subscription sales",
  "created_at": "2018-02-20T12:32:56Z",
  "modified_at": "2018-02-20T12:32:56Z",
  "objective_id": "12345678-f25d-4df2-9f51-3c38298996b8",
  "type": "positive",
  "confidence": "0.50",
  "current_value": "10000.00",
  "target_value_min": "40000.00",
  "target_value_max": null
}
```

{% endtab %}
{% endtabs %}

## Delete Key Result

<mark style="color:red;">`DELETE`</mark> `https://api.simpleokr.com/v1/keyresults/:id`

Deletes and existing Key Result.

#### Path Parameters

| Name | Type   | Description   |
| ---- | ------ | ------------- |
| id   | string | Key Result ID |

{% tabs %}
{% tab title="200 " %}

```
```

{% endtab %}
{% endtabs %}


