CMS API|HubDB

HubDBは、スプレッドシートと同じようにテーブル(表)の行、列、セルでデータを表現するリレーショナル データ ストアです。データを保存および管理したり、HubSpotのCMSページを強化したりすることができます。HubDBテーブルはHubSpotアカウント内、またはHubDB APIを使用して変更可能です。また、HubLでHubDBテーブルにアクセスし、HubDB内のデータをHubSpotのCMSページで使用したり、プログラマブルEメール(英語)に取り込んだりすることもできます。 

注:GETをサポートするエンドポイントはCORSもサポートしているため、JavaScriptとアカウントIDを使用してクライアントサイドでテーブルのデータにアクセスすることができます。その他のメソッドと全てのテーブルを取得するエンドポイントは認証が必要なため、CORSをサポートしていません。

この記事では、HubDBテーブルデータを作成および取得する場合に使用する基本的なエンドポイントについて説明します。利用可能な全てのエンドポイントを確認するには、この記事の上部にある[エンドポイント]タブをクリックしてください。

レート制限

HubDBのAPIリクエストには、リクエストの種類に応じて異なるレート制限が適用されます。

  • 認証を必要としないGETリクエスト(クライアントサイドのJavaScriptリクエストを含む)は、1秒あたり10件に限定されます。これらのリクエストは1日あたりの上限には計上されません。
  • 認証を使用(英語)するその他全てのリクエストには標準の制限(英語)が適用されます。

v3での変更点

  • テーブルにはnamelabelの両方が設定されている必要があります。テーブルの作成後に、この「name」を変更することはできません。「name」には半角の英小文字、数字、アンダースコアのみ含めることができますが、数字で始めることはできません。namelabelは両方ともアカウント内で一意でなければなりません。
  • APIでは、URLパスにidnameの両方を含めて使用することができます。
  • 行をGETするエンドポイントがvaluesフィールドで返すのは、idではなくnameです。また、行をPOSTPUTPATCHするエンドポイントには、valuesフィールドでidではなくnameを渡す必要があります。
  • 行を更新するPATCHエンドポイントで、スパース更新を使用できるようになりました。スパース更新とは、更新する必要がある列の値だけを指定できることを意味します(以前のバージョンでは、更新する必要がないものも含め、全ての列の値を指定する必要がありました)。複数選択型の列のように、値のリストを使用して列を更新する場合は、全ての値を含むリストを指定する必要があります。列から値を削除するには、リクエスト内でその列の値をnullとして指定する必要があります。 
  • 行を更新するPATCHエンドポイントを優先し、行のセルに対するgetupdatedeleteリクエストを行うためのエンドポイントを削除しました。
  • インポートエンドポイントでは、JSON形式のオプションで既存のフィールドと併せてオプションフィールドidSourceColumnを使用できるようになりました。このフィールドを使用すると、行IDが格納されているCSVファイル内の列を指定できます。新しい行を既存の行の新しい値とともにインポートする場合、新しい行の行IDには0を、既存の行の行IDには有効な行IDを指定します。詳細については、以下の「インポート」セクションをご参照ください。さらに、JSON形式のオプションに含まれる列マッピングのターゲットフィールドで、列の名前またはIDを使用することもできます。
  • 複製エンドポイントには新しい名前と新しいラベルが必要です。

下書きテーブルと公開テーブル

HubDBテーブルには下書きバージョンと公開バージョンの両方があります。公開バージョンは非公開にすることもできます。非公開にしてテーブル内のデータを更新すれば、他の公開ページに影響を与えずに、ページのプレビューやテスト、手動による承認プロセスを行うことができます。

下書きデータをレビューした後に、HubSpot内、または/push-liveエンドポイントを使用して公開することが可能です。/resetエンドポイントを使用して下書きデータを破棄し、サービスの中断を伴わずにデータを現在の公開バージョンに戻すこともできます。

HubDBテーブルの作成

HubDBテーブルを作成するには、POSTリクエストを/cms/v3/hubdb/tablesに送信します。

