ビジネスデータをアップロードする
この機能の位置づけ
アップロードすると、Kaleidr が組織独自のデータに基づいて質問に回答できるようになります。これは Enterprise 向け機能です。公開済みのデータは、サインインしたメンバーが Kaleidr Studio のアシスタントで利用できます。自社サイトやバックエンドで利用するには、データを参照できるキーを発行し、そのキーで質問し、自社の場所が回答に含まれることを確認する 3 つの手順が 必要です。自社データを使った回答に全体の流れがあります。このページではアップロードに必要なリクエスト、フィールド、制限、エラー、公開解除と削除を説明します。
これは Studio の地図の Data パネルに追加する表計算ファイル、GeoJSON、GPX トラックなどについてのページではありません。それは全プランで利用できる別機能です。地図上のデータセットを参照してください。
アップロード方法は 2 つありますが、どちらも同じ処理を使用します:
- 画面: Kaleidr Studio の地図の Data パネル下部にある Data for AI Answers セクション。唯一のアップロード画面で、操作できるのはアップロード権限のある組織のオーナーまたは管理者だけです。Studio でアップロードを参照。
- このページの API: Studio の画面も同じ API を使います。ファイル形式、制限、状態、エラーは共通で、どちらで作成したデータバージョンも他方で確認できます。
アップロード前に知っておくべき 3 つの特徴:
- 質問への回答時にデータを参照します。 Kaleidr はその時点の公開済みリリースを参照するため、公開を解除すると、それ以降の回答は直ちにそのデータを使用しなくなります。
- データは自組織のみに提供されます。 組織単位で分離され、一般消費者向け Kaleidr マップや他組織への回答には表示されません。
- 値を勝手に生成しません。 任意の 補助機能がヘッダーと最大 5 行のサンプルから列マッピングを提案します。承認したマッピングに従ってすべての行が変換されます。間違ったマッピングは修正して再実行し、価格、日付、名前を創作しません。
利用条件
| 要件 | 詳細 |
|---|---|
| プラン | Enterprise。Free と Pro ではアップロード、公開、再処理、マッピング提案が 403 vendor_data_not_on_plan を返します。対象は kaleidr.com/billing で契約する組織のプランで、Studio 固有のプランはありません。 |
| 権限 | 組織の オーナーまたは管理者。それ以外は 403 org_admin_required。 |
| 上限 | 組織の契約で決定。詳しくは制限。GET /shared-api/datahub/limits で確認できます。 参照 |
| 画面 | Kaleidr Studio の Data パネルにある Data for AI Answers、またはこの API。チェックは共通です。 |
呼び出しと必要なプラン・権限:
| 処理 | 権限 | プラン |
|---|---|---|
| マッピング提案、アップロード、公開、再実行 | オーナーまたは管理者 | Enterprise |
| 制限、取り込み状況、バージョン一覧の参照 | オーナーまたは管理者 | すべて |
| 公開解除、バージョン削除 | オーナーまたは管理者 | すべて |
後半の 2 行は全プランで使えます。Enterprise を解約した組織でも、過去にアップロードした内容を確認して削除できます。
データの利用も Enterprise 限定です。組織が Enterprise にある間だけ Studio アシスタントが公開データから回答します。API キーまたは SDK を使って回答に組織データを含めるには、Enterprise だけが持てる vendor スコープが別途必要です。自社データを使った回答を参照。
Studio の Data for AI Answers セクションの内容は、プランと役割によって異なります: 詳細はアップロードできない場合の表示内容を参照してください。
組織がアップロードできる量
アップロード前に制限を確認します。Studio はセクションを開くとこの呼び出しを実行します。
| リクエスト | GET /shared-api/datahub/limits |
| 権限 | オーナーまたは管理者、すべてのプラン |
| クエリ | org_id(任意)。複数組織を管理する際の対象組織。 |
curl https://api.kaleidr.com/shared-api/datahub/limits \
-H "Authorization: Bearer $KALEIDR_ACCESS_TOKEN"
Enterprise の場合、3 つの数値は契約によって異なるため、例には固定値を記載していません。limits には以下の 3 つの整数フィールドが常に含まれます。
{
"can_upload": true,
"plan": "enterprise",
"limits": { "…": "places, documents and artifact_mb: three integers, described below" },
"reason": null
}
Free と Pro でも呼び出しは 200 を返し、理由を示します:
{
"can_upload": false,
"plan": "pro",
"limits": { "places": 0, "documents": 0, "artifact_mb": 0 },
"reason": "vendor_data_not_on_plan"
}
| フィールド | 型 | 意味 |
|---|---|---|
can_upload | boolean | この組織がアップロード可能か。 |
plan | string または null | free、pro、enterprise のプラン。 |
limits.places | integer | 1 回の場所数。CSV ではデータ行数。 |
limits.documents | integer | 1 回の文書数。 |
limits.artifact_mb | integer | ファイルサイズ(MiB)。 |
reason | string または null | can_upload が false なら vendor_data_not_on_plan、それ以外は null。利用不可の上限値はすべて 0。 |
数値は組織の契約で個別に定められたものです。ただし、いずれもアップロード処理自体が受け付けられる上限を超えることはできません。プラットフォームは 3 つの項目それぞれに技術的な上限を設けており、契約でもその上限は引き上げられません。
| ステータス | 意味 |
|---|---|
| 200 | すべてのプランのオーナーまたは管理者。Enterprise 未満では拒否ではなく can_upload: false を返します。 |
| 401 | アクセストークンがない、期限切れ、またはアクセストークンではありません。 |
403 org_admin_required | 組織のオーナーまたは管理者ではありません。 |
認証
すべての呼び出しで、サインイン中の Kaleidr アカウントのアクセストークンを Bearer として送信します:
Authorization: Bearer <account access token>
- API キーではありません。
kld_pk_…やkld_sk_…は拒否されます。キーは連携を識別しますが、データのアップロードは組織管理の操作なので、権限を持つ人物による認証が必要です。 - ID トークンではなくアクセストークンを使用します。
- トークンはサインインしたオーナーか管理者のもので、セッションとともに期限切れになります。長期認証情報は現時点でありません。自動アップロードを実装する前に Kaleidr にお問い合わせください。
- Studio 画面では別途取得不要です。サインイン中のメンバーのセッションを使います。
このページのエンドポイントはすべて https://api.kaleidr.com 配下です。例では環境変数からトークンを読み取ります:
export KALEIDR_ACCESS_TOKEN='<account access token>'
複数組織を管理する場合、アップロード本文またはその他の呼び出しのクエリ ?org_id= に org_id を指定します。省略すると主組織が選ばれます。
アップロードできるもの
1 回のアップロードは JSON リクエストに文字列として含めるテキストファイル 1 つです。ファイル名の拡張子によって読み取り方式が決まります。
| 元データ | 送信形式 | 含まれる情報 |
|---|---|---|
| 場所一覧 | 固定カラム名の .csv、マッピングなし | 場所 |
| 宿泊日・部屋・料金ごとに 1 行の表 | .csv と mapping_spec | 場所、部屋タイプ、料金プラン、日別料金、在庫 |
| すべてを構造化済み | .json バンドル | 上記に加えて営業時間と文書 |
アップロードには少なくとも 1 件の場所が必要です。
場所一覧の CSV
ヘッダーには次の列名を使います:
| 列 | 必須 | 備考 |
|---|---|---|
name | はい | 名前のない行があると行番号付きでエラーになります。 |
timezone | はい | Europe/London などの IANA タイムゾーン。 |
lat, lng | 位置指定のいずれか | 指定した座標をそのまま使用。 |
address | 位置指定のいずれか | lat と lng がない場合に座標を特定。 |
category | いいえ | hotel や restaurant などの短い分類名。 |
ref | いいえ | 独自 ID。なければ行番号で識別。 |
name,timezone,lat,lng,address,category
Harbor Hotel,Europe/London,51.5079,-0.0877,"1 Example Street, London",hotel
Canal House,Europe/Amsterdam,,,"Example Gracht 12, Amsterdam",hotel
列マッピングを使う表
宿泊施設、部屋、プラン、日付、価格などの観測値ごとに 1 行ある表は固定列名だけでは解釈できません。各フィールドに対応する列を示す mapping_spec を付けてください。
Property,Address,Room,Plan,Date,Nightly Rate,Available
Harbor Hotel,"1 Example Street, London",Double,Flexible,2026-11-06,189.00,4
Harbor Hotel,"1 Example Street, London",Suite,Flexible,2026-11-06,320.00,1
{
"places": {
"ref_from": ["Property"],
"fields": {
"name": "Property",
"address": "Address",
"timezone": { "const": "Europe/London" },
"category": { "const": "hotel" }
}
},
"room_types": { "ref_from": ["Room"], "fields": { "name": "Room" } },
"rate_plans": { "ref_from": ["Plan"], "fields": { "name": "Plan" } },
"daily_rates": {
"fields": {
"stay_date": "Date",
"price_amount": "Nightly Rate",
"price_currency": { "const": "GBP" }
}
},
"daily_inventory": {
"fields": { "stay_date": "Date", "units_available": "Available" }
}
}
マッピングのルール:
| 部分 | 意味 |
|---|---|
| セクション | places(必須)、room_types、rate_plans、daily_rates、daily_inventory。表にあるものだけを指 定。 |
ref_from | 1 つの項目を識別する列。同じ値を持つ行は同じ場所、部屋タイプ、プランとして扱われます。 |
fields | 各フィールドの元になる列名。一部は { "const": "value" } の定数も可能。 |
マッピングで設定できるフィールドは次の表だけです。最後の列は定数にできるフィールドを示します。
| セクション | 設定可能なフィールド | 定数にできるもの |
|---|---|---|
places | name, address, timezone, category, lat, lng, overture_id | timezone, category |
room_types | name | name |
rate_plans | name, currency, cancellation_policy, board_basis | name, currency |
daily_rates | stay_date, price_amount, price_currency | price_currency |
daily_inventory | stay_date, units_available | なし |
次の 2 つに違反すると検証エラーになります:
- 表にないフィールドは拒否されます。 エラーには問題のフィールドと許可値が示されます:
room_types.fields.beds: not a field a mapping can set -- room_types takes name。ベッド数や自由形式の属性など、セルから直接設定できない情報は JSON バンドルを使います。 - 定数を許可されてい ない箇所に設定すると拒否されます。 価格、日付、数量、場所名、位置はファイルの列から取得する必要があります:
daily_rates.fields.price_amount: must name a column -- a constant cannot supply this field。定数はタイムゾーンや通貨など、表全体に共通する値用です。
これらのエラーは提案の errors またはアップロード処理後の error_report に表示されます。取り込みは失敗し、データはステージされません。
daily_rates がある場合、各料金がそれぞれに属するため room_types と rate_plans も必要です。プラン列がなければプラン名を定数で指定できます。
マッピングは .csv 専用です。.json に付けると取り込みが失敗します。
JSON バンドル
.json ファイルは次のリストを含む 1 つのオブジェクトです。項目間の参照には ref を使います。
{
"places": [
{
"ref": "harbor",
"name": "Harbor Hotel",
"timezone": "Europe/London",
"lat": 51.5079,
"lng": -0.0877,
"address": "1 Example Street, London",
"category": "hotel"
}
],
"room_types": [{ "ref": "double", "place_ref": "harbor", "name": "Double" }],
"rate_plans": [{ "ref": "flex", "place_ref": "harbor", "name": "Flexible" }],
"daily_rates": [
{
"place_ref": "harbor",
"room_type_ref": "double",
"rate_plan_ref": "flex",
"stay_date": "2026-11-06",
"price_amount": 189.0,
"price_currency": "GBP"
}
],
"daily_inventory": [
{ "place_ref": "harbor", "room_type_ref": "double", "stay_date": "2026-11-06", "units_available": 4 }
],
"hours": [
{ "place_ref": "harbor", "weekday": 0, "opens": "07:00", "closes": "23:00" },
{ "place_ref": "harbor", "valid_from": "2026-12-25", "valid_through": "2026-12-25", "is_closed": true }
],
"documents": [
{ "title": "Cancellation policy", "text": "Free cancellation until 18:00 on the day before arrival." }
]
}
| リスト | 必須フィールド | 備考 |
|---|---|---|
places | name、timezone、lat と lng または address | ref は一意。場所が少なくとも 1 件。 |
room_types, rate_plans | place_ref, name | リスト内で ref は一意。 |
daily_rates | place_ref, room_type_ref, rate_plan_ref, stay_date, price_amount, price_currency | |
daily_inventory | place_ref, room_type_ref, stay_date, units_available | |
hours | place_ref と weekday または valid_from | weekday は 0~6、0 は月曜日。opens と closes は時刻。 |
documents | title, text | インラインテキストのみ。 |
任意フィールドも使用できますが、それぞれサイズ制限があります。フィールド制限を参照してください。
文書について:
- 文書は
titleとインラインのtextです。保存先のパスやキーは無視され、ファイルへの参照はできません。 - 任意の
mimeで内容を説明できます。text/plain、text/markdown、text/htmlは維持され、それ以外はtext/plainとして記録されます。
数値は有限でなければなりません。座標、価格、個数、自由形式 JSON 内で NaN や Infinity は許可されず、行エラーになります。
アップロードの流れ
1 回のアップロードから、処理ジョブの ingest とバージョン化された結果の release が作られます。公開までは draft です。公開時は以前の公開バージョンを一括置換するため、不完全な更新が見えたり、入れ替え途中にデータがなくなったりしません。公開データをゼロにするには現在のバージョンを公開解除します。
propose a mapping ─► stage a preview ─► check the result ─► publish
(optional, POST /ingests GET /ingests/{id} POST /ingests/{id}/publish
for a sheet) preview: true
later, to take a release back out: unpublish ─► delete
POST /releases/{id}/unpublish DELETE /releases/{id}
1. マッピングを提案する(任意)
マッピングのない表を使う場合に実行します。ファイル全体ではなく、ヘッダーと数行を含む冒頭部分だけを送ってください。
| リクエスト | POST /inference-api/vendor/mapping/propose |
| 権限 | Enterprise 組織のオーナーまたは管理者。 |
| 本文 | { "csv_head": "<the first characters of your file>" } |
| 上限 | csv_head は 1~16,384 文字。アカウントごとに 1 時間 30 回。 |
| 費用 | 提案ごとに AI クレジットを消費します。消費するのは使用トークン数で、このページのその他の呼び出しは消費しません。 |
curl -X POST https://api.kaleidr.com/inference-api/vendor/mapping/propose \
-H "Authorization: Bearer $KALEIDR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"csv_head":"Property,Address,Room,Plan,Date,Nightly Rate,Available\nHarbor Hotel,\"1 Example Street, London\",Double,Flexible,2026-11-06,189.00,4\nHarbor Hotel,\"1 Example Street, London\",Suite,Flexible,2026-11-06,320.00,1\n"}'
{
"mapping_spec": { "places": { "ref_from": ["Property"], "fields": { "name": "Property", "address": "Address", "timezone": { "const": "Europe/London" } } }, "room_types": { "ref_from": ["Room"], "fields": { "name": "Room" } } },
"notes": "Time zone inferred from the addresses.",
"columns": ["Property", "Address", "Room", "Plan", "Date", "Nightly Rate", "Available"],
"sample_result": { "places": 1, "room_types": 2, "rate_plans": 1, "daily_rates": 2, "daily_inventory": 2 },
"errors": []
}
レスポンスの確認方法:
sample_resultを確認します。 提案をサンプル行に適用し、セクションごとの生成件数を表示します。マッピングが正しそうでも生成件数がゼロならここで分かります。- 200 でも
errorsは空とは限りません。 列不足、存在しない列名、不正な IANA タイムゾーン、通貨コードの形式などをまとめて返すため、修正できます。 - サンプルは最大 5 件の完全な行だけです。
csv_headの最後が改行で終わらない場合、その行は途中で切れている可能性があるので破棄されます。 - データは保存されません。 提案を編集して次のステップで送信します。
(
sample_result)
| ステータス | 意味 |
|---|---|
403 org_admin_required | どの組織のオーナー・管理者でもありません。 |
403 vendor_data_not_on_plan | 組織の管理権限はありますが Enterprise 組織がありません。 |
| 422 | csv_head が 16,384 文字超、ヘッダーなし、列名重複、完全なデータ行なし。detail に理由が入ります。 |
| 429(レート) | アカウントから直近 1 時間に 30 件超。 |
| 429(AI クレジット) | 組織の期間内クレジットが尽きました。 |
502 mapping proposal unavailable | 提案を作成できません。再試行するか手動で定義してください。 |