Goals API Reference
Introduction
The PerformYard Goals API allows customers to programmatically retrieve and manage data related to Goals created in PerformYard. The API endpoints will let you:
- Retrieve a list of all Goals
- Retrieve a list of individual Goals by ID
- Retrieve a list of your Goal Categories
- Retrieve a list of your Outlooks used in Goal progress updates
- Create a Goal
- Edit an existing Goal
- Update a Goal's progress
Requirements
Calling these API endpoints requires an API Key and API ID. See Getting Started with PerformYard API for details on creating API keys and API Authentication for authentication flow.
Goals API
The Goals API can interact with both public and private goals. API users are assumed to have admin-level permissions and therefore have the same visibility permissions as your Billing Admin and Admin roles.
Retrieve All Goals
GET https://api.talent.performyard.com/v1/goals
Returns a list of all public and private goals, first ordered by status, and then ordered by name and due date.
Goal Description
A goal's description will be delivered with escape characters for proper formatting in your database of choice.
Query Parameters
limit integer The number of goals to be returned in a single API Request. Default: 200 Minimum: 5 Maximum: 200 |
offset integer Used to paginate through the list of goals. Can be combined with limit. Default: 0 Increment the value by one to fetch subsequent pages (1 for the second page, 2 for the third, etc.). |
CURL Example
curl --location -X GET "https://api.talent.performyard.com/v1/goals?limit=50&offset=0" \ --header 'Accept: application/json' \ --header 'x-api-id: {{X-API-ID}}' \ --header 'x-api-key: {{X-API-KEY}}'
Response (200)
{ "goals": [ { "_id": "<goal_id>", "start_date": "<YYYY-MM-DDTHH:MM:SSZ>", "categories": [ { "_id": "<goal_category_id>", "name": "<string>" } ], "transparency": "private", "sharers": [ { "_id": "<employee_id>", "email": "<string>", "name": "<string>" } ], "target": <integer>, "name": "<string>", "description": "<string>", "value": <integer>, "assignee": [ { "_id": "<employee_id>", "email": "<string>", "name": "<string>" } ], "units": "<string>", "status": "<string>", "end_date": "<YYYY-MM-DDTHH:MM:SSZ>", "outlook": <string>, "goal_weight": <string>, "checklist": [ { "_id": "<string>", "text": "<string>", "checked": <boolean> }, { "_id": "<string>", "text": "<string>", "checked": <boolean> } ] }, ... ] }
Retrieve Goal By ID
GET https://api.talent.performyard.com/v1/goals/:goal_id
Returns a goal.
Goal Description
A goal's description will be delivered with escape characters for proper formatting in your database of choice.
Path Parameters
goal_id string The ID that uniquely identifies the goal to retrieve. |
CURL Example
curl --location -X GET "https://api.talent.performyard.com/v1/goals/65149ccd4625ec565b6db831" \ --header 'Accept: application/json' \ --header 'x-api-id: {{X-API-ID}}' \ --header 'x-api-key: {{X-API-KEY}}'
Response (200)
{ "_id": "<goal_id>", "start_date": "<YYYY-MM-DDTHH:MM:SSZ>", "categories": [ { "_id": "<goal_category_id>", "name": "<string>" } ], "transparency": "<string>", "sharers": [ { "_id": "<employee_id>", "email": "<string>", "name": "<string>" } ], "target": <integer>, "name": "<string>", "description": "<string>", "value": <integer>, "assignee": [ { "_id": "<employee_id>", "email": "<string>", "name": "<string>" } ], "units": "<string>", "status": "<string>", "end_date": "<YYYY-MM-DDTHH:MM:SSZ>", "outlook": <string>, "goal_weight": <string>, "checklist": [ { "_id": "<string>", "text": "<string>", "checked": <boolean> }, { "_id": "<string>", "text": "<string>", "checked": <boolean> } ] }
Retrieve Goal Categories
GET https://api.talent.performyard.com/v1/goal-categories
Returns a list of available goal categories and their IDs.
Query Parameters
limit integer The number of goal categories to be returned in a single API Request. Default: 200 Minimum: 5 Maximum: 200 |
offset integer Used to paginate through the list of goal categories. Can be combined with limit. Default: 0 Increment the value by one to fetch subsequent pages (1 for the second page, 2 for the third, etc.). |
CURL Example
curl --location -X GET "https://api.talent.performyard.com/v1/goal-categories?limit=5&offset=0" \ --header 'Accept: application/json' \ --header 'x-api-id: {{X-API-ID}}' \ --header 'x-api-key: {{X-API-KEY}}'
Response (200)
[ { "_id": "<goal_category_id>", "name": "<string>" }, { "_id": "<goal_category_id>", "name": "<string>" } ]
Retrieve Goal Outlooks
GET https://api.talent.performyard.com/v1/goal-outlooks
Returns a list of available goal outlooks and their IDs.
Query Parameters
limit integer The number of goal outlooks to be returned in a single API Request. Default: 200 Minimum: 5 Maximum: 200 |
offset integer Used to paginate through the list of goal outlooks. Can be combined with limit. Default: 0 Increment the value by one to fetch subsequent pages (1 for the second page, 2 for the third, etc.). |
CURL Example
curl --location -X GET "https://api.talent.performyard.com/v1/goal-outlooks?limit=10&offset=0" \ --header 'Accept: application/json' \ --header 'x-api-id: {{X-API-ID}}' \ --header 'x-api-key: {{X-API-KEY}}'
Response (200)
[ { "_id": "<goal_outlook_id>", "color": "<string>", "name": "<string>" }, { "_id": "<goal_outlook_id>", "color": "<string>", "name": "<string>" } ]
Create A Goal
POST https://api.talent.performyard.com/v1/goals
Create a new goal for an employee.
Multiple Goal Assignees
Just like when creating a new goal in the PerformYard interface, adding multiple goal assignees will not assign multiple users to a single goal and will instead create one goal each for every assignee included.
Request Body Parameters
name string required Name of the goal being created. |
assignment array required The user ID(s) of the employee(s) that will be assigned the goal being created. Accepts an array of user IDs (strings). |
transparency enum required Defines who can see the goal being created. Possible Values: private public |
target integer required The value you want to hit for the goal being created. |
start_date string required The start date of the goal. Format: YYYY-MM-DD |
units string The type of units the goal being created will have for its target. Default: % |
is_top_level boolean Defines whether the goal is a top level goal or not. Default: false |
due_date string When the goal is due. Format: YYYY-MM-DD |
goal_weight integer Defines the weight of the goal being created compared to other goals assigned to the same employee. Minimum: 0 |
description string The details of the goal being created. |
alignment string Defines the goal that the goal being created is aligned to. Must be a different goal's ID. Only a single goal ID is valid. |
categories array Defines the category or categories that the goal being created belongs to. Accepts an array of goal category IDs (strings). Goal categories can be retrieved using the GET /v1/goal-categories endpoint. |
CURL Example
curl -X POST https://api.talent.performyard.com/v1/goals \ --header "Content-Type: application/json" \ --header 'x-api-id: {{X-API-ID}}' \ --header 'x-api-key: {{X-API-KEY}}' --data '{ "name": "2025 Sales Goal", "assignment": [ "<user_id>", "<user_id>" ], "transparency": "public", "target": 200000, "units": "$", "start_date": "2025-01-01", "due_date": "2025-12-31", "goal_weight": "<string>", "is_top_level": false, "description": "This is your sales goal", "alignment": "<goal_id>", "categories": [ "<category_id>", "<category_id>" ] }'
Response (200)
{ "message": "Goal created", "ids": [ "<goal_id>", "<goal_id>" ] }
Update A Goal's Details
PATCH https://api.talent.performyard.com/v1/goals/:goal_id
Update the details of an already created goal. Does not update the goal's progress. That can be done using the endpoint entitled "Update A Goal's Progress".
Updates Overwrite Existing Property Value
Updates to fields will also overwrite the current field value instead of appending new values to the existing field entry. For example, the description of a goal needs to be updated to include a link to outside documentation, the entire existing goal description in addition to the new link should be included in the PATCH request.
Activity Stream
Updates to Goal attributes will also be recorded in the Goal's activity history stream, where the label of the responsible API key will be displayed alongside the nature of the update.
Path Parameters
goal_id string The ID that uniquely identifies the goal to retrieve. |
Request Body Parameters
name string Name of the goal being created. |
assignment array The user ID(s) of the employee(s) that will be assigned the goal being created. Accepts an array of user IDs (strings). |
transparency enum Defines who can see the goal being created. Possible Values: private public |
target integer The value you want to hit for the goal being created. |
start_date string The start date of the goal. Format: YYYY-MM-DD |
units string The type of units the goal being created will have for its target. |
is_top_level boolean Defines whether the goal is a top level goal or not. |
due_date string When the goal is due. Format: YYYY-MM-DD |
goal_weight integer Defines the weight of the goal being created compared to other goals assigned to the same employee. Minimum: 0 |
description string The details of the goal being created. |
alignment string Defines the goal that the goal being created is aligned to. Must be a different goal's ID. Only a single goal ID is valid. |
categories array Defines the category or categories that the goal being created belongs to. Accepts an array of goal category IDs (strings). Goal categories can be retrieved using the GET /v1/goal-categories endpoint. |
CURL Example
curl -X PATCH https://api.talent.performyard.com/v1/goals/65149ccd4625ec565b6db831 \ --header "Content-Type: application/json" \ --header 'x-api-id: {{X-API-ID}}' \ --header 'x-api-key: {{X-API-KEY}}' --data '{ "name": "New goal name", "target": 1000000, "units": "$" }'
Response (200)
{ "message": "Goal updated", "id": "<goal_id>" }
Update A Goal's Progress
PATCH https://api.talent.performyard.com/v1/goals/:goal_id/update-progress
Update the progress of a goal.
Activity Stream
Progress updates made to a goal via the API will be recorded in the Activity Stream and Goal Progress side panel just as they would be if made via the PerformYard interface. Updates will also be associated with the name of the API key that was responsible for providing the update.
Archived or Completed Goals
Just as in the PerformYard interface, archived or completed goals cannot have their progress updated. Users attempting to update these goals will receive an error message indicating their status as an archived or completed goal.
Path Parameters
goal_id string The ID that uniquely identifies the goal to retrieve. |
Request Body Parameters
value integer required The value of this goal's progress. |
update_type enum required Set how to alter the current goal progress value Possible Values: absolute incremental absolute - Overwrites the current goal progress value with the value passed in for value incremental - Adds the passed in value to the current goal progress value |
as_of_date string required The progress of this goal as of a certain date. Format: YYYY-MM-DD |
message string Text to be added to the goal being updated activity stream on update. |
outlook string The ID that uniquely identifies the current outlook of the goal being updated. Accepts a single string value. Goal outlooks can be retrieved using the GET /v1/goal-outlooks endpoint. |
CURL Example
curl --location -X PATCH "https://api.talent.performyard.com/v1/goals/65149ccd4625ec565b6db831/update-progress" \ --header 'Accept: application/json' \ --header 'x-api-id: {{X-API-ID}}' \ --header 'x-api-key: {{X-API-KEY}}' --data '{ "value": 20, "update_type": "incremental", "as_of_date": "2025-01-09" }'
Response (200)
{ "message": "Goal progress updated", "id": "<goal_id>" }