---
title: "Close Goal"
method: POST
path: "/api/v1/performance/employees/{employeeId}/goals/{goalId}/close"
tags: ["Goals", "Public API"]
---

# Close Goal

`POST /api/v1/performance/employees/{employeeId}/goals/{goalId}/close`

## Request

- Base URL: `https://companySubDomain.bamboohr.com`
- URL: `https://companySubDomain.bamboohr.com/api/v1/performance/employees/{employeeId}/goals/{goalId}/close`
- Auth: one of:
  - HTTP basic
  - OAuth 2
    - Authorization code: `/authorize.php`
    - Token URL: `/token.php` scopes: `goal.write`
- TypeScript: <https://skmtc.dev/bamboohr/apis/bamboohr-api/docs/api/v1/performance/employees/:employeeId/goals/:goalId/close/post.ts> (a function with typed inputs; its response is checked against the schema)

Closes a goal, moving it to the closed status. An optional comment may be included in the request body to record a note at closing time. Returns the updated goal object. Validate the result using the returned `status`, `percentComplete`, and `completionDate` fields; do not rely solely on `lastChangedDateTime` as the confirmation timestamp, because it may not match the HTTP response time or may reflect BambooHR's internal timezone/update semantics. Note: Cascading goals with visible children cannot be closed.

OAuth Scopes: goal.write

## Path parameters

- `employeeId` string, required
- `goalId` string, required

## Request body

- object
  - `comment` string, nullable: Optional comment to record when closing the goal.

## Response `201`

The goal was successfully closed. The response body contains the updated goal object.

- object
  - `goal` TransformedApiGoal
    - `id` string: The id of the goal.
    - `title` string: Title of the goal.
    - `description` string: A description of the goal.
    - `percentComplete` integer: A percentage (0-100) that denotes how complete the goal is.
    - `alignsWithOptionId` string, nullable: The ID of the goal this goal is aligned with. Returns null when not aligned, or an empty string when the goal has no parent set.
    - `sharedWithEmployeeIds` integer[]: Ids of the employees that have access to this goal.
    - `dueDate` string: The due date of the goal.
    - `completionDate` string, nullable: ISO 8601 UTC timestamp of when the goal was completed.
    - `lastChangedDateTime` string, nullable: ISO 8601 UTC timestamp of when the goal was last modified.
    - `status` 'in_progress' | 'completed' | 'closed': The status of the goal.
    - `milestones` object[], nullable: All milestones for the individual goal. This array will not exist if milestones are not selected for this goal.
      - `id` integer: The id of the milestone.
      - `employeeGoalId` integer: The id of the goal which encompasses this milestone.
      - `title` string: The title of the milestone.
      - `currentValue` number, nullable: The current value for a numeric milestone. This number will be rounded to the nearest hundredth. On the creation of a numeric milestone this value will automatically be set to the start value of the milestone. If the milestone is a simple checkbox milestone, this value will always be null.
      - `startValue` number, nullable: The starting value for a numeric milestone. This number will be rounded to the nearest hundredth. If the milestone is a simple checkbox milestone, this value will always be null.
      - `endValue` number, nullable: The end goal for a numeric milestone. This number will be rounded to the nearest hundredth. If the milestone is a simple checkbox milestone, this value will always be null.
      - `completedDateTime` string: The date and time in which the goal has been completed. If the goal is not completed the value will be null.
      - `lastUpdateDateTime` string: The date and time in which the goal was last updated.
      - `lastUpdateUserId` integer: The ID of the user who last updated this milestone.
    - `actions` object, nullable: Actions that are available to a goal with milestones enabled. This object will not appear on a goal without milestones.
      - `canEditGoalProgressBar` boolean: Can the user edit the progress bar of this goal.
      - `canEditGoalMilestoneProgressBar` boolean: can the user edit the progress of a milestone in this goal.

## Other responses

- `400`: The request is invalid. Possible causes: the specified employee is not associated with this goal, or the goal is a cascading goal with visible children and cannot be closed.
- `403`: Goal is not editable or insufficient permissions.
- `404`: The goal specified by the given goalId was not found.

---

[API](https://skmtc.dev/bamboohr/apis/bamboohr-api.md) - [All operations](https://skmtc.dev/bamboohr/apis/bamboohr-api/llms.txt) - [OpenAPI document](https://skmtc.dev/bamboohr/apis/bamboohr-api/revisions/922fc15f43a7?raw)
