---
title: Custom Fields
subtitle: >-
  Store arbitrary data on Leads, Contacts, Opportunities, and Custom Activities
  using Custom Fields.
slug: /api/resources/custom-fields
---

Custom Fields let you store arbitrary data on [**Leads**](api:GET/lead/),
[**Contacts**](api:GET/contact/),
[**Opportunities**](api:GET/opportunity/), and
[**Custom Activities**](/api/resources/custom-activities).

When creating a Custom Field, you define its name, the type of data that's going
to be stored on it, whether it can store multiple values or not, who in your
organization can edit its values, etc. In other words, you fully control how
it's going to be displayed in the Close UI and how its values are going to be
validated and stored. This allows you to adjust your Close data to fit your
sales process perfectly.
[Learn more about Custom Fields](https://help.close.com/docs/custom-fields).

There are several endpoints that you can use to manage your Custom Fields:

- [Lead Custom Field API](api:GET/custom_field/lead/)
  (`/custom_field/lead/`) – manage regular Custom Fields assigned to Leads.
- [Contact Custom Field API](api:GET/custom_field/contact/)
  (`/custom_field/contact/`) – manage regular Custom Fields assigned to
  Contacts.
- [Opportunity Custom Field API](api:GET/custom_field/opportunity/)
  (`/custom_field/opportunity/`) – manage regular Custom Fields assigned to
  Opportunities.
- [Activity Custom Field API](api:GET/custom_field/activity/)
  (`/custom_field/activity/`) – manage regular Custom Fields assigned to a
  specific Custom Activity.
- [Custom Object Custom Field API](api:GET/custom_field/custom_object_type/)
  (`/custom_field/custom_object_type/`) – manage regular Custom Fields assigned
  to a specific Custom Object.
- [Shared Custom Field API](api:GET/custom_field/shared/)
  (`/custom_field/shared/`) – manage Shared Custom Fields. These are Custom
  Fields that can be associated with one or more objects. For example, a single
  Shared Custom Field can be assigned to Leads, and several different Custom
  Activities.
- [Shared Custom Field Association API](api:POST/custom_field/shared/{scf_id}/association/)
  (`/custom_field/shared/{cf_id}/association/`) – manage which objects a given
  Shared Custom Field is associated with and control some of the
  association-specific properties (e.g. whether a value for the given Field
  should be required on the given object).
- [Custom Field Schema API](api:GET/custom_field_schema/{object_type}/)
  (`/custom_field_schema/{object_type}/`) – efficiently fetch _all_ (regular and
  shared) Custom Fields and control the order in which they're going to be
  displayed in the UI. _We recommend this endpoint for fetching Custom Fields
  available in your organization._

A Custom Field has the following attributes:

- `name` – the user-readable name of this Field.
- `description` – a longer description of the Field that may be shown to users
  for context. The description may be null and has a 280 character limit.
- `type` – determines the data type of the values that can be stored on this
  Field. The available types are:
  - `text`: accepts any text value, e.g. `"Some Value"`.
  - `number`: accepts numeric values - both integers and decimals, e.g. `2` or
    `5.5`.
  - `date`: accepts date values (without the time component), e.g.
    `"2014-06-12"`.
  - `datetime`: accepts date values (including the time component), e.g.
    `"2014-06-27T22:00:00-08:00"`.
  - `choices:` accepts only the values that are specified in the `choices` field
    of this Custom Field, e.g. `"some valid choice"`.
  - `user`: accepts IDs (recommended) and names (exact match only) of Users who
    are active or former members of your organization (e.g.
    `"user_N6KhMpzHRCYQHdn4gRNIFNN5JExnsrprKA6ekxM63XA"` or `"John Doe"`) and
    always returns IDs.
  - `contact`: accepts IDs of Contacts, limited to the Contacts that exist on
    the Lead you're editing:
    - If you're editing a Lead, only Contacts belonging to this Lead are
      accepted.
    - If you're editing a Contact, only Contacts belonging to the Lead that this
      that this Contact belongs to are accepted.
    - If you're editing an Opportunity, only Contacts belonging to the Lead that
      this Opportunity belongs to are accepted.
    - If you're editing a Custom Activity, only Contacts belonging to the Lead
      that this Custom Activity belongs to are accepted.
    - If you're editing a Custom Object, only Contacts belonging to the Lead
      that this Custom Object belongs to are accepted.
  - `custom_object`: accepts IDs of Custom Object Instances.
    - Can only store Custom Object IDs of a single type, determined by
      `referenced_custom_type_id` listed below.
    - Limited to the Custom Object instances that exist on the Lead you're
      editing, following similar rules to the `contact` field listed above.
  - `textarea`: accepts any text value (just like the `text` type), but displays
    a multi-line textarea in the Close UI. Currently, this type of a Custom
    Field is only supported on
    [**Custom Activities**](/api/resources/custom-activities).
  - `hidden`: accepts any value but is never shown in the UI. It's a good place
    to store information useful only to API integrations.
- `choices` – a list of valid values for a `choices` type Custom Field.
- `accepts_multiple_values` – determines if multiple values can be assigned to
  this Custom Field. Multiple values are currently only supported for the
  `user`, `choices`, `contact`, and `custom_object` type Custom Fields.
- `editable_with_roles` – list of [Roles](api:GET/role/) that can edit the
  values of this Custom Field. Empty if the editing is not restricted.
- `referenced_custom_type_id`: stores the ID of the Custom Object Type this
  field references. Relevant only on `custom_object` type fields.
- `back_reference_is_visible`: If true, this field will also display a back
  reference in the Close UI, listing objects that reference the given Custom
  Object. Relevant only on `custom_object` type fields.

Note that you can only create/edit/delete Custom Fields if your User's Role has
the `manage_organization` permission.
