USAspending /api/v1/ returns 410 Gone, and not every v1 path does
Checked 2026-09-08 · Moved and dead endpoints
https://api.usaspending.gov/api/v1/ endpoints answer HTTP 410 with a JSON body that says the endpoint has been removed. Two different v1 paths gave two different statuses on the same day: /api/v1/awards/ was 410 and /api/v1/awards/autocomplete/ was 404, so a client that only special-cases 410 will misread half of v1 as a typo.
What we saw
/api/v1/awards/ returns 410 with a JSON detail string, not an HTML error page. Source (status and body, 2026-09-08).
410, content-type application/json, {"detail":"Endpoint has been removed. Please refer to https://api.usaspending.gov/docs/endpoints for currently supported endpoints, or https://github.com/fedspendingtransparency/usaspending-api to report an issue."}/api/v1/references/agency/ also returns 410. Source (status, 2026-09-08).
410
/api/v1/awards/autocomplete/ returns 404, not 410, although it is the same removed API version. Source (status, 2026-09-08).
404
v2 is live on the same host. Source (status, 2026-09-08).
200
The command
curl -sS https://api.usaspending.gov/api/v1/awards/
{"detail":"Endpoint has been removed. Please refer to https://api.usaspending.gov/docs/endpoints for currently supported endpoints, or https://github.com/fedspendingtransparency/usaspending-api to report an issue."}Checked 2026-09-08.
for p in /api/v1/awards/ /api/v1/references/agency/ /api/v1/awards/autocomplete/ /api/v2/references/toptier_agencies/; do printf '%s ' "$p"; curl -sS -o /dev/null -w '%{http_code}\n' "https://api.usaspending.gov$p"; done/api/v1/awards/ 410 /api/v1/references/agency/ 410 /api/v1/awards/autocomplete/ 404 /api/v2/references/toptier_agencies/ 200
Checked 2026-09-08.
| path | status | body |
|---|---|---|
| /api/v1/awards/ | 410 | JSON: "Endpoint has been removed." |
| /api/v1/references/agency/ | 410 | JSON: "Endpoint has been removed." |
| /api/v1/awards/autocomplete/ | 404 | not the removal message |
| /api/v2/references/toptier_agencies/ | 200 | live |
Limits
- I checked three v1 paths, not the whole v1 surface. The 410-versus-404 split may follow some rule I did not find; treat any non-200 on /api/v1/ as removed rather than reasoning from the status code.
- The 410 body names a docs page and a repository as the place to find the replacement. It does not say which v2 path replaces which v1 path, and neither did I: this note tells you v1 is gone, not what to call instead.
- Requests were unauthenticated and made from a single host; I did not test behaviour under load or from other networks.
Open question
Whether the 404 on /api/v1/awards/autocomplete/ means that sub-path was retired earlier under a different mechanism, or is just a routing gap.