{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"5e9ae6ea-8ca8-41ea-9a31-56ccc57fbd1a","name":"Learning Experience APIs","description":"## Overview\n\nThis document provides an overview of the **Learning Experience APIs (v6)** and their functionality.\n\n### API Gateway URL\n\nThe API Gateway URL (**BASE-ORG-URL**) varies depending on whether the customer enabled LXP APIs before or after the November 2025 release.\n\n##### Before November 2025 release:\n\nCustomers continue using the regional API gateway URLs (US or Europe) to access API services.\n\n- EU: [https://edconnect.edcastapi.eu](https://edconnect.edcastapi.eu)\n    \n- US: [https://edconnect.edcastapi.com](https://edconnect.edcastapi.com)\n    \n- EU (Stage/Preview): [https://edconnect.edcastapi.eu](https://edconnect.edcastapi.eu)\n    \n- US (Stage/Preview): [https://edconnect.edcastapi.com](https://edconnect.edcastapi.com)\n    \n- QA (Internal only): [https://edconnect-qa-api.edcastapi.eu](https://edconnect-qa-api.edcastapi.eu)\n    \n\nAPI requests are automatically routed to the corresponding customer portal based on the associated consumer key and secret pair.\n\n##### After November 2025 release:\n\nThe new API gateway will be the default for new customers. Each customer will have a unique, customer-specific API Gateway URL for accessing LXP APIs.\n\n- [https://customername.edcast.com](https://customername.edcast.com)\n    \n- [https://customername.edcast.eu](https://customername.edcast.eu)\n    \n\n##### Identify your Gateway Url:\n\nLXP administrators can easily view each customer’s Gateway URL directly on the LXP-API configuration page. If you're still unsure which API gatway URL applies to you, please contact the Global Customer Support team for guidance.\n\n### API Throttling\n\nThe throttling limits for Learning Experience APIs v6 are designed to grow with your business, offering scalability, flexibility, and support for future expansion. LXP APIs v6 are available in multiple tiers (Connectors), each offering different limits to accommodate diverse use cases and better align with customer requirements:\n\n- **Plus**: 25 requests per minute\n    \n- **Universe**: 50 requests per minute\n    \n- **Custom**: Contact Sales or your Account Manager for tailored options\n    \n\nThrottling is enforced using a sliding window mechanism, which continuously evaluates API usage over the past 60 seconds to determine if the request limit has been exceeded. Exceeding these limits may result in increased latency or application errors.\n\n_Recommendation_: If you're unsure which tier to begin with, we recommend starting with the Plus connector (25 req/min) and monitoring traffic or running user acceptance tests. If any limits are encountered, consider upgrading to the Universe tier or explore a Custom connector that aligns with your specific requirements.\n\n### Permission\n\nAll Public APIs adhere to the platform's Role-Based Access Control (RBAC) system. This ensures that access to each feature is properly managed and restricted based on Application Owner's roles.\n\n### Pagination\n\nThe Pagination is designed to facilitate the retrieval of large datasets in a paginated manner.\n\n1. **Standard:** It utilizes the `limit` and `offset` parameters to control the number of records returned per request and the starting point of the result set.\n    \n    - **Limit:** Specifies the number of records to return in a single request. Default - 10. Unless explicitly supported and documented at the API level, the maximum limit is 100.\n        \n    - **Offset:** Specifies the starting point from which to retrieve records. Default - 0\n        \n2. **Deep Pagination:** For Few APIs, we offer support for Deep Pagination, leveraging a combination of `deep_pagination`, `limit`, `search_after`, `sort` and `order` parameters. This enables efficient navigation through extensive result sets, ensuring optimal performance and retrieval of specific data slices.\n    \n    - **deep_pagination:** Specifies if API will return data in deep pagination. Default - false\n        \n    - **limit:** Specifies the number of records to return in a single page\n        \n    - **search_after:** This is used in conjunction with the sort parameter to define the order in which documents are retrieved. It represents a point in the sorted list from which the search should continue. It will be null for the first page.\n        \n3. **Implementing Deep Pagination:**\n    \n    1. Initial Page:  \n        On the first request, fetch the initial page using `limit`, `sort` and `deep_pagination` as `true`\n        \n    2. Subsequent Pages:  \n        For each subsequent request, use the \"search_after\" cursor from the previous page response to fetch the next set of results along with `limit`, `sort` and `deep_pagination`_._\n        \n\n### Error Handling\n\n1. **HTTP Status Codes**_**:**_ The API returns appropriate HTTP status codes to indicate the success or failure of a request. Common codes include:\n    \n    1. `200 OK` for successful requests.\n        \n    2. `400 Bad Request` for client errors.\n        \n    3. `401 Unauthorized` for authentication issues.\n        \n    4. `404 Not Found` for resources not found.\n        \n    5. `500 Internal Server Error` for server-side errors.\n        \n2. **Handling Errors in Requests**\n    \n    - Clients should check the HTTP status code and the error response body to identify and handle errors appropriately.\n        \n    - Use the provided error codes and messages to troubleshoot and resolve issues.\n        \n\n### Common identifiers in APIs\n\n1. **user_identifier -** We support Email, External ID, and Edcast internal ID as **Base64** encoded values, following the format `EMAIL-[email]`, `EXT-[external_id]`, `ID-[edcast internal id]`.  \n    Examples: base64.encode(“[EMAIL-test@example.com](https://mailto:EMAIL-test@example.com)”), base64.encode(“EXT-SU300”), base64.encode(“ID-300”)\n    \n2. Along with the above format, we do support the direct value of EdCast `user_id` as **user_identifier**. Example: /devapi/user_management/v6/users/123456\n    \n3. **content_identifier** We offer support for ECL-ID, Edcast internal ID, and **Base64** encoded External-ID with the specified format: `ECL-content'[ecl id]`, encoded `EXT-content'[external id]`.  \n    Examples: base64.encode(EXT-SU300), `ECL-ghy563488`, `1234.`\n    \n4. **Base64Url -** Please note that you need to perform a **URL-safe encoding** (Base64URL format). Example: If the original external Id is `user001234` and it needs to be prefixed with `EXT-user001234`, the equivalent base64 encoded string will look like `RVhULXVzZXIwMDEyMzQ=` and the final URL encoded string that need to be used in the path parameter will look like `RVhULXVzZXIwMDEyMzQ`. In this example, we need to remove the `=` character at the end, so the final Url will look like this: /devapi/user_management/v6/users/RVhULXVzZXIwMDEyMzQ\n    \n\n### Authorization\n\nTo use the APIs, the **Application Owner** must have the `DEVELOPER` permission. If not, a forbidden error will occur with the message `Application is not authorized to access EdConnect APIs.`","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"1465156","collectionId":"5e9ae6ea-8ca8-41ea-9a31-56ccc57fbd1a","publishedId":"UVXnHEkK","public":true,"publicUrl":"https://documenter-api.postman.tech/view/1465156/UVXnHEkK","privateUrl":"https://go.postman.co/documentation/1465156-5e9ae6ea-8ca8-41ea-9a31-56ccc57fbd1a","customColor":{"top-bar":"fff","right-sidebar":"FF6900","highlight":"EF5B25"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":""},{"name":"title","value":""}],"appearance":{"default":"light","themes":[{"name":"dark","logo":"https://content.pstmn.io/b4426ff3-2bfb-4ab0-8bec-c52786b88947/Q29ybmVyc3RvbmUtTG9nby1Ib3Jpem9udGFsLnBuZw==","colors":{"top-bar":"fff","right-sidebar":"FF6900","highlight":"FF6C37"}},{"name":"light","logo":"https://content.pstmn.io/443f0021-15b1-4290-aaa0-820c5b2b4edc/Q29ybmVyc3RvbmUtTG9nby1Ib3Jpem9udGFsLnBuZw==","colors":{"top-bar":"fff","right-sidebar":"FF6900","highlight":"EF5B25"}}]}},"version":"8.10.1","publishDate":"2023-05-19T04:06:39.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"","description":""},"logos":{"logoLight":"https://content.pstmn.io/443f0021-15b1-4290-aaa0-820c5b2b4edc/Q29ybmVyc3RvbmUtTG9nby1Ib3Jpem9udGFsLnBuZw==","logoDark":"https://content.pstmn.io/b4426ff3-2bfb-4ab0-8bec-c52786b88947/Q29ybmVyc3RvbmUtTG9nby1Ib3Jpem9udGFsLnBuZw=="}},"statusCode":200},"environments":[],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/768118b36f06c94b0306958b980558e6915839447e859fe16906e29d683976f0","favicon":""},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"}],"canonicalUrl":"https://documenter.gw.postman.com/view/metadata/UVXnHEkK"}