Manually stepping through the steps of the script and using print to reveal variable values and responses shows me much. response=requests.post(url,data=data,headers=headers) print response <Response [200]> So I'm getting an "OK" response. rjson=response.json() print rjson {u'paths': [[u'newarrivals', {u'to': 1, u'from': 0}, {u'to': 5, u'from': 0}, [u'title', u'availability']], [u'newarrivals', {u'to': 1, u'from': 0}, {u'to': 5, u'from': 0}, u'boxarts', u'_342x192', u'jpg']], u'jsonGraph': {u'newarrivals': {u'1': {u'$type': u'ref', u'value': [u'lists',... ... .., {u'boxarts': {u'_342x192': {u'jpg': {u'$type': u'atom'}}}, u'availability': {u'$type': u'atom'}, u'title': {u'$type': u'atom'}}, u'5': {u'boxarts': {u'_342x192': {u'jpg': {u'$type': u'atom'}}}, u'availability': {u'$type': u'atom'}, u'title': {u'$type': u'atom'}}, u'4': {u'boxarts': {u'_342x192': {u'jpg': {u'$type': u'atom'}}}, u'availability': {u'$type': u'atom'}, u'title': {u'$type': u'atom'}}}}}} And here's where it falls down. videos=rjson['value']['videos'] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'value'