HRIS · Beta
Kallidus
API integration
Ship HRIS features without building the integration. Full Kallidus API access via Proxy, normalized data through Unified APIs, and 40+ MCP-ready tools for AI agents — all extensible to your exact use case.
Built for specific customer use cases. Issues are resolved quickly.
Talk to usUse Cases
Why integrate with Kallidus
Common scenarios for SaaS companies building Kallidus integrations for their customers.
Gate workflows on training compliance
Workforce management, scheduling, and operations SaaS can check Kallidus compliance status before letting managers assign shifts, tasks, or access to regulated work. This prevents costly compliance breaches in healthcare, manufacturing, and financial services.
Automate audit evidence collection for GRC
GRC and audit-readiness platforms can pull compliance summaries and course statuses from Kallidus to generate real-time evidence that workforce training requirements for ISO 27001, SOC 2, or HIPAA are met. Eliminates manual screenshot-gathering during audits.
Enrich people analytics with L&D data
HR analytics and BI SaaS can ingest Kallidus users, groups, job profiles, and course completions to correlate learning investment with retention, performance, or incident rates. Gives CHROs a defensible view of L&D ROI.
Surface training progress inside performance reviews
Performance management and continuous feedback tools can pull course and lesson statuses so managers see skill development alongside OKRs and 1:1 notes. Makes development plans concrete and measurable.
Mirror org topology into learning-aware apps
Any B2B app that needs a customer's org structure can rebuild it from Kallidus users, user groups, job profiles, and the bridge endpoints that connect them. Ensures role-based logic in your product matches how the customer actually trains and organizes their workforce.
What You Can Build
Ship these features with Truto + Kallidus
Concrete product features your team can ship faster by leveraging Truto’s Kallidus integration instead of building from scratch.
Compliance-gated shift assignment
Block or warn on shift assignments by checking a worker's Kallidus compliance status and job profile requirements before scheduling.
Automated audit evidence exports
Continuously sync compliance summaries, details, and status commentaries into your GRC workspace as auditable evidence artifacts.
Course completion dashboards
Ship native dashboards that visualize course and lesson statuses per user, group, or job profile without your customer exporting CSVs.
Org and role mapping sync
Ingest Kallidus users, user groups, and job profiles (plus their bridge tables) to mirror the customer's training-aligned org hierarchy inside your product.
Skills and training feed in performance reviews
Display each employee's recently completed courses and lessons directly in review, 1:1, and goal-setting workflows.
L&D data pipeline to your warehouse
Stream Kallidus learning and compliance data into your customer's Snowflake, BigQuery, or Redshift via your product's existing warehouse connector.
SuperAI
Kallidus AI agent tools
Comprehensive AI agent toolset with fine-grained control. Integrates with MCP clients like Cursor and Claude, or frameworks like LangChain.
list_all_kallidus_compliance_details
List lesson-level ComplianceDetail fact rows from Kallidus DEx reporting; join on daySK, userSK, courseSK and lessonSK. 5000 records per page; Truto follows nextpagelink. $skip is the only query option (no filters, sorting or page size; limit is ignored). Data refreshes twice a day. Past the first 10,000 records (page 3+), each page allows one call per day per API client (resets 00:00 UTC).
list_all_kallidus_compliance_status_commentaries
List the ComplianceStatusCommentary dimension from Kallidus DEx reporting; used by compliance_details. 5000 records per page; Truto follows nextpagelink. $skip is the only query option (no filters, sorting or page size; limit is ignored). Data refreshes twice a day. Past the first 10,000 records (page 3+), each page allows one call per day per API client (resets 00:00 UTC).
list_all_kallidus_compliance_statuses
List the ComplianceStatus dimension from Kallidus DEx reporting (statusSK, statusLabel); used by compliance_summaries. 5000 records per page; Truto follows nextpagelink. $skip is the only query option (no filters, sorting or page size; limit is ignored). Data refreshes twice a day. Past the first 10,000 records (page 3+), each page allows one call per day per API client (resets 00:00 UTC).
list_all_kallidus_compliance_summaries
List course-level ComplianceSummary fact rows from Kallidus DEx reporting; join on userSK and courseSK. 5000 records per page; Truto follows nextpagelink. $skip is the only query option (no filters, sorting or page size; limit is ignored). Data refreshes twice a day. Past the first 10,000 records (page 3+), each page allows one call per day per API client (resets 00:00 UTC).
list_all_kallidus_course_statuses
List the CourseStatus dimension from Kallidus DEx reporting (statusSK, statusLabel); used by compliance_details. 5000 records per page; Truto follows nextpagelink. $skip is the only query option (no filters, sorting or page size; limit is ignored). Data refreshes twice a day. Past the first 10,000 records (page 3+), each page allows one call per day per API client (resets 00:00 UTC).
list_all_kallidus_courses
List the Course dimension from Kallidus DEx reporting (courseSK, courseID, courseCode, courseTitle, customField01-20). 5000 records per page; Truto follows nextpagelink. $skip is the only query option (no filters, sorting or page size; limit is ignored). Data refreshes twice a day. Past the first 10,000 records (page 3+), each page allows one call per day per API client (resets 00:00 UTC).
list_all_kallidus_days
List the Day (calendar) dimension from Kallidus DEx reporting; daySK (e.g. 20250101) is the day key used by the fact tables. 5000 records per page; Truto follows nextpagelink. $skip is the only query option (no filters, sorting or page size; limit is ignored). Data refreshes twice a day. Past the first 10,000 records (page 3+), each page allows one call per day per API client (resets 00:00 UTC).
list_all_kallidus_job_profiles
List the JobProfile dimension from Kallidus DEx reporting (jobProfileSK, jobProfileID, jobProfileCode, jobProfileTitle). 5000 records per page; Truto follows nextpagelink. $skip is the only query option (no filters, sorting or page size; limit is ignored). Data refreshes twice a day. Past the first 10,000 records (page 3+), each page allows one call per day per API client (resets 00:00 UTC).
list_all_kallidus_lesson_statuses
List the LessonStatus dimension from Kallidus DEx reporting (statusSK, statusLabel); used by compliance_details. 5000 records per page; Truto follows nextpagelink. $skip is the only query option (no filters, sorting or page size; limit is ignored). Data refreshes twice a day. Past the first 10,000 records (page 3+), each page allows one call per day per API client (resets 00:00 UTC).
list_all_kallidus_lessons
List the Lesson dimension from Kallidus DEx reporting (lessonSK, lessonID, lessonCode, lessonTitle, lessonType). 5000 records per page; Truto follows nextpagelink. $skip is the only query option (no filters, sorting or page size; limit is ignored). Data refreshes twice a day. Past the first 10,000 records (page 3+), each page allows one call per day per API client (resets 00:00 UTC).
list_all_kallidus_user_group_bridges
List the UserGroup bridge from Kallidus DEx reporting: userSK, userGroupSK and isPrimaryGroup rows linking users to groups. 5000 records per page; Truto follows nextpagelink. $skip is the only query option (no filters, sorting or page size; limit is ignored). Data refreshes twice a day. Past the first 10,000 records (page 3+), each page allows one call per day per API client (resets 00:00 UTC).
list_all_kallidus_user_groups
List the UserGroup dimension from Kallidus DEx reporting (userGroupSK, userGroupID, userGroupCode, userGroupTitle). 5000 records per page; Truto follows nextpagelink. $skip is the only query option (no filters, sorting or page size; limit is ignored). Data refreshes twice a day. Past the first 10,000 records (page 3+), each page allows one call per day per API client (resets 00:00 UTC).
list_all_kallidus_user_job_profile_bridges
List the UserJobProfile bridge from Kallidus DEx reporting: userSK and jobProfileSK pairs linking users to job profiles. 5000 records per page; Truto follows nextpagelink. $skip is the only query option (no filters, sorting or page size; limit is ignored). Data refreshes twice a day. Past the first 10,000 records (page 3+), each page allows one call per day per API client (resets 00:00 UTC).
list_all_kallidus_users
List the User dimension from Kallidus DEx reporting (userSK, userId, username, name, email, Perform manager, userField01-20). 5000 records per page; Truto follows nextpagelink. $skip is the only query option (no filters, sorting or page size; limit is ignored). Data refreshes twice a day. Past the first 10,000 records (page 3+), each page allows one call per day per API client (resets 00:00 UTC).
list_all_kallidus_suite_users
Beta (User Management API). List Kallidus Suite users (id, username, givenName, familyName, emailAddress, isEnabled, importKey, roles, userInformationFields and more). Supports $filter, $orderby, $select and $count. Default page size is 10; pass limit (up to 50, sent as $top) to cut calls under the 100 calls/min limit. Truto follows nextpagelink.
get_single_kallidus_suite_user_by_id
Beta (User Management API). Get one Kallidus Suite user. id accepts the user GUID, username=
create_a_kallidus_suite_user
Beta (User Management API). Create a Kallidus Suite user. Required: username, givenName, familyName, importKey, isEnabled. When both startDate and leaveDate are sent, startDate must be earlier. Returns the new user id. Fails with 409 when an identifier already belongs to an existing user.
update_a_kallidus_suite_user_by_id
Beta (User Management API). Partially update a Kallidus Suite user by GUID (id). Only the fields sent change; send null to clear nullable fields such as emailAddress, startDate, leaveDate, brandId, primaryGroupId or primaryJobProfileId. Use overwrite to replace the whole record. Kallidus returns 204 with no body.
kallidus_suite_users_overwrite
Beta (User Management API). Replace every detail of a Kallidus Suite user, identified by the user_id query parameter (GUID). Fields you omit are cleared. Required body fields: username, givenName, familyName, importKey, isEnabled. Kallidus returns 204 with no body. Use update for partial changes.
delete_a_kallidus_suite_user_by_id
Beta (User Management API). Permanently delete a Kallidus Suite user by GUID (id). The user's group administrator and membership assignments and learning records are also removed; this cannot be undone. Kallidus returns 204 with no body.
list_all_kallidus_suite_user_bulk_jobs
Beta (User Management API). List bulk upsert jobs with jobId, correlationId, status, statusLabel, isComplete, counts and submittedAt. Filter by status with $filter, sort by submittedAt with $orderby (newest first by default), trim fields with $select, add a total with $count. Up to 50 per page; Truto follows nextpagelink.
get_single_kallidus_suite_user_bulk_job_by_id
Beta (User Management API). Get one bulk upsert job by jobId (id): status, statusLabel, isComplete and counts (total, imported, failed, rejected, needsAttention, outstanding). startedAt and completedAt are not populated yet (always null). Supports $select.
create_a_kallidus_suite_user_bulk_job
Beta (User Management API). Start an asynchronous bulk upsert that adds or updates Kallidus Suite users. The body is a JSON array (at least one item); each item takes the suite_users create fields (required: username, givenName, familyName, importKey, isEnabled). Returns jobId (HTTP 202). Track progress with suite_user_bulk_jobs get and suite_user_bulk_job_users list.
list_all_kallidus_suite_user_bulk_job_users
Beta (User Management API). List the users in one bulk upsert job (job_id) with userId, status, statusLabel, isComplete, sourceVersion and rejectionReason. Filter by status with $filter; $expand=products adds per-product step detail (products). Up to 50 per page; send job_id again with next_cursor.
list_all_kallidus_suite_groups
Beta (User Management API). List Kallidus Suite groups with id, code, title, description, categoryId, managerId, dateCreated, dateModified and Perform visibility flags. $filter supports eq, and, gt, lt and a parent-group filter that lists a group's children; $orderby, $select and $count are supported. Up to 50 per page; Truto follows nextpagelink.
get_single_kallidus_suite_group_by_id
Beta (User Management API). Get one Kallidus Suite group. id accepts the group GUID, id=
create_a_kallidus_suite_group
Beta (User Management API). Create a Kallidus Suite group. Required: code, title; optional description, categoryId and managerId (the manager's user id). Returns the new group id. Fails with 409 when the code or title already exists.
update_a_kallidus_suite_group_by_id
Beta (User Management API). Partially update a Kallidus Suite group by GUID (id). Send at least one of title, code, description, categoryId or managerId; only those fields change. Kallidus returns 204 with no body, or 409 when the code or title already exists.
delete_a_kallidus_suite_group_by_id
Beta (User Management API). Permanently delete a Kallidus Suite group by GUID (id). Its administrator assignments, membership assignments and parent-child relationships are also removed; this cannot be undone. Kallidus returns 204 with no body.
list_all_kallidus_suite_group_user_memberships
Beta (User Management API). List group member assignments (userId and groupId pairs) across all groups. Filter by userId or groupId with $filter, sort with $orderby, trim fields with $select, add a total with $count. Up to 50 per page; Truto follows nextpagelink.
get_single_kallidus_suite_group_user_membership_by_id
Beta (User Management API). Check that a user is a group member. id is the user GUID and group_id the group GUID. Returns userId and groupId, or 404 when there is no such assignment.
create_a_kallidus_suite_group_user_membership
Beta (User Management API). Make a user a group member. Required: groupId and userId (GUIDs). Kallidus returns 201 with no body, so the result is an empty object; 404 if the group or user does not exist, 409 if the assignment already exists.
delete_a_kallidus_suite_group_user_membership_by_id
Beta (User Management API). Remove a user as a group member. id is the user GUID and group_id the group GUID. Kallidus returns 204 with no body.
list_all_kallidus_suite_group_administrator_memberships
Beta (User Management API). List group administrator assignments (userId and groupId pairs) across all groups. Filter by userId or groupId with $filter, sort with $orderby, trim fields with $select, add a total with $count. Up to 50 per page; Truto follows nextpagelink.
get_single_kallidus_suite_group_administrator_membership_by_id
Beta (User Management API). Check that a user is a group administrator. id is the user GUID and group_id the group GUID. Returns userId and groupId, or 404 when there is no such assignment.
create_a_kallidus_suite_group_administrator_membership
Beta (User Management API). Make a user a group administrator. Required: groupId and userId (GUIDs). Kallidus returns 201 with no body, so the result is an empty object; 404 if the group or user does not exist, 409 if the assignment already exists.
delete_a_kallidus_suite_group_administrator_membership_by_id
Beta (User Management API). Remove a user as a group administrator. id is the user GUID and group_id the group GUID. Kallidus returns 204 with no body.
get_single_kallidus_suite_group_child_membership_by_id
Beta (User Management API). Check a parent-child group relationship. id is the child group GUID and parent_group_id the parent group GUID. Returns parentGroupId and childGroupId, or 404. Kallidus has no list endpoint for relationships; use suite_groups list with $filter parentGroupId eq
create_a_kallidus_suite_group_child_membership
Beta (User Management API). Make one group a child of another. Required: parentGroupId and childGroupId (GUIDs). Kallidus returns 201 with no body, so the result is an empty object; 404 if either group is missing, 409 if the relationship exists, is a self-assignment or would make the hierarchy circular.
delete_a_kallidus_suite_group_child_membership_by_id
Beta (User Management API). Remove a child group from its parent group. id is the child group GUID and parent_group_id the parent group GUID. Kallidus returns 204 with no body.
list_all_kallidus_learn_roles
Beta (User Management API). List Kallidus Learn LMS roles with id, title and description. Use the id to assign the role to a suite user. $filter (eq, and on id or title; exact title match), $orderby, $select and $count are supported. Default and maximum page size is 100.
list_all_kallidus_suite_job_profiles
Beta (User Management API). List Kallidus Suite job profiles with id, code, title and categoryId; use the ids to set a suite user's primary or additional job profiles. $filter supports eq and and on code, title, categoryId and id; $count adds a total. Default and maximum page size is 100.
list_all_kallidus_suite_group_categories
Beta (User Management API). List Kallidus Suite group categories. Each has an id and a title array of culture/value pairs; titles come back in every culture (Truto does not send the X-Culture header). $filter (eq, and on id or title), $orderby, $select and $count are supported. Up to 50 per page.
Why Truto
Why use Truto’s MCP server for Kallidus
Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 800+ integrations.
Auto-generated, always up to date
Tools are dynamically generated from curated documentation — not hand-coded. As integrations evolve, tools stay current without manual maintenance.
Fine-grained access control
Scope each MCP server to read-only, write-only, specific methods, or tagged tool groups. Expose only what your AI agent needs — nothing more.
Multi-tenant by design
Each MCP server is scoped to a single connected account with its own credentials. The URL itself is the auth token — no shared secrets, no credential leaking across tenants.
Works with every MCP client
Standard JSON-RPC 2.0 protocol. Paste the URL into Claude, ChatGPT, Cursor, or any MCP-compatible agent framework — tools are discovered automatically.
Built-in auth, rate limits, and error handling
Tool calls execute through Truto’s proxy layer with automatic OAuth refresh, rate-limit handling, and normalized error responses. No raw API plumbing in your agent.
Expiring and auditable servers
Create time-limited MCP servers for contractors or automated workflows. Optional dual-auth requires both the URL and a Truto API token for high-security environments.
Unified APIs
Unified APIs for Kallidus
Skip writing code for every integration. Use Truto’s category-specific Unified APIs out of the box or customize the mappings with AI.
How It Works
From zero to integrated
Go live with Kallidus in under an hour. No boilerplate, no maintenance burden.
Link your customer’s Kallidus account
Use Truto’s frontend SDK to connect your customer’s Kallidus account. We handle all OAuth and API key flows — you don’t need to create the OAuth app.
We handle authentication
Don’t spend time refreshing access tokens or figuring out secure storage. We handle it and inject credentials into every API request.
Call our API, we call Kallidus
Truto’s Proxy API is a 1-to-1 mapping of the Kallidus API. You call us, we call Kallidus, and pass the response back in the same cycle.
Unified response format
Every response follows a single format across all integrations. We translate Kallidus’s pagination into unified cursor-based pagination. Data is always in the result attribute.
FAQs
Common questions about Kallidus on Truto
Authentication, rate limits, data freshness, and everything else you need to know before you integrate.
What Kallidus API does Truto connect to?
Truto connects to the Kallidus Data Extraction (DEx) Reporting API, a read-only REST API designed for bulk extraction of learning, compliance, and organizational data. It supports server-driven pagination up to 5,000 records per page and is refreshed multiple times daily.
What data can I read from Kallidus through Truto?
You can list users, user groups, job profiles, and the bridge records that connect them; courses, lessons, and their statuses; and compliance details, statuses, status commentaries, and summaries. A days reference endpoint is also available.
Can I write data back to Kallidus, such as creating users or enrolling learners?
Not through the current Truto integration. The DEx API is read-only. Kallidus offers a separate GraphQL API for user and group mutations, which can be added on request if your use case requires write operations.
How fresh is the data returned by these endpoints?
The DEx API is refreshed multiple times per day rather than in real time, so it's well-suited for compliance reporting, analytics, and daily operational checks, but not for sub-minute event-driven workflows.
How does pagination work for large datasets?
The DEx API uses server-driven pagination with a maximum page size of 5,000 records. Truto handles cursor traversal automatically so you can iterate through all pages without managing tokens yourself.
Is there a Unified HRIS API for Kallidus?
Kallidus is currently exposed as a direct integration with product-specific list endpoints rather than through a unified HRIS schema. If you need Kallidus normalized into a unified model alongside other HRIS providers, this can be prioritized on request.
From the Blog
Kallidus integration guides
Deep dives, architecture guides, and practical tutorials for building Kallidus integrations.
Kallidus
Get Kallidus integrated into your app
Our team understands what it takes to make a Kallidus integration successful. A short, crisp 30 minute call with folks who understand the problem.