リクエスト本文で、次の必須フィールドを指定します。

Use this table to describe parameters / fields
フィールドタイプ説明
name
String

テーブルの内部名。テーブルの作成後に、この「name」を変更することはできません。「name」には半角の英小文字、数字、アンダースコアのみ含めることができますが、数字で始めることはできません。

"name": "my_table"
label
String

ユーザーがHubSpotでテーブルを編集するときに表示される、テーブルのラベル。

"label":"My table"

さらに、次の任意のフィールドを指定できます。

Use this table to describe parameters / fields
フィールドタイプ説明
useForPages
Boolean

テーブルを動的ページの作成に使用可能にするかどうかを指定します。

"useForPages": false
allowPublicAPIAccess
Boolean

承認なしでテーブルを読み取り可能にするかどうかを指定します。

"allowPublicApiAccess": false
allowChildTables
Boolean

テーブルの子テーブルを作成可能にするかどうかを指定します。

"allowChildTables": false
enableChildTablePages
Boolean

子テーブルを使用してマルチレベルの動的ページ(英語)を作成する必要があるかどうかを指定します。

"enableChildTablePages": false
columns
Object

テーブルの列。列プロパティーの詳細については、「テーブル列を追加する」セクションをご参照ください。

See "Add table columns" section below

列を追加せずにテーブルを作成するためのリクエストは、次のような内容になります。

//example request { "name": "test_table", "label": "Test Table", "useForPages": true, "allowPublicApiAccess": false, "allowChildTables": true, "enableChildTablePages": false, "columns": [], }

テーブル列の追加

HubDBテーブルの各列は、次のプロパティーを使用して定義可能です。

Use this table to describe parameters / fields
フィールドタイプ説明
name
String

必須。列の内部名。列の作成後に変更することはできません。

"name": "row_name"
label
String

任意。ユーザーがHubSpotで列を編集するときに表示される、列のラベル。

"label": "Row label"
type
String

列のデータタイプ。次のいずれかにする必要があります。

  • text:テキストフィールド。
  • richtext:基本的なHTML書式設定をサポートするテキストフィールド。HTMLがHubSpotで編集可能になるかどうかを左右する可能性があるため、未加工のHTMLには推奨されません。HubSpotでコードを編集すると、コードのレンダリング方法にも影響が及ぼされる可能性があります。 
  • number:数値フィールド。
  • boolean:HubSpot内でチェックボックスとして表示されます。チェックボックスをオフの状態で表示するには0を、オンの状態で表示するには1を使用します。
  • date:特定の日付をUTC時間の深夜0時に設定されたミリ秒単位のタイムスタンプとして格納します。
  • datetime:日付と時刻をミリ秒単位のタイムスタンプとして格納します。
  • select:このタイプの列には、オプション一式のうちいずれかのみを設定できます。必須プロパティーについては、以下のoptionsフィールドをご参照ください。
  • multiselect:このタイプの列には、オプション一式のうち1つ以上を設定できます。必須プロパティーについては、以下のoptionsフィールドをご参照ください。
  • location:場所の緯度と経度を格納します。
  • image:画像のURLを格納します。
  • video:動画のプレイヤーIDを格納します。
  • foreign_ID:このタイプの列では、別のHubDBテーブルに含まれる列を参照します。使用する場合は、さらに次のプロパティーを使用して該当する別のHubDBテーブルを定義する必要があります。
    • foreignTableId:別のHubDBテーブルのID。 
    • foreignColumnId:別のHubDBテーブル内の列のID。
  • currency:数値を通貨の値として格納します。
"type": "type"
options
Object

selectタイプとmultiselectタイプの列で使用できるオプションのリスト。各オプションは、nameに加え、optionに設定したtypeを使用して定義します。

"option": [{"name":"Option 1", "type":"option"}, {"name": "Option 2", "type": "option"}]

上記のフィールドを使用して新しいHubDBテーブルを作成するためのリクエストは、次のような内容になります。

