> ## Documentation Index
> Fetch the complete documentation index at: https://developers.hubspot.jp/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# CRM | カスタムオブジェクト

export const ScopesList = ({scopes = [], description = "この API には、次のいずれかのスコープが必要です。"}) => {
  if (!scopes || scopes.length === 0) {
    return null;
  }
  const sortedScopes = scopes.sort((a, b) => a.localeCompare(b));
  return <div>
      <div className="text-sm mb-2">{description}</div>
      <div>
        {sortedScopes.map((scope, index) => <div key={index}>
            <code>
              <span className="text-xs">{scope}</span>
            </code>
          </div>)}
      </div>
    </div>;
};

export const postmanIcon = <svg xmlns="http://www.w3.org/2000/svg" width={25} height={25} preserveAspectRatio="xMidYMid" viewBox="0 0 256 256">
    <path fill="#FF6C37" d="M254.953 144.253c8.959-70.131-40.569-134.248-110.572-143.206C74.378-7.912 10.005 41.616 1.047 111.619c-8.959 70.003 40.569 134.248 110.572 143.334 70.131 8.959 134.248-40.569 143.334-110.7Z" />
    <path fill="#FFF" d="m174.2 82.184-54.007 54.007-15.229-15.23c53.11-53.11 58.358-48.503 69.236-38.777Z" />
    <path fill="#FF6C37" d="M120.193 137.47c-.384 0-.64-.128-.895-.384l-15.358-15.229a1.237 1.237 0 0 1 0-1.792c54.007-54.006 59.638-48.887 71.028-38.649.255.256.383.512.383.896s-.128.64-.383.896l-54.007 53.878c-.128.256-.512.384-.768.384Zm-13.437-16.509 13.437 13.438 52.087-52.087c-9.47-8.446-15.87-11.006-65.524 38.65Z" />
    <path fill="#FFF" d="m135.679 151.676-14.718-14.718 54.007-54.006c14.46 14.59-7.167 38.265-39.29 68.724Z" />
    <path fill="#FF6C37" d="M135.679 152.956c-.384 0-.64-.128-.896-.384l-14.718-14.718c-.256-.256-.256-.512-.256-.896s.128-.64.384-.895L174.2 82.056a1.237 1.237 0 0 1 1.791 0 15.58 15.58 0 0 1 4.991 11.902c-.256 14.206-16.38 32.25-44.28 58.614-.383.256-.767.384-1.023.384Zm-12.926-15.998c8.19 8.319 11.646 11.646 12.926 12.926 21.5-20.476 42.36-41.464 42.488-55.926.128-3.327-1.152-6.655-3.327-9.214l-52.087 52.214Z" />
    <path fill="#FFF" d="m105.22 121.345 10.878 10.878c.256.256.256.512 0 .768-.128.128-.128.128-.256.128l-22.524 4.863c-1.152.128-2.175-.64-2.431-1.791-.128-.64.128-1.28.512-1.664l13.053-13.054c.256-.256.64-.384.768-.128Z" />
    <path fill="#FF6C37" d="M92.934 139.262c-1.92 0-3.327-1.536-3.327-3.455 0-.896.384-1.792 1.024-2.432l13.053-13.054c.768-.64 1.792-.64 2.56 0l10.878 10.878c.768.64.768 1.792 0 2.56-.256.256-.512.384-.896.512l-22.524 4.863c-.256 0-.512.128-.768.128Zm11.902-16.51-12.542 12.543c-.256.256-.383.64-.128 1.024.128.383.512.511.896.383l21.116-4.607-9.342-9.342Z" />
    <path fill="#FFF" d="M202.739 52.238c-8.191-7.935-21.373-7.679-29.307.64-7.935 8.318-7.679 21.372.64 29.306A20.678 20.678 0 0 0 199.155 85l-14.59-14.59 18.174-18.172Z" />
    <path fill="#FF6C37" d="M188.405 89.223c-12.158 0-22.012-9.854-22.012-22.012 0-12.158 9.854-22.012 22.012-22.012 5.631 0 11.134 2.176 15.23 6.143.255.256.383.512.383.896s-.128.64-.384.895L186.357 70.41l13.566 13.566c.512.512.512 1.28 0 1.792l-.256.256c-3.327 2.047-7.295 3.199-11.262 3.199Zm0-41.337c-10.75 0-19.452 8.703-19.324 19.453 0 10.75 8.702 19.452 19.452 19.324 2.944 0 5.887-.64 8.575-2.047l-13.438-13.31c-.256-.256-.384-.512-.384-.896s.128-.64.384-.895l17.149-17.15c-3.456-2.943-7.807-4.479-12.414-4.479Z" />
    <path fill="#FFF" d="m203.122 52.622-.255-.256-18.301 18.044 14.461 14.462c1.408-.896 2.816-1.92 3.967-3.072a20.51 20.51 0 0 0 .128-29.178Z" />
    <path fill="#FF6C37" d="M199.155 86.28c-.384 0-.64-.128-.896-.384l-14.589-14.59c-.256-.256-.384-.512-.384-.896s.128-.64.384-.895l18.173-18.173a1.237 1.237 0 0 1 1.791 0l.384.256c8.575 8.574 8.575 22.396.128 31.098-1.28 1.28-2.687 2.432-4.223 3.328-.384.128-.64.256-.768.256Zm-12.798-15.87 12.926 12.926c1.024-.64 2.048-1.536 2.816-2.304 7.294-7.294 7.678-19.196.64-26.875L186.357 70.41Z" />
    <path fill="#FFF" d="M176.375 84.488a7.879 7.879 0 0 0-11.134 0l-48.247 48.247 8.063 8.063 51.062-44.792c3.328-2.816 3.584-7.807.768-11.134-.256-.128-.384-.256-.512-.384Z" />
    <path fill="#FF6C37" d="M124.929 142.077c-.384 0-.64-.128-.896-.383l-8.063-8.063a1.237 1.237 0 0 1 0-1.792l48.247-48.247a9.115 9.115 0 0 1 12.926 0 9.115 9.115 0 0 1 0 12.926l-.384.384-51.063 44.792c-.128.255-.384.383-.767.383Zm-6.143-9.342 6.27 6.271 50.167-44.024c2.816-2.304 3.072-6.527.768-9.342-2.303-2.816-6.526-3.072-9.342-.768-.128.128-.256.256-.512.384l-47.351 47.48Z" />
    <path fill="#FFF" d="M80.009 187.637c-.512.256-.768.768-.64 1.28l2.175 9.214c.512 1.28-.256 2.816-1.663 3.2-1.024.384-2.176 0-2.816-.768l-14.077-13.95 45.943-45.943 15.87.256 10.75 10.75c-2.56 2.175-18.045 17.149-55.542 35.961Z" />
    <path fill="#FF6C37" d="M78.985 202.61c-1.024 0-2.048-.383-2.688-1.151l-13.95-13.95c-.255-.256-.383-.512-.383-.896 0-.383.128-.64.384-.895l45.944-45.944c.256-.256.64-.384.895-.384l15.87.256c.383 0 .64.128.895.384l10.75 10.75c.256.256.384.64.384 1.024s-.128.64-.512.896l-.895.767c-13.566 11.902-31.995 23.804-54.902 35.194l2.175 9.086c.384 1.664-.384 3.456-1.92 4.352-.767.384-1.407.512-2.047.512Zm-14.078-15.997 13.182 13.054c.384.64 1.152.896 1.792.512.64-.384.896-1.152.512-1.792l-2.176-9.214c-.256-1.152.256-2.176 1.28-2.688 22.652-11.39 40.952-23.163 54.39-34.81l-9.47-9.47-14.718-.256-44.792 44.664Z" />
    <path fill="#FFF" d="m52.11 197.62 11.006-11.007 16.38 16.381-26.107-1.791c-1.151-.128-1.92-1.152-1.791-2.304 0-.512.128-1.024.512-1.28Z" />
    <path fill="#FF6C37" d="m79.497 204.146-26.236-1.791c-1.92-.128-3.199-1.792-3.071-3.712.128-.768.384-1.535 1.024-2.047L62.22 185.59a1.237 1.237 0 0 1 1.792 0l16.38 16.38c.385.385.512.897.257 1.408-.256.512-.64.768-1.152.768Zm-16.381-15.74-10.11 10.11c-.384.255-.384.895 0 1.151.127.128.255.256.511.256l22.652 1.536-13.053-13.054ZM104.452 146.557c-.768 0-1.28-.64-1.28-1.28 0-.384.128-.64.384-.896l12.414-12.414a1.237 1.237 0 0 1 1.792 0l8.062 8.063c.384.384.512.768.384 1.28-.128.384-.512.767-1.023.895l-20.477 4.352h-.256Zm12.414-11.902-8.446 8.446 13.821-2.943-5.375-5.503Z" />
    <path fill="#FFF" d="m124.8 140.926-14.077 3.071c-1.024.256-2.048-.384-2.303-1.408-.128-.64 0-1.28.511-1.791l7.807-7.807 8.063 7.935Z" />
    <path fill="#FF6C37" d="M110.467 145.277a3.168 3.168 0 0 1-3.2-3.2c0-.895.385-1.663.897-2.303l7.806-7.807a1.237 1.237 0 0 1 1.792 0l8.062 8.063c.384.384.512.768.384 1.28-.128.384-.512.767-1.023.895l-14.078 3.072h-.64Zm6.399-10.622-6.91 6.91c-.257.257-.257.512-.129.768s.384.384.768.384l11.774-2.56-5.503-5.502ZM203.25 64.907c-.256-.767-1.151-1.151-1.92-.895-.767.255-1.151 1.151-.895 1.92 0 .127.128.255.128.383.768 1.536.512 3.455-.512 4.863-.512.64-.384 1.536.128 2.048.64.512 1.536.384 2.048-.256 1.92-2.432 2.303-5.503 1.023-8.063Z" />
  </svg>;

