Implement BambooHR webhook endpoints with HMAC signature validation
BY jeremylongshoreUPDATED Oct 28, 2026
INTENDED FOR✳Claude CodeInstall in a listed agent.
instructions.md
---
name: bamboohr-webhooks-events-4d89fcc261de
description: >-
Create and operate BambooHR event- or field-based webhooks with one-time key
custody, HMAC-SHA256 verification, idempotency, and replay controls. Use when
building employee-change delivery or diagnosing webhook failures. Trigger
with "BambooHR webhook", "BambooHR events", or "BambooHR webhook signature".
allowed-tools: Read,Glob,Grep,Write,Edit
argument-hint: "<create|receive|audit> <event-or-field-scope>"
version: 1.5.0
license: MIT
author: Jeremy Longshore <jeremy@intentsolutions.io>
tags: [saas, hr, bamboohr, webhooks, security]
model: inherit
effort: high
compatibility: Designed for Claude Code
---
# BambooHR Webhook Operations
## Overview
Operate permissioned BambooHR webhooks as a security boundary. The creation
response contains a `privateKey` used for HMAC-SHA256 and returns it only once;
losing it requires controlled replacement, not a retrieval call.
## Prerequisites
- The target repository or integration path and the requested operator outcome.
- The tenant, identity, and data scope only when approved live work is in scope.
- The current evidence register plus customer-specific permissions and agreements.
## Current Contract
- Create/list/get/update/delete and log endpoints live under `/api/v1/webhooks`.
- The destination URL must use HTTPS and `format` is required (`json` or
`form-encoded` in the reviewed OpenAPI).
- `monitorFields` is required when events include `employee.updated` or
`employee_with_fields.updated`; omitted events default to field-based employee
events that also require monitored fields.
- Receiver `4xx` responses are not retried. Receiver `5xx` responses may be
retried up to five times at documented 5, 10, 20, 40, and 80 minute intervals.
## Authentication
Webhook management requires OAuth scope `webhooks` or a permitted API-key user.
Store the one-time `privateKey` immediately in a secret manager scoped to tenant
and webhook ID. Keep management credentials separate from receiver verification.
## Instructions
1. Choose event-based or field-based delivery and list only the events,
`monitorFields`, and `postFields` needed by the consumer.
2. Validate an HTTPS destination and use a non-production receiver for creation
tests. Prepare secret storage before the create call.
3. Capture `id` and `privateKey` from the `201` response atomically; store the key
once and ensure it never enters logs, tickets, fixtures, or source control.
4. Implement HMAC-SHA256 over the exact raw request bytes according to BambooHR's
current webhook documentation. Do not parse or reserialize before checking.
Confirm the documented signature carrier/header from current docs or a
controlled sample; this pack does not invent one.
5. Compare signatures in constant time, reject before processing, then enforce
tenant routing, payload schema, event allowlist, timestamp/replay window when
supplied, and an idempotency key derived from stable delivery facts.
6. Acknowledge only after durable enqueue. Return intentional `4xx` for terminal
payload rejection and `5xx` only when a later retry can succeed.
7. Monitor webhook logs, last-fired time, verification failures, duplicates,
queue age, and dead letters. Rotate by creating and validating a replacement
before removing the old webhook.
## Tool Discipline
Use Read, Glob, and Grep to inspect receiver code and secret handling. Use
Write/Edit only for approved handler, tests, and runbook changes. This skill does
not authorize webhook creation, update, deletion, or receipt of production PII.
## Approval Boundaries
Require approval for event/field scope, destination, management identity, secret
write, create/update/delete calls, production traffic, and replay of any payload.
## Output
Return webhook type, event/field scope, destination class, verification contract,
secret custody receipt without value, idempotency strategy, receiver status
policy, test results, monitoring, and rotation procedure.
## Error Handling
- Creation response not stored atomically: delete or disable the unverified
webhook and recreate under approval.
- Signature contract uncertain: fail closed and inspect current official docs.
- Repeated `5xx`: stop accepting new side effects, preserve queue evidence, and
repair before BambooHR exhausts retries.
## Examples
- "Notify us when department changes" discovers the permitted field ID first.
- "Use a conventional signature header" is rejected until current official
evidence confirms the exact carrier and signing input.
## Resources
Read [official evidence](references/official-docs.md) before webhook changes.
---
name: bamboohr-webhooks-events-4d89fcc261de
description: >-
Create and operate BambooHR event- or field-based webhooks with one-time key
custody, HMAC-SHA256 verification, idempotency, and replay controls. Use when
building employee-change delivery or diagnosing webhook failures. Trigger
with "BambooHR webhook", "BambooHR events", or "BambooHR webhook signature".
allowed-tools: Read,Glob,Grep,Write,Edit
argument-hint: "<create|receive|audit> <event-or-field-scope>"
version: 1.5.0
license: MIT
author: Jeremy Longshore <jeremy@intentsolutions.io>
tags: [saas, hr, bamboohr, webhooks, security]
model: inherit
effort: high
compatibility: Designed for Claude Code
---
# BambooHR Webhook Operations
## Overview
Operate permissioned BambooHR webhooks as a security boundary. The creation
response contains a `privateKey` used for HMAC-SHA256 and returns it only once;
losing it requires controlled replacement, not a retrieval call.
## Prerequisites
- The target repository or integration path and the requested operator outcome.
- The tenant, identity, and data scope only when approved live work is in scope.
- The current evidence register plus customer-specific permissions and agreements.
## Current Contract
- Create/list/get/update/delete and log endpoints live under `/api/v1/webhooks`.
- The destination URL must use HTTPS and `format` is required (`json` or
`form-encoded` in the reviewed OpenAPI).
- `monitorFields` is required when events include `employee.updated` or
`employee_with_fields.updated`; omitted events default to field-based employee
events that also require monitored fields.
- Receiver `4xx` responses are not retried. Receiver `5xx` responses may be
retried up to five times at documented 5, 10, 20, 40, and 80 minute intervals.
## Authentication
Webhook management requires OAuth scope `webhooks` or a permitted API-key user.
Store the one-time `privateKey` immediately in a secret manager scoped to tenant
and webhook ID. Keep management credentials separate from receiver verification.
## Instructions
1. Choose event-based or field-based delivery and list only the events,
`monitorFields`, and `postFields` needed by the consumer.
2. Validate an HTTPS destination and use a non-production receiver for creation
tests. Prepare secret storage before the create call.
3. Capture `id` and `privateKey` from the `201` response atomically; store the key
once and ensure it never enters logs, tickets, fixtures, or source control.
4. Implement HMAC-SHA256 over the exact raw request bytes according to BambooHR's
current webhook documentation. Do not parse or reserialize before checking.
Confirm the documented signature carrier/header from current docs or a
controlled sample; this pack does not invent one.
5. Compare signatures in constant time, reject before processing, then enforce
tenant routing, payload schema, event allowlist, timestamp/replay window when
supplied, and an idempotency key derived from stable delivery facts.
6. Acknowledge only after durable enqueue. Return intentional `4xx` for terminal
payload rejection and `5xx` only when a later retry can succeed.
7. Monitor webhook logs, last-fired time, verification failures, duplicates,
queue age, and dead letters. Rotate by creating and validating a replacement
before removing the old webhook.
## Tool Discipline
Use Read, Glob, and Grep to inspect receiver code and secret handling. Use
Write/Edit only for approved handler, tests, and runbook changes. This skill does
not authorize webhook creation, update, deletion, or receipt of production PII.
## Approval Boundaries
Require approval for event/field scope, destination, management identity, secret
write, create/update/delete calls, production traffic, and replay of any payload.
## Output
Return webhook type, event/field scope, destination class, verification contract,
secret custody receipt without value, idempotency strategy, receiver status
policy, test results, monitoring, and rotation procedure.
## Error Handling
- Creation response not stored atomically: delete or disable the unverified
webhook and recreate under approval.
- Signature contract uncertain: fail closed and inspect current official docs.
- Repeated `5xx`: stop accepting new side effects, preserve queue evidence, and
repair before BambooHR exhausts retries.
## Examples
- "Notify us when department changes" discovers the permitted field ID first.
- "Use a conventional signature header" is rejected until current official
evidence confirms the exact carrier and signing input.
## Resources
Read [official evidence](references/official-docs.md) before webhook changes.
COMPATIBILITY & REFERENCES
Platform guidance
Imported from the listed AgentSkill.sh category. Complete supplied package files and notices are retained. Required external tools and credentials are not installed. No bundled code was executed during import. Individual agent task behavior has not been tested.
Help users make better hiring decisions. Use when someone is evaluating job candidates, making hiring decisions, conducting reference checks, reviewing work samples or take-homes, calibrating their hiring bar, or deciding between finalists.
Help users navigate career changes and pivots. Use when someone is considering a new role, transitioning into product management, evaluating job offers, taking a sabbatical, or feeling stuck in their current position.
Help users build relationships with mentors and sponsors for career growth. Use when someone is looking for career guidance, wants to find a mentor, needs an advocate at work, is trying to build their professional network, or asking how to get advice from senior leaders.