FAQ / Versioning

On this page

Is versioning available on all environments?

Versioning is only available on the master environment.

Why does entry versioning fail to display the content I used to have?

The entry versioning feature comes with certain limitations that might affect the type of content you see in your app. Entry snapshots go back only as far back as October 12, 2016, making it impossible to compare the current entry with the versions published before that date. Localized content will only show up in the version comparison if respective locales are selected in the entry sidebar.

It is also important to remember that the version comparison only displays current locales. If your entry was translated into French in the past, but later the French locale was removed from the content type, the French text will no longer be visible. The same logic goes for deleted fields: any content that was stored within these fields in the past will no longer be displayed.

I have updated a text field, but the snapshot comparison does not highlight my changes. Why?

Snapshot comparison view is designed to provide an overview of changes - it highlights the fields with modified content, but does not visualize granular changes within the field. This approach makes it easy to identify and selectively roll back accidentally modified fields. If you want to detect and track field-level changes, we recommend using UI extensions instead. The Diff UI extension we released earlier provides a solid starting point for building such a functionality into your project.

Do you version fields configured to display a custom UI extension?

Yes. Past snapshots of the entry include the contents of all fields, including the fields configured to work with UI extensions. In the snapshot comparison view, such fields are displayed in the disabled mode, but you can roll back such fields to the earlier state in the same way as generic fields.

How do I configure user permissions to work with entry versioning?

There is no specific set of permissions associated with content versioning because we treat content versioning as a subset of publishing activities. In practice it means that users who are permitted to view an entry can also view the previous versions of the entry. Users who are permitted to write in an entry can also revert to the previous versions. Finally, users whose privileges are limited to individual fields can view and restore only the fields they are allowed to access.

Do you also version content types?

Yes. We rolled out support for versioning content types in May 2017. There is no visual interface for inspecting these changes, so you will have to fetch them via the API/SDKs and compare them locally. Other entities found in Contentful, such as assets, webhooks or roles & permissions are not versioned.

Does entry versioning apply to linked content?

No. Entry-level versioning stores all the content found in the entry - including localized content and references to other entries and assets - but it does not create or store snapshots of linked entities. Thus, if you restore an entry to the earlier version containing a reference to a deleted asset, the image field will contain the reference, but the asset binary file will be missing.

What is entry versioning?

Versioning refers to the practice of producing multiple snapshots of a document. Entry versioning allows Contentful users to view previously published versions of the entry, find out who published an entry and when, compare previous snapshots to the current version, and - when necessary -restore the content to the earlier state.

entry-editor-versions-compare

Currently, Contentful produces a snapshot of an entry each time it is published or republished. This makes it possible to easily revert to previous versions when an entry is accidentally modified. You can choose to roll back the contents of individual fields or the entire entry. Entry versioning is available in the web app and via the dedicated API endpoints:

The endpoint /spaces/X/entries/Y/snapshots lists all available snapshots for a given entry.

json
{
    "sys": {
        "type": "Array"
    },
    "total": 0,
    "skip": 0,
    "limit": 100,
    "items": []
}

The endpoint /spaces/X/entries/Y/snapshots/Z provides contents of a selected snapshot.

json
{
  sys: {
    type: "Snapshot",
    createdAt:,
    createdBy:,
    id: "Z",
    snapshotType:,
  },
  snapshot: {
    sys: {
      <the unmodified sys property of that resource>
    },
    fields: {
      foo: {en-US: , fr-FR:}
    }
  }
}

add-circle arrow-right remove style-two-pin-marker subtract-circle remove