export const SupportedProducts = ({marketing, sales, service, cms, marketingLevel, salesLevel, serviceLevel, cmsLevel}) => {
  const translations = {
    header: "サポートされる製品",
    description: "次のいずれかの製品またはそれ以上が必要です。",
    productNames: {
      marketing: "Marketing Hub",
      sales: "Sales Hub",
      service: "Service Hub",
      cms: "Content Hub"
    },
    tiers: {
      free: "無料ツール",
      starter: "Starter",
      professional: "Professional",
      enterprise: "Enterprise"
    }
  };
  const translateTier = tier => {
    if (!tier) return '';
    const lowerTier = tier.toLowerCase();
    return translations.tiers[lowerTier] || tier;
  };
  const products = [{
    name: marketing ? translations.productNames.marketing : '',
    level: translateTier(marketingLevel),
    icon: "https://mintlify-assets.b-cdn.net/Icons/marketing-bolt.svg",
    alt: "Marketing Hub"
  }, {
    name: sales ? translations.productNames.sales : '',
    level: translateTier(salesLevel),
    icon: "https://mintlify-assets.b-cdn.net/Icons/sales-star.svg",
    alt: "Sales Hub"
  }, {
    name: service ? translations.productNames.service : '',
    level: translateTier(serviceLevel),
    icon: "https://mintlify-assets.b-cdn.net/Icons/service-heart.svg",
    alt: "Service Hub"
  }, {
    name: cms ? translations.productNames.cms : '',
    level: translateTier(cmsLevel),
    icon: "https://mintlify-assets.b-cdn.net/Icons/content-play.svg",
    alt: "Content Hub"
  }].filter(product => product.name && product.level);
  if (products.length === 0) return null;
  return <div>
      <div className="text-sm mb-2">{translations.description}</div>
      <div className={`grid ${products.length === 1 ? 'grid-cols-1' : 'grid-cols-2'} gap-1.5`}>
        {products.map((product, index) => <div key={index} style={{
    display: 'flex',
    alignItems: 'center'
  }}>
            <img src={product.icon} alt={product.alt} className="w-3.5 h-3.5 mr-1.5 mt-2.5 mb-2.5 flex-shrink-0 align-middle" />
            <span className="font-medium mr-1 text-sm">{product.name} -</span>
            <span className="text-sm">{product.level}</span>
          </div>)}
      </div>
    </div>;
};

