{
  "ucp": {
    "version": "2026-04-08",
    "services": {
      "dev.ucp.shopping": [
        {
          "version": "2026-04-08",
          "spec": "https://ucp.dev/2026-04-08/specification/overview",
          "transport": "rest",
          "endpoint": "https://gocheckin.tw/api/ucp",
          "schema": "https://ucp.dev/2026-04-08/services/shopping/rest.openapi.json",
          "config": {
            "docs": "https://gocheckin.tw/docs/ucp-openapi.yaml",
            "local_endpoint": "http://127.0.0.1:4173/api/ucp",
            "mock": true
          }
        }
      ]
    },
    "capabilities": {
      "dev.ucp.shopping.checkout": [
        {
          "version": "2026-04-08",
          "spec": "https://ucp.dev/2026-04-08/specification/checkout",
          "schema": "https://ucp.dev/2026-04-08/schemas/shopping/checkout.json",
          "config": {
            "statuses": [
              "incomplete",
              "requires_escalation",
              "ready_for_complete",
              "complete_in_progress",
              "completed",
              "canceled"
            ],
            "checkout_ttl_seconds": 21600,
            "required_links": [
              "terms_of_service",
              "privacy_policy"
            ],
            "rest": {
              "create": "POST /checkout-sessions",
              "get": "GET /checkout-sessions/{id}",
              "update": "PUT /checkout-sessions/{id}",
              "complete": "POST /checkout-sessions/{id}/complete",
              "cancel": "POST /checkout-sessions/{id}/cancel"
            }
          }
        }
      ],
      "dev.ucp.shopping.order": [
        {
          "version": "2026-04-08",
          "spec": "https://ucp.dev/2026-04-08/specification/order",
          "schema": "https://ucp.dev/2026-04-08/schemas/shopping/order.json",
          "config": {
            "rest": {
              "get": "GET /orders/{id}"
            },
            "notes": "訂單建立後提供 GET /api/ucp/orders/{id} 查詢；本原型不寄送 webhook。"
          }
        }
      ],
      "tw.gocheckin.transfer.booking": [
        {
          "version": "2026-04-08",
          "spec": "https://gocheckin.tw/docs/ucp-openapi.yaml#tag/Booking-Extension",
          "schema": "https://gocheckin.tw/api/schemas/transfer-booking.json",
          "extends": "dev.ucp.shopping.checkout",
          "config": {
            "description": "goCheckin 分區車資接送擴充：checkout 上的 booking 欄位承載送機／接機、上車時間、雙北行政區、車型、舉牌、加點、航班、乘客與行李。",
            "timezone": "Asia/Taipei",
            "currency": "TWD",
            "skus": [
              {
                "sku": "gocheckin.transfer.dropoff.sedan",
                "service": "dropoff",
                "vehicle": "sedan",
                "vehicle_name": "五座",
                "note": "價格依車資區（district）由 business 計算，SKU 本身不定價。"
              },
              {
                "sku": "gocheckin.transfer.dropoff.suv",
                "service": "dropoff",
                "vehicle": "suv",
                "vehicle_name": "休旅",
                "note": "價格依車資區（district）由 business 計算，SKU 本身不定價。"
              },
              {
                "sku": "gocheckin.transfer.dropoff.van",
                "service": "dropoff",
                "vehicle": "van",
                "vehicle_name": "商務",
                "note": "價格依車資區（district）由 business 計算，SKU 本身不定價。"
              },
              {
                "sku": "gocheckin.transfer.pickup.sedan",
                "service": "pickup",
                "vehicle": "sedan",
                "vehicle_name": "五座",
                "note": "價格依車資區（district）由 business 計算，SKU 本身不定價。"
              },
              {
                "sku": "gocheckin.transfer.pickup.suv",
                "service": "pickup",
                "vehicle": "suv",
                "vehicle_name": "休旅",
                "note": "價格依車資區（district）由 business 計算，SKU 本身不定價。"
              },
              {
                "sku": "gocheckin.transfer.pickup.van",
                "service": "pickup",
                "vehicle": "van",
                "vehicle_name": "商務",
                "note": "價格依車資區（district）由 business 計算，SKU 本身不定價。"
              }
            ],
            "zones": [
              {
                "id": 1,
                "key": "zone1",
                "name": "第一區",
                "districts": [
                  "林口區",
                  "三峽區",
                  "鶯歌區"
                ],
                "dropoff_prices": {
                  "sedan": 800,
                  "suv": 900,
                  "van": 1200
                }
              },
              {
                "id": 2,
                "key": "zone2",
                "name": "第二區",
                "districts": [
                  "泰山區",
                  "樹林區",
                  "五股區",
                  "新莊區"
                ],
                "dropoff_prices": {
                  "sedan": 900,
                  "suv": 1000,
                  "van": 1300
                }
              },
              {
                "id": 3,
                "key": "zone3",
                "name": "第三區",
                "districts": [
                  "板橋區",
                  "土城區",
                  "蘆洲區",
                  "淡水區",
                  "三重區",
                  "萬華區",
                  "北投區",
                  "中和區",
                  "大同區",
                  "中正區",
                  "士林區",
                  "永和區",
                  "中山區",
                  "大安區",
                  "新店區",
                  "信義區",
                  "松山區",
                  "內湖區",
                  "文山區"
                ],
                "dropoff_prices": {
                  "sedan": 1000,
                  "suv": 1100,
                  "van": 1400
                }
              },
              {
                "id": 4,
                "key": "zone4",
                "name": "第四區",
                "districts": [
                  "南港區",
                  "深坑區",
                  "汐止區"
                ],
                "dropoff_prices": {
                  "sedan": 1100,
                  "suv": 1200,
                  "van": 1500
                }
              }
            ],
            "vehicles": [
              {
                "key": "sedan",
                "name": "五座",
                "seats": 4,
                "luggage": 3
              },
              {
                "key": "suv",
                "name": "休旅",
                "seats": 4,
                "luggage": 4
              },
              {
                "key": "van",
                "name": "商務",
                "seats": 6,
                "luggage": 6
              }
            ],
            "offers": {
              "count": 24,
              "price_range": {
                "dropoff": {
                  "min": 800,
                  "max": 1500
                },
                "pickup": {
                  "min": 900,
                  "max": 1600
                }
              },
              "matrix": {
                "dropoff": [
                  {
                    "id": 1,
                    "name": "第一區",
                    "districts": [
                      "林口區",
                      "三峽區",
                      "鶯歌區"
                    ],
                    "prices": {
                      "sedan": 800,
                      "suv": 900,
                      "van": 1200
                    }
                  },
                  {
                    "id": 2,
                    "name": "第二區",
                    "districts": [
                      "泰山區",
                      "樹林區",
                      "五股區",
                      "新莊區"
                    ],
                    "prices": {
                      "sedan": 900,
                      "suv": 1000,
                      "van": 1300
                    }
                  },
                  {
                    "id": 3,
                    "name": "第三區",
                    "districts": [
                      "板橋區",
                      "土城區",
                      "蘆洲區",
                      "淡水區",
                      "三重區",
                      "萬華區",
                      "北投區",
                      "中和區",
                      "大同區",
                      "中正區",
                      "士林區",
                      "永和區",
                      "中山區",
                      "大安區",
                      "新店區",
                      "信義區",
                      "松山區",
                      "內湖區",
                      "文山區"
                    ],
                    "prices": {
                      "sedan": 1000,
                      "suv": 1100,
                      "van": 1400
                    }
                  },
                  {
                    "id": 4,
                    "name": "第四區",
                    "districts": [
                      "南港區",
                      "深坑區",
                      "汐止區"
                    ],
                    "prices": {
                      "sedan": 1100,
                      "suv": 1200,
                      "van": 1500
                    }
                  }
                ],
                "pickup": [
                  {
                    "id": 1,
                    "name": "第一區",
                    "districts": [
                      "林口區",
                      "三峽區",
                      "鶯歌區"
                    ],
                    "prices": {
                      "sedan": 900,
                      "suv": 1000,
                      "van": 1300
                    }
                  },
                  {
                    "id": 2,
                    "name": "第二區",
                    "districts": [
                      "泰山區",
                      "樹林區",
                      "五股區",
                      "新莊區"
                    ],
                    "prices": {
                      "sedan": 1000,
                      "suv": 1100,
                      "van": 1400
                    }
                  },
                  {
                    "id": 3,
                    "name": "第三區",
                    "districts": [
                      "板橋區",
                      "土城區",
                      "蘆洲區",
                      "淡水區",
                      "三重區",
                      "萬華區",
                      "北投區",
                      "中和區",
                      "大同區",
                      "中正區",
                      "士林區",
                      "永和區",
                      "中山區",
                      "大安區",
                      "新店區",
                      "信義區",
                      "松山區",
                      "內湖區",
                      "文山區"
                    ],
                    "prices": {
                      "sedan": 1100,
                      "suv": 1200,
                      "van": 1500
                    }
                  },
                  {
                    "id": 4,
                    "name": "第四區",
                    "districts": [
                      "南港區",
                      "深坑區",
                      "汐止區"
                    ],
                    "prices": {
                      "sedan": 1200,
                      "suv": 1300,
                      "van": 1600
                    }
                  }
                ]
              }
            },
            "add_ons": {
              "pickup_surcharge": 100,
              "sign_fee": 200,
              "sign_services": [
                "pickup"
              ],
              "add_stop_tiers": [
                {
                  "id": "s",
                  "label": "5 公里內",
                  "fee": 100,
                  "max_km": 5
                },
                {
                  "id": "m",
                  "label": "6–10 公里",
                  "fee": 200,
                  "max_km": 10
                },
                {
                  "id": "l",
                  "label": "11–15 公里",
                  "fee": 300,
                  "max_km": 15
                }
              ],
              "max_add_stop_km": 15
            },
            "service_area": {
              "cities": [
                "台北市",
                "新北市"
              ],
              "served_district_count": 29,
              "excluded_districts": [
                "八里區",
                "瑞芳區",
                "平溪區",
                "雙溪區",
                "貢寮區",
                "石碇區",
                "坪林區",
                "烏來區",
                "三芝區",
                "石門區",
                "金山區",
                "萬里區"
              ],
              "other_cities": [
                "基隆市",
                "桃園市"
              ],
              "out_of_area_message": "抱歉，不在本公司服務範圍"
            },
            "required_fields": [
              "booking.service",
              "booking.district",
              "booking.pickup_at",
              "booking.vehicle",
              "booking.origin",
              "booking.destination",
              "booking.contact.name",
              "booking.contact.phone"
            ],
            "price_authority": "business",
            "price_updated": "2026-10-27",
            "mock": true
          }
        }
      ]
    },
    "payment_handlers": {
      "tw.gocheckin.transfer.mock_payment": [
        {
          "id": "tw.gocheckin.transfer.mock_payment",
          "version": "2026-04-08",
          "spec": "https://gocheckin.tw/docs/ucp-openapi.yaml#tag/Mock-Payment-Handler",
          "schema": "https://gocheckin.tw/api/schemas/mock-payment-handler.json",
          "available_instruments": [
            {
              "type": "mock_card"
            }
          ],
          "config": {
            "mode": "mock",
            "environment": "TEST",
            "supported_methods": [
              "cash_on_arrival",
              "mock_card"
            ],
            "collect_payment": false,
            "note": "設計原型：不串接真實金流、不請款、不儲存任何支付憑證。production 需整合 AP2（Agent Payments Protocol，https://ap2-protocol.org/）與 TAP（Visa Trusted Agent Protocol，https://developer.visa.com/docs/trusted-agent-protocol）等信任機制，或接入真實支付服務商（PSP）並完成 PCI DSS 範疇評估。",
            "production": {
              "requires": [
                "AP2 user-mandate verification",
                "TAP / Web Bot Auth agent admission",
                "PSP integration",
                "PCI DSS scope review"
              ],
              "payment_methods": [
                "credit_card",
                "line_pay",
                "cash"
              ]
            }
          }
        }
      ]
    }
  },
  "signing_keys": [
    {
      "kid": "gocheckin-mock-2026",
      "kty": "EC",
      "crv": "P-256",
      "x": "scsK47E64k2Ua3I7hJF4FkZO67udC7iSCzuw7txc5Sg",
      "y": "qhhd4nYqomS7NNK4SzD3FFHTjgaQqsdv7AiEj1JtVkU",
      "use": "sig",
      "alg": "ES256"
    }
  ]
}
