{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"45653cc8-a969-4863-baa9-2dcde2e58dd1","name":"Azure DevOps API Documentation","description":"# 🌐 Overview\n\nThis API provided by Microsoft provides a reliable and well documented solution to automating Azure DevOps (ADO) functionality. In our case it is most useful for pipelines that run on continuous integration (CI) events, such as a commit or pull request. Or, in gaining insight into the state of a team in an ADO organisation.\n\nThis guide is for someone without much experience using APIs like myself when I started here. The sections are based on a certain piece of functionality, not a section of the API.\n\nHopefully you will enjoy using the API it as much as I did 😎\n\n---\n\n# ⚙️ Setup\n\n**Language**\n\nIt is reccomended that you use Powershell or BASH for performing API requests as they are the two scripting languages that are default on Windows and Linux runners respectively. Also, they are easy to test on your local machine when diagnosing your own probelms or those of other team members. The other option that comes pre-installed on Github's runners is Python. This is just as good for sending requests, however you may prefer to develop pipelines in one language instead of swapping for scripts and skeleton code in YAML configurations.\n\n[Beginner Powershell REST API](https://www.itprotoday.com/powershell/getting-started-with-rest-apis-in-powershell)\n\n[Beginner CURL REST API (BASH)](https://www.freecodecamp.org/news/how-to-start-using-curl-and-why-a-hands-on-introduction-ea1c913caaaa/)\n\n[Beginner Python REST API](https://www.dataquest.io/blog/api-in-python/)\n\n---\n\n# 🔐 Authentication\n\nThe ADO API uses OAuth 2.0 bearer tokens for authenticating requests. Tokens should not be confused with keys/certificates which are verified with cryptographic methods. Tokens are like passwords except that they are regularly changed and passed to different bearers. ADO refers to these tokens as Personal Access Tokens (PAT) and you can create them through the web interface as shown below:\n\n1\\. Find the _User settings_ icon at the top right of the page.\n\n<img src=\"https://content.pstmn.io/e239ffe3-3c4d-417e-9e95-f5a3e20e6258/U2NyZWVuc2hvdCAyMDI0LTEyLTE4IGF0IDcuNDIuMjDigK9QTS5wbmc=\" width=\"372\" height=\"45\">\n\n2\\. From the drop down, select _Personal access tokens._\n\n<img src=\"https://content.pstmn.io/df3a8b92-f28b-4b5b-8717-9aeed69e99c7/U2NyZWVuc2hvdCAyMDI0LTEyLTE4IGF0IDcuNTQuNDjigK9QTS5wbmc=\" width=\"194\" height=\"300\">\n\n3\\. On the next page, select _New token_.\n\n<img src=\"https://content.pstmn.io/efd0ec5f-3559-438b-bdec-94b113f83d91/U2NyZWVuc2hvdCAyMDI0LTEyLTE4IGF0IDcuNTcuMTXigK9QTS5wbmc=\" width=\"661\" height=\"243\">\n\n4\\. You should set the token to expire at the end of the current semester (90 days works well for this).\n\n<img src=\"https://content.pstmn.io/9ff5318b-2d7c-4c00-b7cf-13c089fbcc50/U2NyZWVuc2hvdCAyMDI1LTAxLTAzIGF0IDExLjMwLjU34oCvQU0ucG5n\">\n\n5\\. For good security the token should have as little privileges as possible. Below is the selection used for the pull request automation pipeline. It only needs to create work items.\n\n<img src=\"https://content.pstmn.io/bd995dcb-f611-4e51-8af9-5e7f3c9c7b99/U2NyZWVuc2hvdCAyMDI1LTAxLTAzIGF0IDExLjMxLjQ54oCvQU0ucG5n\" width=\"326\" height=\"95\">","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"40407894","collectionId":"45653cc8-a969-4863-baa9-2dcde2e58dd1","publishedId":"2sAYJ7hzSB","public":true,"publicUrl":"https://documenter-api.postman.tech/view/40407894/2sAYJ7hzSB","privateUrl":"https://go.postman.co/documentation/40407894-45653cc8-a969-4863-baa9-2dcde2e58dd1","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"EB7463"},"documentationLayout":"classic-single-column","customisation":{"metaTags":[{"name":"description","value":""},{"name":"title","value":""}],"appearance":{"default":"light","themes":[{"name":"dark","logo":"https://content.pstmn.io/f6b99205-859f-4662-9654-9f98c63eb8fb/U2NyZWVuc2hvdCAyMDI1LTAxLTAzIGF0IDEyLjE2LjQz4oCvUE0ucG5n","colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"FF6C37"}},{"name":"light","logo":"https://content.pstmn.io/f6b99205-859f-4662-9654-9f98c63eb8fb/U2NyZWVuc2hvdCAyMDI1LTAxLTAzIGF0IDEyLjE2LjQz4oCvUE0ucG5n","colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"EB7463"}}]}},"version":"8.11.4","publishDate":"2025-01-03T01:18:55.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"","description":""},"logos":{"logoLight":"https://content.pstmn.io/f6b99205-859f-4662-9654-9f98c63eb8fb/U2NyZWVuc2hvdCAyMDI1LTAxLTAzIGF0IDEyLjE2LjQz4oCvUE0ucG5n","logoDark":"https://content.pstmn.io/f6b99205-859f-4662-9654-9f98c63eb8fb/U2NyZWVuc2hvdCAyMDI1LTAxLTAzIGF0IDEyLjE2LjQz4oCvUE0ucG5n"}},"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/2sAYJ7hzSB"}