> 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. # Update the editor interface PUT https://api.contentful.com/spaces/{space_id}/environments/{environment_id}/content_types/{content_type_id}/editor_interface Content-Type: application/vnd.contentful.management.v1+json You can use this endpoint to update an existing editor interface. You will need to specify its last version with `X-Contentful-Version`. Reference: https://contentful.com/developers/docs/references/content-management-api/editor-interface/update-the-editor-interface ## 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 - `content_type_id` (string, required) — ID of the content type in form of a string ### Headers - `X-Contentful-Version` (string, required) — Version of the editor interface to update ### Body (application/vnd.contentful.management.v1+json) This endpoint expects a map from string to any. - `map from string to any` ## Response ### 200 OK - Request successful - `map from string to any` ## Examples **Request** ```json { "controls": [ { "fieldId": "name", "settings": {}, "widgetId": "singleLine", "widgetNamespace": "builtin" } ], "sidebar": [ { "disabled": false, "settings": {}, "widgetId": "someuiextension", "widgetNamespace": "extension" } ] } ``` **Response** ```json { "controls": [ { "fieldId": "name", "settings": {}, "widgetId": "singleLine", "widgetNamespace": "builtin" } ], "sidebar": [ { "disabled": false, "settings": {}, "widgetId": "someuiextension", "widgetNamespace": "extension" } ], "sys": { "contentType": { "sys": { "id": "hfM9RCJIk0wIm06WkEOQY", "linkType": "ContentType", "type": "Link" } }, "id": "default", "type": "Editor Interface" } } ``` **SDK Code** ```android Android // Create the Contentful client. final CMAClient client = new CMAClient .Builder() .setAccessToken("") .setSpaceId("") .setEnvironmentId("") .build(); client .editorInterfaces() .async() .fetchOne( "", new CMACallback() { @Override protected void onSuccess(CMAEditorInterface result) { result.addControl( new CMAEditorInterface.Control() .setFieldId("field_id") .setBuildInWidgetId(CMAEditorInterface.Control.BuildInWidgetId.ListInput) ); client .editorInterfaces() .async() .update( result, new CMACallback() { @Override protected void onSuccess(CMAEditorInterface result) { new AlertDialog.Builder(context) .setTitle("Contentful") .setMessage("Successfully updated the editor interface." + "\n\nResult: " + result) .show(); } @Override protected void onFailure(RuntimeException exception) { // An error occurred! Inform the user. new AlertDialog.Builder(context) .setTitle("Contentful Error") .setMessage("Could not update the editor interface." + "\n\nReason: " + exception.toString()) .show(); super.onFailure(exception); } } ); } @Override protected void onFailure(RuntimeException exception) { // An error occurred! Inform the user. new AlertDialog.Builder(context) .setTitle("Contentful Error") .setMessage("Could not fetch the editor interface." + "\n\nReason: " + exception.toString()) .show(); super.onFailure(exception); } } ); ``` ```java Java // Create the Contentful client. final CMAClient client = new CMAClient .Builder() .setAccessToken("") .setSpaceId("") .setEnvironmentId("") .build(); final CMAEditorInterface result = client .editorInterfaces() .fetchOne(""); result .getControls() .get(0) .setFieldId("name"); final CMAEditorInterface updated = client .editorInterfaces() .update(result); ``` ```kotlin Kotlin // Create the Contentful client. val client = CMAClient.Builder() .setAccessToken("") .setSpaceId("") .setEnvironmentId("") .build() val result = client .editorInterfaces() .fetchOne("") result .controls[0].fieldId = "name" val updated = client .editorInterfaces() .update(result) ``` ```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' }) client.getSpace('') .then((space) => space.getEnvironment('')) .then((environment) => environment.getEditorInterfaceForContentType('')) .then((editorInterface) => { editorInterface.controls[0] = { fieldId: 'title', widgetId: 'singleLine' } return editorInterface.update() }) .then((editorInterface) => console.log(`Editor interface ${editorInterface.sys.id} updated.`)) .catch(console.error) ``` ```javascript JavaScript import { createClient } from 'contentful-management' // Client init const client = contentful.createClient({ accessToken: '' }) // use plainClient to access the Contentful Management API and get editor interfaces const editorInterface = await plainClient.editorInterface.get({ spaceId: '', environmentId: '', contentTypeId: '', }); console.log(editorInterface); // delete a sidebar array entry from editor interface (translation-widget) const updatedEditorInterfaces = await plainClient.editorInterface.update( { spaceId: '', environmentId: '', contentTypeId: '' }, { ...editorInterface, sidebar: editorInterface.sidebar.filter((entry) => entry.widgetId !== 'translation-widget'), } ); console.log(updatedEditorInterfaces); // re-add the sidebar array entry to editor interface const updatedEditorInterfacesReAdd = await plainClient.editorInterface.update( { spaceId: '', environmentId: '', contentTypeId: '' }, { ...updatedEditorInterfaces, sidebar: [ ...updatedEditorInterfaces.sidebar, { widgetId: 'translation-widget', widgetNamespace: 'sidebar-builtin', settings: { defaultLocale: 'en-US', }, }, ], } ); console.log(updatedEditorInterfacesReAdd); ``` ```php PHP $client = new \Contentful\Management\Client(''); $environment = $client->getEnvironmentProxy('', ''); $editorInterface = $environment->getEditorInterface(''); $editorInterface->getControl('title') ->setWidgetId('singleLine'); $editorInterface->update(); ``` ```ruby Ruby require 'contentful/management' client = Contentful::Management::Client.new('') editor_interface = client.editor_interfaces('', '', '').default editor_interface.controls[0] = { fieldId: 'title', widgetId: 'singleLine' } editor_interface.save ``` ```python Python from contentful_management import Client client = Client('') editor_interface = client.editor_interfaces('', '', '').find() # Returns `default` editor interface for a content type. editor_interface.controls[0] = { 'fieldId': 'title', 'widgetId': 'singleLink' } editor_interface.save() ``` ```.net .NET // This client should only be created once per application. var httpClient = new HttpClient(); var client = new ContentfulManagementClient(httpClient, "", ""); var editorInterface = await client.GetEditorInterface(""); editorInterface.Controls.First(f => f.FieldId == "productName").WidgetId = SystemWidgetIds.SingleLine; var boolField = editorInterface.Controls.First(f => f.FieldId == "preorder"); boolField.WidgetId = SystemWidgetIds.Boolean; boolField.Settings = new BooleanEditorInterfaceControlSettings() { HelpText = "Is the product available?", TrueLabel = "Yes", FalseLabel = "No" }; await client.UpdateEditorInterface(editorInterface, "", editorInterface.SystemProperties.Version.Value); ```