Unified.to
All articles

How to use User Provisioning and Verification with Unified


October 11, 2025

User Provisioning and Verification with Unified

With Unified's SCIM API devs can build use provisioning features that work with any HRIS integration like BambooHR, Workday and any other ATS integration that Unified connects to. You can create, update, list and delete users in your customers employee directories.

In this guide, I will show you how to provision users using the SDK, with BambooHR as an example. The same approach works for all Unified HR integrations.

Prerequisites

  • Node.js (v18+)
  • Unified account with at least one HR integration enabled (e.g. for this example we are using BambooHR)
  • Unified API key
  • Your customer's HR connection ID

Supported Integrations

Unified's API works with 170+ HR integrations (BambooHR, Workday, HiBob, Gusto, etc.) and 5+ verification providers (Certn, Checkr, First Advantage, Verifiable, Yardstik).

See all HR integrations

See all verification integrations


Step 1: Setting up your project

mkdir user-verification-demo
cd user-verification-demo
npm init -y
npm install @unified-api/typescript-sdk dotenv

Add your credentials to .env:

UNIFIED_API_KEY=your_unified_api_key
CONNECTION_BAMBOOHR=your_customer_bamboohr_connection_id
CONNECTION_VERIFICATION=your_customer_verification_connection_id

Step 2: Initialize the SDK

import 'dotenv/config';
import { UnifiedTo } from '@unified-api/typescript-sdk';

const { UNIFIED_API_KEY, CONNECTION_BAMBOOHR, CONNECTION_VERIFICATION } = process.env;

const sdk = new UnifiedTo({
  security: { jwt: UNIFIED_API_KEY! },
});

Step 3: How to Get Your Customer's Connection ID

Before you get started, your end customer must authorize your app to access their HRIs integration via Unified's auth flow.

Once authorized, you will receive a connection ID for that customer's integration. Store this carefully and use it in all API calls for that specific customer.


Step 4: Creating a User (Provisioning)

export async function createUser(connectionId: string, email: string, firstName: string, lastName: string) {
  const employee = await sdk.hris.createHrisEmployee({
    connectionId,
    hrisEmployee: {
      name: `${firstName} ${lastName}`,
      emails: [{ email }],
      firstName,
      lastName,
      employmentStatus: "ACTIVE",
    },
  });
  return employee; // HrisEmployee
}

Step 5: Listing Users

export async function listUsers(connectionId: string) {
  const employees = await sdk.hris.listHrisEmployees({
    connectionId,
    limit: 10,
  });
  return employees; // HrisEmployee[]
}

Step 6: Updating a User

export async function updateUserStatus(connectionId: string, userId: string, status: "ACTIVE" | "INACTIVE") {
  const updated = await sdk.hris.updateHrisEmployee({
    connectionId,
    id: userId,
    hrisEmployee: { employmentStatus: status },
  });
  return updated; // HrisEmployee
}

export async function deactivateUser(connectionId: string, userId: string) {
  // Some providers (e.g., BambooHR) do not support delete; set status to INACTIVE instead
  const updated = await sdk.hris.updateHrisEmployee({
    connectionId,
    id: userId,
    hrisEmployee: { employmentStatus: "INACTIVE" },
  });
  return updated;
}

Step 8: Verifying a User (Background Check, License, etc.)

Unified's new Verification API lets you trigger background checks, license verifications, and more, using providers like Certn, Checkr, and others.

export async function listVerificationRequests(connectionId: string) {
  // Listing requests is supported across providers; creation may vary by provider/package
  const requests = await sdk.verification.listVerificationRequests({
    connectionId,
    limit: 10,
  });
  return requests;
}

Step 9: Example Usage

async function main() {
  // 1. Create a user
  const user = await createUser(CONNECTION_BAMBOOHR!, "jane.doe@example.com", "Jane", "Doe");

  // 2. List users
  const users = await listUsers(CONNECTION_BAMBOOHR!);

  // 3. Update (deactivate) user
  if (user?.id) {
    const updated = await updateUserStatus(CONNECTION_BAMBOOHR!, user.id, "INACTIVE");
    console.log("Updated user:", updated);
  }

  // 4. List verification requests (optional)
  if (CONNECTION_VERIFICATION) {
    const requests = await listVerificationRequests(CONNECTION_VERIFICATION!);
    console.log("Verification requests:", requests.length);
  }

  console.log("Users:", users.length);
}

main();

And that's it - **Happy Building ** 🎉

All articles