> 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 content type with a specified ID PUT https://api.contentful.com/spaces/{space_id}/environments/{environment_id}/content_types/{content_type_id} Content-Type: application/vnd.contentful.management.v1+json Creates a new content type with the specified ID or updates an existing one. When updating, include the current version in `X-Contentful-Version`. Reference: https://contentful.com/developers/docs/references/content-management-api/content-types/create-a-content-type-with-a-specified-id ## 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, optional) — Version of the content type to update ### 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 { "fields": [ { "id": "title", "localized": true, "name": "Title", "required": true, "type": "Text" }, { "id": "body", "localized": true, "name": "Body", "required": true, "type": "Text" } ], "name": "Blog Post" } ``` **Response** ```json { "sys": { "createdAt": "2026-01-13T11:31:07.000Z", "createdBy": { "sys": { "id": "7BslKh9TdKGOK41VmLDjFZ", "linkType": "User", "type": "Link" } }, "environment": { "sys": { "id": "staging", "linkType": "Environment", "type": "Link" } }, "id": "3ORKIAOaJqQWWg86MWkyOs", "space": { "sys": { "id": "yadj1kx9rmg0", "linkType": "Space", "type": "Link" } }, "type": "ContentType", "updatedAt": "2026-01-13T11:31:07.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(); // Fetch a content type from Contentful. client .contentTypes() .async() .fetchOne( "", new CMACallback() { @Override protected void onSuccess(CMAContentType contentType) { // Change it locally. contentType.setDescription("Updated Description"); // Now update it on Contentful. client .contentTypes() .async() .update( contentType, new CMACallback() { @Override protected void onSuccess(CMAContentType result) { // Updated. new AlertDialog.Builder(context) .setTitle("Contentful") .setMessage("Update of a content type was successful." + "\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 a content type." + "\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 a content type." + "\n\nReason: " + exception.toString()) .show(); super.onFailure(exception); } } ); ``` ```java Java // Create the Contentful client. final CMAClient client = new CMAClient .Builder() .setAccessToken("") .setSpaceId("") .setEnvironmentId("") .build(); // Fetch a content type from Contentful. final CMAContentType contentType = client .contentTypes() .fetchOne(""); // Change it locally. contentType.setDescription("Updated Description"); // Now update it on Contentful. final CMAContentType published = client .contentTypes() .update(contentType); ``` ```kotlin Kotlin // Create the Contentful client. val client = CMAClient.Builder() .setAccessToken("") .setSpaceId("") .setEnvironmentId("") .build() // Fetch a content type from Contentful. val contentType = client .contentTypes() .fetchOne("") // Change it locally. contentType.description = "Updated Description" // Now update it on Contentful. val published = client .contentTypes() .update(contentType) ``` ```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' }) // Create content type client.getSpace('') .then((space) => space.getEnvironment('')) .then((environment) => environment.createContentTypeWithId('blogpost', { name: 'Blog Post', fields: [ { id: 'title', name: 'Title', required: true, localized: false, type: 'Text' } ] })) .then((contentType) => console.log(contentType)) .catch(console.error) // Update content type client.getSpace('') .then((space) => space.getEnvironment('')) .then((environment) => environment.getContentType('')) .then((contentType) => { contentType.name = 'New content type name' return contentType.update() }) .then((contentType) => console.log(`Content type ${contentType.sys.id} renamed.`)) .catch(console.error) ``` ```javascript JavaScript import { createClient } from 'contentful-management' // Client init const client = createClient({ accessToken: '' }) await client.contentType.createWithId( { spaceId: '', environmentId: '', contentTypeId: '', }, { name: 'Blog Post', fields: [ { id: 'title', name: 'Title', required: true, localized: false, type: 'Text' } ] }); ``` ```php PHP $client = new \Contentful\Management\Client(''); $environment = $client->getEnvironmentProxy('', ''); $contentType = new \Contentful\Management\Resource\ContentType('New Content Type'); $contentType->setDescription('Content type description') ->setDisplayField('name') ->addNewField('Symbol', 'name', 'Name'); $environment->create($contentType, 'newContentType'); $contentType->setName('New content type name'); $contentType->update(); ``` ```ruby Ruby require 'contentful/management' client = Contentful::Management::Client.new('') # Create a content type: field = Contentful::Management::Field.new field.id = 'name' field.name = 'Name' field.type = 'Symbol' content_type = client_content_types('', '').create( id: 'newContentType', name: 'New Content Type', description: 'Content type description', displayField: 'name', fields: [field] ) # Update a content type: content_type.name = 'New content type name' content_type.save ``` ```python Python from contentful_management import Client client = Client('') # Create a Content Type: content_type_id = '' # Use `None` if you want the API to autogenerate the ID. content_type = client.content_types('', '').create(content_type_id, { 'name': 'New Content Type', 'description': 'Content Type Description', 'displayField': 'name', 'fields': [ { 'name': 'Name', 'id': 'name', 'type': 'Symbol', 'localized': False } ] }) # Update a Content Type: content_type.name = 'Other Content Type Name' content_type.save() ``` ```.net .NET // This client should only be created once per application. var httpClient = new HttpClient(); var client = new ContentfulManagementClient(httpClient, "", ""); var contentType = new ContentType(); contentType.SystemProperties = new SystemProperties(); contentType.SystemProperties.Id = ""; contentType.Name = "New content type"; contentType.Description = "Content type description"; contentType.Fields = new List() { new Field() { Name = "Field name", Id = "fieldName", Type = "Text", Required = true, Localized = false, Disabled = false, Omitted = false, } }; contentType.DisplayField = "fieldName"; await _client.CreateOrUpdateContentType(contentType); ```