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! 