0

Update custom layouts

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