CMA - How to create nested block

We do have some parallel blocks, which basically has a parent-child relationship, would like to convert to nested block. I like to do this programmatically as there are a lot. Can we just get the blocks, and create nested blocks with those block id? or just nested modular blocks? Couldn’t see the API here: Update a record - Record - Content Management API

1 Like

Hello @rislam

I’ve made a sample script on how to turn a given 2 sibling blocks relation in a model, into a parent/child block relation on all records from said model, it may need some adjustments for your use case, but the general idea is this one:

const { SiteClient, buildModularBlock } = require("datocms-client");
const client = new SiteClient("YOUR_DATO_FULL_ACCESS_TOKEN");

const getAllRecordsFromModel = async (modelApiKey) => {
  const records = await client.items.all({
    filter: {
      type: modelApiKey, //the name of the model you want to make that change
  return records;

const updateRecord = async (recordId, block1Id, block2Id) => {
  //updates a single record with the 2 sibling blocks
  client.items.update(recordId, {
    block1field: [
        //the now parent block
        itemType: block1Id,
        block1title: "block1 title test", //the other fields of the now parent block
        block2: [
            //the now child block
            itemType: block2Id,
            block2title: "block2 title test", //all fields of the now child block, here you may also get the old values from the sibling block if you want

const updateAllRecordsFromAModel = async (
) => {
  //updates all records from te model
  for (record of await getAllRecordsFromModel(modelApiKey)) {
    await updateRecord(, block1Id, block2Id);
  await client.field.destroy(modelApiKey + "::" + childBlockFieldId); //removes the sibling block field, as it is now a child block

//now the function call itself
1 Like

So buildModularBlock inside buildModularBlock works. Thank you very much mate, appreciate it very much.