JSON
//example request
{
 "label": "Test Table",
 "name": "test_table",
 "columns": [
 {
   "name": "text_column",
   "label": "Text Column",
   "archived": false,
   "type": "TEXT"
 },
 {
   "name": "number_column",
   "label": "Number Column",
   "archived": false,
   "type": "NUMBER"
 },
 {
   "name": "multiselect",
   "label": "Multi Select Column",
   "archived": false,
   "type": "multiselect",
   "options": [
   {
     "name": "Option 1",
     "type": "option"
   },
   {
     "name": "Option 2",
     "type": "option"
   }
   ]
 }
 ],
 "useForPages": true,
 "allowChildTables": true,
 "enableChildTablePages": false,
 "dynamicMetaTags": {
 },
 "allowPublicApiAccess": false
}

テーブルの作成後、列には昇順のIDが割り当てられます。既存の列を更新する際は、入力オブジェクトに列のidフィールドを含めます。

テーブル行の追加

行を追加するには、APIを使用して手動で行う方法と、CSVファイルから行をインポートする方法があります。

HubDBテーブルに行を追加するには、POSTリクエストを/cms/v3/hubdb/tables/{tableIdOrName}/rowsに送信します。

各テーブル行には、次のフィールドを含めることができます。

Add table rows fields
フィールドタイプ説明
values
Object

列名とその列に追加する値を指定するキーと値のペアのリスト。

列に特定の値を設定しない場合は、キーと値のペアのリストから列名を省略できます。

"values": { "text_column": "sample text", "number_column": 76}
path
String

動的ページが有効なテーブルの場合、pathはこの行で作成された動的ページに使用されるパスサフィックスです。

"path": "example_url_path"
name
String

動的ページが有効なテーブルの場合、nameはこの行で作成された動的ページに使用されるHTMLタイトルです。

"name": "Example Title"
childTableId
Number

マルチレベルの動的ページ(英語)を作成する場合、childTableIdで子テーブルのIDを指定します。

"childTableId": 123456
id
Number

行のID(昇順)。新しいテーブルに行を追加するとき、必要に応じて行IDを指定できますが、指定しなければHubSpotによって自動的にIDが割り当てられます。既存のテーブルに行を追加するときには、有効なIDを指定する必要があります。

"childTableId": 123456

上記のフィールドを使用したリクエストの例を以下に示します。

//example request { "values": { "text_column": "sample text value", "number_column": 76, "rich_text_column": "<strong>This is a styled paragraph.</strong>", "date_column": 1591228800000, "date_time_column": 1604450520000, "boolean_column": 1, "select_column": { "name": "option 1", "type": "option" }, "multiselect_column": [ { "name": "Option 1", "type": "option" }, { "name": "Option 2", "type": "option" } ], "url_column": "https://www.hubspot.com/marketing", "video_column": 3392210008, "image_column": { "url": "https://f.hubspotusercontentqa00.net/hubfs/99992002/image3%20(1).jpg", "width": 1600, "height": 900, "type": "image" }, "foreign_id_column": [ { "id": "4364402239", "type": "foreignid" }, { "id": "4364402240", "type": "foreignid" } ] }, "path": "test_path", "name": "test_title", "childTableId": "1902373" }

CSVから行のインポート

CSVファイルからデータをHubDBテーブルにインポートするには、POSTリクエストを/cms/v3/hubdb/tables/{tableIdOrName}/draft/importに送信します。

インポートエンドポイントには、multipart/form-data POSTリクエストを渡します。

  • config:インポートの際に使用する一連のJSON形式のオプション。 
  • file:インポートするCSVファイル。 

configには、次のフィールドをJSON文字列として含めます。

Use this table to describe parameters / fields
フィールドTypeDescription Example
skipRows
Number

スキップするヘッダー行の数。このフィールドの値は既定で1に設定されます。この場合、最初の行はヘッダーとして扱われてスキップされます。全ての行が有効なデータである場合は、このフィールドの値を0に設定します。 

"skipRows": 0
separator
String

