Revisions translations
Revisions & Translations
When to Use
Access specific entity revisions or translations via JSON:API.
Revisions
Get specific revision by ID:
GET /jsonapi/node/article/{uuid}?resourceVersion=id:12345
Get latest revision:
GET /jsonapi/node/article/{uuid}?resourceVersion=rel:latest-version
Get working copy (draft):
GET /jsonapi/node/article/{uuid}?resourceVersion=rel:working-copy
Revision parameters:
| Parameter | Description | Use Case |
|---|---|---|
resourceVersion=id:{revision_id} |
Specific revision by ID | View historical version |
resourceVersion=rel:latest-version |
Latest revision | Content moderation |
resourceVersion=rel:working-copy |
Working copy/draft | Preview unpublished changes |
Gotchas: - Requires entity type to be revisionable - User must have "view revisions" permission - Not all entity types support revisions
Translations
Get specific translation:
# Spanish translation
GET /jsonapi/es/node/article/{uuid}
# French translation
GET /jsonapi/fr/node/article/{uuid}
Default language (no prefix):
GET /jsonapi/node/article/{uuid}
Create translation (POST):
curl -X POST "https://example.com/jsonapi/es/node/article" \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Basic ..." \
-d '{
"data": {
"type": "node--article",
"attributes": {
"title": "Articulo en espanol",
"langcode": "es"
}
}
}'
Update translation (PATCH):
curl -X PATCH "https://example.com/jsonapi/es/node/article/{uuid}" \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Basic ..." \
-d '{
"data": {
"type": "node--article",
"id": "{uuid}",
"attributes": {
"title": "Titulo actualizado"
}
}
}'
Common Mistakes
Expecting revision history via GET collection: JSON:API doesn't expose revision listings. WHY: Collections return current revisions only. Use Views with JSON:API integration for revision lists.
Not checking translation availability: Requesting translation that doesn't exist returns default. WHY: Fallback behavior. Check langcode in response to verify actual language.
Assuming all fields are translatable: Some fields are shared across translations. WHY: Field configuration determines translatability. Check field settings.
Creating translation without langcode attribute: Translation creation requires explicit langcode. WHY: Server needs to know target language. Missing langcode creates default language entity.