[{"data":1,"prerenderedAt":2005},["ShallowReactive",2],{"doc-\u002Fhow-to\u002Fhow-to-handle-api-responses-in-python":3},{"id":4,"title":5,"body":6,"description":1998,"extension":1999,"meta":2000,"navigation":72,"path":2001,"seo":2002,"stem":2003,"__hash__":2004},"content\u002Fhow-to\u002Fhow-to-handle-api-responses-in-python.md","How to Handle API Responses in Python",{"type":7,"value":8,"toc":1978},"minimark",[9,13,17,20,36,39,44,247,250,254,268,272,275,278,298,301,304,433,441,445,448,455,466,468,575,578,633,639,678,681,780,791,803,807,810,813,827,833,840,903,910,986,989,1005,1008,1022,1028,1032,1035,1037,1300,1303,1333,1339,1346,1350,1353,1383,1385,1525,1530,1534,1537,1555,1557,1757,1767,1778,1782,1785,1805,1808,1884,1891,1894,1898,1903,1906,1910,1919,1926,1929,1938,1946,1950,1974],[10,11,5],"h1",{"id":12},"how-to-handle-api-responses-in-python",[14,15,16],"p",{},"After you make a request to an API, the next step is handling the response safely.",[14,18,19],{},"This means:",[21,22,23,27,30,33],"ul",{},[24,25,26],"li",{},"checking whether the request succeeded",[24,28,29],{},"reading the returned data",[24,31,32],{},"handling JSON correctly",[24,34,35],{},"dealing with errors like bad status codes or invalid response content",[14,37,38],{},"This page shows a simple beginner-friendly pattern for working with API responses in Python.",[40,41,43],"h2",{"id":42},"quick-example","Quick example",[45,46,51],"pre",{"className":47,"code":48,"language":49,"meta":50,"style":50},"language-python shiki shiki-themes material-theme-lighter github-light github-dark","import requests\n\nurl = \"https:\u002F\u002Fapi.example.com\u002Fdata\"\nresponse = requests.get(url, timeout=10)\n\nif response.status_code == 200:\n    data = response.json()\n    print(data)\nelse:\n    print(\"Request failed:\", response.status_code)\n    print(response.text)\n","python","",[52,53,54,67,74,95,136,141,165,183,197,205,230],"code",{"__ignoreMap":50},[55,56,59,63],"span",{"class":57,"line":58},"line",1,[55,60,62],{"class":61},"sVHd0","import",[55,64,66],{"class":65},"su5hD"," requests\n",[55,68,70],{"class":57,"line":69},2,[55,71,73],{"emptyLinePlaceholder":72},true,"\n",[55,75,77,80,84,88,92],{"class":57,"line":76},3,[55,78,79],{"class":65},"url ",[55,81,83],{"class":82},"smGrS","=",[55,85,87],{"class":86},"sjJ54"," \"",[55,89,91],{"class":90},"s_sjI","https:\u002F\u002Fapi.example.com\u002Fdata",[55,93,94],{"class":86},"\"\n",[55,96,98,101,103,106,110,114,117,120,123,127,129,133],{"class":57,"line":97},4,[55,99,100],{"class":65},"response ",[55,102,83],{"class":82},[55,104,105],{"class":65}," requests",[55,107,109],{"class":108},"sP7_E",".",[55,111,113],{"class":112},"slqww","get",[55,115,116],{"class":108},"(",[55,118,119],{"class":112},"url",[55,121,122],{"class":108},",",[55,124,126],{"class":125},"s99_P"," timeout",[55,128,83],{"class":82},[55,130,132],{"class":131},"srdBf","10",[55,134,135],{"class":108},")\n",[55,137,139],{"class":57,"line":138},5,[55,140,73],{"emptyLinePlaceholder":72},[55,142,144,147,150,152,156,159,162],{"class":57,"line":143},6,[55,145,146],{"class":61},"if",[55,148,149],{"class":65}," response",[55,151,109],{"class":108},[55,153,155],{"class":154},"skxfh","status_code",[55,157,158],{"class":82}," ==",[55,160,161],{"class":131}," 200",[55,163,164],{"class":108},":\n",[55,166,168,171,173,175,177,180],{"class":57,"line":167},7,[55,169,170],{"class":65},"    data ",[55,172,83],{"class":82},[55,174,149],{"class":65},[55,176,109],{"class":108},[55,178,179],{"class":112},"json",[55,181,182],{"class":108},"()\n",[55,184,186,190,192,195],{"class":57,"line":185},8,[55,187,189],{"class":188},"sptTA","    print",[55,191,116],{"class":108},[55,193,194],{"class":112},"data",[55,196,135],{"class":108},[55,198,200,203],{"class":57,"line":199},9,[55,201,202],{"class":61},"else",[55,204,164],{"class":108},[55,206,208,210,212,215,218,220,222,224,226,228],{"class":57,"line":207},10,[55,209,189],{"class":188},[55,211,116],{"class":108},[55,213,214],{"class":86},"\"",[55,216,217],{"class":90},"Request failed:",[55,219,214],{"class":86},[55,221,122],{"class":108},[55,223,149],{"class":112},[55,225,109],{"class":108},[55,227,155],{"class":154},[55,229,135],{"class":108},[55,231,233,235,237,240,242,245],{"class":57,"line":232},11,[55,234,189],{"class":188},[55,236,116],{"class":108},[55,238,239],{"class":112},"response",[55,241,109],{"class":108},[55,243,244],{"class":154},"text",[55,246,135],{"class":108},[14,248,249],{},"Use this pattern to check whether the request worked before reading the response data.",[40,251,253],{"id":252},"what-this-page-covers","What this page covers",[21,255,256,259,262,265],{},[24,257,258],{},"Handle the data returned by an API request",[24,260,261],{},"Check whether the request succeeded",[24,263,264],{},"Read JSON responses safely",[24,266,267],{},"Deal with common problems like bad status codes or invalid JSON",[40,269,271],{"id":270},"check-the-http-status-code-first","Check the HTTP status code first",[14,273,274],{},"The status code tells you what happened when the server handled your request.",[14,276,277],{},"Common examples:",[21,279,280,286,292],{},[24,281,282,285],{},[52,283,284],{},"200"," usually means success",[24,287,288,291],{},[52,289,290],{},"400"," range usually means something was wrong with the request",[24,293,294,297],{},[52,295,296],{},"500"," range usually means the server had a problem",[14,299,300],{},"Do not assume every response contains usable data. A request can return a response object even when the request failed.",[14,302,303],{},"Example:",[45,305,307],{"className":47,"code":306,"language":49,"meta":50,"style":50},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fapi.example.com\u002Fdata\", timeout=10)\n\nprint(\"Status code:\", response.status_code)\n\nif response.status_code == 200:\n    print(\"The request worked.\")\nelse:\n    print(\"The request failed.\")\n",[52,308,309,315,319,349,353,377,381,397,412,418],{"__ignoreMap":50},[55,310,311,313],{"class":57,"line":58},[55,312,62],{"class":61},[55,314,66],{"class":65},[55,316,317],{"class":57,"line":69},[55,318,73],{"emptyLinePlaceholder":72},[55,320,321,323,325,327,329,331,333,335,337,339,341,343,345,347],{"class":57,"line":76},[55,322,100],{"class":65},[55,324,83],{"class":82},[55,326,105],{"class":65},[55,328,109],{"class":108},[55,330,113],{"class":112},[55,332,116],{"class":108},[55,334,214],{"class":86},[55,336,91],{"class":90},[55,338,214],{"class":86},[55,340,122],{"class":108},[55,342,126],{"class":125},[55,344,83],{"class":82},[55,346,132],{"class":131},[55,348,135],{"class":108},[55,350,351],{"class":57,"line":97},[55,352,73],{"emptyLinePlaceholder":72},[55,354,355,358,360,362,365,367,369,371,373,375],{"class":57,"line":138},[55,356,357],{"class":188},"print",[55,359,116],{"class":108},[55,361,214],{"class":86},[55,363,364],{"class":90},"Status code:",[55,366,214],{"class":86},[55,368,122],{"class":108},[55,370,149],{"class":112},[55,372,109],{"class":108},[55,374,155],{"class":154},[55,376,135],{"class":108},[55,378,379],{"class":57,"line":143},[55,380,73],{"emptyLinePlaceholder":72},[55,382,383,385,387,389,391,393,395],{"class":57,"line":167},[55,384,146],{"class":61},[55,386,149],{"class":65},[55,388,109],{"class":108},[55,390,155],{"class":154},[55,392,158],{"class":82},[55,394,161],{"class":131},[55,396,164],{"class":108},[55,398,399,401,403,405,408,410],{"class":57,"line":185},[55,400,189],{"class":188},[55,402,116],{"class":108},[55,404,214],{"class":86},[55,406,407],{"class":90},"The request worked.",[55,409,214],{"class":86},[55,411,135],{"class":108},[55,413,414,416],{"class":57,"line":199},[55,415,202],{"class":61},[55,417,164],{"class":108},[55,419,420,422,424,426,429,431],{"class":57,"line":207},[55,421,189],{"class":188},[55,423,116],{"class":108},[55,425,214],{"class":86},[55,427,428],{"class":90},"The request failed.",[55,430,214],{"class":86},[55,432,135],{"class":108},[14,434,435,436,109],{},"If you are new to requests, see ",[437,438,440],"a",{"href":439},"\u002Fhow-to\u002Fhow-to-make-an-api-request-in-python","how to make an API request in Python",[40,442,444],{"id":443},"read-json-data-from-the-response","Read JSON data from the response",[14,446,447],{},"Many APIs return data in JSON format.",[14,449,450,451,454],{},"In Python, you can use ",[52,452,453],{},"response.json()"," to convert that JSON into normal Python data:",[21,456,457,460,463],{},[24,458,459],{},"a dictionary",[24,461,462],{},"a list",[24,464,465],{},"sometimes nested dictionaries and lists",[14,467,303],{},[45,469,471],{"className":47,"code":470,"language":49,"meta":50,"style":50},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fapi.example.com\u002Fuser\", timeout=10)\n\nif response.status_code == 200:\n    data = response.json()\n    print(data)\n    print(type(data))\n",[52,472,473,479,483,514,518,534,548,558],{"__ignoreMap":50},[55,474,475,477],{"class":57,"line":58},[55,476,62],{"class":61},[55,478,66],{"class":65},[55,480,481],{"class":57,"line":69},[55,482,73],{"emptyLinePlaceholder":72},[55,484,485,487,489,491,493,495,497,499,502,504,506,508,510,512],{"class":57,"line":76},[55,486,100],{"class":65},[55,488,83],{"class":82},[55,490,105],{"class":65},[55,492,109],{"class":108},[55,494,113],{"class":112},[55,496,116],{"class":108},[55,498,214],{"class":86},[55,500,501],{"class":90},"https:\u002F\u002Fapi.example.com\u002Fuser",[55,503,214],{"class":86},[55,505,122],{"class":108},[55,507,126],{"class":125},[55,509,83],{"class":82},[55,511,132],{"class":131},[55,513,135],{"class":108},[55,515,516],{"class":57,"line":97},[55,517,73],{"emptyLinePlaceholder":72},[55,519,520,522,524,526,528,530,532],{"class":57,"line":138},[55,521,146],{"class":61},[55,523,149],{"class":65},[55,525,109],{"class":108},[55,527,155],{"class":154},[55,529,158],{"class":82},[55,531,161],{"class":131},[55,533,164],{"class":108},[55,535,536,538,540,542,544,546],{"class":57,"line":143},[55,537,170],{"class":65},[55,539,83],{"class":82},[55,541,149],{"class":65},[55,543,109],{"class":108},[55,545,179],{"class":112},[55,547,182],{"class":108},[55,549,550,552,554,556],{"class":57,"line":167},[55,551,189],{"class":188},[55,553,116],{"class":108},[55,555,194],{"class":112},[55,557,135],{"class":108},[55,559,560,562,564,568,570,572],{"class":57,"line":185},[55,561,189],{"class":188},[55,563,116],{"class":108},[55,565,567],{"class":566},"sZMiF","type",[55,569,116],{"class":108},[55,571,194],{"class":112},[55,573,574],{"class":108},"))\n",[14,576,577],{},"If the API returns JSON like this:",[45,579,582],{"className":580,"code":581,"language":179,"meta":50,"style":50},"language-json shiki shiki-themes material-theme-lighter github-light github-dark","{\n  \"name\": \"Sam\",\n  \"age\": 30\n}\n",[52,583,584,589,614,628],{"__ignoreMap":50},[55,585,586],{"class":57,"line":58},[55,587,588],{"class":108},"{\n",[55,590,591,595,599,601,604,606,609,611],{"class":57,"line":69},[55,592,594],{"class":593},"s39Yj","  \"",[55,596,598],{"class":597},"sseR_","name",[55,600,214],{"class":593},[55,602,603],{"class":108},":",[55,605,87],{"class":86},[55,607,608],{"class":90},"Sam",[55,610,214],{"class":86},[55,612,613],{"class":108},",\n",[55,615,616,618,621,623,625],{"class":57,"line":76},[55,617,594],{"class":593},[55,619,620],{"class":597},"age",[55,622,214],{"class":593},[55,624,603],{"class":108},[55,626,627],{"class":131}," 30\n",[55,629,630],{"class":57,"line":97},[55,631,632],{"class":108},"}\n",[14,634,635,636,638],{},"Then ",[52,637,453],{}," will usually give you a Python dictionary:",[45,640,642],{"className":47,"code":641,"language":49,"meta":50,"style":50},"{\"name\": \"Sam\", \"age\": 30}\n",[52,643,644],{"__ignoreMap":50},[55,645,646,649,651,653,655,657,659,661,663,665,667,669,671,673,676],{"class":57,"line":58},[55,647,648],{"class":108},"{",[55,650,214],{"class":86},[55,652,598],{"class":90},[55,654,214],{"class":86},[55,656,603],{"class":108},[55,658,87],{"class":86},[55,660,608],{"class":90},[55,662,214],{"class":86},[55,664,122],{"class":108},[55,666,87],{"class":86},[55,668,620],{"class":90},[55,670,214],{"class":86},[55,672,603],{"class":108},[55,674,675],{"class":131}," 30",[55,677,632],{"class":108},[14,679,680],{},"You can then access values by key:",[45,682,684],{"className":47,"code":683,"language":49,"meta":50,"style":50},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fapi.example.com\u002Fuser\", timeout=10)\n\nif response.status_code == 200:\n    data = response.json()\n    print(data[\"name\"])\n",[52,685,686,692,696,726,730,746,760],{"__ignoreMap":50},[55,687,688,690],{"class":57,"line":58},[55,689,62],{"class":61},[55,691,66],{"class":65},[55,693,694],{"class":57,"line":69},[55,695,73],{"emptyLinePlaceholder":72},[55,697,698,700,702,704,706,708,710,712,714,716,718,720,722,724],{"class":57,"line":76},[55,699,100],{"class":65},[55,701,83],{"class":82},[55,703,105],{"class":65},[55,705,109],{"class":108},[55,707,113],{"class":112},[55,709,116],{"class":108},[55,711,214],{"class":86},[55,713,501],{"class":90},[55,715,214],{"class":86},[55,717,122],{"class":108},[55,719,126],{"class":125},[55,721,83],{"class":82},[55,723,132],{"class":131},[55,725,135],{"class":108},[55,727,728],{"class":57,"line":97},[55,729,73],{"emptyLinePlaceholder":72},[55,731,732,734,736,738,740,742,744],{"class":57,"line":138},[55,733,146],{"class":61},[55,735,149],{"class":65},[55,737,109],{"class":108},[55,739,155],{"class":154},[55,741,158],{"class":82},[55,743,161],{"class":131},[55,745,164],{"class":108},[55,747,748,750,752,754,756,758],{"class":57,"line":143},[55,749,170],{"class":65},[55,751,83],{"class":82},[55,753,149],{"class":65},[55,755,109],{"class":108},[55,757,179],{"class":112},[55,759,182],{"class":108},[55,761,762,764,766,768,771,773,775,777],{"class":57,"line":167},[55,763,189],{"class":188},[55,765,116],{"class":108},[55,767,194],{"class":112},[55,769,770],{"class":108},"[",[55,772,214],{"class":86},[55,774,598],{"class":90},[55,776,214],{"class":86},[55,778,779],{"class":108},"])\n",[14,781,782,783,786,787,109],{},"Be careful here. If a key is missing, Python raises a ",[52,784,785],{},"KeyError",". For help with that, see ",[437,788,790],{"href":789},"\u002Ferrors\u002Fkeyerror-in-python-causes-and-fixes","KeyError in Python: causes and fixes",[14,792,793,794,798,799,109],{},"If you want to understand JSON better, see the ",[437,795,797],{"href":796},"\u002Fstandard-library\u002Fpython-json-module-overview","Python JSON module overview"," or ",[437,800,802],{"href":801},"\u002Fstandard-library\u002Fjson.loads-function-explained","json.loads() explained",[40,804,806],{"id":805},"handle-non-json-responses","Handle non-JSON responses",[14,808,809],{},"Not every API response contains JSON.",[14,811,812],{},"Sometimes the server returns:",[21,814,815,818,821,824],{},[24,816,817],{},"plain text",[24,819,820],{},"HTML",[24,822,823],{},"an error page",[24,825,826],{},"an empty response",[14,828,829,830,832],{},"In those cases, ",[52,831,453],{}," may fail.",[14,834,835,836,839],{},"Use ",[52,837,838],{},"response.text"," when you want the raw text content:",[45,841,843],{"className":47,"code":842,"language":49,"meta":50,"style":50},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fapi.example.com\u002Fdata\", timeout=10)\n\nprint(response.text)\n",[52,844,845,851,855,885,889],{"__ignoreMap":50},[55,846,847,849],{"class":57,"line":58},[55,848,62],{"class":61},[55,850,66],{"class":65},[55,852,853],{"class":57,"line":69},[55,854,73],{"emptyLinePlaceholder":72},[55,856,857,859,861,863,865,867,869,871,873,875,877,879,881,883],{"class":57,"line":76},[55,858,100],{"class":65},[55,860,83],{"class":82},[55,862,105],{"class":65},[55,864,109],{"class":108},[55,866,113],{"class":112},[55,868,116],{"class":108},[55,870,214],{"class":86},[55,872,91],{"class":90},[55,874,214],{"class":86},[55,876,122],{"class":108},[55,878,126],{"class":125},[55,880,83],{"class":82},[55,882,132],{"class":131},[55,884,135],{"class":108},[55,886,887],{"class":57,"line":97},[55,888,73],{"emptyLinePlaceholder":72},[55,890,891,893,895,897,899,901],{"class":57,"line":138},[55,892,357],{"class":188},[55,894,116],{"class":108},[55,896,239],{"class":112},[55,898,109],{"class":108},[55,900,244],{"class":154},[55,902,135],{"class":108},[14,904,905,906,909],{},"You can also inspect the ",[52,907,908],{},"Content-Type"," header to see what kind of data the server returned:",[45,911,913],{"className":47,"code":912,"language":49,"meta":50,"style":50},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fapi.example.com\u002Fdata\", timeout=10)\n\nprint(response.headers.get(\"Content-Type\"))\n",[52,914,915,921,925,955,959],{"__ignoreMap":50},[55,916,917,919],{"class":57,"line":58},[55,918,62],{"class":61},[55,920,66],{"class":65},[55,922,923],{"class":57,"line":69},[55,924,73],{"emptyLinePlaceholder":72},[55,926,927,929,931,933,935,937,939,941,943,945,947,949,951,953],{"class":57,"line":76},[55,928,100],{"class":65},[55,930,83],{"class":82},[55,932,105],{"class":65},[55,934,109],{"class":108},[55,936,113],{"class":112},[55,938,116],{"class":108},[55,940,214],{"class":86},[55,942,91],{"class":90},[55,944,214],{"class":86},[55,946,122],{"class":108},[55,948,126],{"class":125},[55,950,83],{"class":82},[55,952,132],{"class":131},[55,954,135],{"class":108},[55,956,957],{"class":57,"line":97},[55,958,73],{"emptyLinePlaceholder":72},[55,960,961,963,965,967,969,972,974,976,978,980,982,984],{"class":57,"line":138},[55,962,357],{"class":188},[55,964,116],{"class":108},[55,966,239],{"class":112},[55,968,109],{"class":108},[55,970,971],{"class":154},"headers",[55,973,109],{"class":108},[55,975,113],{"class":112},[55,977,116],{"class":108},[55,979,214],{"class":86},[55,981,908],{"class":90},[55,983,214],{"class":86},[55,985,574],{"class":108},[14,987,988],{},"A JSON response often has a content type like:",[45,990,992],{"className":47,"code":991,"language":49,"meta":50,"style":50},"application\u002Fjson\n",[52,993,994],{"__ignoreMap":50},[55,995,996,999,1002],{"class":57,"line":58},[55,997,998],{"class":65},"application",[55,1000,1001],{"class":82},"\u002F",[55,1003,1004],{"class":65},"json\n",[14,1006,1007],{},"If the response is HTML, you might see something like:",[45,1009,1011],{"className":47,"code":1010,"language":49,"meta":50,"style":50},"text\u002Fhtml\n",[52,1012,1013],{"__ignoreMap":50},[55,1014,1015,1017,1019],{"class":57,"line":58},[55,1016,244],{"class":65},[55,1018,1001],{"class":82},[55,1020,1021],{"class":65},"html\n",[14,1023,1024,1025,1027],{},"That is a sign that calling ",[52,1026,453],{}," may not be correct.",[40,1029,1031],{"id":1030},"handle-errors-safely","Handle errors safely",[14,1033,1034],{},"A safer pattern is to check the status code and handle JSON parsing carefully.",[14,1036,303],{},[45,1038,1040],{"className":47,"code":1039,"language":49,"meta":50,"style":50},"import requests\n\nurl = \"https:\u002F\u002Fapi.example.com\u002Fdata\"\n\ntry:\n    response = requests.get(url, timeout=10)\n    response.raise_for_status()\n\n    data = response.json()\n    print(\"Received data:\", data)\n\nexcept requests.exceptions.HTTPError:\n    print(\"HTTP error:\", response.status_code)\n    print(response.text)\n\nexcept requests.exceptions.Timeout:\n    print(\"The request took too long.\")\n\nexcept ValueError:\n    print(\"The response was not valid JSON.\")\n    print(response.text)\n",[52,1041,1042,1048,1052,1064,1068,1075,1102,1114,1118,1132,1152,1156,1176,1200,1215,1220,1238,1254,1259,1269,1285],{"__ignoreMap":50},[55,1043,1044,1046],{"class":57,"line":58},[55,1045,62],{"class":61},[55,1047,66],{"class":65},[55,1049,1050],{"class":57,"line":69},[55,1051,73],{"emptyLinePlaceholder":72},[55,1053,1054,1056,1058,1060,1062],{"class":57,"line":76},[55,1055,79],{"class":65},[55,1057,83],{"class":82},[55,1059,87],{"class":86},[55,1061,91],{"class":90},[55,1063,94],{"class":86},[55,1065,1066],{"class":57,"line":97},[55,1067,73],{"emptyLinePlaceholder":72},[55,1069,1070,1073],{"class":57,"line":138},[55,1071,1072],{"class":61},"try",[55,1074,164],{"class":108},[55,1076,1077,1080,1082,1084,1086,1088,1090,1092,1094,1096,1098,1100],{"class":57,"line":143},[55,1078,1079],{"class":65},"    response ",[55,1081,83],{"class":82},[55,1083,105],{"class":65},[55,1085,109],{"class":108},[55,1087,113],{"class":112},[55,1089,116],{"class":108},[55,1091,119],{"class":112},[55,1093,122],{"class":108},[55,1095,126],{"class":125},[55,1097,83],{"class":82},[55,1099,132],{"class":131},[55,1101,135],{"class":108},[55,1103,1104,1107,1109,1112],{"class":57,"line":167},[55,1105,1106],{"class":65},"    response",[55,1108,109],{"class":108},[55,1110,1111],{"class":112},"raise_for_status",[55,1113,182],{"class":108},[55,1115,1116],{"class":57,"line":185},[55,1117,73],{"emptyLinePlaceholder":72},[55,1119,1120,1122,1124,1126,1128,1130],{"class":57,"line":199},[55,1121,170],{"class":65},[55,1123,83],{"class":82},[55,1125,149],{"class":65},[55,1127,109],{"class":108},[55,1129,179],{"class":112},[55,1131,182],{"class":108},[55,1133,1134,1136,1138,1140,1143,1145,1147,1150],{"class":57,"line":207},[55,1135,189],{"class":188},[55,1137,116],{"class":108},[55,1139,214],{"class":86},[55,1141,1142],{"class":90},"Received data:",[55,1144,214],{"class":86},[55,1146,122],{"class":108},[55,1148,1149],{"class":112}," data",[55,1151,135],{"class":108},[55,1153,1154],{"class":57,"line":232},[55,1155,73],{"emptyLinePlaceholder":72},[55,1157,1159,1162,1164,1166,1169,1171,1174],{"class":57,"line":1158},12,[55,1160,1161],{"class":61},"except",[55,1163,105],{"class":65},[55,1165,109],{"class":108},[55,1167,1168],{"class":154},"exceptions",[55,1170,109],{"class":108},[55,1172,1173],{"class":154},"HTTPError",[55,1175,164],{"class":108},[55,1177,1179,1181,1183,1185,1188,1190,1192,1194,1196,1198],{"class":57,"line":1178},13,[55,1180,189],{"class":188},[55,1182,116],{"class":108},[55,1184,214],{"class":86},[55,1186,1187],{"class":90},"HTTP error:",[55,1189,214],{"class":86},[55,1191,122],{"class":108},[55,1193,149],{"class":112},[55,1195,109],{"class":108},[55,1197,155],{"class":154},[55,1199,135],{"class":108},[55,1201,1203,1205,1207,1209,1211,1213],{"class":57,"line":1202},14,[55,1204,189],{"class":188},[55,1206,116],{"class":108},[55,1208,239],{"class":112},[55,1210,109],{"class":108},[55,1212,244],{"class":154},[55,1214,135],{"class":108},[55,1216,1218],{"class":57,"line":1217},15,[55,1219,73],{"emptyLinePlaceholder":72},[55,1221,1223,1225,1227,1229,1231,1233,1236],{"class":57,"line":1222},16,[55,1224,1161],{"class":61},[55,1226,105],{"class":65},[55,1228,109],{"class":108},[55,1230,1168],{"class":154},[55,1232,109],{"class":108},[55,1234,1235],{"class":154},"Timeout",[55,1237,164],{"class":108},[55,1239,1241,1243,1245,1247,1250,1252],{"class":57,"line":1240},17,[55,1242,189],{"class":188},[55,1244,116],{"class":108},[55,1246,214],{"class":86},[55,1248,1249],{"class":90},"The request took too long.",[55,1251,214],{"class":86},[55,1253,135],{"class":108},[55,1255,1257],{"class":57,"line":1256},18,[55,1258,73],{"emptyLinePlaceholder":72},[55,1260,1262,1264,1267],{"class":57,"line":1261},19,[55,1263,1161],{"class":61},[55,1265,1266],{"class":566}," ValueError",[55,1268,164],{"class":108},[55,1270,1272,1274,1276,1278,1281,1283],{"class":57,"line":1271},20,[55,1273,189],{"class":188},[55,1275,116],{"class":108},[55,1277,214],{"class":86},[55,1279,1280],{"class":90},"The response was not valid JSON.",[55,1282,214],{"class":86},[55,1284,135],{"class":108},[55,1286,1288,1290,1292,1294,1296,1298],{"class":57,"line":1287},21,[55,1289,189],{"class":188},[55,1291,116],{"class":108},[55,1293,239],{"class":112},[55,1295,109],{"class":108},[55,1297,244],{"class":154},[55,1299,135],{"class":108},[14,1301,1302],{},"What this code does:",[21,1304,1305,1311,1322,1327],{},[24,1306,1307,1310],{},[52,1308,1309],{},"timeout=10"," stops the program from waiting forever",[24,1312,1313,1316,1317,798,1320],{},[52,1314,1315],{},"raise_for_status()"," raises an error for bad status codes like ",[52,1318,1319],{},"404",[52,1321,296],{},[24,1323,1324,1326],{},[52,1325,453],{}," tries to parse JSON",[24,1328,1329,1332],{},[52,1330,1331],{},"except ValueError"," handles invalid JSON",[14,1334,1335,1336,1338],{},"Printing ",[52,1337,838],{}," is often very helpful when debugging API problems.",[14,1340,1341,1342,109],{},"If you are sending data to an API, you may also want to read ",[437,1343,1345],{"href":1344},"\u002Fhow-to\u002Fhow-to-send-a-post-request-in-python","how to send a POST request in Python",[40,1347,1349],{"id":1348},"useful-response-parts-to-inspect","Useful response parts to inspect",[14,1351,1352],{},"These are the most useful parts of a response object:",[21,1354,1355,1361,1366,1371,1377],{},[24,1356,1357,1360],{},[52,1358,1359],{},"response.status_code"," for the result code",[24,1362,1363,1365],{},[52,1364,838],{}," for raw text content",[24,1367,1368,1370],{},[52,1369,453],{}," for parsed JSON content",[24,1372,1373,1376],{},[52,1374,1375],{},"response.headers"," for metadata about the response",[24,1378,1379,1382],{},[52,1380,1381],{},"response.url"," to see the final URL used",[14,1384,303],{},[45,1386,1388],{"className":47,"code":1387,"language":49,"meta":50,"style":50},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fapi.example.com\u002Fdata\", timeout=10)\n\nprint(\"Status code:\", response.status_code)\nprint(\"Final URL:\", response.url)\nprint(\"Headers:\", response.headers)\nprint(\"Text:\", response.text)\n",[52,1389,1390,1396,1400,1430,1434,1456,1479,1502],{"__ignoreMap":50},[55,1391,1392,1394],{"class":57,"line":58},[55,1393,62],{"class":61},[55,1395,66],{"class":65},[55,1397,1398],{"class":57,"line":69},[55,1399,73],{"emptyLinePlaceholder":72},[55,1401,1402,1404,1406,1408,1410,1412,1414,1416,1418,1420,1422,1424,1426,1428],{"class":57,"line":76},[55,1403,100],{"class":65},[55,1405,83],{"class":82},[55,1407,105],{"class":65},[55,1409,109],{"class":108},[55,1411,113],{"class":112},[55,1413,116],{"class":108},[55,1415,214],{"class":86},[55,1417,91],{"class":90},[55,1419,214],{"class":86},[55,1421,122],{"class":108},[55,1423,126],{"class":125},[55,1425,83],{"class":82},[55,1427,132],{"class":131},[55,1429,135],{"class":108},[55,1431,1432],{"class":57,"line":97},[55,1433,73],{"emptyLinePlaceholder":72},[55,1435,1436,1438,1440,1442,1444,1446,1448,1450,1452,1454],{"class":57,"line":138},[55,1437,357],{"class":188},[55,1439,116],{"class":108},[55,1441,214],{"class":86},[55,1443,364],{"class":90},[55,1445,214],{"class":86},[55,1447,122],{"class":108},[55,1449,149],{"class":112},[55,1451,109],{"class":108},[55,1453,155],{"class":154},[55,1455,135],{"class":108},[55,1457,1458,1460,1462,1464,1467,1469,1471,1473,1475,1477],{"class":57,"line":143},[55,1459,357],{"class":188},[55,1461,116],{"class":108},[55,1463,214],{"class":86},[55,1465,1466],{"class":90},"Final URL:",[55,1468,214],{"class":86},[55,1470,122],{"class":108},[55,1472,149],{"class":112},[55,1474,109],{"class":108},[55,1476,119],{"class":154},[55,1478,135],{"class":108},[55,1480,1481,1483,1485,1487,1490,1492,1494,1496,1498,1500],{"class":57,"line":167},[55,1482,357],{"class":188},[55,1484,116],{"class":108},[55,1486,214],{"class":86},[55,1488,1489],{"class":90},"Headers:",[55,1491,214],{"class":86},[55,1493,122],{"class":108},[55,1495,149],{"class":112},[55,1497,109],{"class":108},[55,1499,971],{"class":154},[55,1501,135],{"class":108},[55,1503,1504,1506,1508,1510,1513,1515,1517,1519,1521,1523],{"class":57,"line":185},[55,1505,357],{"class":188},[55,1507,116],{"class":108},[55,1509,214],{"class":86},[55,1511,1512],{"class":90},"Text:",[55,1514,214],{"class":86},[55,1516,122],{"class":108},[55,1518,149],{"class":112},[55,1520,109],{"class":108},[55,1522,244],{"class":154},[55,1524,135],{"class":108},[14,1526,835,1527,1529],{},[52,1528,453],{}," only when you expect valid JSON.",[40,1531,1533],{"id":1532},"beginner-workflow-for-handling-api-responses","Beginner workflow for handling API responses",[14,1535,1536],{},"A simple workflow is:",[1538,1539,1540,1543,1546,1549,1552],"ol",{},[24,1541,1542],{},"Send the request",[24,1544,1545],{},"Check the status code",[24,1547,1548],{},"If successful, read the data",[24,1550,1551],{},"If not successful, inspect the error message",[24,1553,1554],{},"Handle missing keys or unexpected data carefully",[14,1556,303],{},[45,1558,1560],{"className":47,"code":1559,"language":49,"meta":50,"style":50},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fapi.example.com\u002Fuser\", timeout=10)\n\nif response.status_code == 200:\n    try:\n        data = response.json()\n        print(\"User name:\", data.get(\"name\"))\n    except ValueError:\n        print(\"The server did not return valid JSON.\")\n        print(response.text)\nelse:\n    print(\"Request failed with status:\", response.status_code)\n    print(response.text)\n",[52,1561,1562,1568,1572,1602,1606,1622,1629,1644,1676,1685,1700,1714,1720,1743],{"__ignoreMap":50},[55,1563,1564,1566],{"class":57,"line":58},[55,1565,62],{"class":61},[55,1567,66],{"class":65},[55,1569,1570],{"class":57,"line":69},[55,1571,73],{"emptyLinePlaceholder":72},[55,1573,1574,1576,1578,1580,1582,1584,1586,1588,1590,1592,1594,1596,1598,1600],{"class":57,"line":76},[55,1575,100],{"class":65},[55,1577,83],{"class":82},[55,1579,105],{"class":65},[55,1581,109],{"class":108},[55,1583,113],{"class":112},[55,1585,116],{"class":108},[55,1587,214],{"class":86},[55,1589,501],{"class":90},[55,1591,214],{"class":86},[55,1593,122],{"class":108},[55,1595,126],{"class":125},[55,1597,83],{"class":82},[55,1599,132],{"class":131},[55,1601,135],{"class":108},[55,1603,1604],{"class":57,"line":97},[55,1605,73],{"emptyLinePlaceholder":72},[55,1607,1608,1610,1612,1614,1616,1618,1620],{"class":57,"line":138},[55,1609,146],{"class":61},[55,1611,149],{"class":65},[55,1613,109],{"class":108},[55,1615,155],{"class":154},[55,1617,158],{"class":82},[55,1619,161],{"class":131},[55,1621,164],{"class":108},[55,1623,1624,1627],{"class":57,"line":143},[55,1625,1626],{"class":61},"    try",[55,1628,164],{"class":108},[55,1630,1631,1634,1636,1638,1640,1642],{"class":57,"line":167},[55,1632,1633],{"class":65},"        data ",[55,1635,83],{"class":82},[55,1637,149],{"class":65},[55,1639,109],{"class":108},[55,1641,179],{"class":112},[55,1643,182],{"class":108},[55,1645,1646,1649,1651,1653,1656,1658,1660,1662,1664,1666,1668,1670,1672,1674],{"class":57,"line":185},[55,1647,1648],{"class":188},"        print",[55,1650,116],{"class":108},[55,1652,214],{"class":86},[55,1654,1655],{"class":90},"User name:",[55,1657,214],{"class":86},[55,1659,122],{"class":108},[55,1661,1149],{"class":112},[55,1663,109],{"class":108},[55,1665,113],{"class":112},[55,1667,116],{"class":108},[55,1669,214],{"class":86},[55,1671,598],{"class":90},[55,1673,214],{"class":86},[55,1675,574],{"class":108},[55,1677,1678,1681,1683],{"class":57,"line":199},[55,1679,1680],{"class":61},"    except",[55,1682,1266],{"class":566},[55,1684,164],{"class":108},[55,1686,1687,1689,1691,1693,1696,1698],{"class":57,"line":207},[55,1688,1648],{"class":188},[55,1690,116],{"class":108},[55,1692,214],{"class":86},[55,1694,1695],{"class":90},"The server did not return valid JSON.",[55,1697,214],{"class":86},[55,1699,135],{"class":108},[55,1701,1702,1704,1706,1708,1710,1712],{"class":57,"line":232},[55,1703,1648],{"class":188},[55,1705,116],{"class":108},[55,1707,239],{"class":112},[55,1709,109],{"class":108},[55,1711,244],{"class":154},[55,1713,135],{"class":108},[55,1715,1716,1718],{"class":57,"line":1158},[55,1717,202],{"class":61},[55,1719,164],{"class":108},[55,1721,1722,1724,1726,1728,1731,1733,1735,1737,1739,1741],{"class":57,"line":1178},[55,1723,189],{"class":188},[55,1725,116],{"class":108},[55,1727,214],{"class":86},[55,1729,1730],{"class":90},"Request failed with status:",[55,1732,214],{"class":86},[55,1734,122],{"class":108},[55,1736,149],{"class":112},[55,1738,109],{"class":108},[55,1740,155],{"class":154},[55,1742,135],{"class":108},[55,1744,1745,1747,1749,1751,1753,1755],{"class":57,"line":1202},[55,1746,189],{"class":188},[55,1748,116],{"class":108},[55,1750,239],{"class":112},[55,1752,109],{"class":108},[55,1754,244],{"class":154},[55,1756,135],{"class":108},[14,1758,1759,1760,1763,1764,109],{},"This version uses ",[52,1761,1762],{},"data.get(\"name\")"," instead of ",[52,1765,1766],{},"data[\"name\"]",[14,1768,1769,1770,1773,1774,1777],{},"That is useful because ",[52,1771,1772],{},"get()"," returns ",[52,1775,1776],{},"None"," if the key does not exist, instead of raising an error.",[40,1779,1781],{"id":1780},"common-mistakes","Common mistakes",[14,1783,1784],{},"These are common causes of API response problems:",[21,1786,1787,1793,1796,1799,1802],{},[24,1788,1789,1790,1792],{},"Calling ",[52,1791,453],{}," when the server returned HTML or plain text",[24,1794,1795],{},"Ignoring the status code and assuming the request worked",[24,1797,1798],{},"Trying to access dictionary keys that do not exist",[24,1800,1801],{},"Forgetting to set a timeout",[24,1803,1804],{},"Not handling failed requests before using the response data",[14,1806,1807],{},"Useful things to print while debugging:",[45,1809,1811],{"className":47,"code":1810,"language":49,"meta":50,"style":50},"print(response.status_code)\nprint(response.text)\nprint(response.headers)\nprint(response.url)\nprint(response.json())\n",[52,1812,1813,1827,1841,1855,1869],{"__ignoreMap":50},[55,1814,1815,1817,1819,1821,1823,1825],{"class":57,"line":58},[55,1816,357],{"class":188},[55,1818,116],{"class":108},[55,1820,239],{"class":112},[55,1822,109],{"class":108},[55,1824,155],{"class":154},[55,1826,135],{"class":108},[55,1828,1829,1831,1833,1835,1837,1839],{"class":57,"line":69},[55,1830,357],{"class":188},[55,1832,116],{"class":108},[55,1834,239],{"class":112},[55,1836,109],{"class":108},[55,1838,244],{"class":154},[55,1840,135],{"class":108},[55,1842,1843,1845,1847,1849,1851,1853],{"class":57,"line":76},[55,1844,357],{"class":188},[55,1846,116],{"class":108},[55,1848,239],{"class":112},[55,1850,109],{"class":108},[55,1852,971],{"class":154},[55,1854,135],{"class":108},[55,1856,1857,1859,1861,1863,1865,1867],{"class":57,"line":97},[55,1858,357],{"class":188},[55,1860,116],{"class":108},[55,1862,239],{"class":112},[55,1864,109],{"class":108},[55,1866,119],{"class":154},[55,1868,135],{"class":108},[55,1870,1871,1873,1875,1877,1879,1881],{"class":57,"line":138},[55,1872,357],{"class":188},[55,1874,116],{"class":108},[55,1876,239],{"class":112},[55,1878,109],{"class":108},[55,1880,179],{"class":112},[55,1882,1883],{"class":108},"())\n",[14,1885,1886,1887,1890],{},"Be careful with ",[52,1888,1889],{},"print(response.json())",". Only use it when you are reasonably sure the response contains valid JSON.",[14,1892,1893],{},"If you treat a string like a dictionary by mistake, you may run into TypeError: string indices must be integers or slices.",[40,1895,1897],{"id":1896},"faq","FAQ",[1899,1900,1902],"h3",{"id":1901},"what-is-an-api-response-in-python","What is an API response in Python?",[14,1904,1905],{},"It is the data and status information returned after your Python code sends a request to an API.",[1899,1907,1909],{"id":1908},"how-do-i-know-if-an-api-request-worked","How do I know if an API request worked?",[14,1911,1912,1913,1915,1916,1918],{},"Check ",[52,1914,1359],{},". A ",[52,1917,284],{}," status code usually means success.",[1899,1920,1922,1923,1925],{"id":1921},"why-does-responsejson-fail","Why does ",[52,1924,453],{}," fail?",[14,1927,1928],{},"It fails when the response does not contain valid JSON, such as HTML error text or plain text.",[1899,1930,1932,1933,798,1935,1937],{"id":1931},"should-i-use-responsetext-or-responsejson","Should I use ",[52,1934,838],{},[52,1936,453],{},"?",[14,1939,835,1940,1942,1943,1945],{},[52,1941,453],{}," for JSON APIs. Use ",[52,1944,838],{}," when the response is plain text or when debugging.",[40,1947,1949],{"id":1948},"see-also","See also",[21,1951,1952,1957,1962,1966,1970],{},[24,1953,1954],{},[437,1955,1956],{"href":439},"How to make an API request in Python",[24,1958,1959],{},[437,1960,1961],{"href":1344},"How to send a POST request in Python",[24,1963,1964],{},[437,1965,797],{"href":796},[24,1967,1968],{},[437,1969,802],{"href":801},[24,1971,1972],{},[437,1973,790],{"href":789},[1975,1976,1977],"style",{},"html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .slqww, html code.shiki .slqww{--shiki-light:#6182B8;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s99_P, html code.shiki .s99_P{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sseR_, html code.shiki .sseR_{--shiki-light:#9C3EDA;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":50,"searchDepth":69,"depth":69,"links":1979},[1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1997],{"id":42,"depth":69,"text":43},{"id":252,"depth":69,"text":253},{"id":270,"depth":69,"text":271},{"id":443,"depth":69,"text":444},{"id":805,"depth":69,"text":806},{"id":1030,"depth":69,"text":1031},{"id":1348,"depth":69,"text":1349},{"id":1532,"depth":69,"text":1533},{"id":1780,"depth":69,"text":1781},{"id":1896,"depth":69,"text":1897,"children":1990},[1991,1992,1993,1995],{"id":1901,"depth":76,"text":1902},{"id":1908,"depth":76,"text":1909},{"id":1921,"depth":76,"text":1994},"Why does response.json() fail?",{"id":1931,"depth":76,"text":1996},"Should I use response.text or response.json()?",{"id":1948,"depth":69,"text":1949},"Master how to handle api responses in python in our comprehensive Python beginner guide.","md",{},"\u002Fhow-to\u002Fhow-to-handle-api-responses-in-python",{"title":5,"description":1998},"how-to\u002Fhow-to-handle-api-responses-in-python","nuZY7O5BQzcMbiGM4_fDMbKV70B2GAntfX9v2O-JGGU",1777585502255]