Work with this as data
Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/goethena-learners-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
OpenAPI Specification
openapi: 3.2.0
info:
version: 1.3.0
title: Ethena Learners 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: Learners
description: Learner information and operations.
paths:
/v1/learners:
get:
tags:
- Learners
summary: Get learners
description: "Get many learners.\n\nThe query parameter filters are applied as `AND` conditions across different filters. \nIf multiple filters are used, the response will include only the learners that satisfy all the filters.\n\nWithin a single filter, multiple values are applied as `OR` conditions."
operationId: getLearners
parameters:
- name: id
in: query
description: Use this parameter to filter learners by 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: status
in: query
description: Use this parameter to filter learners by status. By default, all statuses are returned.
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: email
in: query
description: Use this parameter to filter learners by exact email match within the tenant.
schema:
type: array
maxItems: 25
items:
type: string
format: email
example:
- first.last@your-domain.com
- name: name
in: query
description: Use this parameter to filter learners by exact name match.
schema:
type: array
maxItems: 25
items:
type: string
minLength: 2
maxLength: 100
example:
- First Last
- 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: abc123def25
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
- name
- email
- status
- country
- isManager
- language
- trainingUrl
properties:
id:
allOf:
- description: The unique identifier of a learner.
type: string
pattern: ^[a-zA-Z0-9]+$
example: abc123def4
name:
allOf:
- description: The learner's full name.
type: string
minLength: 2
maxLength: 100
example: First Last
status:
allOf:
- 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
email:
allOf:
- description: The learner's unique email address.
type: string
format: email
maxLength: 255
example: first.last@{your-domain}.com
country:
allOf:
- description: The learner's country of employment. Three letter country code.
type: string
minLength: 3
maxLength: 3
enum:
- AFG
- ALA
- ALB
- DZA
- ASM
- AND
- AGO
- AIA
- ATA
- ATG
- ARG
- ARM
- ABW
- AUS
- AUT
- AZE
- BHS
- BHR
- BGD
- BRB
- BLR
- BEL
- BLZ
- BEN
- BMU
- BTN
- BOL
- BES
- BIH
- BWA
- BVT
- BRA
- IOT
- VGB
- BRN
- BGR
- BFA
- BDI
- CPV
- KHM
- CMR
- CAN
- CYM
- CAF
- TCD
- CHL
- CHN
- CXR
- CCK
- COL
- COM
- COG
- COD
- COK
- CRI
- CIV
- HRV
- CUB
- CUW
- CYP
- CZE
- DNK
- DJI
- DMA
- DOM
- ECU
- EGY
- SLV
- GNQ
- ERI
- EST
- SWZ
- ETH
- FLK
- FRO
- FJI
- FIN
- FRA
- GUF
- PYF
- ATF
- GAB
- GMB
- GEO
- DEU
- GHA
- GIB
- GRC
- GRL
- GRD
- GLP
- GUM
- GTM
- GGY
- GIN
- GNB
- GUY
- HTI
- HMD
- HND
- HKG
- HUN
- ISL
- IND
- IDN
- IRN
- IRQ
- IRL
- IMN
- ISR
- ITA
- JAM
- JPN
- JEY
- JOR
- KAZ
- KEN
- KIR
- KWT
- KGZ
- LAO
- LVA
- LBN
- LSO
- LBR
- LBY
- LIE
- LTU
- LUX
- MAC
- MDG
- MWI
- MYS
- MDV
- MLI
- MLT
- MHL
- MTQ
- MRT
- MUS
- MYT
- MEX
- FSM
- MDA
- MCO
- MNG
- MNE
- MSR
- MAR
- MOZ
- MMR
- NAM
- NRU
- NPL
- NLD
- NCL
- NZL
- NIC
- NER
- NGA
- NIU
- NFK
- PRK
- MKD
- MNP
- NOR
- OMN
- PAK
- PLW
- PSE
- PAN
- PNG
- PRY
- PER
- PHL
- PCN
- POL
- PRT
- PRI
- QAT
- REU
- ROU
- RUS
- RWA
- BLM
- SHN
- KNA
- LCA
- MAF
- SPM
- VCT
- WSM
- SMR
- STP
- SAU
- SEN
- SRB
- SYC
- SLE
- SGP
- SXM
- SVK
- SVN
- SLB
- SOM
- ZAF
- SGS
- KOR
- SSD
- ESP
- LKA
- SDN
- SUR
- SJM
- SWE
- CHE
- SYR
- TWN
- TJK
- TZA
- THA
- TLS
- TGO
- TKL
- TON
- TTO
- TUN
- TUR
- TKM
- TCA
- TUV
- UGA
- UKR
- ARE
- GBR
- USA
- UMI
- URY
- UZB
- VUT
- VAT
- VEN
- VNM
- VIR
- WLF
- ESH
- YEM
- ZMB
- ZWE
example: USA
state:
allOf:
- description: 'The learner''s state of employment. Two letter state code.
Validation rules:
- Required when country is "USA"
- Must be null or omitted for all other countries
- Empty strings ("") are not allowed
Examples:
- "USA" + "NY" ✅
- "USA" + null ❌
- "CAN" + null ✅
- "CAN" + "ON" ❌ (Canadian provinces not supported)'
type: string
minLength: 2
maxLength: 2
enum:
- AL
- AK
- AZ
- AR
- CA
- CO
- CT
- DE
- FL
- GA
- HI
- ID
- IL
- IN
- IA
- KS
- KY
- LA
- ME
- MD
- MA
- MI
- MN
- MS
- MO
- MT
- NE
- NV
- NH
- NJ
- NM
- NY
- NC
- ND
- OH
- OK
- OR
- PA
- RI
- SC
- SD
- TN
- TX
- UT
- VT
- VA
- WA
- WV
- WI
- WY
- AS
- DC
- FM
- GU
- MH
- MP
- PW
- PR
- VI
example: NY
isManager:
allOf:
- description: Whether the learner is a manager.
type: boolean
example: true
managerLearnerId:
allOf:
- description: The unique identifier of the learner's manager.
allOf:
- description: The unique identifier of a learner.
type: string
pattern: ^[a-zA-Z0-9]+$
example: abc123def4
example: xyz123abc4
department:
allOf:
- description: The department the learner belongs to.
type: string
maxLength: 255
example: Engineering
workerType:
allOf:
- description: The learner's worker type.
type: string
maxLength: 255
example: Full Time
customCategory:
allOf:
- description: The learner's custom category. Can be populated with any value. For example, the office or city of a learner.
type: string
maxLength: 255
example: Brooklyn
language:
allOf:
- description: "The learner's language. Represented as any Unicode CLDR language documented here: https://cldr.unicode.org/\n\n⚠️ Important: Use language codes (e.g., \"en\"), not language names (e.g., \"English\").\n\n✅ Common valid examples:\n - \"en\": English\n - \"es\": Spanish \n - \"es-419\": Spanish (Latin America)\n - \"es-MX\": Spanish (Mexico)\n - \"zh\": Chinese\n - \"zh-TW\": Chinese (Taiwan)\n - \"zh-Hant-HK\": Chinese (traditional, Hong Kong)\n - \"fr\": French\n - \"de\": German\n \n❌ Common invalid examples, which will cause validation errors:\n - \"English\" (use \"en\" instead)\n - \"Spanish\" (use \"es\" instead) \n - \"Chinese\" (use \"zh\" instead)"
type: string
minLength: 2
maxLength: 32
example: en
trainingUrl:
allOf:
- description: 'The learner-specific link to their Ethena training dashboard.
For SSO companies, the URL includes the SSO connection parameter.
For non-SSO companies, the URL includes the learning center login key.'
type: string
format: uri
example: https://{ethena-domain}/learning?key={uuid}
'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:
- title
properties:
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:
- title
properties:
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.
post:
tags:
- Learners
summary: Create a new learner
description: Create a new learner.
operationId: createLearner
security:
- basic_auth: []
requestBody:
description: Learner to be created.
required: true
content:
application/json:
schema:
type: object
required:
- name
- email
- country
- isManager
- language
properties:
name:
allOf:
- description: The learner's full name.
type: string
minLength: 2
maxLength: 100
example: First Last
email:
allOf:
- description: The learner's unique email address.
type: string
format: email
maxLength: 255
example: first.last@{your-domain}.com
country:
allOf:
- description: The learner's country of employment. Three letter country code.
type: string
minLength: 3
maxLength: 3
enum:
- AFG
- ALA
- ALB
- DZA
- ASM
- AND
- AGO
- AIA
- ATA
- ATG
- ARG
- ARM
- ABW
- AUS
- AUT
- AZE
- BHS
- BHR
- BGD
- BRB
- BLR
- BEL
- BLZ
- BEN
- BMU
- BTN
- BOL
- BES
- BIH
- BWA
- BVT
- BRA
- IOT
- VGB
- BRN
- BGR
- BFA
- BDI
- CPV
- KHM
- CMR
- CAN
- CYM
- CAF
- TCD
- CHL
- CHN
- CXR
- CCK
- COL
- COM
- COG
- COD
- COK
- CRI
- CIV
- HRV
- CUB
- CUW
- CYP
- CZE
- DNK
- DJI
- DMA
- DOM
- ECU
- EGY
- SLV
- GNQ
- ERI
- EST
- SWZ
- ETH
- FLK
- FRO
- FJI
- FIN
- FRA
- GUF
- PYF
- ATF
- GAB
- GMB
- GEO
- DEU
- GHA
- GIB
- GRC
- GRL
- GRD
- GLP
- GUM
- GTM
- GGY
- GIN
- GNB
- GUY
- HTI
- HMD
- HND
- HKG
- HUN
- ISL
- IND
- IDN
- IRN
- IRQ
- IRL
- IMN
- ISR
- ITA
- JAM
- JPN
- JEY
- JOR
- KAZ
- KEN
- KIR
- KWT
- KGZ
- LAO
- LVA
- LBN
- LSO
- LBR
- LBY
- LIE
- LTU
- LUX
- MAC
- MDG
- MWI
- MYS
- MDV
- MLI
- MLT
- MHL
- MTQ
- MRT
- MUS
- MYT
- MEX
- FSM
- MDA
- MCO
- MNG
- MNE
- MSR
- MAR
- MOZ
- MMR
- NAM
- NRU
- NPL
- NLD
- NCL
- NZL
- NIC
- NER
- NGA
- NIU
- NFK
- PRK
- MKD
- MNP
- NOR
- OMN
- PAK
- PLW
- PSE
- PAN
- PNG
- PRY
- PER
- PHL
- PCN
- POL
- PRT
- PRI
- QAT
- REU
- ROU
- RUS
- RWA
- BLM
- SHN
- KNA
- LCA
- MAF
- SPM
- VCT
- WSM
- SMR
- STP
- SAU
- SEN
- SRB
- SYC
- SLE
- SGP
- SXM
- SVK
- SVN
- SLB
- SOM
- ZAF
- SGS
- KOR
- SSD
- ESP
- LKA
- SDN
- SUR
- SJM
- SWE
- CHE
- SYR
- TWN
- TJK
- TZA
- THA
- TLS
- TGO
- TKL
- TON
- TTO
- TUN
- TUR
- TKM
- TCA
- TUV
- UGA
- UKR
- ARE
- GBR
- USA
- UMI
- URY
- UZB
- VUT
- VAT
- VEN
- VNM
- VIR
- WLF
- ESH
- YEM
- ZMB
- ZWE
example: USA
state:
# --- truncated at 32 KB (80 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/goethena/refs/heads/main/openapi/goethena-learners-api-openapi.yml