Create a new field
Body parameters
RFC 4122 UUID of field expressed in URL-safe base64 format
"Pkg-oztERp6o-Rj76nYKJg"
The label of the field
"Title"
Type of input
"string"
Field API key
"title"
Whether the field needs to be multilanguage or not
Optional field validations
{ required: {} }
Field appearance details, plugin configuration and field add-ons
{
editor: "single_line",
parameters: { heading: false },
addons: [{ id: "1234", field_extension: "lorem_ipsum", parameters: {} }],
}
A valid editor can be a DatoCMS default field editor type (ie. "single_line"), or a plugin ID offering a custom field editor
The editor plugin's parameters
An array of add-on plugins with id and parameters
The ID of a plugin offering a field addon
The specific field extension to use for the field (only if the editor is a modern plugin)
The specific field extension to use for the field (only if the editor is a modern plugin)
Ordering index
1
Field hint
"This field will be used as post title"
Default value for Field. When field is localized accepts an object of default values with site locales as keys
{ en: "A default value", it: "Un valore di default" }
Whether deep filtering for block models is enabled in GraphQL or not
Whether Content Link (visual editing) encoding is emitted for this field's value in the Content Delivery API. Defaults to true; can only be set to false on string, text and structured_text fields
Field appearance
This field contains a typo and will be removed in future versions: use appearance instead
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, content_link_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 themodular_blockattribute totrue— 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_blocksvalidator:
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 field = await client.fields.create("UZyfjdBES8y2W2ruMEHSoA", { 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, content_link_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 themodular_blockattribute totrue— 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_blocksandstructured_text_inline_blocksvalidator, and the linkable record models in thestructured_text_linksvalidator:
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 field = await client.fields.create("UZyfjdBES8y2W2ruMEHSoA", { label: "Structured content", field_type: "structured_text", api_key: "content", validators: { structured_text_blocks: { item_types: [modularBlock1.id, modularBlock2.id], }, structured_text_inline_blocks: { item_types: [modularBlock1.id], }, structured_text_links: { item_types: ["UZyfjdBES8y2W2ruMEHSoA"], }, }, });
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, content_link_enabled: true, item_type: { type: "item_type", id: "DxMaW10UQiCmZcuuA-IkkA" }, fieldset: null,}