usaspending-api icon indicating copy to clipboard operation
usaspending-api copied to clipboard

subawards (optional, boolean) attribute elicits <Response [400]> when True

Open nzh2534 opened this issue 3 years ago • 1 comments

The subawards attribute, for numerous endpoints tested (such as /api/v2/search/spending_by_award/ and /api/v2/search/spending_by_category/country/) elicits a <Response [400]> when set to True and a <Response [200]> when set to False. Please let me know if this error is able to be solved.

For example (Python):

import requests

url = "https://api.usaspending.gov"
endpoint = "/api/v2/search/spending_by_award/"
payload = {
      "subawards": False,
      "limit": 10,
      "page": 1,
      "filters": {
          "award_type_codes": ["A", "B", "C"],
          "time_period": [{"start_date": "2018-10-01", "end_date": "2019-09-30"}]
      },
      "fields": [
          "Award ID",
          "Recipient Name",
          "Award Amount",
      ]
  }
response = requests.post(f"{url}{endpoint}", json=payload)
print(response)

prints <Response [200]>

import requests

url = "https://api.usaspending.gov"
endpoint = "/api/v2/search/spending_by_award/"
payload = {
      "subawards": True,
      "limit": 10,
      "page": 1,
      "filters": {
          "award_type_codes": ["A", "B", "C"],
          "time_period": [{"start_date": "2018-10-01", "end_date": "2019-09-30"}]
      },
      "fields": [
          "Award ID",
          "Recipient Name",
          "Award Amount",
      ]
  }
response = requests.post(f"{url}{endpoint}", json=payload)
print(response)

prints <Response [400]>

nzh2534 avatar Sep 23 '21 04:09 nzh2534

The docs are a little unclear on this. This will return Code 400 because "Award ID" does not exist for Subawards. The fields are (instead) "Sub-Award ID" and "Prime Award ID" depending on which you want.

Try sending this:

import requests

url = "https://api.usaspending.gov"
endpoint = "/api/v2/search/spending_by_award/"
payload = {
      "subawards": True,
      "limit": 10,
      "page": 1,
      "filters": {
          "award_type_codes": ["A", "B", "C"],
          "time_period": [{"start_date": "2018-10-01", "end_date": "2019-09-30"}]
      },
      "fields": [
          "Sub-Award ID",
          "Prime Award ID"
      ]
}
response = requests.post(f"{url}{endpoint}", json=payload)
print(response)

jeffchenoweth avatar Nov 07 '22 17:11 jeffchenoweth