0

Update custom layout

by
Published Oct 17, 2025
Script zoho Verified

The script

Submitted by hugo697 Bun
Verified 235 days ago
1
//native
2
type Zoho = {
3
  token: string;
4
};
5
/**
6
 * Update custom layout
7
 *
8
 */
9
export async function main(
10
  auth: Zoho,
11
  id: string,
12
  _module: string,
13
  body: {
14
    layouts: {
15
      display_type?: number;
16
      api_name?: string;
17
      has_more_profiles: false | true;
18
      created_time: string;
19
      modified_time: string;
20
      visible: false | true;
21
      source: string;
22
      id: string;
23
      name: string;
24
      display_label: string;
25
      mode: string;
26
      subform_properties: { pinned_column: false | true };
27
      status: string;
28
      show_business_card: false | true;
29
      generated_type: string;
30
      created_for: { name: string; id: string; email?: string };
31
      convert_mapping: {
32
        Contacts: { name: string; id: string };
33
        Deals: {
34
          fields: {
35
            api_name?: string;
36
            field_label?: string;
37
            id?: string;
38
            required?: false | true;
39
          }[];
40
          name: string;
41
          id: string;
42
        };
43
        Accounts: { name: string; id: string };
44
        Invoices: { name: string; id: string };
45
        SalesOrders: { name: string; id: string };
46
      };
47
      modified_by: { name: string; id: string; email?: string };
48
      profiles: {
49
        default: false | true;
50
        name: string;
51
        id: string;
52
        _default_view: { name: string; id: string; type: string };
53
        _default_assignment_view?: {
54
          name?: string;
55
          id?: string;
56
          type?: string;
57
        };
58
      }[];
59
      created_by: { name: string; id: string; email?: string };
60
      sections: {
61
        display_label: string;
62
        sequence_number: number;
63
        isSubformSection: false | true;
64
        tab_traversal: string;
65
        api_name: string;
66
        column_count: number;
67
        name: string;
68
        generated_type: string;
69
        id: string;
70
        type: string;
71
        fields: {
72
          required: false | true;
73
          validation_rule: {};
74
          default_value: {};
75
          sequence_number: number;
76
          section_id: number;
77
          blueprint_supported: false | true;
78
          json_type: string;
79
          length: number;
80
          decimal_place: number;
81
          multi_module_lookup: {};
82
          sharing_properties: {
83
            scheduler_status?: string;
84
            share_preference_enabled?: false | true;
85
            share_permission?: "read-write" | "read-only" | "full-access";
86
          };
87
          currency: {};
88
          file_upolad_optionlist: {
89
            actual_value: string;
90
            display_value: string;
91
          }[];
92
          lookup: {};
93
          subform: {};
94
          formula: {};
95
          multiselectlookup: {};
96
          multiuserlookup: {
97
            display_label: string;
98
            linking_module: {
99
              api_name: string;
100
              id: string;
101
              module_name?: string;
102
              module?: string;
103
            };
104
            connected_module: {
105
              api_name: string;
106
              id: string;
107
              module_name?: string;
108
              module?: string;
109
            };
110
            lookup_apiname: string;
111
            api_name: string;
112
            connectedfield_apiname: string;
113
            connectedlookup_apiname: string;
114
            id: string;
115
            record_access: false | true;
116
          };
117
          pick_list_values: {
118
            colour_code: string;
119
            actual_value: string;
120
            type: "unused" | "used";
121
            id: string;
122
            sequence_number: number;
123
            display_value: string;
124
            reference_value?: string;
125
            deal_category?: string;
126
            probability?: number;
127
            forecast_category?: { id?: string; name?: string };
128
            expected_data_type?: string;
129
            sys_ref_name?: string;
130
            forecast_type?: string;
131
            maps?: { api_name?: string; pick_list_values?: {}[] }[];
132
            _delete?: false | true;
133
            show_value?: false | true;
134
          }[];
135
          allowed_modules: {
136
            api_name: string;
137
            id: string;
138
            module_name?: string;
139
            module?: string;
140
          }[];
141
          hipaa_compliance_enabled: false | true;
142
          hipaa_compliance: {
143
            restricted_in_export: false | true;
144
            restricted: false | true;
145
          };
146
          static_values: {
147
            sequence_number: number;
148
            id: string;
149
            value: string;
150
          }[];
151
          static_field: false | true;
152
          layout_associations: { api_name: string; name: string; id: string }[];
153
          _delete: { permanent: false | true };
154
          associated_module: {
155
            api_name: string;
156
            id: string;
157
            module_name?: string;
158
            module?: string;
159
          };
160
          data_type: string;
161
          operation_type: {
162
            web_update: false | true;
163
            api_create: false | true;
164
            web_create: false | true;
165
            api_update: false | true;
166
          };
167
          system_mandatory: false | true;
168
          webhook: false | true;
169
          virtual_field: false | true;
170
          field_read_only: false | true;
171
          customizable_properties: string[];
172
          read_only: false | true;
173
          custom_field: false | true;
174
          businesscard_supported: false | true;
175
          filterable: false | true;
176
          visible: false | true;
177
          available_in_user_layout: false | true;
178
          display_field: false | true;
179
          pick_list_values_sorted_lexically: false | true;
180
          sortable: false | true;
181
          separator: false | true;
182
          searchable: false | true;
183
          enable_colour_code: false | true;
184
          mass_update: false | true;
185
          created_source: string;
186
          type: string;
187
          display_label: string;
188
          column_name: string;
189
          api_name: string;
190
          display_type: number;
191
          ui_type: number;
192
          colour_code_enabled_by_system: false | true;
193
          quick_sequence_number: string;
194
          email_parser: {
195
            fields_update_supported: false | true;
196
            record_operations_supported: false | true;
197
          };
198
          rollup_summary: {};
199
          refer_from_field: { id: string; api_name: string };
200
          created_time: string;
201
          modified_time: string;
202
          show_type: number;
203
          category: number;
204
          id: string;
205
          profiles: { name: string; id: string; permission_type: string }[];
206
          view_type: {
207
            view: false | true;
208
            edit: false | true;
209
            quick_create: false | true;
210
            create: false | true;
211
          };
212
          unique: {};
213
          sub_module: {
214
            api_name: string;
215
            id: string;
216
            module_name?: string;
217
            module?: string;
218
          };
219
          external: {
220
            show: false | true;
221
            type: string;
222
            allow_multiple_config?: false | true;
223
          };
224
          private?: {
225
            restricted: false | true;
226
            type: string;
227
            export: false | true;
228
          };
229
          convert_mapping: {
230
            Contacts?: string;
231
            Deals?: string;
232
            Accounts?: string;
233
          };
234
          autonumber: {
235
            starting_number_length: number;
236
            prefix: string;
237
            suffix: string;
238
            start_number: number;
239
          };
240
          auto_number: {};
241
          crypt: {
242
            mode: string;
243
            status: number;
244
            column?: string;
245
            table?: string;
246
            encFldIds?: string[];
247
            notify?: string;
248
          };
249
          tooltip: { name: string; value: string };
250
          history_tracking: {
251
            module: {
252
              layout?: {
253
                display_type?: number;
254
                api_name?: string;
255
                has_more_profiles: false | true;
256
                created_time: string;
257
                modified_time: string;
258
                visible: false | true;
259
                source: string;
260
                id: string;
261
                name: string;
262
                display_label: string;
263
                mode: string;
264
                subform_properties: { pinned_column: false | true };
265
                status: string;
266
                show_business_card: false | true;
267
                generated_type: string;
268
                created_for: { name: string; id: string; email?: string };
269
                convert_mapping: {
270
                  Contacts: { name: string; id: string };
271
                  Deals: {
272
                    fields: {
273
                      api_name?: string;
274
                      field_label?: string;
275
                      id?: string;
276
                      required?: false | true;
277
                    }[];
278
                    name: string;
279
                    id: string;
280
                  };
281
                  Accounts: { name: string; id: string };
282
                  Invoices: { name: string; id: string };
283
                  SalesOrders: { name: string; id: string };
284
                };
285
                modified_by: { name: string; id: string; email?: string };
286
                profiles: {
287
                  default: false | true;
288
                  name: string;
289
                  id: string;
290
                  _default_view: { name: string; id: string; type: string };
291
                  _default_assignment_view?: {
292
                    name?: string;
293
                    id?: string;
294
                    type?: string;
295
                  };
296
                }[];
297
                created_by: { name: string; id: string; email?: string };
298
                sections: {
299
                  display_label: string;
300
                  sequence_number: number;
301
                  isSubformSection: false | true;
302
                  tab_traversal: string;
303
                  api_name: string;
304
                  column_count: number;
305
                  name: string;
306
                  generated_type: string;
307
                  id: string;
308
                  type: string;
309
                  fields: {
310
                    required: false | true;
311
                    validation_rule: {};
312
                    default_value: {};
313
                    sequence_number: number;
314
                    section_id: number;
315
                    blueprint_supported: false | true;
316
                    json_type: string;
317
                    length: number;
318
                    decimal_place: number;
319
                    multi_module_lookup: {};
320
                    sharing_properties: {
321
                      scheduler_status?: string;
322
                      share_preference_enabled?: false | true;
323
                      share_permission?:
324
                        | "read-write"
325
                        | "read-only"
326
                        | "full-access";
327
                    };
328
                    currency: {};
329
                    file_upolad_optionlist: {
330
                      actual_value: string;
331
                      display_value: string;
332
                    }[];
333
                    lookup: {};
334
                    subform: {};
335
                    formula: {};
336
                    multiselectlookup: {};
337
                    multiuserlookup: {
338
                      display_label: string;
339
                      linking_module: {
340
                        api_name: string;
341
                        id: string;
342
                        module_name?: string;
343
                        module?: string;
344
                      };
345
                      connected_module: {
346
                        api_name: string;
347
                        id: string;
348
                        module_name?: string;
349
                        module?: string;
350
                      };
351
                      lookup_apiname: string;
352
                      api_name: string;
353
                      connectedfield_apiname: string;
354
                      connectedlookup_apiname: string;
355
                      id: string;
356
                      record_access: false | true;
357
                    };
358
                    pick_list_values: {
359
                      colour_code: string;
360
                      actual_value: string;
361
                      type: "unused" | "used";
362
                      id: string;
363
                      sequence_number: number;
364
                      display_value: string;
365
                      reference_value?: string;
366
                      deal_category?: string;
367
                      probability?: number;
368
                      forecast_category?: { id?: string; name?: string };
369
                      expected_data_type?: string;
370
                      sys_ref_name?: string;
371
                      forecast_type?: string;
372
                      maps?: { api_name?: string; pick_list_values?: {}[] }[];
373
                      _delete?: false | true;
374
                      show_value?: false | true;
375
                    }[];
376
                    allowed_modules: {
377
                      api_name: string;
378
                      id: string;
379
                      module_name?: string;
380
                      module?: string;
381
                    }[];
382
                    hipaa_compliance_enabled: false | true;
383
                    hipaa_compliance: {
384
                      restricted_in_export: false | true;
385
                      restricted: false | true;
386
                    };
387
                    static_values: {
388
                      sequence_number: number;
389
                      id: string;
390
                      value: string;
391
                    }[];
392
                    static_field: false | true;
393
                    layout_associations: {
394
                      api_name: string;
395
                      name: string;
396
                      id: string;
397
                    }[];
398
                    _delete: { permanent: false | true };
399
                    associated_module: {
400
                      api_name: string;
401
                      id: string;
402
                      module_name?: string;
403
                      module?: string;
404
                    };
405
                    data_type: string;
406
                    operation_type: {
407
                      web_update: false | true;
408
                      api_create: false | true;
409
                      web_create: false | true;
410
                      api_update: false | true;
411
                    };
412
                    system_mandatory: false | true;
413
                    webhook: false | true;
414
                    virtual_field: false | true;
415
                    field_read_only: false | true;
416
                    customizable_properties: string[];
417
                    read_only: false | true;
418
                    custom_field: false | true;
419
                    businesscard_supported: false | true;
420
                    filterable: false | true;
421
                    visible: false | true;
422
                    available_in_user_layout: false | true;
423
                    display_field: false | true;
424
                    pick_list_values_sorted_lexically: false | true;
425
                    sortable: false | true;
426
                    separator: false | true;
427
                    searchable: false | true;
428
                    enable_colour_code: false | true;
429
                    mass_update: false | true;
430
                    created_source: string;
431
                    type: string;
432
                    display_label: string;
433
                    column_name: string;
434
                    api_name: string;
435
                    display_type: number;
436
                    ui_type: number;
437
                    colour_code_enabled_by_system: false | true;
438
                    quick_sequence_number: string;
439
                    email_parser: {
440
                      fields_update_supported: false | true;
441
                      record_operations_supported: false | true;
442
                    };
443
                    rollup_summary: {};
444
                    refer_from_field: { id: string; api_name: string };
445
                    created_time: string;
446
                    modified_time: string;
447
                    show_type: number;
448
                    category: number;
449
                    id: string;
450
                    profiles: {
451
                      name: string;
452
                      id: string;
453
                      permission_type: string;
454
                    }[];
455
                    view_type: {
456
                      view: false | true;
457
                      edit: false | true;
458
                      quick_create: false | true;
459
                      create: false | true;
460
                    };
461
                    unique: {};
462
                    sub_module: {
463
                      api_name: string;
464
                      id: string;
465
                      module_name?: string;
466
                      module?: string;
467
                    };
468
                    external: {
469
                      show: false | true;
470
                      type: string;
471
                      allow_multiple_config?: false | true;
472
                    };
473
                    private?: {
474
                      restricted: false | true;
475
                      type: string;
476
                      export: false | true;
477
                    };
478
                    convert_mapping: {
479
                      Contacts?: string;
480
                      Deals?: string;
481
                      Accounts?: string;
482
                    };
483
                    autonumber: {
484
                      starting_number_length: number;
485
                      prefix: string;
486
                      suffix: string;
487
                      start_number: number;
488
                    };
489
                    auto_number: {};
490
                    crypt: {
491
                      mode: string;
492
                      status: number;
493
                      column?: string;
494
                      table?: string;
495
                      encFldIds?: string[];
496
                      notify?: string;
497
                    };
498
                    tooltip: { name: string; value: string };
499
                    history_tracking: {};
500
                    association_details: {
501
                      related_field: {
502
                        api_name: string;
503
                        id: string;
504
                        module_name?: string;
505
                        module?: string;
506
                      };
507
                      lookup_field: {
508
                        api_name: string;
509
                        id: string;
510
                        module_name?: string;
511
                        module?: string;
512
                      };
513
                    };
514
                    additional_column: string;
515
                    field_label: string;
516
                    "common.picklist": {};
517
                    _update_existing_records: false | true;
518
                    number_separator: false | true;
519
                    textarea: { type?: string };
520
                  }[];
521
                  properties: {
522
                    reorder_rows: false | true;
523
                    maximum_rows: number;
524
                    tooltip: { name?: "Info Icon"; value?: string };
525
                  };
526
                  _delete: { permanent: false | true };
527
                }[];
528
                actions_allowed: {
529
                  edit: false | true;
530
                  rename: false | true;
531
                  clone: false | true;
532
                  downgrade: false | true;
533
                  delete: false | true;
534
                  deactivate: false | true;
535
                  set_layout_permissions: false | true;
536
                };
537
              };
538
              display_label?: string;
539
              api_name?: string;
540
              module?: {};
541
              id?: string;
542
              module_name?: string;
543
            };
544
            duration_configured_field: {
545
              api_name: string;
546
              id: string;
547
              module_name?: string;
548
              module?: string;
549
            };
550
          };
551
          association_details: {
552
            related_field: {
553
              api_name: string;
554
              id: string;
555
              module_name?: string;
556
              module?: string;
557
            };
558
            lookup_field: {
559
              api_name: string;
560
              id: string;
561
              module_name?: string;
562
              module?: string;
563
            };
564
          };
565
          additional_column: string;
566
          field_label: string;
567
          "common.picklist": {};
568
          _update_existing_records: false | true;
569
          number_separator: false | true;
570
          textarea: { type?: string };
571
        }[];
572
        properties: {
573
          reorder_rows: false | true;
574
          maximum_rows: number;
575
          tooltip: { name?: "Info Icon"; value?: string };
576
        };
577
        _delete: { permanent: false | true };
578
      }[];
579
      actions_allowed: {
580
        edit: false | true;
581
        rename: false | true;
582
        clone: false | true;
583
        downgrade: false | true;
584
        delete: false | true;
585
        deactivate: false | true;
586
        set_layout_permissions: false | true;
587
      };
588
    }[];
589
  },
590
) {
591
  const url = new URL(`https://zohoapis.com/crm/v8/settings/layouts/${id}`);
592
  for (const [k, v] of [["module", _module]]) {
593
    if (v !== undefined && v !== "" && k !== undefined) {
594
      url.searchParams.append(k, v);
595
    }
596
  }
597
  const response = await fetch(url, {
598
    method: "PATCH",
599
    headers: {
600
      "Content-Type": "application/json",
601
      Authorization: "Zoho-oauthtoken " + auth.token,
602
    },
603
    body: JSON.stringify(body),
604
  });
605
  if (!response.ok) {
606
    const text = await response.text();
607
    throw new Error(`${response.status} ${text}`);
608
  }
609
  return await response.json();
610
}
611