Sorry, no results found for "".

Show examples in:
Javascript HTTP

Content Management API > Field

Create a new field

Body parameters

id string Optional

RFC 4122 UUID of field expressed in URL-safe base64 format

Example: "Pkg-oztERp6o-Rj76nYKJg"
label string Required

The label of the field

Example: "Title"
field_type enum Required

Type of input

Example: "string"
boolean Optional
color Optional
date Optional
date_time Optional
file Optional
float Optional
gallery Optional
integer Optional
json Optional
lat_lon Optional
link Optional
links Optional
rich_text Optional
seo Optional
single_block Optional
slug Optional
string Optional
structured_text Optional
text Optional
video Optional
api_key string Required

Field API key

Example: "title"
localized boolean Optional

Whether the field needs to be multilanguage or not

validators object Optional

Optional field validations

Example: { required: {} }
appearance object Optional

Field appearance details, plugin configuration and field add-ons

Example: { editor: "single_line", parameters: { heading: false }, addons: [{ id: "1234", field_extension: "lorem_ipsum", parameters: {} }], }
editor string Required

A valid editor can be a DatoCMS default field editor type (ie. "single_line"), or a plugin ID offering a custom field editor

parameters object Required

The editor plugin's parameters

addons Required

An array of add-on plugins with id and parameters

Type: Array<object>
id string Required

The ID of a plugin offering a field addon

parameters object Required
field_extension string Optional

The specific field extension to use for the field (only if the editor is a modern plugin)

field_extension string Optional

The specific field extension to use for the field (only if the editor is a modern plugin)

position integer Optional

Ordering index

Example: 1
hint string, null Optional

Field hint

Example: "This field will be used as post title"
default_value Optional

Default value for Field. When field is localized accepts an object of default values with site locales as keys

Type: boolean, null, string, number, object
Example: { en: "A default value", it: "Un valore di default" }
deep_filtering_enabled boolean Optional

Whether deep filtering for block models is enabled in GraphQL or not

fieldset Optional

Fieldset linkage

appeareance object Deprecated

Field appearance

This field contains a typo and will be removed in future versions: use appearance instead

editor string Required
parameters object Required

Returns

Returns a resource object of type field

Other examples

This is a complete example for creating a new localized Single-line string field:

import { buildClient } from "@datocms/cma-client-node";
async function run() {
const client = buildClient({ apiToken: process.env.DATOCMS_API_TOKEN });
const modelIdOrApiKey = "blog_post";
const field = await client.fields.create(modelIdOrApiKey, {
label: "Title",
field_type: "string",
api_key: "title",
});
// Check the 'Returned output' tab for the result ☝️
console.log(field);
}
run();
{
id: "Pkg-oztERp6o-Rj76nYKJg",
label: "Title",
field_type: "string",
api_key: "title",
localized: true,
validators: { required: {} },
position: 1,
hint: "This field will be used as post title",
default_value: { en: "A default value", it: "Un valore di default" },
appearance: {
editor: "single_line",
parameters: { heading: false },
addons: [{ id: "1234", field_extension: "lorem_ipsum", parameters: {} }],
},
deep_filtering_enabled: true,
item_type: { type: "item_type", id: "DxMaW10UQiCmZcuuA-IkkA" },
fieldset: null,
}

In this example:

  • first we create some block models using the client.itemTypes.create() method, making sure to set the modular_block attribute to true — this tells the API that they're in fact block models, and not regular models;
  • we then create a Modular content field, passing down the allowed block models in the rich_text_blocks validator:
import { buildClient } from "@datocms/cma-client-node";
async function run() {
// Make sure the API token has access to the CMA, and is stored securely
const client = buildClient({ apiToken: process.env.DATOCMS_API_TOKEN });
const modularBlock1 = await client.itemTypes.create({
name: "Modular Block 1",
api_key: "modular_block1",
modular_block: true,
});
const modularBlock2 = await client.itemTypes.create({
name: "Modular Block 2",
api_key: "modular_block2",
modular_block: true,
});
const itemTypeId = "1234";
const field = await client.fields.create(itemTypeId, {
label: "Content",
field_type: "rich_text",
api_key: "content",
validators: {
rich_text_blocks: {
item_types: [modularBlock1.id, modularBlock2.id],
},
},
});
console.log(field);
}
run();
{
id: "Pkg-oztERp6o-Rj76nYKJg",
label: "Title",
field_type: "string",
api_key: "title",
localized: true,
validators: { required: {} },
position: 1,
hint: "This field will be used as post title",
default_value: { en: "A default value", it: "Un valore di default" },
appearance: {
editor: "single_line",
parameters: { heading: false },
addons: [{ id: "1234", field_extension: "lorem_ipsum", parameters: {} }],
},
deep_filtering_enabled: true,
item_type: { type: "item_type", id: "DxMaW10UQiCmZcuuA-IkkA" },
fieldset: null,
}

Structured Text fields support both embedded block records and links to other regular records.

For DatoCMS, a block model is just like a regular model, so we'll create them with client.itemTypes.create(), passing the modularBlock property to true:

In this example:

  • first we create some block models using the client.itemTypes.create() method, making sure to set the modular_block attribute to true — this tells the API that they're in fact block models, and not regular models;
  • we then create the Structured Text field, passing down the embeddable block models in the structured_text_blocks validator, and the linkable record models in the structured_text_links validator:
import { buildClient } from "@datocms/cma-client-node";
async function run() {
// Make sure the API token has access to the CMA, and is stored securely
const client = buildClient({ apiToken: process.env.DATOCMS_API_TOKEN });
const modularBlock1 = await client.itemTypes.create({
name: "Modular Block 1",
api_key: "modular_block1",
modular_block: true,
});
const modularBlock2 = await client.itemTypes.create({
name: "Modular Block 2",
api_key: "modular_block2",
modular_block: true,
});
const itemTypeId = "1234";
const field = await client.fields.create(itemTypeId, {
label: "Structured content",
field_type: "structured_text",
api_key: "content",
validators: {
structured_text_blocks: {
item_types: [modularBlock1.id, modularBlock2.id],
},
structured_text_links: {
item_types: [itemTypeId],
},
},
});
console.log(field);
}
run();
{
id: "Pkg-oztERp6o-Rj76nYKJg",
label: "Title",
field_type: "string",
api_key: "title",
localized: true,
validators: { required: {} },
position: 1,
hint: "This field will be used as post title",
default_value: { en: "A default value", it: "Un valore di default" },
appearance: {
editor: "single_line",
parameters: { heading: false },
addons: [{ id: "1234", field_extension: "lorem_ipsum", parameters: {} }],
},
deep_filtering_enabled: true,
item_type: { type: "item_type", id: "DxMaW10UQiCmZcuuA-IkkA" },
fieldset: null,
}