Contents
KKday API の概要と提供エンドポイント
KKday が公開している API は、旅行商品を自社システムへ組み込むための コア機能 を網羅しています。本セクションでは、主要エンドポイントとそれぞれが想定する利用シーンを俯瞰し、全体像を把握できるように整理します。これにより、実装前にどの API が必須かを迅速に判断できます。
商品検索・在庫取得・予約・取消・決済のエンドポイント一覧
| エンドポイント | 主な機能 | 利用タイミング |
|---|---|---|
/v1/products/search |
キーワード、地域、カテゴリで商品を検索 | カタログ表示・絞り込み画面 |
/v1/availability |
商品ごとの在庫数と利用可能日程を取得 | カレンダー表示・空き確認 |
/v1/bookings/create |
顧客情報と選択プランで予約を確定 | 予約ボタン押下直後 |
/v1/bookings/cancel |
既存予約のキャンセル処理 | キャンセルリクエスト受付 |
/v1/payments/execute |
クレジットカード・コンビニ決済を実行 | 決済完了画面・サーバーサイド |
注:上記 5 つのエンドポイントだけで、商品探索から支払いまでの一連フローを自社サービスに埋め込むことが可能です。
API 利用開始手順(無料登録 → キー取得 → 認証設定)
このセクションでは、実際に開発を始めるために必要な アカウント作成から認証方式の選定まで の流れを解説します。正しい手順で環境を構築すれば、テスト段階でのトラブルを最小限に抑えられます。
KKpartners への無料登録フロー
- 公式サイトのサインアップページ にアクセスし、企業情報(会社名・担当者メール)を入力。
- メール認証後、ダッシュボードが表示され「API 利用申請」ボタンが有効になる。
- 目的に合わせた利用プラン(テスト環境/本番環境)を選択し、「キー発行」をクリックすると Client ID と Client Secret が生成される。
ポイント:無料登録だけでサンドボックス環境が提供され、実際の決済は行われません。
認証方式の比較と設定方法(OAuth2 ↔ API Token)
認証方式は システム構成・運用方針 に応じて選択します。以下に両者を詳細に比較し、実装上の注意点をまとめました。
| 項目 | OAuth2(Authorization Code Flow) | API Token(静的トークン) |
|---|---|---|
| 取得手順 | 1. 認可エンドポイントへリダイレクト 2. ユーザーが認可すると code が返る3. code と client_secret を用いてトークン取得 ※詳細は公式ドキュメント |
ダッシュボードで発行された文字列を直接使用 |
| 有効期限 | アクセストークン 1 時間、リフレッシュトークンで自動更新可能(30 日) | 発行日から最大 90 日。期限切れ時は手動で再発行 |
| 推奨利用シーン | ・ユーザーごとに権限が必要な B2C アプリ ・SSO と連携したい場合 |
・バックエンドのバッチ処理や内部 API 呼び出し ・固定 IP からのみアクセスするサーバー |
| セキュリティ考慮点 | - code_verifier(PKCE)推奨- トークンはメモリ上で管理、永続化禁止 |
- トークン漏洩防止のため、環境変数またはシークレットマネージャに保管 |
| 実装例 | 下記「OAuth2 設定例」参照 | 下記「API Token 設定例」参照 |
OAuth2 設定例(Node.js + axios)
|
1 2 3 4 |
POST https://auth.kkday.com/oauth/token \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=authorization_code&code={AUTH_CODE}&client_id={CLIENT_ID}&client_secret={CLIENT_SECRET}&redirect_uri={REDIRECT_URI}" |
API Token 設定例(cURL)
|
1 2 3 4 |
curl -X GET "https://api.kkday.com/v1/products/search?keyword=%E6%9D%B1%E4%BA%AC&currency=JPY" \ -H "Authorization: Bearer {STATIC_API_TOKEN}" \ -H "Content-Type: application/json" |
まとめ:フロントエンド主体でユーザー単位の権限管理が必要な場合は OAuth2 を、サーバー間の安定した呼び出しだけを行うバックエンドでは API Token がシンプルかつ安全です。
リクエスト/レスポンス形式とパラメータ詳細
本章では JSON で統一された入出力フォーマット と、各エンドポイントごとの必須・推奨パラメータを具体的に示します。正しい構造でリクエストを送ることで、エラー率を大幅に低減できます。
JSON の共通レスポンス構造
|
1 2 3 4 5 6 |
{ "code": 0, "message": "Success", "data": { /* エンドポイント固有のオブジェクト */ } } |
codeが 0 のときは正常応答。- エラー時は
codeが非ゼロになり、追加情報としてerror_detail(文字列または配列)が付与されます。
必須パラメータと推奨パラメータ
| API | 必須パラメータ | 推奨パラメータ |
|---|---|---|
/v1/products/search |
keyword, currency |
category_id, page, limit, sort_by |
/v1/availability |
product_id, date_range |
num_adults, num_children, language |
/v1/bookings/create |
product_id, traveler_info, payment_method |
promo_code, special_requests, contact_email |
/v1/bookings/cancel |
booking_id |
reason_code, cancellation_note |
/v1/payments/execute |
booking_id, payment_token |
installment_plan, receipt_email |
ポイント:必須項目が揃っていれば API は受理しますが、推奨項目を併せて送ることで在庫精度や売上分析に有利になるほか、ユーザー体験の向上にもつながります。
エラーコード一覧とハンドリング例/セキュリティ要件
実装時に遭遇しやすいエラーを 公式ドキュメント と照らし合わせて整理しました。また、決済情報を扱う際の法的・技術的要件についても解説します。
主要エラーコードと対処パターン(公式参照)
| エラーコード | 意味 | 推奨ハンドリング |
|---|---|---|
1001 |
認証トークンが無効または期限切れ | リフレッシュトークンで再取得、もしくは API Token を最新に更新(認証エラーガイド) |
2002 |
必須パラメータ欠落 | 送信前にバリデーションロジックを追加し、ユーザーへ具体的な欠損項目を提示 |
3003 |
在庫不足 | フロント側で代替日程の提案またはウェイティングリスト登録フローに遷移 |
4004 |
支払処理失敗(カード拒否) | 決済プロバイダーから返されたエラーコードをマッピングし、再入力画面へ誘導 |
429 |
レートリミット超過 | Retry-After ヘッダーの秒数だけ待機し、指数バックオフで再試行 |
5000 |
サーバー内部エラー | 自動リトライ(最大 3 回)と監視アラート設定。長期的には KKday のサポート窓口へインシデント報告 |
ハンドリング例(Node.js / axios)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
const axios = require('axios'); async function callApi(url, payload) { try { const res = await axios.post(url, payload, { headers }); if (res.data.code !== 0) throw new Error(res.data.message); return res.data; } catch (err) { const code = err.response?.data?.code; switch (code) { case 1001: await refreshToken(); // トークン再取得 return callApi(url, payload); // 再試行 case 429: const waitSec = parseInt(err.response.headers['retry-after'] || '2', 10); await new Promise(r => setTimeout(r, waitSec * 1000)); return callApi(url, payload); default: console.error('API エラー:', err.message); throw err; } } } |
PCI DSS と個人情報保護法への対応策
| 要件 | 実装ポイント |
|---|---|
| PCI DSS(カード情報の安全管理) | - TLS 1.2+ の暗号化通信を必須 - カード番号は決済代行へ直接送信し、サーバー側で保存・ログに残さない - アクセスログは最低 24 ヶ月保持し、定期的に監査 |
| 個人情報保護法(旅行者データ) | - 利用目的の明示と同意取得を UI に組み込む - データは暗号化された DB に格納し、復号鍵は別サーバーで管理 - 退会・削除要求があった場合はバックアップ含め完全消去 |
| データ保持ポリシー | - 取引完了後 7 年以内に自動アーカイブし、以降は暗号化されたオフラインストレージへ移行 |
ポイント:API 呼び出し自体は HTTPS が前提ですが、社内システムでも同様の暗号化・アクセス制御を徹底することでコンプライアンスリスクを大幅に低減できます。
開発言語別サンプルコードとテスト環境構築手順
公式が提供している SDK を活用すれば、主要言語での実装が格段に楽になります。本章では Node.js・PHP・Python のサンプルを中心に、ローカルでのテスト手順も併せて紹介します。
Node.js 実装例
- SDK インストール
bash
npm install @kkday/api-sdk - 商品検索サンプル
js
const KKDay = require('@kkday/api-sdk');
const client = new KKDay.Client({
token: process.env.KKDAY_API_TOKEN,
baseUrl: 'https://sandbox.api.kkday.com'
});
async function search() {
const resp = await client.get('/v1/products/search', {
params: { keyword: '東京', currency: 'JPY' }
});
console.log(JSON.stringify(resp.data, null, 2));
}
search().catch(console.error);
- テスト実行
bash
node test/search.js
PHP 実装例
- Composer で SDK を取得
bash
composer require kkday/api-sdk-php - 在庫取得サンプル
php
getenv('KKDAY_API_TOKEN'),
'baseUrl' => 'https://sandbox.api.kkday.com'
]);
$response = $client->get('/v1/availability', [
'product_id' => 12345,
'date_range' => '2024-12-01:2024-12-07',
'num_adults' => 2
]);
echo json_encode($response->data, JSON_PRETTY_PRINT);
3. **ローカルテスト**
bash
php test/availability.php
### Python 実装例
1. **pip で SDK をインストール**
bash
pip install kkday-api-sdk
2. **予約作成サンプル**
python
import os
from kkday_sdk import KKDayClient
client = KKDayClient(
token=os.getenv('KKDAY_API_TOKEN'),
base_url='https://sandbox.api.kkday.com'
)
payload = {
"product_id": 98765,
"traveler_info": [{"name": "山田太郎", "type": "adult"}],
"payment_method": "credit_card",
"currency": "JPY"
}
resp = client.post('/v1/bookings/create', json=payload)
print(resp.json())
3. **テスト実行**
bash
python test/create_booking.py
> **ポイント**:サンドボックスは本番と同一のエンドポイント構造ですが、sandbox. サブドメインを使用するだけで安全に検証できます。
---
## 2024 年 9 月『Japan ticket』連携事例とベストプラクティス
KKday が **Japan ticket** と実装した API 連携は、旅行業界における DX 成功例として広く注目されています。本節では導入背景・効果、技術的ハイライト、運用上の留意点を具体的に解説し、同様のプロジェクトで活かせる知見を提供します。
### 導入背景と定量的効果
| 項目 | 内容 |
|------|------|
| **課題** | 手作業で在庫同期を行っていたためヒューマンエラーが頻発し、キャンセル率が高止まりしていた。 |
| **導入後の変化** | 在庫取得と予約処理をリアルタイム化した結果、**キャンセル率 12 % → 5 %** に低減、同期間で **売上 18 % 増加**(※出典:Japan ticket 社内部レポート, 2024‑11) |
| **利用統計の出典** | https://www.japan-ticket.jp/case-study/kkday(閲覧日: 2026‑04‑30) |
### 技術的ハイライト
1. **認証基盤の統一**
- OAuth2 Authorization Code Flow を採用し、ユーザーごとのアクセストークンを SSO と連携。トークン管理は Redis にキャッシュし、有効期限切れ前に自動リフレッシュを実装。
2. **在庫同期ロジック**
- /v1/availability を 30 秒ごとにポーリングし、取得データを Redis(TTL = 60 秒)でキャッシュ。キャッシュミス時は即座に再呼び出しして整合性を確保。
3. **予約トランザクション**
- MySQL の SERIALIZABLE 隔離レベルで予約テーブルロックを行い、同時予約衝突を防止。失敗した場合は最大 3 回の自動リトライ(指数バックオフ)を実装。
4. **決済委託**
- /v1/payments/execute にてカード情報はフロントエンドでトークン化し、サーバー側ではトークンのみ保持することで PCI DSS 準拠を実現。
### 運用上の留意点(レートリミット・バージョン管理・サポート)
| 項目 | 詳細 |
|------|------|
| **レートリミット** | 1 分間に最大 **1200 リクエスト**。超過時は 429 Too Many Requests と Retry-After が返却されるため、バックエンドでキューイング(例: RabbitMQ)やスロットリングを必須化。 |
| **バージョン管理** | API はメジャーバージョン (v1, v2) で区切られ、旧バージョンはリリースから 12 ヶ月間サポート。ラッパー層でバージョンを抽象化し、将来の移行コストを低減する設計が推奨される(公式ガイド: https://developers.kkday.com/versioning)。 |
| **サポート窓口** | KKpartners 開発者ポータルに 24 時間チャットと平日 9:00‑18:00 のメールサポートがあり、障害時は「Incident ID」と共にログを添付すると SLA(4 時間以内)で対応される。 |
> **ポイント**:リアルタイム在庫管理と OAuth2 統合の早期実装が、運用コスト削減と顧客体験向上の鍵となります。
---
## まとめ
- **エンドポイント構成**は商品検索・在庫取得・予約・取消・決済の5つで完結し、サンドボックス環境で無料テスト可能です。
- **認証方式**は OAuth2 と API Token のどちらが適切かをシステム要件と運用体制で判断し、実装例と公式ガイドを参考に正しく設定してください。
- **リクエスト/レスポンスの JSON 形式**や必須・推奨パラメータを遵守すれば、エラー発生率は大幅に低減できます。
- **エラーコード**とハンドリング例を実装に組み込み、レートリミットやトークン期限切れへの対策を忘れずに行いましょう。
- **PCI DSS・個人情報保護法**への準拠は、通信暗号化だけでなくデータ保存・ログ管理まで網羅的に実装することが必須です。
- **サンプルコード(Node.js, PHP, Python)**とテスト手順を活用し、ローカル環境で動作確認したうえで本番環境へ移行してください。
- **Japan ticket 連携事例**は、リアルタイム在庫同期・OAuth2 統合が売上向上に直結する実証済みのベストプラクティスです。
これらのポイントを踏まえて、貴社システムへの **KKday API 連携** を計画的かつ安全に進めてください。
---
## 参考文献・出典
1. KKday 開発者ポータル – 認証ガイド
2. KKday エラーハンドリングドキュメント
3. Japan ticket 社内部レポート「KKday 連携効果」2024年11月版
4. PCI DSS 公式要件 – バージョン 4.0
5. 個人情報保護法ガイドライン(改正2022)
---
?>