認証: すべての関数エンドポイントはヘッダー X-API-Key: <your key>(.env に設定した値)を必要とします。
/health、/docs、/redoc、/openapi.json は公開されています(キー不要)。
インタラクティブなドキュメントは FastAPI によって自動生成されます。
| URL | 内容 |
|---|---|
/docs |
Swagger UI(その場で試せる) |
/redoc |
ReDoc リファレンス |
/openapi.json |
機械可読な OpenAPI 3.1 スペック |
1. get_schedule — カンファレンスのセッション一覧
GET /get_schedule?day=&track=&speaker=
クエリパラメータ(すべて省略可能):
| 名前 | 型 | 説明 |
|---|---|---|
day |
string | 日付ラベル "Day 1" / "Day 2"、または ISO 日付 "2026-06-24" / "2026-06-25"。 |
track |
string | トラックの部分文字列。例: "Leadership"、"Performance"、"Workshop"。 |
speaker |
string | 登壇者名の部分文字列。例: "Ohtani" または "Kumamon"。 |
JSON スキーマ — クエリパラメータ(Perxona CallFunc › query params に貼り付けてください):
{
"type": "object",
"properties": {
"day": { "type": "string", "description": "Day label ('Day 1') or ISO date ('2026-06-24')." },
"track": { "type": "string", "description": "Track substring, e.g. 'Performance' or 'Workshop'." },
"speaker": { "type": "string", "description": "Speaker name substring, e.g. 'Ohtani'." }
}
}
例
curl -s "$BASE/get_schedule?day=Day%201&track=Performance" -H "X-API-Key: $KEY"
{
"count": 1,
"sessions": [
{ "id": "s2", "title": "Full-Stack Athlete: How to Pitch AND Hit in the Same Sprint", "speaker": "Shohei Ohtani",
"track": "Performance", "room": "Room A", "day": "Day 1", "date": "2026-06-24",
"start": "2026-06-24T11:00", "end": "2026-06-24T11:45" }
]
}
出力スキーマ(Perxona CallFunc › Output data に貼り付けてください):
| フィールド | 型 | 説明 |
|---|---|---|
count |
integer | 返却されたセッション数。 |
sessions |
array of objects | 一致したセッション。各項目は以下のフィールドを持ちます。 |
sessions[].id |
string | セッション id。 |
sessions[].title |
string | セッションのタイトル。 |
sessions[].speaker |
string | 登壇者名。 |
sessions[].track |
string | トラック。例: "Performance"。 |
sessions[].room |
string | 部屋名。 |
sessions[].day |
string | 日付ラベル。例: "Day 1"。 |
sessions[].date |
string | ISO 日付 YYYY-MM-DD。 |
sessions[].start |
string | ローカルの開始日時。ISO 8601(オフセットなし)。 |
sessions[].end |
string | ローカルの終了日時。ISO 8601(オフセットなし)。 |
{
"type": "object",
"properties": {
"count": { "type": "integer", "description": "Number of sessions returned." },
"sessions": {
"type": "array",
"description": "Matching sessions.",
"items": {
"type": "object",
"properties": {
"id": { "type": "string", "description": "Session id." },
"title": { "type": "string", "description": "Session title." },
"speaker": { "type": "string", "description": "Speaker name." },
"track": { "type": "string", "description": "Track, e.g. 'Performance'." },
"room": { "type": "string", "description": "Room name." },
"day": { "type": "string", "description": "Day label, e.g. 'Day 1'." },
"date": { "type": "string", "description": "ISO date YYYY-MM-DD." },
"start": { "type": "string", "description": "Local start datetime, ISO 8601 (no offset)." },
"end": { "type": "string", "description": "Local end datetime, ISO 8601 (no offset)." }
}
}
}
}
}
2. get_speaker — 登壇者の検索
GET /get_speaker?name=&id=
クエリパラメータ(どちらも省略可能。両方省略すると全員を一覧表示):
| 名前 | 型 | 説明 |
|---|---|---|
name |
string | 登壇者名の部分文字列(大文字・小文字を区別しません)。 |
id |
string | 登壇者 id の完全一致。例: "spk_ohtani"。 |
JSON スキーマ — クエリパラメータ:
{
"type": "object",
"properties": {
"name": { "type": "string", "description": "Speaker name to search for (substring)." },
"id": { "type": "string", "description": "Exact speaker id, e.g. 'spk_ohtani'." }
}
}
例
curl -s "$BASE/get_speaker?name=ohtani" -H "X-API-Key: $KEY"
{
"count": 1,
"speakers": [
{ "id": "spk_ohtani", "name": "Shohei Ohtani", "title": "Two-Way Player — Pitcher & Designated Hitter",
"company": "Los Angeles Dodgers", "bio": "The only engineer who is both the frontend AND the backend. Throws it at 100 mph, then hits it back even harder. Swears his real secret weapon is sleeping 10 hours a night — he calls it his cache layer.",
"topics": ["peak performance", "two-way ops", "discipline"],
"sessions": ["Full-Stack Athlete: How to Pitch AND Hit in the Same Sprint", "Batting Practice for Builders: Swinging at Every Pitch Life Throws"] }
]
}
出力スキーマ(Perxona CallFunc › Output data に貼り付けてください):
| フィールド | 型 | 説明 |
|---|---|---|
count |
integer | 返却された登壇者数。 |
speakers |
array of objects | 一致した登壇者。各項目は以下のフィールドを持ちます。 |
speakers[].id |
string | 登壇者 id。例: "spk_ohtani"。 |
speakers[].name |
string | フルネーム。 |
speakers[].title |
string | 役職。 |
speakers[].company |
string | 会社・組織。 |
speakers[].bio |
string | 略歴。 |
speakers[].topics |
array of strings | その登壇者が扱うトピック。 |
speakers[].sessions |
array of strings | その登壇者が担当するセッションのタイトル。 |
{
"type": "object",
"properties": {
"count": { "type": "integer", "description": "Number of speakers returned." },
"speakers": {
"type": "array",
"description": "Matching speakers.",
"items": {
"type": "object",
"properties": {
"id": { "type": "string", "description": "Speaker id, e.g. 'spk_ohtani'." },
"name": { "type": "string", "description": "Full name." },
"title": { "type": "string", "description": "Job title." },
"company": { "type": "string", "description": "Company / organization." },
"bio": { "type": "string", "description": "Short biography." },
"topics": { "type": "array", "items": { "type": "string" }, "description": "Topics the speaker covers." },
"sessions": { "type": "array", "items": { "type": "string" }, "description": "Titles of sessions this speaker presents." }
}
}
}
}
}
3. book_meeting — 登壇者との 1:1 を予約する(→ Google Calendar)
POST /book_meeting
Content-Type: application/json
ボディ
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
attendee_name |
string | ✓ | ミーティングをリクエストする人。 |
speaker |
string | ✓ | 会う登壇者(get_speaker を参照)。例: "Shohei Ohtani" または "Tanjiro Kamado"。 |
date |
string | ✓ | YYYY-MM-DD。デモのカンファレンスでは通常 2026-06-24 または 2026-06-25。 |
start_time |
string | ✓ | HH:MM(24時間表記)。サーバーのタイムゾーンで解釈されます。 |
duration_minutes |
integer | – | 5〜240、デフォルトは 30。 |
attendee_email |
string | – | イベントの説明に追加されます。 |
topic |
string | – | ミーティングのトピック。 |
JSON スキーマ — ペイロード(Perxona CallFunc › payload に貼り付けてください):
{
"type": "object",
"required": ["attendee_name", "speaker", "date", "start_time"],
"properties": {
"attendee_name": { "type": "string", "description": "Name of the person requesting the meeting." },
"speaker": { "type": "string", "description": "Name of the speaker to meet, e.g. 'Shohei Ohtani'." },
"date": { "type": "string", "description": "Meeting date, YYYY-MM-DD (for the demo, usually 2026-06-24 or 2026-06-25)." },
"start_time": { "type": "string", "description": "Local start time, 24h HH:MM." },
"duration_minutes": { "type": "integer", "minimum": 5, "maximum": 240, "default": 30 },
"attendee_email": { "type": "string", "description": "Optional attendee email." },
"topic": { "type": "string", "description": "Optional meeting topic." }
}
}
例
curl -s -X POST "$BASE/book_meeting" \
-H "X-API-Key: $KEY" -H "Content-Type: application/json" \
-d '{"attendee_name":"Sam Patel","speaker":"Shohei Ohtani","date":"2026-06-24","start_time":"16:00","duration_minutes":30,"topic":"Peak performance Q&A"}'
{
"booking_id": "bk-1a2b3c4d5e",
"status": "confirmed",
"mode": "google_calendar",
"summary": "1:1: Sam Patel ↔ Shohei Ohtani — Peak performance Q&A",
"speaker": "Shohei Ohtani",
"start": "2026-06-24T16:00:00+08:00",
"end": "2026-06-24T16:30:00+08:00",
"timezone": "Asia/Taipei",
"event_link": "https://www.google.com/calendar/event?eid=…",
"message": "Meeting confirmed and added to the calendar for 2026-06-24 16:00."
}
出力スキーマ(Perxona CallFunc › Output data に貼り付けてください):
| フィールド | 型 | 説明 |
|---|---|---|
booking_id |
string | 一意の予約 id。例: "bk-1a2b3c4d5e"。 |
status |
string | 成功時は常に "confirmed"。 |
mode |
string | 実際のカレンダーに書き込まれた場合は "google_calendar"、それ以外は "mock"。 |
summary |
string | イベントのタイトル。 |
speaker |
string | 解決された登壇者名。 |
start |
string | イベント開始。タイムゾーンオフセット付きの ISO 8601。 |
end |
string | イベント終了。タイムゾーンオフセット付きの ISO 8601。 |
timezone |
string | IANA タイムゾーン。例: "Asia/Taipei"。 |
event_link |
string | null | Google Calendar のイベント URL(モックモードでは null)。 |
message |
string | 人間が読める確認メッセージ。 |
{
"type": "object",
"properties": {
"booking_id": { "type": "string", "description": "Unique booking id, e.g. 'bk-1a2b3c4d5e'." },
"status": { "type": "string", "description": "Always 'confirmed' on success." },
"mode": { "type": "string", "description": "'google_calendar' if written to a real calendar, else 'mock'." },
"summary": { "type": "string", "description": "Event title." },
"speaker": { "type": "string", "description": "Resolved speaker name." },
"start": { "type": "string", "description": "Event start, ISO 8601 with timezone offset." },
"end": { "type": "string", "description": "Event end, ISO 8601 with timezone offset." },
"timezone": { "type": "string", "description": "IANA timezone, e.g. 'Asia/Taipei'." },
"event_link": { "type": ["string", "null"], "description": "Google Calendar event URL (null in mock mode)." },
"message": { "type": "string", "description": "Human-readable confirmation message." }
}
}
エラー
| ステータス | 発生条件 |
|---|---|
401 |
X-API-Key が欠落または無効。 |
422 |
date/start_time の形式が不正、または必須のボディフィールドが欠落。 |
502 |
Google は設定済みだが、Calendar への挿入に失敗(詳細を含む)。 |