Hello Daniel!
Thank you for sharing all these details — let me clarify what’s happening here.
The behavior you’re seeing is actually expected and matches how this endpoint works under the hood. When the translation file is still being prepared, the API returns a 200 OK with a JSON body that includes the status attribute (pending, processing, or failed). Once the file is ready, the API responds with a 303 See Other and a Location header that points to the actual file download URL.
However, most HTTP clients — including curl, Postman, and even the Transifex API Explorer on the developer site — follow that redirect automatically by default for testing convenience. This means that instead of seeing the raw 303 and Location in your response, your tool automatically makes a second request to the file URL and shows you the final result: a 200 OK with the translated file content. That’s why you don’t see the status JSON anymore once the file is ready.
To confirm this behavior, you can run the same curl request but disable auto-follow for redirects. For example:
curl -i --max-redirs 0 \
--header 'accept: application/vnd.api+json' \
--header 'authorization: Bearer <your token>' \
'https://rest.api.transifex.com/resource_translations_async_downloads/354276cf-089d-46c6-bbbc-9849bc023981'
This will show you the raw 303 response and the Location header pointing to your file, exactly as described in the documentation.
Regarding the other thread you mentioned, the same question has been addressed there as well. It’s the same explanation: the redirect happens automatically, so you see the downloaded file directly instead of the intermediate status response.
In summary, if you see a 200 OK with the file content, it means the file is ready and you’re seeing the final download result. If it’s still being prepared, you’ll get the JSON status instead. If you want to handle the flow step-by-step, just disable automatic redirects so you can capture and manage the Location header yourself.
I hope this clears things up! Let me know if you’d like any help with an example script or implementation tips.
Thanks again for bringing this up! 