openapi: 3.1.0 info: version: 1.3.0 title: Ethena Learner Training Campaigns Learner Training Modules API termsOfService: https://app.goethena.com/legal-and-privacy contact: name: Contact support email: support@goethena.com x-logo: url: ./ethena-logo.png altText: Ethena logo description: 'The Ethena API allows you to view and manage learners and training information. # Accessing the API In order to get access to our API please work with your sales representative to get an API key provisioned and shared with you. Webhooks are not enabled by default, please work with your sales representative to have them enabled if you need them. # Changelog - **v1.0.0** - Initial release of the API, including learners, training campaigns, learner training campaigns, and learner training modules. - **v1.1.0** - Added webhooks operations and support for learner training campaign completed webhook. - **v1.2.0** - Remove separate language region property on learner and support Unicode Common Locale Data Repository language formats. - **v1.3.0** - Added filter parameters for learners (email, name), learner training modules (learnerStatus, trainingCampaignStatus), and learner training campaigns (learnerStatus, trainingCampaignStatus). Added training campaign status field to training campaigns.' servers: - url: https://api.goethena.com tags: - name: Learner Training Modules description: Learner training module information and operations. paths: /v1/learner-training-modules: get: tags: - Learner Training Modules summary: Get learner training modules description: "Get many learner training modules. \n\nThe query parameter filters are applied as `AND` conditions across different filters. \nIf multiple filters are used, the response will include only the learner training modules that satisfy all the filters.\n\nWithin a single filter, multiple values are applied as `OR` conditions." operationId: getLearnerTrainingModules parameters: - name: id in: query description: Use this parameter to filter learner training modules by id. schema: type: array maxItems: 25 items: description: The unique identifier of a learner training module. type: string pattern: ^[a-zA-Z0-9]+$ example: ltm456ghi9 example: - ltm456ghi9 - ltm456ghi10 - name: learnerId in: query description: Use this parameter to filter learner training modules by learner id. schema: type: array maxItems: 25 items: description: The unique identifier of a learner. type: string pattern: ^[a-zA-Z0-9]+$ example: abc123def4 example: - abc123def4 - xyz123abc4 - name: learnerStatus in: query description: Use this parameter to filter learner training modules by the status of the learner. When omitted, learner training modules for learners of all statuses will be included in the response. schema: type: array items: description: Status of the learner account. Active learners can access training. Deactivated and terminated learners cannot access training. type: string enum: - ACTIVE - DEACTIVATED - TERMINATED example: ACTIVE example: - ACTIVE - name: trainingCampaignId in: query description: Use this parameter to filter learner training modules by training campaign id. schema: type: array maxItems: 25 items: description: The unique identifier of a training campaign. type: string pattern: ^[a-zA-Z0-9]+$ example: tc456xyz78 example: - tc123abc4 - tc123abc5 - name: trainingCampaignStatus in: query description: Use this parameter to filter learner training modules by the status of the training campaign. When omitted, learner training modules for training campaigns of all statuses will be included in the response. schema: type: array items: description: The status of the training campaign. `ACTIVE` campaigns may be scheduling training now and/or in the future. `ARCHIVED` campaigns have been deactivated and will no longer schedule new training. type: string enum: - ACTIVE - ARCHIVED example: ACTIVE example: - ACTIVE - name: limit in: query description: Use this parameter to limit the number of entities returned. schema: type: integer minimum: 1 default: 25 maximum: 100 - example: ltm456ghi25 name: cursor in: query description: "Use this parameter to paginate through entities. The cursor is the `id` of the last entity you want to start from.\n\nTo get the first page, omit this parameter. \n\nTo get the next page, use the `id` of the last entity from the previous response. Continue paginating while `hasMore` is `true` in the response.\n\nExample workflow:\n1. GET /v1/{endpoint} → returns data + hasMore: true, last entity id: \"xyz789end\"\n2. GET /v1/{endpoint}?cursor=xyz789end → returns next page" schema: type: string security: - basic_auth: [] responses: '200': description: Success content: application/json: schema: allOf: - type: object properties: limit: type: integer hasMore: type: boolean data: type: array - type: object properties: data: type: array items: type: object required: - id - trainingCampaignId - learnerId - moduleName - lengthInMinutes - assignedAt - status - statusUpdatedAt properties: id: allOf: - description: The unique identifier of a learner training module. type: string pattern: ^[a-zA-Z0-9]+$ example: ltm456ghi9 trainingCampaignId: allOf: - description: The unique identifier of a training campaign. type: string pattern: ^[a-zA-Z0-9]+$ example: tc456xyz78 learnerId: allOf: - description: The unique identifier of a learner. type: string pattern: ^[a-zA-Z0-9]+$ example: abc123def4 moduleName: allOf: - description: The name of the training module. type: string example: Foundations lengthInMinutes: allOf: - description: The training length of the module in minutes. type: number example: 45 assignedAt: allOf: - description: The date and time the learner was assigned the training module. type: string format: date-time example: '2025-05-01T00:00:00Z' status: allOf: - description: 'The status of the learner training module. Active statuses (learner can still interact and complete training): - WITHIN_DEADLINE: Assigned but not yet completed, still within the deadline - INCOMPLETE: Assigned but not completed, the deadline has passed Completed statuses: - USER_COMPLETED: Learner completed the module themselves - ADMIN_COMPLETED: Administrator marked the module as completed - CLASSROOM_COMPLETED: Completed in a classroom facilitated training - ASSESSMENT_SKIPPED: Learner passed an assessment, and skipped this module Removed statuses: - ADMIN_REMOVED: Administrator removed the module - ADMIN_ARCHIVED: Archived by administrator when training campaign was cancelled or archived - SYSTEM_REMOVED: System automatically removed the module due to a change in population, learner status, or learner profile - YEARLY_TRAINING_REMOVED: Incomplete module that was removed when new yearly training was assigned - COURSE_UNENROLLED: Company unenrolled from the course - MIGRATION_COMPANY_UNENROLLED: Status changed during data migration - MIGRATED: Status changed during data migration' type: string enum: - YEARLY_TRAINING_REMOVED - COURSE_UNENROLLED - MIGRATION_COMPANY_UNENROLLED - ADMIN_ARCHIVED - WITHIN_DEADLINE - INCOMPLETE - USER_COMPLETED - ADMIN_COMPLETED - CLASSROOM_COMPLETED - ASSESSMENT_SKIPPED - SYSTEM_REMOVED - ADMIN_REMOVED - MIGRATED example: WITHIN_DEADLINE statusUpdatedAt: allOf: - description: The instant of the latest status change of the training module. type: string format: date-time example: '2025-06-10T21:39:59Z' '400': description: Bad Request content: application/json: schema: type: object additionalProperties: true minProperties: 1 description: JSON description of the issues based on the The Problem Details JSON Object [[RFC7807](https://tools.ietf.org/html/rfc7807)]. required: &id001 - title properties: &id002 title: description: A short, human-readable summary of the problem type. type: string detail: description: A human-readable explanation specific to this occurrence of the problem. type: string invalid-params: description: An array of objects, each representing a parameter that was invalid. type: array items: type: object properties: name: type: string description: The name of the invalid parameter. reason: type: string description: The reason why the parameter is invalid. '401': description: Unauthorized content: application/json: schema: type: object additionalProperties: true minProperties: 1 description: JSON description of the issues based on the The Problem Details JSON Object [[RFC7807](https://tools.ietf.org/html/rfc7807)]. required: *id001 properties: *id002 /v1/learner-training-modules/{id}: get: tags: - Learner Training Modules summary: Get a learner training module by id description: Get a training module. operationId: getLearnerTrainingModuleById parameters: - name: id in: path required: true schema: description: The unique identifier of a learner training module. type: string pattern: ^[a-zA-Z0-9]+$ example: ltm456ghi9 security: - basic_auth: [] responses: '200': description: Success content: application/json: schema: allOf: - type: object required: - id - trainingCampaignId - learnerId - moduleName - lengthInMinutes - assignedAt - status - statusUpdatedAt properties: id: allOf: - description: The unique identifier of a learner training module. type: string pattern: ^[a-zA-Z0-9]+$ example: ltm456ghi9 trainingCampaignId: allOf: - description: The unique identifier of a training campaign. type: string pattern: ^[a-zA-Z0-9]+$ example: tc456xyz78 learnerId: allOf: - description: The unique identifier of a learner. type: string pattern: ^[a-zA-Z0-9]+$ example: abc123def4 moduleName: allOf: - description: The name of the training module. type: string example: Foundations lengthInMinutes: allOf: - description: The training length of the module in minutes. type: number example: 45 assignedAt: allOf: - description: The date and time the learner was assigned the training module. type: string format: date-time example: '2025-05-01T00:00:00Z' status: allOf: - description: 'The status of the learner training module. Active statuses (learner can still interact and complete training): - WITHIN_DEADLINE: Assigned but not yet completed, still within the deadline - INCOMPLETE: Assigned but not completed, the deadline has passed Completed statuses: - USER_COMPLETED: Learner completed the module themselves - ADMIN_COMPLETED: Administrator marked the module as completed - CLASSROOM_COMPLETED: Completed in a classroom facilitated training - ASSESSMENT_SKIPPED: Learner passed an assessment, and skipped this module Removed statuses: - ADMIN_REMOVED: Administrator removed the module - ADMIN_ARCHIVED: Archived by administrator when training campaign was cancelled or archived - SYSTEM_REMOVED: System automatically removed the module due to a change in population, learner status, or learner profile - YEARLY_TRAINING_REMOVED: Incomplete module that was removed when new yearly training was assigned - COURSE_UNENROLLED: Company unenrolled from the course - MIGRATION_COMPANY_UNENROLLED: Status changed during data migration - MIGRATED: Status changed during data migration' type: string enum: - YEARLY_TRAINING_REMOVED - COURSE_UNENROLLED - MIGRATION_COMPANY_UNENROLLED - ADMIN_ARCHIVED - WITHIN_DEADLINE - INCOMPLETE - USER_COMPLETED - ADMIN_COMPLETED - CLASSROOM_COMPLETED - ASSESSMENT_SKIPPED - SYSTEM_REMOVED - ADMIN_REMOVED - MIGRATED example: WITHIN_DEADLINE statusUpdatedAt: allOf: - description: The instant of the latest status change of the training module. type: string format: date-time example: '2025-06-10T21:39:59Z' '400': description: Bad Request content: application/json: schema: type: object additionalProperties: true minProperties: 1 description: JSON description of the issues based on the The Problem Details JSON Object [[RFC7807](https://tools.ietf.org/html/rfc7807)]. required: &id003 - title properties: &id004 title: description: A short, human-readable summary of the problem type. type: string detail: description: A human-readable explanation specific to this occurrence of the problem. type: string invalid-params: description: An array of objects, each representing a parameter that was invalid. type: array items: type: object properties: name: type: string description: The name of the invalid parameter. reason: type: string description: The reason why the parameter is invalid. '401': description: Unauthorized content: application/json: schema: type: object additionalProperties: true minProperties: 1 description: JSON description of the issues based on the The Problem Details JSON Object [[RFC7807](https://tools.ietf.org/html/rfc7807)]. required: *id003 properties: *id004 '404': description: Not Found content: application/json: schema: type: object additionalProperties: true minProperties: 1 description: JSON description of the issues based on the The Problem Details JSON Object [[RFC7807](https://tools.ietf.org/html/rfc7807)]. required: *id003 properties: *id004 components: securitySchemes: basic_auth: description: Send requests with the Authorization header that contains the word `Basic` followed by a space and a base64-encoded string of the username and api key, `username:apiKey`. type: http scheme: basic x-tagGroups: - name: General tags: - Learners - Training Campaigns - Learner Training Campaigns - Learner Training Modules - Webhooks