{
  "schemaVersion": "1.0",
  "item": {
    "slug": "cabin",
    "name": "Cabin Flights",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/kobuta23/cabin",
    "canonicalUrl": "https://clawhub.ai/kobuta23/cabin",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/cabin",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=cabin",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/cabin"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/cabin",
    "agentPageUrl": "https://openagent3.xyz/skills/cabin/agent",
    "manifestUrl": "https://openagent3.xyz/skills/cabin/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/cabin/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Cabin — Flight Search & Booking with USDC",
        "body": "Search real flights across 500+ airlines and book with USDC on Base."
      },
      {
        "title": "API Base URL",
        "body": "https://api.cabin.team"
      },
      {
        "title": "Search Flights",
        "body": "When the user wants to find flights:\n\ncurl -X POST https://api.cabin.team/v1/search \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"from\": \"HAN\",\n    \"to\": \"ATH\",\n    \"date\": \"2026-03-15\",\n    \"return_date\": \"2026-03-22\",\n    \"adults\": 1,\n    \"class\": \"ECONOMY\",\n    \"currency\": \"USD\",\n    \"max_results\": 5\n  }'\n\nParameters:\n\nfrom (required): Origin IATA airport code\nto (required): Destination IATA airport code\ndate (required): Departure date (YYYY-MM-DD)\nreturn_date (optional): Return date for round-trip\nadults (optional, default 1): Number of passengers\nclass (optional): ECONOMY, PREMIUM_ECONOMY, BUSINESS, FIRST\ncurrency (optional, default USD): Currency for prices\nmax_results (optional, default 10): Maximum results\n\nResponse includes:\n\nresults[] — Array of flight offers with prices, airlines, times, stops\nimage_url — URL to a rendered PNG comparison image of results\nsearch_id — ID to reference when booking\n\nPresenting results to users:\n\nShow the rendered image (fetch from image_url) for visual comparison\nUse structured data for specific questions (\"which is cheapest?\", \"any direct flights?\")\nAlways show price in both USD and USDC equivalent"
      },
      {
        "title": "Book a Flight",
        "body": "When the user wants to book:\n\ncurl -X POST https://api.cabin.team/v1/book \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"offer_id\": \"offer_1\",\n    \"search_id\": \"abc123\",\n    \"passengers\": [{\n      \"type\": \"adult\",\n      \"given_name\": \"John\",\n      \"family_name\": \"Doe\",\n      \"email\": \"john@example.com\",\n      \"born_on\": \"1990-01-15\",\n      \"gender\": \"m\"\n    }]\n  }'\n\nRequired passenger info:\n\ngiven_name, family_name\nemail\nborn_on (YYYY-MM-DD)\ngender (m/f)\n\nResponse includes:\n\nbooking_id — Cabin booking reference (CBN-YYYY-XXXX)\namount_usdc — Amount to pay in USDC\npayment.deposit_address — USDC deposit address on Base\npayment.checkout_url — Payment page URL to share with user"
      },
      {
        "title": "USDC Payment Flow",
        "body": "After booking, the user needs to pay in USDC on Base:\n\nShow the user the amount_usdc and payment.checkout_url\nUser can either:\na. Send USDC directly to payment.deposit_address on Base\nb. Visit checkout_url for a guided payment experience\nAfter payment, booking is confirmed automatically\n\nIf the agent has wallet capabilities (e.g., evm-wallet skill):\n\n# Check USDC balance on Base\nnode src/balance.js base --json\n\n# Send USDC to deposit address\nnode src/send.js base USDC <deposit_address> <amount_usdc> --yes --json"
      },
      {
        "title": "Check Booking Status",
        "body": "curl https://api.cabin.team/v1/booking/CBN-2026-XXXX\n\nStatuses: awaiting_payment → confirmed → checked_in"
      },
      {
        "title": "Get Confirmation Page",
        "body": "https://api.cabin.team/v1/booking/CBN-2026-XXXX/confirmation\n\nShare this URL with the user after payment confirmation."
      },
      {
        "title": "Get Check-in Page",
        "body": "https://api.cabin.team/v1/booking/CBN-2026-XXXX/checkin\n\nShare when it's time to check in for the flight."
      },
      {
        "title": "Common IATA Codes",
        "body": "CodeCityHANHanoiBKKBangkokSINSingaporeNRTTokyo NaritaHNDTokyo HanedaICNSeoulLHRLondonCDGParisFCORomeATHAthensJFKNew YorkLAXLos AngelesSFOSan FranciscoDXBDubaiISTIstanbul"
      },
      {
        "title": "Simple one-way search",
        "body": "User: \"Find me a flight from Bangkok to Tokyo next Friday\"\n\nParse: from=BKK, to=NRT (or HND), date=next Friday\nCall POST /v1/search\nShow image_url to user\nPresent top 3-5 options with prices"
      },
      {
        "title": "Round-trip booking",
        "body": "User: \"Book the cheapest round-trip from London to Barcelona, March 15-22\"\n\nSearch: from=LHR, to=BCN, date=2026-03-15, return_date=2026-03-22\nPresent options\nUser picks one → collect passenger details\nPOST /v1/book with passenger info\nShare payment URL → user pays in USDC\nConfirm booking → share confirmation page"
      },
      {
        "title": "Multi-passenger",
        "body": "User: \"We need flights for 3 people, Seoul to Bali, April 1-10\"\n\nSearch with adults=3\nPrices shown are per-person\nWhen booking, collect details for all 3 passengers\nTotal USDC amount = per-person × 3"
      },
      {
        "title": "Error Handling",
        "body": "No results: Try nearby airports or different dates\nBooking expired: Search results expire after 30 minutes, search again\nPayment timeout: Bookings expire 1 hour after creation if unpaid\nInvalid airport code: Suggest the correct IATA code"
      },
      {
        "title": "USDC on Base",
        "body": "Chain: Base (Ethereum L2)\nToken: USDC (0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913)\nGas fees: ~$0.01 per transaction\nConfirmation: ~2 seconds"
      }
    ],
    "body": "Cabin — Flight Search & Booking with USDC\n\nSearch real flights across 500+ airlines and book with USDC on Base.\n\nAPI Base URL\n\nhttps://api.cabin.team\n\nEndpoints\nSearch Flights\n\nWhen the user wants to find flights:\n\ncurl -X POST https://api.cabin.team/v1/search \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"from\": \"HAN\",\n    \"to\": \"ATH\",\n    \"date\": \"2026-03-15\",\n    \"return_date\": \"2026-03-22\",\n    \"adults\": 1,\n    \"class\": \"ECONOMY\",\n    \"currency\": \"USD\",\n    \"max_results\": 5\n  }'\n\n\nParameters:\n\nfrom (required): Origin IATA airport code\nto (required): Destination IATA airport code\ndate (required): Departure date (YYYY-MM-DD)\nreturn_date (optional): Return date for round-trip\nadults (optional, default 1): Number of passengers\nclass (optional): ECONOMY, PREMIUM_ECONOMY, BUSINESS, FIRST\ncurrency (optional, default USD): Currency for prices\nmax_results (optional, default 10): Maximum results\n\nResponse includes:\n\nresults[] — Array of flight offers with prices, airlines, times, stops\nimage_url — URL to a rendered PNG comparison image of results\nsearch_id — ID to reference when booking\n\nPresenting results to users:\n\nShow the rendered image (fetch from image_url) for visual comparison\nUse structured data for specific questions (\"which is cheapest?\", \"any direct flights?\")\nAlways show price in both USD and USDC equivalent\nBook a Flight\n\nWhen the user wants to book:\n\ncurl -X POST https://api.cabin.team/v1/book \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"offer_id\": \"offer_1\",\n    \"search_id\": \"abc123\",\n    \"passengers\": [{\n      \"type\": \"adult\",\n      \"given_name\": \"John\",\n      \"family_name\": \"Doe\",\n      \"email\": \"john@example.com\",\n      \"born_on\": \"1990-01-15\",\n      \"gender\": \"m\"\n    }]\n  }'\n\n\nRequired passenger info:\n\ngiven_name, family_name\nemail\nborn_on (YYYY-MM-DD)\ngender (m/f)\n\nResponse includes:\n\nbooking_id — Cabin booking reference (CBN-YYYY-XXXX)\namount_usdc — Amount to pay in USDC\npayment.deposit_address — USDC deposit address on Base\npayment.checkout_url — Payment page URL to share with user\nUSDC Payment Flow\n\nAfter booking, the user needs to pay in USDC on Base:\n\nShow the user the amount_usdc and payment.checkout_url\nUser can either: a. Send USDC directly to payment.deposit_address on Base b. Visit checkout_url for a guided payment experience\nAfter payment, booking is confirmed automatically\n\nIf the agent has wallet capabilities (e.g., evm-wallet skill):\n\n# Check USDC balance on Base\nnode src/balance.js base --json\n\n# Send USDC to deposit address\nnode src/send.js base USDC <deposit_address> <amount_usdc> --yes --json\n\nCheck Booking Status\ncurl https://api.cabin.team/v1/booking/CBN-2026-XXXX\n\n\nStatuses: awaiting_payment → confirmed → checked_in\n\nGet Confirmation Page\nhttps://api.cabin.team/v1/booking/CBN-2026-XXXX/confirmation\n\n\nShare this URL with the user after payment confirmation.\n\nGet Check-in Page\nhttps://api.cabin.team/v1/booking/CBN-2026-XXXX/checkin\n\n\nShare when it's time to check in for the flight.\n\nCommon IATA Codes\nCode\tCity\nHAN\tHanoi\nBKK\tBangkok\nSIN\tSingapore\nNRT\tTokyo Narita\nHND\tTokyo Haneda\nICN\tSeoul\nLHR\tLondon\nCDG\tParis\nFCO\tRome\nATH\tAthens\nJFK\tNew York\nLAX\tLos Angeles\nSFO\tSan Francisco\nDXB\tDubai\nIST\tIstanbul\nWorkflow Examples\nSimple one-way search\n\nUser: \"Find me a flight from Bangkok to Tokyo next Friday\"\n\nParse: from=BKK, to=NRT (or HND), date=next Friday\nCall POST /v1/search\nShow image_url to user\nPresent top 3-5 options with prices\nRound-trip booking\n\nUser: \"Book the cheapest round-trip from London to Barcelona, March 15-22\"\n\nSearch: from=LHR, to=BCN, date=2026-03-15, return_date=2026-03-22\nPresent options\nUser picks one → collect passenger details\nPOST /v1/book with passenger info\nShare payment URL → user pays in USDC\nConfirm booking → share confirmation page\nMulti-passenger\n\nUser: \"We need flights for 3 people, Seoul to Bali, April 1-10\"\n\nSearch with adults=3\nPrices shown are per-person\nWhen booking, collect details for all 3 passengers\nTotal USDC amount = per-person × 3\nError Handling\nNo results: Try nearby airports or different dates\nBooking expired: Search results expire after 30 minutes, search again\nPayment timeout: Bookings expire 1 hour after creation if unpaid\nInvalid airport code: Suggest the correct IATA code\nUSDC on Base\nChain: Base (Ethereum L2)\nToken: USDC (0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913)\nGas fees: ~$0.01 per transaction\nConfirmation: ~2 seconds"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/kobuta23/cabin",
    "publisherUrl": "https://clawhub.ai/kobuta23/cabin",
    "owner": "kobuta23",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/cabin",
    "downloadUrl": "https://openagent3.xyz/downloads/cabin",
    "agentUrl": "https://openagent3.xyz/skills/cabin/agent",
    "manifestUrl": "https://openagent3.xyz/skills/cabin/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/cabin/agent.md"
  }
}