SG Ground Truth

attention 500s on bad input

A record id that does not exist on activity_stream is a 500, and the follow body answers 500 for the plural entity name every URL on the API uses while an invalid name answers 400.

Kind
The behaviour should change
Status
unreported
Confirmed
2026-09-04
Evidence
API

Expected A request naming a row that is not there is a 404, and a request naming an entity type the server does not accept is a 400. The site's own /spec.json gives activity_stream a 404 for a record that is not there.

Actual

call answer
GET /entity/shots/999999999/activity_stream 500 Shotgun Server Error
GET /entity/bogus_things/1/activity_stream 404 Entity type 'bogus_things' does not exist.
POST .../follow with {"entities": [{"record_id": N, "entity": "shots"}]} 500 Shotgun Server Error
POST .../follow with {"entities": [{"record_id": N, "entity": "Bogus"}]} 400 {"entities": {"0": {"entity": ["entity is not valid"]}}}
POST .../follow with {"entities": [{"record_id": N, "entity": "Shot"}]} 204, followed

An unknown entity type is handled on both calls. A missing row and a plural entity name are not.

shots is the spelling every URL on this API uses, /entity/shots/<id>, so the value that 500s is the one a caller reaches for first, and an outright invalid name gets the better error.

Reproduce

curl -sS -o /dev/null -w '%{http_code}\n' \
  "$SITE/api/v1/entity/shots/999999999/activity_stream" -H "Authorization: Bearer $TOKEN"
# 500

curl -sS -X POST "$SITE/api/v1/entity/human_users/<user_id>/follow" \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"entities":[{"record_id":<id>,"entity":"shots"}]}'
# 500

curl -sS -X POST "$SITE/api/v1/entity/human_users/<user_id>/follow" \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"entities":[{"record_id":<id>,"entity":"Bogus"}]}'
# 400, which is the answer the plural should get

Impact A 500 is retried by every client that retries anything, so a stale record id becomes repeated load on the server rather than an error the caller handles. It also tells the caller nothing, so the plural case reads as an outage rather than a bad request, and the difference between shots and Shot is not something the response can teach.

Proposed change Answer 404 for a record id that does not exist, matching the site's own spec, and 400 for an entity value the endpoint does not accept, matching what an unknown name already gets on the same call.

Every entry on this site is the output of a probe in probes/. The corpus is generated by running those probes against a live Flow Production Tracking site, not written from memory.

Not affiliated with or endorsed by Autodesk. Flow Production Tracking is their product; this is an independent record of how its REST API answers.