Set your status (focused, available, out), see your team's status at a glance, set auto-return times. Slack's status feature but on your own infrastructure.
Every operation in Semaphore is available through a JSON REST API. No SDK required — use curl, fetch, or any HTTP client.
GET /api/team_members — list all team_members with optional search and filter query parametersPOST /api/team_members — create a new teammember recordGET /api/team_members/{id} — retrieve a single teammember by IDPUT /api/team_members/{id} — update an existing teammemberDELETE /api/team_members/{id} — remove a teammemberGET /api/stats — aggregated statisticsGET /api/health — health check endpoint for monitoringWhen regulators or clients ask where your team members data is stored, the best answer is a specific server you own in a specific jurisdiction you chose. Semaphore makes that answer straightforward because the data never leaves your infrastructure.
A devops team integrates Semaphore into their CI pipeline. A post-deploy hook creates a teammember record via the API. The stats endpoint feeds a Grafana panel. When something goes wrong, the team searches team members by keyword to find related records without switching tools.
Deploy Semaphore as a systemd service, a Docker container, or a bare process behind tmux. It reads two environment variables: PORT and DATA_DIR. Everything else is self-contained. The /api/health endpoint returns the service status and team members count, which you can wire into your existing monitoring stack.
GET /api/team_members — List all team members. Supports ?q=keyword for searchPOST /api/team_members — Create a new teammember. Send JSON with at least nameGET /api/team_members/{id} — Fetch one teammember by IDPUT /api/team_members/{id} — Update fields on an existing teammemberDELETE /api/team_members/{id} — Remove a teammemberGET /api/stats — Returns total countGET /api/health — Returns {"status":"ok"} for uptime monitoringSelf-hosted team availability board. Self-hosted on your infrastructure. Your data never leaves your server.
curl -fsSL https://stockyard.dev/install.sh | sh -s -- --tool semaphore
PORT=9810 ./semaphore
http://localhost:9810
Single binary. Embedded SQLite. No Docker. No database. No dependencies.
Your license key arrives by email within 5 minutes of checkout. Set it as an environment variable and restart the binary.
export SEMAPHORE_LICENSE_KEY=stockyard_xxxxxxxxxxxxxxxxxxxx ./semaphore
No cloud connectivity required. The binary validates the key offline with Ed25519 signatures.