A positive control proves your request path works. It does not prove the request pointed at the right thing. Ask this endpoint for app ID 1111111111 and it returns HTTP 200 with resultCount 0. Ask it for 676599, a real ID with two digits chopped off, and it returns the same thing. An empty result is not an app telling you it has not shipped. It is nothing being selected, which is exactly what a typo looks like.
API=https://itunes.apple.com/lookup
CB=$(date +%s)
# gate 1: does the path work at all?
curl -s "$API?id=310633997&country=us&cb=$CB"
# gate 2: did I read the app I meant?
curl -s "$API?id=6765926991&country=us&cb=$CB" | jq -e '
.resultCount == 1
and .results[0].trackId == 6765926991
and .results[0].trackName == "Sortes: Decision Maker"'| Gate | Passes when | What that tells you |
|---|---|---|
| Transport | a known-live control returns its own record | The path works. A failure here makes everything below unreadable. |
| Selection | HTTP 200 and resultCount 1 | Something was selected. Zero results means nothing was, which is not a negative. |
| Identity | trackId and trackName match the request, country explicitly set | You are reading your app. A mismatch means another app or storefront. |
| State | gates one to three passed | The version returned is the live public state, whatever you expected it to be. |
State is not a verdict. At 08:55 CEST today Sortes cleared the first three gates and returned 1.0.1, so 1.0.1 was the live public version at 08:55. Nothing in that response said whether 1.0.2 was late, withdrawn, or never submitted. A second source did: App Store Connect had it approved on a manual release. Its currentVersionReleaseDate now reads 08:58:50 CEST. Hushlayer read 1.0.3 at 07:44, 07:46, and 07:47 yesterday, then 1.0.4 at 07:55.