Zoho Learn
Zoho Learn is an all-in-one knowledge management and learning management system.
Data integration: Skyvia supports importing data to and from Zoho Learn, exporting Zoho Learn data to CSV files, replicating Zoho Learn data to relational databases, and synchronizing Zoho Learn data with other cloud apps and relational databases.
Backup: Skyvia Backup does not support Zoho Learn.
Query: Skyvia Query supports Zoho Learn.
Establishing Connection
To create a connection with Zoho Learn, sign in with Zoho, select the data center, and hub URL.
Creating Connection
To connect to Zoho Learn, perform the following steps:

- Click Sign in with Zoho Learn.
- Enter your credentials.
- Allow Skyvia to access your Zoho data.

Additional Connection Parameters
Account TimeZone
Specify the time zone that matches the timezone set in your Zoho Learn account.
Connector Specifics
Date Format Specifics
Zoho Learn API may return dates in the timezone set for Zoho Learn account and in specific format as strings: If a date belongs to current year, it contains day and time and doesn't contain year. If a date belongs to a year different from current, it contains day and year and doesn't contain time.
For user convenience Skyvia converts the Zoho Learn dates to UTC an processes Zoho Learn dates in the following way: If a date contains a month, day, and time but no year, Skyvia assigns the current year for such dates automatically. If a date is specified without a time, Skyvia sets time to 00:00:00 automatically.
This logic works for the following objects and fields:
| Object | Field |
|---|---|
| CourseData | CreatedTime, UserRating_Time |
| CourseRatings | Time |
| CourseResources | UploadedTime |
| Courses | CreatedTime, ExpiryTime |
| _CustomPortalCourses, CustomPortalManuals, LessonDiscussions, QuestionBanks _ | CreatedTime |
| CustomPortalPendingInvites, CustomPortalSignups | ReinvitedTime |
Object Peculiarities
ReportCourses
When you query this object, it displays the lessons' statistics by default.
To query the members' statistics, use the IsMemberView = true filter. If you use the IsMemberView = false filter, the LessonStats field returns lessons' statistics.
The LessonStats and MemberStats objects have a complex structure. They contain nested arrays in JSON format. For user convenience, Skyvia represents them as separate read-only ReportCoursesLessonStats and ReportCoursesMemberStats objects in our connector.
CourseRatings
To be able to insert, update, or delete data in the CourseRatings object, make sure you have the corresponding rights. Otherwise, you get the access error.
Nested Objects
Some fields in Zoho Learn store complex structured data in JSON format. You can use our Nested Objects mapping feature in the Import integrations to insert or update the nested values in such fields. Select the Separate Tables for the Unwind Nested Objects option when using the new replication runtime to replicate the nested data into separate tables.
| Object | Field |
|---|---|
| CourseMembers | UserDetails |
| LessonDiscussions | Replies |
| ReportCourses | LessonStats, MemberStats |
Incremental Replication and Synchronization
Skyvia supports Replication with Incremental Updates for the ChapterLessons, CourseLessons, CourseData, CourseRatings, CourseResources, Courses, CustomPortalCourses, CustomPortalManuals, LessonDiscussions, QuestionBanks objects.
Skyvia tracks only new records for the CourseData, CourseResources, Courses, CustomPortalCourses, CustomPortalManuals, QuestionBanks objects.
Since Zoho Learn doesn't return seconds for string date values, the Incremental Updates and Synchronization behave the following way. Skyvia won't detect the records created/updated the same minute as the last replication/synchronization run.
Skyvia supports Synchronization for the QuestionBanks, CourseRatings, and ChapterLessons objects.
DML Operations Support
| Operation | Object |
|---|---|
| INSERT, UPDATE, DELETE | CourseRatings, QuestionBanks |
| INSERT | Courses |
Stored Procedures
Skyvia represents part of the supported Zoho Learn features as stored procedures. You can call a stored procedure, for example, as a text of the command in the ExecuteCommand action in a Target component of a Data Flow or in Query.
EnrollInCourse
Use the following command to allow a learner to enroll themselves in public or on-request courses.
call EnrollInCourse(:CourseId)
AddMembersToCourse
The following command adds members to a course.
call AddMembersToCourse(:CourseId, :UserIds, :Role)
| PARAMETER NAME | DESCRIPTION |
|---|---|
| CourseId | The ID of the course to add members to |
| UserIds | Array of Zuids to add to the course |
| Role | Optional parameter. If omitted, the default role is MEMBER. Possible values: MEMBER - Add user as Learner, ADMIN - Add user as ADMIN, INSTRUCTOR - Add user as Instructor, CONTRIBUTOR - Add user as contributor |
ChangeCourseMemberRole
The command below changes the role of a member in a course.
call ChangeCourseMemberRole(:CourseId, :Zuid, :Role)
| PARAMETER NAME | DESCRIPTION |
|---|---|
| CourseId | The ID of the course to change roles in |
| Zuid | The ID of the user in Zoho to change role for |
| Role | Possible values: MEMBER - Add user as Learner, ADMIN - Add user as ADMIN, INSTRUCTOR - Add user as Instructor, CONTRIBUTOR - Add user as contributor |
CompleteCourse
Use the following command to complete a course.
call CompleteCourse(:CourseId)
CompleteLesson
Use the following command to complete a lesson.
call CompleteLesson(:CourseId, :LessonId)
MarkLearnerAsComplete
Use the following command to mark a learner as complete.є
call MarkLearnerAsComplete(:CourseId, :MemberId)
MarkLearnerAsInProgress
Use the following command to mark a learner as in progress.
call MarkLearnerAsInProgress(:CourseId, :MemberId)
MarkLearnerAsFailed
Use the following command to mark a learner as failed.
call MarkLearnerAsFailed(:CourseId, :MemberId)
InviteCustomPortalUsers
Use the following command to invite users to a custom portal.
call InviteCustomPortalUsers(:CustomPortalId, :Userlist, :MailContent)
| PARAMETER NAME | DESCRIPTION |
|---|---|
| CustomPortalId | Custom portal unique ID |
| Userlist | An array of users to be invited to the custom portal. Only 100 emails can be invited at a time. Value example: [{"emailId": "user1@zylker.com","fname":"user","lname":"one"},{"emailId": "user2@zylker.com","fname":"user","lname":"two"},{"emailId": "user3@zylker.com","fname":"user","lname":"three"}] |
| MailContent | Optional. Mail content to be sent. If the mailContent parameter value is empty, the default mail content will be sent. |
ResendInviteInCustomPortal
Use the following command to resend the invite in a custom portal.
call ResendInviteInCustomPortal(:CustomPortalId, :Zuid)
DeleteInviteInCustomPortal
Use the following command to delete a pending invite in a custom portal.
call DeleteInviteInCustomPortal(:CustomPortalId, :Zuid)
ActivateCustomPortalUser
Use the following command to activate a custom portal user.
call ActivateCustomPortalUser(:CustomPortalId, :Zuid)
DisableCustomPortalUser
Use the following command to disable a custom portal user.
call DisableCustomPortalUser(:CustomPortalId, :Zuid)
DeleteCustomPortalUser
Use the following command to delete a custom portal user.
call DeleteCustomPortalUser(:CustomPortalId, :Zuid)
ShareManualToCustomPortal
Use the following command to share a manual to a custom portal.
call ShareManualToCustomPortal(:CustomPortalId, :ManualIds)
| PARAMETER NAME | DESCRIPTION |
|---|---|
| CustomPortalId | Custom portal unique ID |
| ManualIds | List of comma-separated manual IDs |
RemoveManualFromCustomPortal
Use the following command to remove a manual from a custom portal.
call RemoveManualFromCustomPortal(:CustomPortalId, :RemovedManualIds)
| PARAMETER NAME | DESCRIPTION |
|---|---|
| CustomPortalId | Custom portal unique ID |
| RemovedManualIds | List of comma-separated manual IDs to be removed |
AddUserToCustomPortalCourse
The following command adds users to a course in a custom portal.
call AddUserToCustomPortalCourse(:CustomPortalId, :CourseId, :AddedZuids, :EnrollmentType, :IsPublic)
| PARAMETER NAME | DESCRIPTION |
|---|---|
| CustomPortalId | Custom portal unique ID |
| CourseId | The unique identifier of the course |
| AddedZuids | Optional. Comma-separated zuids of custom portal users to be added to this course |
| EnrollmentType | Optional. PRIVATE - Only zuids added to the course can take this course. PUBLIC - Anyone from the custom portal can enroll in this course. ON_REQUEST - Anyone from the custom portal can view the preview of this course, but requires an admin's approval to enroll in the course |
| IsPublic | Boolean. In case of a public custom portal, set this value to true to show a public preview of this course |
RemoveUserFromCustomPortalCourse
The following command removes users from a course in a custom portal.
call RemoveUserFromCustomPortalCourse(:CustomPortalId, :CourseId, :RemovedZuids, :ResetStats)
| PARAMETER NAME | DESCRIPTION |
|---|---|
| CustomPortalId | Custom portal unique ID |
| CourseId | The unique identifier of the course |
| RemovedZuids | Optional. Comma-separated zuids of custom portal users to be removed from this course |
| EnrollmentType | Optional. PRIVATE - Only zuids added to the course can take this course. PUBLIC - Anyone from the custom portal can enroll in this course. ON_REQUEST - Anyone from the custom portal can view the preview of this course but requires admin's approval to enroll to the course |
| ResetStats | Boolean. If sent true, learner statistics of the removedZuids will be removed. |
AddUserToManualInCustomPortal
Use the following command to add users to a manual in a custom portal.
call AddUserToManualInCustomPortal(:CustomPortalId, :ManualId, :AddedZuids, :EnrollmentType, :IsPublic)
| PARAMETER NAME | DESCRIPTION |
|---|---|
| CustomPortalId | Custom portal unique ID |
| ManualId | The unique identifier of the manual |
| AddedZuids | Optional. Comma-separated zuids of custom portal users to be added to this manual |
| EnrollmentType | Optional. PRIVATE - Only zuids added to the manual can view this manual. PUBLIC - Anyone from this custom portal can view to this manual. |
| IsPublic | Boolean. In case of a public custom portal, set this value to true to enable public view of this manual |
RemoveUserFromManualInCustomPortal
Use the following command to remove users from a manual in a custom portal.
call RemoveUserFromManualInCustomPortal(:CustomPortalId, :ManualId, :RemovedZuids)
| PARAMETER NAME | DESCRIPTION |
|---|---|
| CustomPortalId | Custom portal unique ID |
| ManualId | The unique identifier of the manual |
| RemovedZuids | Comma-separated zuids of custom portal users to be removed from this manual |
ApproveSignupRequestInCustomPortal
Use the following command to approve a signup request in a custom portal.
call ApproveSignupRequestInCustomPortal(:CustomPortalId, :Zuid)
RejectSignupRequestInCustomPortal
Use the following command to reject signup requests in the custom portal.
call RejectSignupRequestInCustomPortal(:CustomPortalId, :Zuid)
EnableCustomPortal
Use the following command to enable the custom portal.
call EnableCustomPortal(:CustomPortalId)
DisableCustomPortal
Use the following command to disable the custom portal.
call DisableCustomPortal(:CustomPortalId)
Supported Actions
Skyvia supports all the common actions and custom actions for Zoho Learn.