CSVファイル内で使用されている列の区切り文字。既定では","(半角カンマ)に設定されます。

"separator": ","
idSourceColumn
Number

行のID(hs_id)が含まれているソースファイル内の列のインデックス。

この列が指定されている場合、インポートするCSVファイルに含まれる、IDが一致する行によって、テーブル内の既存の行が更新されます。任意のフィールドなので、初めてデータをテーブルにインポートするときには無視してもかまいません。

詳細については、以下の「リセットオプション」セクションを参照してください。

"idSourceColumn": 1
resetTable
Boolean

既定ではfalseに設定されます。この場合、既存の行を1つも除去することなく、テーブルの行が更新されます。trueに設定すると、スプレッドシートの行によってテーブルのデータが上書きされます。つまり、スプレッドシート内に含まれていない行はテーブルから削除されます。

詳細については、以下の「リセットオプション」セクションを参照してください。

"resetTable": true
nameSourceColumn
Number

動的ページが有効なテーブルの場合、nameSourceColumnで、CSVファイル内で行のnameが格納されている列を指定します。列を指定するには、最初の列を1とした昇順の番号を使用します。

"nameSourcecolumn": 5
pathSourceColumn
Number

動的ページが有効なテーブルの場合、pathSourceColumnで、CSVファイル内で行のpathが格納されている列を指定します。列を指定するには、最初の列を1とした昇順の番号を使用します。

"pathSourcecolumn": 6
childTableSourceColumn
Number

CSVファイル内で行のchildTableIdが格納されている列を指定します。列を指定するには、最初の列を1とした昇順の番号を使用します。

"childTableSourcecolumn": 3
columnMappings
Array

ソースファイル内の列とインポート先HubDBテーブル内の列とのマッピングのリスト。

