Developers

HR integrations: REST API, webhooks and MCP

Connect Teamso to the systems you use. Hires, terminations and organization changes go out instantly as webhooks; read and write data with the REST API; with Teamso MCP, AI assistants act within your permissions.

{
  "eventId": "8f0c2a4e-...",
  "eventType": "EMPLOYEE_HIRED",
  "companyId": "...",
  "createdAt": "2026-11-02T09:30:00",
  "data": {
    "userId": "...",
    "fullName": "Ayşe Yılmaz",
    "email": "[email protected]",
    "branch": "Merkez",
    "department": "Finans",
    "position": "Uzman",
    "manager": "Mert Şahin",
    "hireDate": "2026-11-03T00:00:00",
    "customFields": {}
  }
}
  • X-Teamso-Event
  • X-Teamso-Delivery-Id
  • X-Teamso-Timestamp
  • X-Teamso-Signature
Sample webhook body (standard format) and the headers sent with each request
Three ways

How to connect to Teamso

REST API

Call the API that the Teamso web and mobile apps use, with a personal access token. The token works with its owner's current permissions.

  • Permissions come from the role; a revoked token fails on the next request
  • Password, session and security settings endpoints are closed to tokens
  • The company IP restriction also applies to token requests

Webhooks

When an event happens, Teamso sends a signed request to your URL. If it cannot reach you, it retries at growing intervals.

  • HMAC-SHA256 signature
  • Retries: 1 min, 5 min, 30 min, 2 h, 6 h
  • Standard JSON or a templated custom request

Teamso MCP

Leave requests, approvals, reports and guide search from Claude, Cursor and other MCP clients.

  • Hosted endpoint or npm package
  • Write actions ask for a preview and confirmation first
  • Works with the user's own permissions
MCP docs
Webhook events

Which events are sent?

When you create a subscription you choose the events to listen to. Employee events are managed in company settings, time and attendance events in the attendance settings.

Employee and recognition events

EventWhen it is sent
EMPLOYEE_HIREDAn employee started (single entry, Excel or digital onboarding)
EMPLOYEE_TERMINATEDAn employee's termination was recorded
EMPLOYEE_TERMINATION_CANCELLEDA termination was cancelled or the employee was rehired
EMPLOYEE_ORG_UPDATEDBranch, department, position or manager changed; the current state and old/new values come together
BADGE_AWARDEDA badge was awarded (a private badge carries no message)

Time and attendance events

EventWhen it is sent
attendance.createdA clock-in or clock-out record was created
anomaly.detectedAn anomaly was detected (e.g. lateness, a long break)
security.violationA security violation (e.g. a fake location)
excuse.submittedAn employee wrote a reason
excuse.resolvedA reason was decided
qr.lockedThe QR code was locked for a late employee

Event names match the product exactly; this table is updated when a new event is added.

Developer note

Verify the signature and do not process the same event twice

Each request carries the HMAC-SHA256 signature (hex) of the raw body, made with the subscription's secret, in the X-Teamso-Signature header. Delivery is at least once: if the same X-Teamso-Delivery-Id arrives again, ignore it.

  • Preview the request before saving
  • Custom format: POST, PUT or GET; JSON or form body; templated fields
  • Failed deliveries appear in the delivery history with the error and can be resent with one click
  • Redirects (3xx) are not followed and self-signed certificates are not accepted
import crypto from "node:crypto";

function verify(rawBody, headers, secret) {
  const expected = crypto
    .createHmac("sha256", secret)
    .update(rawBody)
    .digest("hex");
  const received = headers["x-teamso-signature"] ?? "";
  return (
    received.length === expected.length &&
    crypto.timingSafeEqual(
      Buffer.from(received),
      Buffer.from(expected),
    )
  );
}
Verifying the signature in Node.js (with the raw body)
Security

Integration data leaves under control

Target address checks

The webhook URL is resolved when it is saved and again on every delivery; requests cannot reach the server's own network (loopback, link-local addresses, the cloud metadata endpoint). Internal systems remain reachable over VPN on private addresses.

Secrets and masking

Each subscription has its own secret; values such as passwords and tokens in a custom request are stored encrypted and shown masked on screen and in the delivery history.

Permissions and records

Only authorized users see and manage subscriptions. Token-based API requests are limited to the owner's permissions; once a token is revoked, the next request is rejected.

Use cases

What integrations automate

Account provisioning

When an employee starts, their account is opened in email, Active Directory or the access control system; on termination the account is closed. Organization changes update the department and manager.

Accounting and ERP

New hire and termination data flows to the accounting or ERP system; payroll results are read with the REST API.

Turnstiles and shifts

Clock-in and clock-out events flow to the turnstile or shift planning system; anomaly and security events reach the right team as notifications.

AI assistants with Teamso MCP

Leave approvals, reports and guide search from Claude or Cursor. Details on the AI page.

Solution partners

Our setup and integration partners

Partners who roll out Teamso for their customers and connect it to their systems. The list and the application form are on the partners page.

Our solution partners
FAQ

Frequently asked questions about Integrations

Do I need a separate key to use the API?

You create a personal access token on the MCP access page in Teamso. The token works with its owner's permissions and can have an expiry; a user can have at most 10 active tokens. Endpoints for passwords, sessions and security settings are closed to tokens.

Who can set up a webhook?

Users with the permission to view and manage webhook subscriptions in company settings. A subscription sets the URL, the events and the secret; a test request can be sent before saving.

Is data lost if my system does not receive the request?

No. Teamso retries after 1 minute, 5 minutes, 30 minutes, 2 hours and 6 hours; after the last attempt the delivery is marked failed and can be resent from the delivery history with one click.

What if my system needs its own format?

In custom request mode you set the HTTP method (POST, PUT, GET), the body format (JSON or form) and the fields with a template; variables such as first name, last name, email and branch can be transformed with filters. Secret values are stored encrypted and shown masked.

How is the signature verified?

Compute the HMAC-SHA256 of the request's raw body in hex with the subscription's secret and compare it with the X-Teamso-Signature header in constant time. Do not parse and re-serialize the body; the signature covers the raw body.

Let's plan your integration together

Tell us which systems you want to connect; we map the events and fields together during setup.

Request a demo