<AccordionGroup>
  <Accordion title="サポートされる製品" defaultOpen="true" icon="cubes">
    <SupportedProducts marketing={true} marketingLevel="enterprise" sales={true} salesLevel="enterprise" service={true} serviceLevel="enterprise" cms={true} cmsLevel="enterprise" />
  </Accordion>

  <Accordion title="必須スコープ" icon="key">
    <ScopesList
      scopes={[
  '/crm/v3/schemas/{objectTypeId}',
  '/crm/v3/schemas/p_{object_name}',
  'https://api.hubapi.com/crm/v3/schemas/2-3465404',
  'https://api.hubapi.com/crm/v3/schemas/p_lender'
]}
    />
  </Accordion>
</AccordionGroup>

<Card title="Run in Postman" href="https://app.getpostman.com/run-collection/40a2452fc88665fbe786" icon={postmanIcon} horizontal={true} />

<RelatedApiLink />

HubSpotアカウントごとに、標準CRMオブジェクトとして、コンタクト、会社、取引、チケットがあります。ビジネスニーズに基づいてCRMデータを表示し、整理するためのカスタムオブジェクトを作成することもできます。HubSpotで[カスタムオブジェクトを作成](https://knowledge.hubspot.com/ja/object-settings/create-custom-objects)するか、カスタムオブジェクトAPIを使用して、カスタムオブジェクト、プロパティー、他のCRMオブジェクトとの関連付けを定義できます。

このページでは、APIを使用してカスタムオブジェクトを作成、管理する方法を説明し、[例を交えてカスタムオブジェクトの作成手順](#custom-object-example)を解説します。

カスタムオブジェクトの作成の詳細については、HubSpot開発者ブログの以下の投稿をご参照ください。

* [拡張可能なカスタムオブジェクトの作成方法](https://developers.hubspot.com/blog/how-to-think-like-an-architect-by-building-scalable-custom-objects)
* [非公開アプリを使用したカスタムオブジェクトの作成方法](https://developers.hubspot.com/blog/how-to-build-a-custom-object-using-private-apps)

<Warning>
  ### 注：

  注：カスタムオブジェクトはアカウントごとに固有であり、作成できるカスタムオブジェクトの数にはご契約内容に応じて制限があります。適用される上限について詳しくは、[HubSpot製品・サービスカタログ](https://legal.hubspot.com/hubspot-product-and-services-catalog)をご参照ください。
</Warning>

## 認証方法

次の認証方法のいずれかを使用して、カスタムオブジェクトの作成、読み取り、更新を行うことができます。

* [OAuth](https://developers.hubspot.com/custom-objects-schema-pilot)
* [非公開アプリのアクセストークン](/api-reference/auth-oauth-v1/guide)

## カスタムオブジェクトを作成する

カスタムオブジェクトを作成するには、まず、オブジェクトスキーマを定義する必要があります。スキーマには、オブジェクトの名前、プロパティー、および他のCRMオブジェクトとの関連付けを含めます。スキーマリクエストの詳細については、この記事の上部の「オブジェクトスキーマ」セクションでご確認いただけます。また、[サンプルに関する手順を追った説明](#custom-object-example)でリクエストの例を確認することもできます。

カスタムオブジェクトのスキーマを作成するには、`crm/v3/schemas`に対して`POST`リクエストを送信します。リクエスト本文に、オブジェクトスキーマの定義（オブジェクトの名前、プロパティー、関連付け）を含めます。

カスタムオブジェクトに名前を付ける際は、次の点に留意してください。

* オブジェクトを作成した後に、オブジェクトの名前とラベルを変更することはできません。
* 名前には、文字、数字、アンダースコアのみを使用できます。
* 名前はアルファベットで始める必要があります。
* 製品の特定の部分では、長いラベルが切り詰められる場合があります。

オブジェクトのプロパティーと関連付けに必要な定義については、以下の説明をお読みください。

### プロパティー

リクエスト本文で定義したプロパティーは、個々のカスタムオブジェクトレコードに情報を格納するために使用されます。

<Warning>
  ### 注：

  注：HubSpotアカウントで、カスタムオブジェクトごとに作成できる[固有の値のプロパティー](/guides/crm/understanding-the-crm#:~:text=Creating%20your%20own%20unique%20identifiers)は10件までです。
</Warning>

定義したプロパティーを使用して、以下のプロパティーベースのフィールドに値を入力します。

* **requiredProperties**: 新しいカスタムオブジェクトレコードを作成するときに必要なプロパティー。
* **searchableProperties**: HubSpotでの検索に使用するためにインデックス付けされるプロパティー。
* **primaryDisplayProperty**: 個々のカスタムオブジェクトレコードに名前を付けるために使用されるプロパティー。
* **secondaryDisplayProperties**: primaryDisplayPropertyに属する個々のレコードに表示されるプロパティー。

<Frame>
  <img src="https://www.hubspot.jp/hubfs/Knowledge_Base_2021/Developer/custom-object-secondary-display-properties0.png" alt="custom-object-secondary-display-properties0" />
</Frame>

* `secondaryDisplayProperties`にリストされる最初のプロパティーは、そのタイプが以下のいずれかの場合、オブジェクト一覧ページにも4つ目のフィルターとして追加されます。

  * `string`
  * `number`
  * `enumeration`
  * `boolean`
  * `datetime`

<Frame>
  <img src="https://www.hubspot.jp/hubfs/Knowledge_Base_2021/Developer/custom-object-dashboard-filter0.png" alt="custom-object-dashboard-filter0" />
</Frame>

* UIから表示プロパティーを削除するには、一度プロパティーを削除してから再作成する必要があります。

デフォルトでは、スキーマリクエストによってプロパティーを作成する際に、`type`プロパティーは`string`に設定され、`fieldType`プロパティーは`text`に設定されます。以下の値を使用して、さまざまなタイプのプロパティーを作成できます。

| `type`        | 説明                                                                                            | 有効な`fieldType`値                               |
| ------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------- |
| `enumeration` | 一連のオプションを表す文字列。各オプションをセミコロンで区切って入力します。                                                        | `booleancheckbox`、`checkbox`、`radio`、`select` |
| `date`        | 特定の年、月、日を表す[ISO 8601形式の値](https://ja.wikipedia.org/wiki/ISO_8601)。                            | `date`                                        |
| `dateTime`    | 特定の年、月、日、時刻を表す[ISO 8601形式の値](https://ja.wikipedia.org/wiki/ISO_8601)。HubSpotアプリ上には時刻は表示されません。 | `date`                                        |
| `string`      | プレーンテキスト文字列。文字数の上限は65,536文字です。                                                                | `file`、`text`、`textarea`                      |
| `number`      | 小数第1位までの数値。                                                                                   | `number`                                      |

| `fieldType`       | 説明                                                                      |
| ----------------- | ----------------------------------------------------------------------- |
| `booleancheckbox` | ユーザーが「はい」または「いいえ」のいずれかを選択できる入力。フォーム内で使用する場合、1つのチェックボックスとして表示されます。       |
| `checkbox`        | プロパティー内で使用可能な選択肢の中からユーザーが複数選択できるチェックボックスのリスト。                           |
| `date`            | 日付値。日付入力として表示されます。                                                      |
| `file`            | フォームへのファイルのアップロードが可能。ファイルへのURLリンクとして格納および表示されます。                        |
| `number`          | 10進数または科学的表記で記述された、数字の文字列または数値。                                         |
| `radio`           | プロパティーで使用可能な選択肢の中からユーザーがいずれか1つを選択できる入力。フォーム内で使用する場合、一連のラジオボタンとして表示されます。 |
| `select`          | プロパティーで許容される選択肢の中からユーザーがいずれか1つを選択できるドロップダウンの入力。                         |
| `text`            | プレーンテキスト文字列。単行テキスト入力として表示されます。                                          |
| `textarea`        | プレーンテキスト文字列。単行テキスト入力として表示されます。                                          |

### 関連付け

HubSpotは、カスタムオブジェクトに自動的にEメール、ミーティング、メモ、タスク、コール、コミュニケーションオブジェクトを関連付けます。さらに、カスタムオブジェクトに他の標準的なHubSpotオブジェクトや他のカスタムオブジェクトを関連付けることもできます。

スキーマ作成リクエストによって関連付けを作成する場合は、以下の例に示すように、名前を使用して標準のオブジェクトを識別し、`objectTypeId`値を使用してカスタムオブジェクトを識別します。例：

```json theme={null}

"associatedObjects": [
  "CONTACT",
  "COMPANY",
  "TICKET",
  "DEAL",
  "2-3453932"
]
```

## 既存のカスタムオブジェクトを取得する

全てのカスタムオブジェクトを取得するには、`/crm/v3/schemas`に対して`GET`リクエストを送信します。

特定のカスタムオブジェクトを取得する場合は、次のエンドポイントのいずれかに対して`GET`リクエストを送信します。

* `/crm/v3/schemas/{fullyQualifiedName}`オブジェクトのスキーマに含まれる

  `fullyQualifiedName`は、そのオブジェクトのスキーマに含まれます。これは、`p{portal_id}_{object_name}`から派生したものです。[アカウント情報API](/api-reference/account-account-info-v3/guide)を使用して、アカウントのポータルIDを確認できます。

例えば、IDが`1234`で、`lender`という名前のオブジェクトを持つアカウントの場合、リクエストURLは次のようになります。

* [`https://api.hubapi.com/crm/v3/schemas/p1234_lende`](https://api.hubapi.com/crm/v3/schemas/p1234_lender)

## カスタムオブジェクトレコードを取得する

カスタムオブジェクトレコードを取得することもできます。

* レコードIDの値を使用して特定のレコードを取得するには、`crm/v3/objects/{objectType}/{recordId}`に対して`GET`リクエストを送信します。

このエンドポイントに対し、リクエストのURLに次のクエリーパラメーターを含めることができます。

| パラメーター                  | 説明                                                                                                                                      |
| ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| `properties`            | レスポンスで返されるプロパティーのカンマ区切りリスト。リクエスト対象のカスタムオブジェクトレコードで、指定したプロパティーに値が設定されていない場合、そのプロパティーはレスポンスに含まれません。                                       |
| `propertiesWithHistory` | レスポンスで返される現在および過去のプロパティーのカンマ区切りリスト。リクエスト対象のカスタムオブジェクトレコードで、指定したプロパティーに値が設定されていない場合、そのプロパティーはレスポンスに含まれません。                               |
| `associations`          | 関連付けられたIDを取得する対象のオブジェクトのカンマ区切りリスト。存在しない関連付けを指定した場合、その関連付けはレスポンスで返されません。詳しくは[関連付けAPI](/api-reference/crm-associations-v4/guide)をご参照ください。 |

* 複数のレコードを取得するには、`crm/v3/objects/{objectType}/batch/read`に対して`POST`リクエストを送信します。このバッチエンドポイントは関連付けを取得<u>できません</u>。詳しくは、[関連付けAPI](/api-reference/crm-associations-v4/guide)を使用して関連付けを一括読み取りする方法をご参照ください。

リクエストで、レコードID（`hs_object_id`）またはカスタムの[固有のIDプロパティー](/api-reference/crm-properties-v3/guide#create-unique-identifier-properties)を取得できます。デフォルトで、リクエストの`id`値はレコードIDを参照するため、レコードIDを使って取得するときには`idProperty`パラメーターは不要です。カスタムの固有の値のプロパティーを使用する場合は、`idProperty`パラメーターを含める必要があります。

例えば、カスタムオブジェクトレコードを一括で取得する場合のリクエストは、次のいずれかのようになります。

```json theme={null}
{
  "properties": ["petname"],
  "inputs": [
    {
      "id": "12345"
    },
    {
      "id": "67891"
    }
  ]
}
```

```json theme={null}
{
  "properties": ["petname"],
  "idProperty": "uniquepropertyexample",
  "inputs": [
    {
      "id": "abc"
    },
    {
      "id": "def"
    }
  ]
}
```

プロパティーの現在の値と過去の値を含むカスタムオブジェクトレコードを取得する場合のリクエストは、次のようになります。

```json theme={null}
{
  "propertiesWithHistory": ["pet_owner"],
  "inputs": [
    {
      "id": "12345"
    },
    {
      "id": "67891"
    }
  ]
}
```

## 既存のカスタムオブジェクトを更新する

オブジェクトのスキーマを更新するには、`https://api.hubapi.com/crm/v3/schemas/{objectTypeId}`に対して`PATCH`リクエストを送信します。

カスタムオブジェクトを定義した後は、以下の点にご留意ください。

* オブジェクトの名前とラベル（単数形と複数形）を変更することは<u>できません</u>。
* `requiredProperties`、`searchableProperties`、`primaryDisplayProperty`、`secondaryDisplayProperties`は、オブジェクトのスキーマを更新することで変更できます。新しいプロパティーを、必須プロパティー、検索可能プロパティー、または表示プロパティーとして設定するには、スキーマを更新する前にそのプロパティーを作成する必要があります。
* カスタムオブジェクトプロパティーは、[HubSpotで](https://knowledge.hubspot.com/ja/properties/create-and-edit-properties#view-and-edit-properties)、または[プロパティーAPI](/api-reference/crm-properties-v3/guide)を使用して作成および編集できます。

### 関連付けを更新する

カスタムオブジェクトに他のオブジェクト関連付けを追加するには、`/crm/v3/schemas/_{objectTypeId}_/associations`に対して`POST`リクエストを送信します。

カスタムオブジェクトには、標準のHubSpotオブジェクト（「コンタクト」「会社」「取引」「チケット」など）または他のカスタムオブジェクトを関連付けることができます。`toObjectTypeId`フィールドで、カスタムオブジェクトはその`objectTypeId`値で識別し、標準のオブジェクトはその名前で識別します。以下に例を示します。

```json theme={null}
{
  "fromObjectTypeId": "2-3444025",
  "toObjectTypeId": "ticket",
  "name": "cat_to_ticket"
}
```

## カスタムオブジェクトを削除する

カスタムオブジェクトは、そのタイプの全てのオブジェクトインスタンスが削除された後にのみ削除できます。カスタムオブジェクトを削除するには、`/crm/v3/schemas/{objectType}`に対して`DELETE`リクエストを送信します。

削除したオブジェクトと同じ名前で新しいカスタムオブジェクトを作成する必要がある場合は、`/crm/v3/schemas/{objectType}?archived=true`に`DELETE`リクエストを送信して、スキーマのハード（物理）削除を行う必要があります。カスタムオブジェクトタイプの削除は、そのタイプの全てのオブジェクトインスタンス、関連付け、カスタムオブジェクトのプロパティーの削除後のみでしか行えません。

## カスタムオブジェクトの例

以下で、カスタムオブジェクトのサンプルの作成手順を詳しく見ていきます。記載されているリクエストの詳細については、記事の上部にある「オブジェクト」セクションをご参照ください。

ここでは以下の手順について取り上げます。

1. カスタムオブジェクトスキーマの作成
2. カスタムオブジェクトレコードの作成
3. カスタムオブジェクトレコードへのHubSpotコンタクトの関連付け
4. カスタムオブジェクトとHubSpotチケットとの間の新しい関連付け定義の作成
5. 新しいプロパティー定義の作成
6. 新しいプロパティーの追加による、オブジェクトスキーマ（`secondaryDisplayProperties`）の更新

   ***

**目標**: CarSpotという自動車販売店では、在庫情報をHubSpotに保存するために、カスタムオブジェクトを使用したいと考えています。車両の所有権と購入をトラッキングするために、車両をコンタクトレコードに関連付ける必要があります。その過程で、HubSpotチケットとカスタムプロパティーを使用して車両メンテナンスのトラッキングも行います。

### オブジェクトスキーマを作成する

CarSpotでは、次の属性をプロパティーとして表すことができるオブジェクトスキーマを作成する必要があります。

1. **条件（新車または中古車）**: enumeration
2. **販売店受付日**: date
3. **製造年**: number
4. **メーカー**: string
5. **モデル**: string
6. **VIN**: string（固有の値）
7. **色**: string
8. **走行距離**: number
9. **価格**: number
10. **メモ**: string

また、オブジェクトの使用方法に関するコンテキストを提供する説明を追加し、カスタムオブジェクトと標準のコンタクトオブジェクトの関連付けを定義して、車を見込み客に結び付けられるようにします。

データモデルが完成したら、オブジェクトスキーマを作成するために、`/crm/v3/schemas`に対して`POST`リクエストを送信します。このリクエストの本文は次のように設定します。

```json theme={null}
{
  "name": "cars",
  "description": "Cars keeps track of cars currently or previously held in our inventory.",
  "labels": {
    "singular": "Car",
    "plural": "Cars"
  },
  "primaryDisplayProperty": "model",
  "secondaryDisplayProperties": ["make"],
  "searchableProperties": ["year", "make", "vin", "model"],
  "requiredProperties": ["year", "make", "vin", "model"],
  "properties": [
    {
      "name": "condition",
      "label": "Condition",
      "type": "enumeration",
      "fieldType": "select",
      "options": [
        {
          "label": "New",
          "value": "new"
        },
        {
          "label": "Used",
          "value": "used"
        }
      ]
    },
    {
      "name": "date_received",
      "label": "Date received",
      "type": "date",
      "fieldType": "date"
    },
    {
      "name": "year",
      "label": "Year",
      "type": "number",
      "fieldType": "number"
    },
    {
      "name": "make",
      "label": "Make",
      "type": "string",
      "fieldType": "text"
    },
    {
      "name": "model",
      "label": "Model",
      "type": "string",
      "fieldType": "text"
    },
    {
      "name": "vin",
      "label": "VIN",
      "type": "string",
      "hasUniqueValue": true,
      "fieldType": "text"
    },
    {
      "name": "color",
      "label": "Color",
      "type": "string",
      "fieldType": "text"
    },
    {
      "name": "mileage",
      "label": "Mileage",
      "type": "number",
      "fieldType": "number"
    },
    {
      "name": "price",
      "label": "Price",
      "type": "number",
      "fieldType": "number"
    },
    {
      "name": "notes",
      "label": "Notes",
      "type": "string",
      "fieldType": "text"
    }
  ],
  "associatedObjects": ["CONTACT"]
}
```

<Tip>
  オブジェクトスキーマを作成した後、CarSpotは新しいオブジェクトの`{objectTypeId}`フィールドの値を確認します。後でオブジェクトを取得および更新する際にこの値を使用するためです。必要に応じて、`{fullyQualifiedName}`の値を使用することもできます。
</Tip>

### カスタムオブジェクトレコードを作成する。

カスタムオブジェクトが作成されたら、CarSpotは、在庫にある車両ごとにオブジェクトレコードを作成できます。

最初の車両のオブジェクトレコードを作成するために、次のようにリクエスト本文を設定した`POST`リクエストを`/crm/v3/objects/2-3465404`に対して送信します。

```json theme={null}
{
  "properties": {
    "condition": "used",
    "date_received": "1582416000000",
    "year": "2014",
    "make": "Nissan",
    "model": "Frontier",
    "vin": "4Y1SL65848Z411439",
    "color": "White",
    "mileage": "80000",
    "price": "12000",
    "notes": "Excellent condition. No accidents."
  }
}
```

このAPI呼び出しの応答は次のようになります。

```json theme={null}
{
  "id": "181308",
  "properties": {
    "color": "White",
    "condition": "used",
    "make": "Nissan",
    "mileage": "80000",
    "model": "Frontier",
    "vin": "4Y1SL65848Z411439",
    "notes": "Excellent condition. No accidents.",
    "price": "12000",
    "year": "2014",
    "date_received": "1582416000000"
  },
  "createdAt": "2020-02-23T01:44:11.035Z",
  "updatedAt": "2020-02-23T01:44:11.035Z",
  "archived": false
}
```

レコードが作成された後は、`id`値を使用して、車両に既存のコンタクトを関連付けることができます。

<Warning>
  後から、このレコードと特定のプロパティーを取得する場合は、`https://api.hubapi.com/crm/v3/objects/2-3465404/181308?portalId=1234567&properties=year&properties=make&properties=model`に対して`GET`リクエストを送信します。
</Warning>

### カスタムオブジェクトレコードを別のレコードに関連付ける

新しい車両レコードのID（`181308`）と別のレコードのIDを使用して、カスタムオブジェクトレコードを別のオブジェクトのレコードに関連付けることができます。

関連付けを作成するには、`/crm/v3/objects/{objectType}/{objectId}/associations/{toObjectType}/{toObjectId}/{associationType}`に対して`PUT`リクエストを送信します。オブジェクトの関係がすでに[定義](#defining-a-new-association)されている場合、`associationType`値を判別するには、`crm/v3/schemas/{objectType}`に対して`GET`リクエストを送信します。

例えば、コンタクトID`51`と関連付けタイプ`75`を使用して、CarSpotは車両レコードにコンタクトを関連付けることができます。上記のIDを使用して、次のリクエストURLが作成されます。

`https://api.hubspot.com/crm/v3/objects/2-3465404/181308/associations/contacts/51/75`

### 新しい関連付けを定義する

CarSpotは次に、車両の販売後サービスのトラッキングを開始したいと考えています。そのために、HubSpotのチケットを使用して、実施されたメンテナンスをログに記録します。

車両とチケットを関連付けられるようにするために、次のようにリクエストの本文を設定した`POST`リクエストを\*\*`/crm/v3/schemas/2-3465404/associations`\*\*に対して送信して、新しい関連付けを作成します。

```json theme={null}
{
  "fromObjectTypeId": "2-3465404",
  "toObjectTypeId": "ticket",
  "name": "car_to_ticket"
}
```

このAPI呼び出しの応答は次のようになります。

```json theme={null}
{
  "id": "121",
  "createdAt": "2020-02-23T01:52:12.893826Z",
  "updatedAt": "2020-02-23T01:52:12.893826Z",
  "fromObjectTypeId": "2-3465404",
  "toObjectTypeId": "0-5",
  "name": "car_to_ticket"
}
```

<Info>
  2つのカスタムオブジェクト間に新しい関連付けを作成する場合は、toObjectTypeIdフィールドのobjectTypeIdでカスタムオブジェクトを指定します。標準オブジェクトの場合、名前で指定するか、次の値を使用できます。

  * **コンタクト**: 0-1
  * **会社名**: 0-2
  * **取引**: 0-3
  * **チケット**: 0-5
</Info>

### 新しいプロパティーを定義する

メンテナンスのトラッキングを進めるにつれて、CarSpotはメンテナンスサービスをパッケージにして提供できる可能性があることに気づきました。個々の車両レコードでこれらのメンテナンスパッケージのトラッキングを行うために、利用可能なパッケージを含む新しいenumeration型プロパティーを作成します。

新しいプロパティーを定義するには、`POST`リクエストを`/crm/v3/properties/2-3465404`に送信します。このリクエストの本文は次のようになります。

```json theme={null}
{
  "groupName": "car_information",
  "name": "maintenance_package",
  "label": "Maintenance Package",
  "type": "enumeration",
  "fieldType": "select",
  "options": [
    {
      "label": "Basic",
      "value": "basic"
    },
    {
      "label": "Oil change only",
      "value": "oil_change_only"
    },
    {
      "label": "Scheduled",
      "value": "scheduled"
    }
  ]
}
```

このAPI呼び出しの応答は次のようになります。

```json theme={null}
{
  "updatedAt": "2020-02-23T02:08:20.055Z",
  "createdAt": "2020-02-23T02:08:20.055Z",
  "name": "maintenance_package",
  "label": "Maintenance Package",
  "type": "enumeration",
  "fieldType": "select",
  "groupName": "car_information",
  "options": [
    {
      "label": "Basic",
      "value": "basic",
      "displayOrder": -1,
      "hidden": false
    },
    {
      "label": "Oil change only",
      "value": "oil_change_only",
      "displayOrder": -1,
      "hidden": false
    },
    {
      "label": "Scheduled",
      "value": "scheduled",
      "displayOrder": -1,
      "hidden": false
    }
  ],
  "displayOrder": -1,
  "calculated": false,
  "externalOptions": false,
  "archived": false,
  "hasUniqueValue": false,
  "hidden": false,
  "modificationMetadata": {
    "archivable": true,
    "readOnlyDefinition": false,
    "readOnlyValue": false
  },
  "formField": false
}
```

プロパティーが作成されたので、このプロパティーを各車両レコードのサイドバーに表示して、営業担当者や技術者が情報をすぐに利用できるようにしたいと考えています。それを行うためには、次のようにリクエスト本文を設定した`PATCH`リクエストを`/crm/v3/schemas/2-3465404`に送信して、このプロパティーを`secondaryDisplayProperties`に追加します。

```json theme={null}
{
  "secondaryDisplayProperties": ["maintenance_package"]
}
```

このAPI呼び出しの応答は次のようになります。

```json theme={null}
{
  "id": "3465404",
  "createdAt": "2020-02-23T01:24:54.537Z",
  "updatedAt": "2020-02-23T02:12:24.175874Z",
  "labels": {
    "singular": "Car",
    "plural": "Cars"
  },
  "requiredProperties": ["year", "model", "vin", "make"],
  "searchableProperties": ["year", "model", "vin", "make"],
  "primaryDisplayProperty": "model",
  "secondaryDisplayProperties": ["maintenance_package"],
  "portalId": 1234567,
  "name": "car"
}
```

これで、技術者が車両に関連付けられたコンタクトレコードを開くと、プロパティーがサイドバーのカスタムオブジェクトのカードに表示されるようになります。

<Frame>
  <img src="https://developers.hubspot.com/hs-fs/hubfs/Screen%20Shot%202020-03-06%20at%2011.08.41%20AM.png?width=386&name=Screen%20Shot%202020-03-06%20at%2011.08.41%20AM.png" alt="Screen Shot 2020-03-06 at 11.08.41 AM" />
</Frame>

CarSpotはHubSpotの使用を継続すればするほど、HubSpotのAPIを通じて、このカスタムオブジェクトを改善し、拡張する方法を見出していくことでしょう。さらには、[カスタムオブジェクトデータを使用して動的ページを作成](/cms/start-building/features/data-driven-content/crm-data-in-cms-pages)することも考えられます。
