---
title: Custom modules
description: Define a whole new kind of record, with its own fields.
domain: customfield
status: shipped
visibility: public
last_verified: 2026-07-11
order: 20
---
A custom module is a new kind of record that you define. Where a custom field adds to a built-in record like a customer, a custom module creates a record type that did not exist before: "Contracts", "Assets", "Support tickets", whatever your business needs to track.

## What a module is

A module is a container for records of one kind. You give it a name and an icon, and you add [custom fields](/guide/custom-fields/custom-fields) to it, the same field types you would add to a built-in record. From then on you can create records in that module, each carrying the fields you defined.

Because a module's records are real records, a [lookup field](/guide/custom-fields/custom-fields) on a built-in record can point at them. A custom "Contract" module can be linked from a subscription, so each subscription references its contract.

## Working with module records

Records in a custom module are managed through their own API path. Each module gets endpoints under `/v1/custom/{module}`: create a record with `POST`, list them, fetch one, update one, and delete one. See the [API reference](/reference).

## Edge cases

- **A module is your own record type.** It is not tied to a built-in entity; it stands on its own.
- **Modules and built-in records link through lookup fields.** That is how a subscription references a contract, or a customer references an account manager.
- **A module's fields are custom fields.** The same types and rules apply.
