I’m working with the Crowdin API and want to programmatically detect if there have been any translation changes in specific files. My goal is to identify, file by file, whether translations have been updated or modified since the last sync.
Is there a recommended approach or API endpoint in Crowdin that allows checking translation changes on a per-file basis? For example, can I get a list of files with translation updates or compare translation versions per file using the API?
Any pointers, examples, or best practices would be greatly appreciated!
Using that API still doesn’t give me a flag or timestamp indicating when a translation was updated. For example, I need something like a translation.updatedAt field that shows when the translation was last modified. I don’t need to know exactly which text was changed—just the fact that an update occurred and when.
Am I misunderstanding how this works?
Or is there another API endpoint in Crowdin that can provide this information?
Hello @robin.bro! Thank you for providing the details. You can use Build Project File Translation request with the following header parameter and it will add the Etag:
You can download teh translations, you will get the Etag in the headers, and after that you can do another download request, but with that Etag in the if-none-match header.
Title:etag value not updating on /languages/progress endpoint
Hello,
I’ve been using the following endpoint to track translation changes:
GET https://api.crowdin.com/api/v2/projects/{projectId}/files/{fileId}/languages/progress
I expected the etag in the response to change whenever a translation was modified. However, even after updating translations, the etag remains the same.
Is this the expected behavior of the /languages/progress API?
If so, what is the correct way to detect when translations have been updated?
Should I be relying on a different endpoint to track translation updates?
Thanks in advance for clarifying how this is supposed to work.
The etag on the /languages/progress endpoint will not change when an existing translation is edited, as it only tracks completion statistics (e.g., word count), not content. This is expected behavior.
To detect if translations have actually changed, you should use the Etag from the built file itself.
Correct Workflow:
Build and download the file translation. Store the Etag from the download response header.
To check for updates, make the same build request again, but pass the stored etag in the If-None-Match header.
You will get a 304 Not Modified response if there are no changes, or a 200 OK response with a new download link and a new Etag if the translations have been updated.
Hope this provides the clarity you were looking for.