> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://contentful.com/developers/docs/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://contentful.com/_mcp/server. # Create a release POST https://api.contentful.com/spaces/{space_id}/environments/{environment_id}/releases Content-Type: application/vnd.contentful.management.v1+json Creates a new release with an auto-generated ID. Use the `entities.items[]` shape that matches the release version and the space's publishing mode: * `Release.v1`: direct Entry or Asset links. * `Release.v2` with entry-based publishing: `entity` plus `action`, where `action` is `publish` or `unpublish`. * `Release.v2` with locale-based publishing: `entity` plus `add` and `remove`. Only locale-based publishing uses `add` and `remove`. In that mode, each entity item must include both properties, and every environment locale must appear exactly once across `add.fields["*"]` and `remove.fields["*"]`. Reference: https://contentful.com/developers/docs/references/content-management-api/releases/create-a-release ## Authentication - `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer `, where token is your auth token. ## Request ### Path parameters - `space_id` (string, required) — ID of the space in form of a string - `environment_id` (string, required) — ID of the environment in form of a string ### Body (application/vnd.contentful.management.v1+json) This endpoint expects a map from string to any. - `map from string to any` ## Response ### 201 Created - Resource created successfully - `map from string to any` ## Examples ### Releases **Request** ```json { "entities": { "items": [ { "sys": { "id": "", "linkType": "", "type": "Link" } } ] }, "title": "" } ``` **Response** ```json { "items": [ { "entities": [ { "items": [ { "id": "", "linkType": "", "type": "Link" } ], "sys": { "type": "Array" } } ], "sys": { "archivedAt": "2020-01-01T13:00:00.000Z", "archivedBy": { "sys": { "id": "7BslKh9TdKGOK41VmLDjFZ", "linkType": "User", "type": "Link" } }, "createdAt": "2025-07-05T09:25:43.000Z", "createdBy": { "sys": { "id": "7BslKh9TdKGOK41VmLDjFZ", "linkType": "User", "type": "Link" } }, "environment": { "sys": { "id": "staging", "linkType": "Environment", "type": "Link" } }, "space": { "sys": { "id": "yadj1kx9rmg0", "linkType": "Space", "type": "Link" } }, "status": "", "type": "Release", "updatedAt": "2025-07-05T09:25:43.000Z", "updatedBy": { "sys": { "id": "7BslKh9TdKGOK41VmLDjFZ", "linkType": "User", "type": "Link" } }, "version": 0 }, "title": "" } ], "limit": 0, "sys": { "type": "Array" }, "total": 0 } ``` **SDK Code** ```android Android SDK currently doesn't implement this endpoint. ``` ```java Java SDK currently doesn't implement this endpoint. ``` ```kotlin Kotlin SDK currently doesn't implement this endpoint. ``` ```swift Swift We currently don't provide a CMA SDK for this platform. ``` ```js-legacy JavaScript (legacy) import { createClient } from 'contentful-management' const client = createClient({ accessToken: '' }, { type: 'legacy' }) const payload = { title: 'My Release', entities: { sys: { type: 'Array' }, items: [ { sys: { linkType: 'Entry', type: 'Link', id: '' } }, { sys: { linkType: 'Asset', type: 'Link', id: '' } }, ] } } client.getSpace('') .then((space) => space.getEnvironment('')) .then((environment) => environment.createRelease(payload)) .then((release) => console.log(release)) .catch(console.error) ``` ```javascript JavaScript import { createClient } from 'contentful-management' // Client init const client = contentful.createClient({ accessToken: '' }) // Release.v1: direct Entry or Asset links. const releaseV1Payload = { title: 'My Release', entities: { sys: { type: 'Array' }, items: [ { sys: { linkType: 'Entry', type: 'Link', id: '' } }, { sys: { linkType: 'Asset', type: 'Link', id: '' } }, ], }, }; // Release.v2 with entry-based publishing: entity plus action. const entryBasedTimelineReleasePayload = { title: 'Publish entry', sys: { type: 'Release', schemaVersion: 'Release.v2', }, entities: { sys: { type: 'Array' }, items: [ { entity: { sys: { linkType: 'Entry', type: 'Link', id: '' }, }, action: 'publish', }, ], }, }; // Release.v2 with locale-based publishing: entity plus add/remove. const localeBasedTimelineReleasePayload = { title: 'Unpublish entry in all locales', sys: { type: 'Release', schemaVersion: 'Release.v2', }, entities: { sys: { type: 'Array' }, items: [ { entity: { sys: { linkType: 'Entry', type: 'Link', id: '' }, }, add: { fields: { '*': [] } }, remove: { fields: { '*': ['en-US', 'de-DE'] } }, }, ], }, }; // Use one payload shape, based on the release version and publishing mode. const release = await client.release.create( { spaceId: '', environmentId: '', }, entryBasedTimelineReleasePayload ); ``` ```php PHP SDK currently doesn't implement this endpoint. ``` ```ruby Ruby SDK currently doesn't implement this endpoint. ``` ```python Python SDK currently doesn't implement this endpoint. ``` ```.net .NET SDK currently doesn't implement this endpoint. ``` ### Timeline releases **Request** ```json { "entities": { "items": [ { "action": "publish", "entity": { "sys": { "id": "", "linkType": "", "type": "Link" } } } ] }, "sys": { "schemaVersion": "Release.v2", "type": "Release" }, "title": "" } ``` **Response** ```json { "items": [ { "entities": [ { "items": [ { "sys": { "id": "", "linkType": "", "type": "Link" } }, "action:" ], "sys": { "type": "Array" } } ], "sys": { "archivedAt": "2020-01-01T13:00:00.000Z", "archivedBy": { "sys": { "id": "7BslKh9TdKGOK41VmLDjFZ", "linkType": "User", "type": "Link" } }, "createdAt": "2025-07-26T07:24:48.000Z", "createdBy": { "sys": { "id": "7BslKh9TdKGOK41VmLDjFZ", "linkType": "User", "type": "Link" } }, "environment": { "sys": { "id": "staging", "linkType": "Environment", "type": "Link" } }, "schemaVersion": "Release.v2", "space": { "sys": { "id": "yadj1kx9rmg0", "linkType": "Space", "type": "Link" } }, "status": "", "type": "Release", "updatedAt": "2025-07-26T07:24:48.000Z", "updatedBy": { "sys": { "id": "7BslKh9TdKGOK41VmLDjFZ", "linkType": "User", "type": "Link" } }, "version": 0 }, "title": "" } ], "limit": 0, "sys": { "type": "Array" }, "total": 0 } ``` **SDK Code** ```android Android SDK currently doesn't implement this endpoint. ``` ```java Java SDK currently doesn't implement this endpoint. ``` ```kotlin Kotlin SDK currently doesn't implement this endpoint. ``` ```swift Swift We currently don't provide a CMA SDK for this platform. ``` ```js-legacy JavaScript (legacy) import { createClient } from 'contentful-management' const client = createClient({ accessToken: '' }, { type: 'legacy' }) const payload = { title: 'My Release', entities: { sys: { type: 'Array' }, items: [ { sys: { linkType: 'Entry', type: 'Link', id: '' } }, { sys: { linkType: 'Asset', type: 'Link', id: '' } }, ] } } client.getSpace('') .then((space) => space.getEnvironment('')) .then((environment) => environment.createRelease(payload)) .then((release) => console.log(release)) .catch(console.error) ``` ```javascript JavaScript import { createClient } from 'contentful-management' // Client init const client = contentful.createClient({ accessToken: '' }) // Release.v1: direct Entry or Asset links. const releaseV1Payload = { title: 'My Release', entities: { sys: { type: 'Array' }, items: [ { sys: { linkType: 'Entry', type: 'Link', id: '' } }, { sys: { linkType: 'Asset', type: 'Link', id: '' } }, ], }, }; // Release.v2 with entry-based publishing: entity plus action. const entryBasedTimelineReleasePayload = { title: 'Publish entry', sys: { type: 'Release', schemaVersion: 'Release.v2', }, entities: { sys: { type: 'Array' }, items: [ { entity: { sys: { linkType: 'Entry', type: 'Link', id: '' }, }, action: 'publish', }, ], }, }; // Release.v2 with locale-based publishing: entity plus add/remove. const localeBasedTimelineReleasePayload = { title: 'Unpublish entry in all locales', sys: { type: 'Release', schemaVersion: 'Release.v2', }, entities: { sys: { type: 'Array' }, items: [ { entity: { sys: { linkType: 'Entry', type: 'Link', id: '' }, }, add: { fields: { '*': [] } }, remove: { fields: { '*': ['en-US', 'de-DE'] } }, }, ], }, }; // Use one payload shape, based on the release version and publishing mode. const release = await client.release.create( { spaceId: '', environmentId: '', }, entryBasedTimelineReleasePayload ); ``` ```php PHP SDK currently doesn't implement this endpoint. ``` ```ruby Ruby SDK currently doesn't implement this endpoint. ``` ```python Python SDK currently doesn't implement this endpoint. ``` ```.net .NET SDK currently doesn't implement this endpoint. ```