---
title: "Approve a Shift Claim"
method: POST
path: "/api/v1/scheduling/shift-claims/{claimId}/approve"
tags: ["Scheduling", "Public API"]
---

# Approve a Shift Claim

`POST /api/v1/scheduling/shift-claims/{claimId}/approve`

## Request

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

A manager approves a pending claim, assigning the claimant to the shift at once, with no publish. The assignment is checked again against current schedules, since they may have changed since the claim was made. A success body is the approved claim only, with no evaluation data. When approval fills the last open spot, the other pending claims on the shift may now be `declined` with `shift_filled`; they are not in this response, and `GET /shift-claims` shows them. A claim the caller cannot see answers `404` exactly as a claim that does not exist, and a caller who can see it but may not edit the shift gets `403`. `shift_not_claimable` means the claim's shift is no longer published. Approving fails with `open_shifts_disabled` while Open Shifts is off.

OAuth Scopes: scheduling:shifts.write

## Path parameters

- `claimId` string, uuid, required

## Response `200`

The claim was approved and the claimant is assigned to the shift.

- SchedulingSchedulingShiftClaimV1: An employee's claim on an open shift. A claim is deliberately thin: who claimed, which shift, and where it stands. The policy that governs how a claim is handled lives on the shift.
  - `id` string, uuid, required: The unique ID of this claim.
  - `shiftId` string, uuid, required: The ID of the shift being claimed.
  - `employeeId` integer, required: The ID of the employee who claimed the shift.
  - `status` 'pending' | 'approved' | 'declined' | 'withdrawn', required: Where the claim stands. Only a pending claim can be withdrawn. A first-come-first-served claim is never pending because it is approved when it is created.
  - `resolutionReason` 'manager_denied' | 'shift_filled' | 'shift_deleted' | 'claiming_disabled' | 'assignment_blocked', nullable, required: Why the claim was declined. Kept separate from status so that being denied and the shift filling are distinguishable.
  - `createdAt` string, date-time, required: UTC timestamp when the claim was received. This is the single source of truth for queue order.
  - `updatedAt` string, date-time, nullable, required: UTC timestamp when the claim was last updated.

## Other responses

- `403`: Forbidden. The caller can see the claim but may not decide it, or Open Shifts is off (`open_shifts_disabled`).
- `404`: No claim with that ID is visible to the caller (`invalid_shift_claim_id`), or the claim's shift was deleted (`invalid_shift_id`).
- `409`: The approval conflicts with current state: `shift_claim_not_pending`, `shift_full`, `employee_already_assigned`, `employee_not_eligible_for_shift` when the claimant is no longer on the shift's schedule, or `assignment_evaluation_blocked` when the assignment would overlap the claimant's other shifts or the claimant is no longer active. A blocked response is plain `application/json` and also carries an `evaluation` member explaining the block; the claim stays pending.
- `422`: The shift can no longer take the claimant: `shift_not_claimable` when it is no longer published, or `shift_already_started`.
- `503`: The assignment could not be evaluated right now (`assignment_evaluation_undetermined`). The claim stays pending. Retry after the number of seconds in the `Retry-After` header. The response is plain `application/json` and also carries an `evaluation` member.

## Changes

- **2026-11-03** `922fc15f43a7`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/bamboohr/apis/bamboohr-api/changes/api/v1/scheduling/shift-claims/:claimId/approve/post.md)

---

[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)
