{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"d9bc8f6d-79aa-465f-b1d6-457df4d9fca2","name":"API v1 [Deprecated]","description":"### API v1 is deprecated. We are targeting **mid-2027** for the sunset of this version. Please migrate to the [actively developed API v2](https://360learning.readme.io/docs/introduction) for ongoing support, new features, and major improvements to performance and security.\n\n---\n\nAPI v1 lets you automate several instructions related to users, groups, courses, paths, classrooms, external content and more. By using our set of secured public functions, you can easily create connections between 360Learning and a third-party software or a website.\n\nTo get your credentials and start using the API, please contact your Customer Success Partner (CSP).\n\n# Authentication Methods\n\nTo access the 360Learning API, you must authenticate in one of the following ways with API v1 credentials:\n\n- API key as query parameter\n    \n- API key as header parameter\n    \n- OAuth 2.0 token (Recommended)\n    \n\n**Note:** API v2 credentials are not compatible and cannot be used for this version of the API.\n\n## API key as query parameter\n\nTo authenticate via the API key as a query parameter, include your credentials in each request with the following query parameters:\n\n- `company`: Your company ID\n    \n- `apiKey`: Your API key\n    \n\nThe following is an example of a request authenticating via the API key as a query parameter, where `company_id` and `api_key` are placeholders for values that are specific to you.\n\n``` cURL\ncurl --location --globoff 'https://app.staging.360learning-dev.com/api/v1/courses?company=company_id&apiKey=api_key'\n\n ```\n\n## API key as header parameter\n\nTo authenticate via the API key as a header parameter, include your credentials in each request with the following header parameters:\n\n- `X-company-id`: Your company ID\n    \n- `X-apiKey`: Your API Key\n    \n\nThe following is an example of a request authenticating via the API key as a header parameter, where `company_id` and `api_key` are placeholders for values that are specific to you.\n\n``` cURL\ncurl --location 'https://app.staging.360learning-dev.com/api/v1/courses' \\\n--header 'X-company-id: company_id' \\\n--header 'X-apiKey: api_key'\n\n ```\n\n## OAuth 2.0 token\n\nTo authenticate via OAuth 2.0 token, follow these steps:\n\n1. Generate an OAuth 2.0 token with the endpoint [POST GenerateToken](https://api.360learning.com/#4044fa68-e5ea-4ecd-8510-79e8d43a02f4).\n    \n2. Include the generated OAuth 2.0 token in the `Authorization: Bearer` header of each request.\n    \n\nThe OAuth 2.0 token grants access to all the 360Learning API v1 resources and expires after one hour.\n\nThe following is an example of a request authenticating via the OAuth 2.0 token, where `access_token` is a placeholder for the OAuth 2.0 token generated with the POST `GenerateToken` endpoint.\n\n``` cURL\ncurl --location 'https://app.staging.360learning-dev.com/api/v1/courses' \\\n--header 'Authorization: Bearer access_token'\n\n ```\n\n## Authentication errors\n\nIf authentication credentials are missing or incorrect, the 360Learning API returns an HTTP 401 Unauthorized status code with a JSON error message. Together, they provide actionable information for debugging.\n\nBelow is a list of possible authentication errors and solutions.\n\n| **Error message** | **Description** |\n| --- | --- |\n| `\"error\": \"missing_company_id\"` | The company ID or the access token are missing.  <br>\\- If you are authenticating via API Key, check that the company ID is included either as a query or a header parameter.  <br>\\- If you are authenticating via OAuth 2.0, check that the access token is included in the header. |\n| `\"error\": \"invalid_company_id\"` | The company ID is invalid.  <br>If you are authenticating via API Key, check that the company ID included either as a query or a header parameter is correct. |\n| `\"error\": \"invalid_api_key\"` | The API key is either missing or invalid.  <br>If you are authenticating via API key, check the following:  <br>\\- A valid API key is included either as a query or a header parameter.  <br>\\- The API key has not been revoked. |\n| `\"error\": \"invalid_token\", \"error_description\": \"invalid signature\"` | The access token is invalid.  <br>If you are authenticating via OAuth 2.0, check that the access token is not malformed or invalid. |\n| `\"error\": \"invalid_token\", \"error_description\": \"jwt expired\"` | The access token is expired.  <br>If you are authenticating via OAuth 2.0, generate a new access token and include your new access token in your request header. |\n\n# Rate limits\n\nTo protect the service for all customers and prevent abuse, the 360Learning API is subject to the following rate limits:\n\n- Up to 50 read operations (GET) per second per company ID\n    \n- Up to 10 read operations (GET) per second per IP address\n    \n- Up to 5 write operations (PATCH/POST/PUT/DELETE) per second per company ID\n    \n- Up to 10 write operations (PATCH/POST/PUT/DELETE) per second per IP address\n    \n\nThe following routes have special rate limits:\n\n- The [DELETE deleteGroup](https://api.360learning.com/#10b7357d-85f6-4e46-ba95-3a1fdd9edbf0) and [POST importExternalCoursesStats](https://api.360learning.com/#e34df354-e8d8-4441-bb2a-c84dca3ced63) routes have a limit of 1 request per second per company ID.\n    \n- The [POST createOrInviteUser](https://api.360learning.com/#607aca28-31ed-4eef-b4b9-0238ed0b184c) and [DELETE deleteUser](https://api.360learning.com/#c6c4b588-b245-4df0-8832-aab60eb745a6) routes have a limit of 2 requests per second per company ID.\n    \n- The [PATCH updatePathSession](https://api.360learning.com/#25611d03-a784-4ec8-ad11-1ddfc48a8771) route has a limit of 1 request per second per company ID.\n    \n\nOnce you exceed the limit, API calls return a response with an [HTTP status 429](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429) code.\n\nIf you need to run a higher number of requests, we suggest you pace the calls by batch or by setting a timer on the scripts.\n\n**Other limits**\n\n• The [POST createGroup](https://api.360learning.com/#0fff2e8c-2c85-478c-a288-048d60a0f887) route has a limit of 30,000 groups.","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"1142408","team":40235,"collectionId":"d9bc8f6d-79aa-465f-b1d6-457df4d9fca2","publishedId":"S11PqGSC","public":true,"publicUrl":"https://api.360learning.com","privateUrl":"https://go.postman.co/documentation/1142408-d9bc8f6d-79aa-465f-b1d6-457df4d9fca2","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":""},{"name":"title","value":""}],"appearance":{"default":"light","themes":[{"name":"dark","logo":null,"colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"FF6C37"}},{"name":"light","logo":null,"colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"}}]}},"version":"8.10.1","publishDate":"2025-05-14T10:33:36.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"","description":""},"logos":{"logoLight":null,"logoDark":null}},"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/36256114865457dd6c27d23059c51b325bc2ca5ecc327ec3712ef2726d32a117","favicon":"https://360learning.com/favicon.ico"},"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://api.360learning.com/view/metadata/S11PqGSC"}