> 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 an extension POST https://api.contentful.com/spaces/{space_id}/environments/{environment_id}/extensions Content-Type: application/vnd.contentful.management.v1+json Reference: https://contentful.com/developers/docs/references/content-management-api/ui-extensions/create-an-extension ## 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 **Request** ```json { "extension": { "fieldTypes": [ { "type": "Symbol" }, { "type": "Text" } ], "name": "My awesome extension", "sidebar": false, "src": "https://example.com/my" } } ``` **Response** ```json { "extension": { "fieldTypes": [ { "type": "Symbol" }, { "type": "Text" } ], "name": "My awesome extension", "sidebar": false, "src": "https://example.com/my" }, "sys": { "createdAt": "2026-02-04T08:33:53.000Z", "createdBy": { "sys": { "id": "7BslKh9TdKGOK41VmLDjFZ", "linkType": "User", "type": "Link" } }, "environment": { "sys": { "id": "staging", "linkType": "Environment", "type": "Link" } }, "id": "0xvkPW9FdQ1kkWlWZ8ga4x", "space": { "sys": { "id": "yadj1kx9rmg0", "linkType": "Space", "type": "Link" } }, "type": "Extension", "updatedAt": "2026-02-04T08:33:53.000Z", "updatedBy": { "sys": { "id": "4FLrUHftHW3v2BLi9fzfjU", "linkType": "User", "type": "Link" } }, "version": 1 } } ``` **SDK Code** ```android Android // Create the Contentful client. final CMAClient client = new CMAClient .Builder() .setAccessToken("") .setSpaceId("") .setEnvironmentId("") .build(); final CMAUiExtension extension = new CMAUiExtension(); extension .setId("my_extension_id" + Math.random()) .getExtension() .setName("My Extension") .setSourceUrl("https://example.com/foo/bar"); client .uiExtensions() .async() .create( extension, new CMACallback() { @Override protected void onSuccess(CMAUiExtension result) { new AlertDialog.Builder(context) .setTitle("Contentful") .setMessage("Successfully created a new ui extensions." + "\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 create a new ui extensions." + "\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 CMAUiExtension extension = new CMAUiExtension(); extension .setId("foo_" + Math.random()) .getExtension() .setName("Random foo!") .setSourceUrl("https://example.com/foo/bar") .addFieldType(Constants.CMAFieldType.Integer); final CMAUiExtension createdExtension = client.uiExtensions() .create(extension); ``` ```kotlin Kotlin // Create the Contentful client. val client = CMAClient.Builder() .setAccessToken("") .setSpaceId("") .setEnvironmentId("") .build() val extension = CMAUiExtension() extension .setId("foo_" + Math.random()) .extension .setName("Random foo!") .setSourceUrl("https://example.com/foo/bar") .addFieldType(Constants.CMAFieldType.Integer) val createdExtension = client.uiExtensions() .create(extension) ``` ```js-legacy JavaScript (legacy) // SDK currently doesn't implement this endpoint. ``` ```javascript JavaScript import { createClient } from 'contentful-management' // Client init const client = contentful.createClient({ accessToken: '' }) const rawData = { extension: { name: 'My extension', src: 'https://www.example.com', fieldTypes: [ { type: 'Symbol', }, ], sidebar: false, } }; // Create extension with auto-generated ID const uiExtension = await client.extension.create( { spaceId: '', environmentId: '', }, rawData ); // Or create extension with a given ID const uiExtension = await client.extension.createWithId( { spaceId: '', environmentId: '', extensionId: '', }, rawData ); ``` ```php PHP $client = new \Contentful\Management\Client(''); $environment = $client->getEnvironmentProxy('', ''); $extension = new \Contentful\Management\Resource\Extension('My awesome extension'); $extension->setSource('https://www.example.com/my') ->setSidebar(false) ->addNewFieldType('Symbol') ->addNewFieldType('Text'); $environment->create($extension); ``` ```ruby Ruby require 'contentful/management' client = Contentful::Management::Client.new('') ui_extension = client.ui_extensions('', '').create( extension: { 'name' => 'My extension', 'src' => 'https://www.example.com', 'fieldTypes' => [{"type" => "Symbol"}], 'sidebar' => false } ) ``` ```python Python from contentful_management import Client client = Client('') ui_extension = client.ui_extensions('', '').create({ 'extension': { 'name': 'My extension', 'src': 'https://www.example.com', 'fieldTypes': [{"type": "Symbol"}], 'sidebar': False } }) ``` ```.net .NET // This client should only be created once per application. var httpClient = new HttpClient(); var client = new ContentfulManagementClient(httpClient, "", ""); var extension = new UiExtension() { Name = "My awesome extension", Src = "https://example.com/my", FieldTypes = new List() { "Symbol", "Text" }, Sidebar = false }; await client.CreateExtension(extension); ``` ```swift Swift No snippet for this SDK. ```