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

# Withdraw a Shift Claim

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

## Request

- Base URL: `https://companySubDomain.bamboohr.com`
- URL: `https://companySubDomain.bamboohr.com/api/v1/scheduling/shift-claims/{claimId}/withdraw`
- 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/withdraw/post.ts> (a function with typed inputs; its response is checked against the schema)

The claiming employee withdraws their own pending claim. The claim stays listed as `withdrawn`, and claiming the shift again creates a new claim. A claim the caller cannot see answers `404` exactly as a claim that does not exist. A manager who can see a claim they do not own gets `403`. Withdrawing 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 withdrawn.

- 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 it is not theirs, the caller is previewing as another user, 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 claim is no longer pending (`shift_claim_not_pending`).

## 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/withdraw/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)
