> 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/developers/docs/_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 <token>`, 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("<access_token>")
        .setSpaceId("<space_id>")
        .setEnvironmentId("<environment_id>")
        .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<CMAUiExtension>() {
          @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("<access_token>")
        .setSpaceId("<space_id>")
        .setEnvironmentId("<environment_id>")
        .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("<access_token>")
    .setSpaceId("<space_id>")
    .setEnvironmentId("<environment_id>")
    .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: '<content_management_api_key>'
})

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: '<space_id>',
    environmentId: '<environment_id>',
  },
  rawData
);

// Or create extension with a given ID
const uiExtension = await client.extension.createWithId(
  {
    spaceId: '<space_id>',
    environmentId: '<environment_id>',
    extensionId: '<extension_id>',
  },
  rawData
);
```

```php PHP
$client = new \Contentful\Management\Client('<content_management_api_key>');

$environment = $client->getEnvironmentProxy('<space_id>', '<environment_id>');

$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('<content_management_api_key>')

ui_extension = client.ui_extensions('<space_id>', '<environment_id>').create(
  extension: {
    'name' => 'My extension',
    'src' => 'https://www.example.com',
    'fieldTypes' => [{"type" => "Symbol"}],
    'sidebar' => false
  }
)
```

```python Python
from contentful_management import Client

client = Client('<content_management_api_key>')

ui_extension = client.ui_extensions('<space_id>', '<environment_id>').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, "<content_management_api_key>", "<space_id>");

var extension = new UiExtension() {
    Name = "My awesome extension",
    Src = "https://example.com/my",
    FieldTypes = new List<string>() {
        "Symbol",
        "Text"
    },
    Sidebar = false
};

await client.CreateExtension(extension);
```

```swift Swift
No snippet for this SDK.
```