各マッピングは次の形式でなければなりません:{"source":1,"target”:"columnIdOrName"} 

  • source:ソースファイル内の列インデックス。例えば、2番目の列のインデックスは2となります。
  • target:HubDBテーブル列のIDまたは名前。テーブルの詳細を取得することで、列のIDや名前を確認できます。

ファイルにhs_id列が含まれる場合は、それをcolumnMappingsに含めないでください。代わりに、この列をidSourceColumnとして含めて既存の行を更新します。

"columnMappings": [{"source":1, "target": 2}, {"source": 2, "target": "column_name"}]
primaryKeyColumn
String

重複排除に使用する、ターゲットHubDBテーブル内の列の名前。このフィールドで列のIDを使用することはできません。

"primaryKeyColumn": "column_name"
encoding
String

ファイルのエンコーディングの種類。例:utf-8asciiiso-8859-2iso-8859-5iso-2022-jpwindows-1252

"encoding": "utf-8"
format
String

CSVのみサポートされています。

"format": "csv"

上記の表を使用したconfig JSONの例を以下に示します。

// example config JSON { "skipRows": 1, "separator": ",", "idSourceColumn": 1, "resetTable": false, "columnMappings": [ { "target": 1, "source": 2 }, { "target": 2, "source": "zip_code" }, ], "primaryKeyColumn": "name", "encoding": "utf-8", "format": "csv" }

日付の書式設定

データを日付型の列にインポートする際は、さまざまな日付形式を使用できます。

整数

  • yyyy/mm/dd
  • yyyy/mm/dd
  • mm/dd/yyyy
  • mm/dd/yy

これらの形式では、日付の前に月を指定する必要があります(つまり、dd/mm/yyの形式は使用できません)。整数の区切り文字には、半角のハイフン(-)またはスラッシュ(/)を使用可能です。

準標準の日付形式

整数ベースの日付形式ほど標準化されていない日付形式をインポートすることもできます。例えば、次のような日付形式が対象です。

  • The 1st of March in the year 2022
  • Fri Mar 4 2022
  • March 4th '22

相対日付

HubSpotは、現在の日付を基準とした次の日付形式を解析します。

  • next Thursday
  • Today
  • tomorrow
  • 3 days from now

リセットオプション

CSVファイルからHubDBテーブルにデータをインポートするときに、resetTableフィールドをtrueまたはfalse(既定)に設定することで、HubDBの行データを上書きするかどうかを管理できます。

  • resetTabletrueに設定されている場合:
      • CSVファイル内の行に、行IDの列(hs_id)が存在しない場合、あるいは行IDが0に指定されている場合、それらの行は、生成された新しい行IDとともに挿入されます。
      • CSVファイル内の行IDがターゲットテーブルに既に存在する場合、テーブルの既存の行は入力ファイル内の新しい値で更新されます。
      • テーブルに行が存在するものの、入力CSVファイルにその行に対応する行IDがない場合、その行はターゲットテーブルから削除されます。
      • 入力CSVファイル内の行IDがターゲットテーブル内に存在しない場合は、生成された新しい行IDとともにそれらの行が挿入され、入力ファイル内で指定されている行IDは無視されます。
      • 入力CSVファイル内に行IDの列が1つも含まれていない場合、ターゲットテーブルから全ての行が削除され、入力ファイル内の行が、生成された新しい行IDとともに挿入されます。
  • resetTablefalse(既定)に設定されている場合:
      • CSVファイル内の行IDがターゲットテーブルに既に存在する場合、テーブルの既存の行は入力ファイル内の新しい値で更新されます。
      • テーブルに行が存在するものの、入力CSVファイルにその行に対応する行IDがない場合、その行はターゲットテーブルから削除されずに、変更が加えられないままの状態になります。
      • 入力CSVファイル内の行IDがターゲットテーブル内に存在しない場合は、生成された新しい行IDとともにそれらの行が挿入され、入力ファイル内で指定されている行IDは無視されます。
      • CSVファイル内の行に行IDの列が存在しない場合、あるいは行IDが0に指定されている場合、それらの行は生成された新しい行IDとともに挿入されます。

HubDBデータの取得

テーブルの詳細を取得するか、またはテーブルの特定の行を取得するかに応じて、HubDBデータを取得するにはさまざまな方法があります。

  • 公開されている全てのテーブルからテーブルの詳細を取得するには、GETリクエストを/cms/v3/hubdb/tablesに送信します。
  • 公開されている特定のテーブルからテーブルの詳細を取得するには、GETリクエストを/cms/v3/hubdb/tables{tableIdOrName}に送信します。
  • 特定のテーブルから全ての行を取得するには、GETリクエストを/cms/v3/hubdb/tables{tableIdOrName}/rowsに送信します。
  • テーブルから特定の行を取得するには、GETリクエストを/cms/v3/hubdb/tables{tableIdOrName}/rows/{rowId}に送信します。

下書きモードでテーブルからデータを取得するには、この記事の上部にある[エンドポイント]タブを参照してください。

行データを取得する際に、フィルターを適用して結果を絞り込んだり、並べ替えたりできます。

返された行に対するフィルターの適用

HubDBテーブルデータを取得する際に、特定のデータを取得するためのクエリーパラメーターとしてフィルターを適用できます。フィルター クエリー パラメーターは、columnName__operatorの形式で作成します。 

例えば、「bar」という名前の数値列がある場合、「bar」の値が10より大きい行だけを結果に含めるには、&bar__gt=10とします。

全てのフィルターはAND結合されます(現在のところ、ORフィルターはサポートされていません)。

フィルターを適用する際は、次の点に注意してください。

  • multiselectタイプの列の値を渡す場合、各値を半角カンマで区切る必要があります(例:multiselect_column__contains=1,2)。
  • datetimeフィルターでは、現在の時刻を基準とした値を指定するために、タイムスタンプに代わって相対日付を使用できます。例えば、-3hは3時間前のタイムスタンプに相当し、10sは10秒後のタイムスタンプに相当します。サポートされている時間単位は、ms(ミリ秒)、s(秒)、m(分)、h(時間)、d(日)です。現在の時刻を使用するには、値をゼロにします(0s)。
  • これらのフィルターを使用するために組み込むhs_id列はnumberタイプ、hs_created_at列はdatetimeタイプ、hs_path列およびhs_name列はtextタイプです。

以下に、各タイプの列に適用できる演算子について説明します。

Use this table to describe parameters / fields
演算子名前Description
eq(またはなし)
Equals

全てのタイプの列。

このフィルターは、演算子が使用されていない場合に適用されます。multiselectタイプの列で使用する場合、指定された値と完全に一致する行が返されます。

ne
Not equal to

全てのタイプの列。

contains
Contains

text、richtext、multiselect。

multiselectタイプの列で使用する場合、指定された値を全て含む行が返されます。

lt
Less than

number、date、datetime。

lte
Less than or equal to

number、date、datetime。

gt
Greater than

number、date、datetime。

gte
Greater than or equal to

number、date、datetime。

is_null
Null

booleanタイプを除く全てのタイプの列。

このフィルターには値は不要です(例:&exampleColumn__is_null=)。

not_null
Not null

booleanタイプを除く全てのタイプの列。

このフィルターには値は不要です(例:&exampleColumn__not_null=)。

like
Like

text、richtext。

not_like
Not like

text、richtext。

icontains
Contains (case sensitive)

text、richtext。

startswith
Starts with

text、richtext。

in
In

number、select、multiselect。

渡されたオプションのうちの1つ以上が列に格納されている行が返されます。クエリーパラメーターにsortが含まれていない場合、返される結果はin演算子での値の指定順に並べ替えられます。

返された行の並べ替え

HubDBデータを取得するときに、クエリーパラメーターとして並べ替えを適用することで、返されるデータの順序を指定できます。データを並べ替えるには、sortクエリーパラメーターを追加して、列名を指定します。

&sort=columnName

既定では、列が指定されている順序でデータが返されます。これを逆順で並べ替えるには、列名に-を追加します。 

&sort=-columnName

このパラメーターを複数指定することにより、複数の列を基準に並べ替えができるようになります。

列を基準とした並べ替えに加えて、次の3つの関数を使用可能です。

  • geo_distance(location_column_name, latitude, longitude):所在地列の名前と座標を取り、指定の所在地列の値と指定された座標との距離の順で行を返します。
  • length(column_name):列の名前を取り、列の値の長さ(文字列として計算される)の順で行を返します。
  • random():ランダムな順序で行を返します。

この関数では逆順もサポートされます。例えば、次のgeo_distanceは、返されるアイテムを距離が最も長い順で並べ替えます。

sort=-geo_distance(location_column,42.37,-71.07) 

上記のフィールドを使用したconfigの例を以下に示します。

//example config { "skipRows":1, "format":"csv", "separator":",", "encoding":"utf-8", "columnMappings": [ {"target":1,"source":"text_column"}, {"target":2,"source":"number_column"}, {"target":3,"source":"multiselect"} ], "idSourceColumn":1, "pathSourceColumn":2, "nameSourceColumn":4, "childTableSourceColumn":5, "resetTable":true }

インポートエンドポイントに対するcurlコマンドの例:

curl -L -X POST 'https://api.hubspotqa.com/hubdb/api/v2/tables/xxxxxx/import?portalId=xxxxxxx' \ -H 'Content-Type: multipart/form-data' \ -F 'config="{\"skipRows\":1,\"format\":\"csv\",\"separator\":\",\",\"encoding\":\"iso-8859-1\",\"columnMappings\":[{\"target\":1,\"source\":7},{\"target\":3,\"source\":8}],\"idSourceColumn\":1,\"pathSourceColumn\":null,\"nameSourceColumn\":null,\"childTableSourceColumn\":null,\"resetTable\":true}"' \ -F 'file=@"/Users/xxxxxxxxxxxxx/Downloads/filename.csv"'

参考になりましたか?
こちらのフォームではドキュメントに関するご意見をご提供ください。HubSpotがご提供しているヘルプはこちらでご確認ください。