openapi: 3.1.0 info: version: 1.3.0 title: Ethena Learner Training Campaigns 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: Training Campaigns description: Training campaign information and operations. paths: /v1/training-campaigns: get: tags: - Training Campaigns summary: Get training campaigns description: "Get many training campaigns. \n\nThe query parameter filters are applied as `AND` conditions across different filters. \nIf multiple filters are used, the response will include only the training campaigns that satisfy all the filters.\n\nWithin a single filter, multiple values are applied as `OR` conditions." operationId: getTrainingCampaigns parameters: - name: id in: query description: Use this parameter to filter training campaigns by 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: status in: query description: Filter training campaigns by status. When omitted, training campaigns of all statuses will be included in the response. schema: type: array maxItems: 25 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: &id001 - 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: tc123abc25 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 - courseName - campaignName - status - initialTrainingAt properties: id: allOf: - description: The unique identifier of a training campaign. type: string pattern: ^[a-zA-Z0-9]+$ example: tc456xyz78 courseName: allOf: - description: The name of the course. type: string minLength: 2 maxLength: 255 example: Cybersecurity Awareness campaignName: allOf: - description: The name of the training campaign. type: string minLength: 2 maxLength: 255 example: Security Training 2025 status: allOf: - 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: *id001 example: ACTIVE initialTrainingAt: allOf: - description: The date and time when the training campaign is scheduled to start. type: string format: date-time example: '2025-02-15T00:00:00Z' nextTrainingAt: allOf: - description: The date and time when the next training session is scheduled to start. type: string format: date-time example: '2026-02-15T00:00:00Z' deadlineInDays: allOf: - description: The number of days before the deadline of the training campaign. The deadline can be calculated as `initialTrainingAt`, plus the number of days specified in this field. If the deadline in days is null, then the training campaign does not have a deadline. type: integer minimum: 0 example: 60 '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: &id002 - title properties: &id003 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: *id002 properties: *id003 /v1/training-campaigns/{id}: get: tags: - Training Campaigns summary: Get a training campaign by id description: Get a training campaign. operationId: getTrainingCampaignById parameters: - name: id in: path required: true schema: description: The unique identifier of a training campaign. type: string pattern: ^[a-zA-Z0-9]+$ example: tc456xyz78 security: - basic_auth: [] responses: '200': description: Success content: application/json: schema: allOf: - type: object required: - id - courseName - campaignName - status - initialTrainingAt properties: id: allOf: - description: The unique identifier of a training campaign. type: string pattern: ^[a-zA-Z0-9]+$ example: tc456xyz78 courseName: allOf: - description: The name of the course. type: string minLength: 2 maxLength: 255 example: Cybersecurity Awareness campaignName: allOf: - description: The name of the training campaign. type: string minLength: 2 maxLength: 255 example: Security Training 2025 status: allOf: - 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 initialTrainingAt: allOf: - description: The date and time when the training campaign is scheduled to start. type: string format: date-time example: '2025-02-15T00:00:00Z' nextTrainingAt: allOf: - description: The date and time when the next training session is scheduled to start. type: string format: date-time example: '2026-02-15T00:00:00Z' deadlineInDays: allOf: - description: The number of days before the deadline of the training campaign. The deadline can be calculated as `initialTrainingAt`, plus the number of days specified in this field. If the deadline in days is null, then the training campaign does not have a deadline. type: integer minimum: 0 example: 60 '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: &id004 - title properties: &id005 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: *id004 properties: *id005 '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: *id004 properties: *id005 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