{
  "schemaVersion": "1.0",
  "item": {
    "slug": "food402",
    "name": "Food402 - TGO Yemek",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/rersozlu/food402",
    "canonicalUrl": "https://clawhub.ai/rersozlu/food402",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/food402",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=food402",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/api.sh",
      "scripts/auth.sh",
      "scripts/3dsecure.sh",
      "references/api-quick-ref.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. 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. 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/food402"
    },
    "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/food402",
    "agentPageUrl": "https://openagent3.xyz/skills/food402/agent",
    "manifestUrl": "https://openagent3.xyz/skills/food402/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/food402/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. 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. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Food402 - TGO Yemek Food Delivery",
        "body": "Order food from Trendyol GO (TGO Yemek), Turkey's leading food delivery service. This skill enables complete food ordering: browse restaurants, view menus, customize items, manage cart, and checkout with 3D Secure payment."
      },
      {
        "title": "OpenClaw",
        "body": "Add the following to your ~/.openclaw/openclaw.json:\n\n{\n  \"skills\": {\n    \"entries\": {\n      \"food402\": {\n        \"enabled\": true,\n        \"env\": {\n          \"TGO_EMAIL\": \"your-tgo-email@example.com\",\n          \"TGO_PASSWORD\": \"your-tgo-password\",\n          \"GOOGLE_PLACES_API_KEY\": \"your-google-api-key\"\n        }\n      }\n    }\n  }\n}"
      },
      {
        "title": "Claude Code / Cursor / Codex / Gemini CLI",
        "body": "Set environment variables in your shell profile (~/.bashrc, ~/.zshrc, etc.):\n\nexport TGO_EMAIL=\"your-tgo-email@example.com\"\nexport TGO_PASSWORD=\"your-tgo-password\"\nexport GOOGLE_PLACES_API_KEY=\"your-google-api-key\"  # Optional: for Google Reviews\n\nThen reload your shell or run source ~/.zshrc (or equivalent)."
      },
      {
        "title": "Authentication",
        "body": "The skill automatically handles authentication. When making API calls:\n\nRun {baseDir}/scripts/auth.sh get-token to get a valid JWT\nThe script caches tokens in /tmp/food402-token with automatic refresh (60s buffer before expiry)\nIf any API call returns 401, clear the token with {baseDir}/scripts/auth.sh clear-token and retry\n\nManual authentication check:\n\n{baseDir}/scripts/auth.sh check-token"
      },
      {
        "title": "Required Workflow",
        "body": "IMPORTANT: You MUST follow this order:\n\nselect_address - REQUIRED first step (sets delivery location for cart)\nget_restaurants or search_restaurants - Browse/search restaurants\nget_restaurant_menu - View a restaurant's menu\nget_product_details - Check customization options (if needed)\nadd_to_basket - Add items to cart\ncheckout_ready - Verify cart is ready for payment\nplace_order - Complete the order with 3D Secure\n\nIf add_to_basket fails, try clear_basket first then retry."
      },
      {
        "title": "get_addresses",
        "body": "Get user's saved delivery addresses. Call this first to show available addresses.\n\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s \"https://api.tgoapis.com/web-user-apimemberaddress-santral/addresses\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" | jq\n\nResponse fields: id, addressName, addressLine, neighborhoodName, districtName, cityName, latitude, longitude"
      },
      {
        "title": "select_address",
        "body": "MUST be called before browsing restaurants or adding to basket. Sets the shipping address for the cart.\n\nParameters:\n\naddressId (required): Address ID from get_addresses\n\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s -X POST \"https://api.tgoapis.com/web-checkout-apicheckout-santral/shipping\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" \\\n  -d '{\"shippingAddressId\": {addressId}, \"invoiceAddressId\": {addressId}}'"
      },
      {
        "title": "add_address",
        "body": "Add a new delivery address. Use get_cities → get_districts → get_neighborhoods to find location IDs first.\n\nParameters:\n\nname (required): First name\nsurname (required): Last name\nphone (required): Phone without country code (e.g., \"5356437070\")\naddressName (required): Label (e.g., \"Home\", \"Work\")\naddressLine (required): Street address\ncityId (required): From get_cities\ndistrictId (required): From get_districts\nneighborhoodId (required): From get_neighborhoods\nlatitude (required): Coordinate string\nlongitude (required): Coordinate string\napartmentNumber, floor, doorNumber, addressDescription (optional)\nelevatorAvailable (optional): boolean\n\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s -X POST \"https://api.tgoapis.com/web-user-apimemberaddress-santral/addresses\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" \\\n  -d '{\n    \"name\": \"{name}\",\n    \"surname\": \"{surname}\",\n    \"phone\": \"{phone}\",\n    \"addressName\": \"{addressName}\",\n    \"addressLine\": \"{addressLine}\",\n    \"cityId\": {cityId},\n    \"districtId\": {districtId},\n    \"neighborhoodId\": {neighborhoodId},\n    \"latitude\": \"{latitude}\",\n    \"longitude\": \"{longitude}\",\n    \"countryCode\": \"TR\",\n    \"elevatorAvailable\": false\n  }' | jq\n\nNote: If response is 429, OTP verification is required. Direct user to add the address at tgoyemek.com instead."
      },
      {
        "title": "get_cities",
        "body": "Get list of all cities for address selection.\n\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s \"https://api.tgoapis.com/web-user-apimemberaddress-santral/cities\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" | jq '.cities[] | {id, name}'"
      },
      {
        "title": "get_districts",
        "body": "Get districts for a city.\n\nParameters:\n\ncityId (required): City ID from get_cities\n\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s \"https://api.tgoapis.com/web-user-apimemberaddress-santral/cities/{cityId}/districts\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" | jq '.districts[] | {id, name}'"
      },
      {
        "title": "get_neighborhoods",
        "body": "Get neighborhoods for a district.\n\nParameters:\n\ndistrictId (required): District ID from get_districts\n\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s \"https://api.tgoapis.com/web-user-apimemberaddress-santral/districts/{districtId}/neighborhoods\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" | jq '.neighborhoods[] | {id, name}'"
      },
      {
        "title": "get_restaurants",
        "body": "List restaurants near the selected address. Requires select_address first.\n\nParameters:\n\nlatitude (required): From selected address\nlongitude (required): From selected address\npage (optional): Page number, default 1\nsortBy (optional): RECOMMENDED (default), RESTAURANT_SCORE, or RESTAURANT_DISTANCE\nminBasketPrice (optional): Pass 400 to filter min order >= 400 TL\n\nSorting keywords (Turkish & English):\n\n\"önerilen\" / \"recommended\" / \"popüler\" → RECOMMENDED\n\"en yakın\" / \"closest\" / \"yakınımdaki\" → RESTAURANT_DISTANCE\n\"en iyi\" / \"best rated\" / \"en yüksek puanlı\" → RESTAURANT_SCORE\n\"en ucuz\" / \"cheapest\" → Use search_restaurants instead (returns product prices)\n\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s \"https://api.tgoapis.com/web-discovery-apidiscovery-santral/restaurants/filters?openRestaurants=true&latitude={latitude}&longitude={longitude}&pageSize=50&page={page}\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" | jq\n\nAdd &sortType=RESTAURANT_SCORE or &sortType=RESTAURANT_DISTANCE for sorting (omit for RECOMMENDED).\n\nResponse fields: id, name, kitchen, rating, ratingText, minBasketPrice, averageDeliveryInterval, distance, neighborhoodName, isClosed, campaignText"
      },
      {
        "title": "search_restaurants",
        "body": "Search restaurants and products by keyword. Results include product prices (useful for \"cheapest\" queries).\n\nIMPORTANT: Always check isClosed field. Never suggest closed restaurants.\n\nParameters:\n\nsearchQuery (required): Search keyword (e.g., \"pizza\", \"burger\", \"dürüm\")\nlatitude (required): From selected address\nlongitude (required): From selected address\npage (optional): Page number, default 1\n\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s \"https://api.tgoapis.com/web-restaurant-apirestaurant-santral/restaurants/in/search?searchQuery={searchQuery}&latitude={latitude}&longitude={longitude}&pageSize=50&page={page}\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" | jq\n\nResponse includes: Restaurant info plus products[] array with id, name, description, price"
      },
      {
        "title": "get_restaurant_menu",
        "body": "Get a restaurant's full menu with categories and items.\n\nParameters:\n\nrestaurantId (required): Restaurant ID\nlatitude (required): Coordinate\nlongitude (required): Coordinate\n\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s \"https://api.tgoapis.com/web-restaurant-apirestaurant-santral/restaurants/{restaurantId}?latitude={latitude}&longitude={longitude}\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" | jq\n\nResponse structure:\n\ninfo: Restaurant details (id, name, rating, workingHours, deliveryTime, minOrderPrice)\ncategories[]: Menu sections with items[] (id, name, description, price, likePercentage)"
      },
      {
        "title": "get_product_details",
        "body": "Get product customization options (ingredients to exclude, modifier groups for extras/sizes).\n\nParameters:\n\nrestaurantId (required): Restaurant ID\nproductId (required): Product ID from menu\nlatitude (required): Coordinate\nlongitude (required): Coordinate\n\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s -X POST \"https://api.tgoapis.com/web-restaurant-apirestaurant-santral/restaurants/{restaurantId}/products/{productId}?latitude={latitude}&longitude={longitude}\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" \\\n  -d '{}' | jq\n\nResponse includes components[]:\n\ntype: INGREDIENTS (items to exclude) or MODIFIER_GROUP (extras/sizes to select)\nmodifierGroupId: Use this ID when adding modifiers to basket\noptions[]: Available choices with id, name, price, isPopular\nisSingleChoice, minSelections, maxSelections: Selection rules"
      },
      {
        "title": "get_product_recommendations",
        "body": "Get \"goes well with\" suggestions for products.\n\nParameters:\n\nrestaurantId (required): Restaurant ID\nproductIds (required): Array of product IDs\n\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s -X POST \"https://api.tgoapis.com/web-discovery-apidiscovery-santral/recommendation/product\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" \\\n  -d '{\n    \"restaurantId\": \"{restaurantId}\",\n    \"productIds\": [\"{productId1}\", \"{productId2}\"],\n    \"page\": \"PDP\"\n  }' | jq"
      },
      {
        "title": "add_to_basket",
        "body": "Add items to the shopping cart. Requires select_address first.\n\nParameters:\n\nstoreId (required): Restaurant ID (NUMBER)\nlatitude (required): Coordinate (NUMBER, not string)\nlongitude (required): Coordinate (NUMBER, not string)\nitems[] (required): Array of items to add\n\nItem structure:\n\n{\n  \"productId\": 12345,\n  \"quantity\": 1,\n  \"modifierProducts\": [\n    {\n      \"productId\": 111,\n      \"modifierGroupId\": 222,\n      \"modifierProducts\": [],\n      \"ingredientOptions\": {\"excludes\": [], \"includes\": []}\n    }\n  ],\n  \"ingredientOptions\": {\n    \"excludes\": [{\"id\": 333}],\n    \"includes\": []\n  }\n}\n\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s -X POST \"https://api.tgoapis.com/web-checkout-apicheckout-santral/carts/items\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" \\\n  -d '{\n    \"storeId\": {storeId},\n    \"items\": [{items}],\n    \"latitude\": {latitude},\n    \"longitude\": {longitude},\n    \"isFlashSale\": false,\n    \"storePickup\": false\n  }' | jq\n\nIf this fails, try clear_basket first then retry."
      },
      {
        "title": "get_basket",
        "body": "Get current cart contents.\n\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s \"https://api.tgoapis.com/web-checkout-apicheckout-santral/carts\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" | jq\n\nResponse includes: storeGroups[] with store info and products, summary[], totalPrice, deliveryPrice, isEmpty"
      },
      {
        "title": "remove_from_basket",
        "body": "Remove an item from the cart.\n\nParameters:\n\nitemId (required): Item UUID from get_basket response (the itemId field, NOT productId)\n\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s -X DELETE \"https://api.tgoapis.com/web-checkout-apicheckout-santral/carts/items/{itemId}\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" | jq"
      },
      {
        "title": "clear_basket",
        "body": "Clear the entire cart.\n\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s -X DELETE \"https://api.tgoapis.com/web-checkout-apicheckout-santral/carts\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\""
      },
      {
        "title": "get_saved_cards",
        "body": "Get user's saved payment cards (masked). If no cards, user must add one at tgoyemek.com.\n\nUses Payment API with different headers:\n\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s \"https://payment.tgoapps.com/v2/cards/\" \\\n  -H \"Authorization: bearer $TOKEN\" \\\n  -H \"app-name: TrendyolGo\" \\\n  -H \"x-applicationid: 1\" \\\n  -H \"x-channelid: 4\" \\\n  -H \"x-storefrontid: 1\" | jq\n\nResponse: cards[] with cardId, maskedCardNumber, bankName, cardNetwork, isDebitCard"
      },
      {
        "title": "checkout_ready",
        "body": "Verify cart is ready for checkout. Call this before place_order.\n\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s \"https://api.tgoapis.com/web-checkout-apicheckout-santral/carts?cartContext=payment&limitPromoMbs=false\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" | jq\n\nCheck response:\n\nIf totalProductCount is 0, cart is empty\nCheck warnings[] for issues (e.g., below minimum order)\nReturns full cart details and totalPrice"
      },
      {
        "title": "set_order_note",
        "body": "Set order note and service preferences. Call before place_order.\n\nParameters:\n\nnote (optional): Note for courier/restaurant\nnoServiceWare (optional): Don't include plastic/cutlery (default: false)\ncontactlessDelivery (optional): Leave at door (default: false)\ndontRingBell (optional): Don't ring doorbell (default: false)\n\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s -X PUT \"https://api.tgoapis.com/web-checkout-apicheckout-santral/carts/customerNote\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" \\\n  -d '{\n    \"customerNote\": \"{note}\",\n    \"noServiceWare\": false,\n    \"contactlessDelivery\": false,\n    \"dontRingBell\": false\n  }'"
      },
      {
        "title": "place_order",
        "body": "Place the order with 3D Secure payment. This is a 3-step process.\n\nParameters:\n\ncardId (required): Card ID from get_saved_cards\n\nStep 1: Get cart with payment context\n\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s \"https://api.tgoapis.com/web-checkout-apicheckout-santral/carts?cartContext=payment&limitPromoMbs=false\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\"\n\nStep 2: Select payment method (Payment API)\n\n# Get bin code from card's maskedCardNumber (first 6 digits + **)\nBINCODE=\"${maskedCardNumber:0:6}**\"\n\ncurl -s -X POST \"https://payment.tgoapps.com/v3/payment/options\" \\\n  -H \"Authorization: bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"app-name: TrendyolGo\" \\\n  -H \"x-applicationid: 1\" \\\n  -H \"x-channelid: 4\" \\\n  -H \"x-storefrontid: 1\" \\\n  -d '{\n    \"paymentType\": \"payWithCard\",\n    \"data\": {\n      \"savedCardId\": {cardId},\n      \"binCode\": \"{binCode}\",\n      \"installmentId\": 0,\n      \"reward\": null,\n      \"installmentPostponingSelected\": false\n    }\n  }'\n\nStep 3: Submit payment (Payment API)\n\ncurl -s -X POST \"https://payment.tgoapps.com/v2/payment/pay\" \\\n  -H \"Authorization: bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"app-name: TrendyolGo\" \\\n  -H \"x-applicationid: 1\" \\\n  -H \"x-channelid: 4\" \\\n  -H \"x-storefrontid: 1\" \\\n  -d '{\n    \"customerSelectedThreeD\": false,\n    \"paymentOptions\": [{\"name\": \"payWithCard\", \"cardNo\": \"\", \"customerSelectedThreeD\": false}],\n    \"callbackUrl\": \"https://tgoyemek.com/odeme\"\n  }'\n\n3D Secure handling: If response contains json.content (HTML) or redirectUrl:\n\nSave HTML to temp file\nOpen in browser: {baseDir}/scripts/3dsecure.sh \"$HTML_CONTENT\"\nInform user to complete verification in browser"
      },
      {
        "title": "get_orders",
        "body": "Get user's order history with status.\n\nParameters:\n\npage (optional): Page number, default 1\n\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s \"https://api.tgoapis.com/web-checkout-apicheckout-santral/orders?page={page}&pageSize=50\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" | jq\n\nResponse: orders[] with id, orderDate, store, status, price, products[]"
      },
      {
        "title": "get_order_detail",
        "body": "Get detailed information about a specific order including delivery status.\n\nParameters:\n\norderId (required): Order ID from get_orders\n\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s \"https://api.tgoapis.com/web-checkout-apicheckout-santral/orders/detail?orderId={orderId}\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" | jq\n\nResponse includes: Order details, delivery status steps, ETA, products with prices, delivery address"
      },
      {
        "title": "get_google_reviews",
        "body": "Fetch Google Maps rating and reviews for a restaurant. Requires GOOGLE_PLACES_API_KEY env var.\n\nParameters:\n\nrestaurantId, restaurantName, neighborhoodName, tgoDistance, tgoRating, latitude, longitude\n\nThis operation uses Google Places API to find the restaurant and compare ratings. Only use if GOOGLE_PLACES_API_KEY is configured."
      },
      {
        "title": "Error Handling",
        "body": "StatusAction401 UnauthorizedToken expired. Run {baseDir}/scripts/auth.sh clear-token then retry the operation.400 Bad RequestCheck parameters. Parse and show the error message from response body.429 Rate LimitedOTP verification required. Direct user to complete the action at tgoyemek.com instead.5xx Server ErrorTGO service temporarily unavailable. Wait a moment and retry once.3D SecureSave HTML content, open browser with {baseDir}/scripts/3dsecure.sh, inform user to complete verification.\n\nAlways parse error responses and present the error message clearly to the user."
      },
      {
        "title": "Guidelines",
        "body": "Always authenticate before making API calls. Use the auth.sh helper.\nNever expose raw credentials, JWTs, or tokens to the user.\nConfirm destructive operations (clear_basket, place_order) with the user before executing.\nCheck isClosed before suggesting restaurants from search results.\nPresent results in a clean, readable format rather than raw JSON dumps.\nFollow the required workflow: select_address → browse → menu → add to basket → checkout.\nHandle coordinates correctly: get_restaurants uses STRING coordinates, add_to_basket uses NUMBER coordinates.\nIf add_to_basket fails, try clear_basket first then retry.\nFor payment, always use the Payment API headers (lowercase \"bearer\", app-name, x-applicationid, etc.)."
      }
    ],
    "body": "Food402 - TGO Yemek Food Delivery\n\nOrder food from Trendyol GO (TGO Yemek), Turkey's leading food delivery service. This skill enables complete food ordering: browse restaurants, view menus, customize items, manage cart, and checkout with 3D Secure payment.\n\nSetup\nOpenClaw\n\nAdd the following to your ~/.openclaw/openclaw.json:\n\n{\n  \"skills\": {\n    \"entries\": {\n      \"food402\": {\n        \"enabled\": true,\n        \"env\": {\n          \"TGO_EMAIL\": \"your-tgo-email@example.com\",\n          \"TGO_PASSWORD\": \"your-tgo-password\",\n          \"GOOGLE_PLACES_API_KEY\": \"your-google-api-key\"\n        }\n      }\n    }\n  }\n}\n\nClaude Code / Cursor / Codex / Gemini CLI\n\nSet environment variables in your shell profile (~/.bashrc, ~/.zshrc, etc.):\n\nexport TGO_EMAIL=\"your-tgo-email@example.com\"\nexport TGO_PASSWORD=\"your-tgo-password\"\nexport GOOGLE_PLACES_API_KEY=\"your-google-api-key\"  # Optional: for Google Reviews\n\n\nThen reload your shell or run source ~/.zshrc (or equivalent).\n\nAuthentication\n\nThe skill automatically handles authentication. When making API calls:\n\nRun {baseDir}/scripts/auth.sh get-token to get a valid JWT\nThe script caches tokens in /tmp/food402-token with automatic refresh (60s buffer before expiry)\nIf any API call returns 401, clear the token with {baseDir}/scripts/auth.sh clear-token and retry\n\nManual authentication check:\n\n{baseDir}/scripts/auth.sh check-token\n\nRequired Workflow\n\nIMPORTANT: You MUST follow this order:\n\nselect_address - REQUIRED first step (sets delivery location for cart)\nget_restaurants or search_restaurants - Browse/search restaurants\nget_restaurant_menu - View a restaurant's menu\nget_product_details - Check customization options (if needed)\nadd_to_basket - Add items to cart\ncheckout_ready - Verify cart is ready for payment\nplace_order - Complete the order with 3D Secure\n\nIf add_to_basket fails, try clear_basket first then retry.\n\nAddress Management Operations\nget_addresses\n\nGet user's saved delivery addresses. Call this first to show available addresses.\n\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s \"https://api.tgoapis.com/web-user-apimemberaddress-santral/addresses\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" | jq\n\n\nResponse fields: id, addressName, addressLine, neighborhoodName, districtName, cityName, latitude, longitude\n\nselect_address\n\nMUST be called before browsing restaurants or adding to basket. Sets the shipping address for the cart.\n\nParameters:\n\naddressId (required): Address ID from get_addresses\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s -X POST \"https://api.tgoapis.com/web-checkout-apicheckout-santral/shipping\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" \\\n  -d '{\"shippingAddressId\": {addressId}, \"invoiceAddressId\": {addressId}}'\n\nadd_address\n\nAdd a new delivery address. Use get_cities → get_districts → get_neighborhoods to find location IDs first.\n\nParameters:\n\nname (required): First name\nsurname (required): Last name\nphone (required): Phone without country code (e.g., \"5356437070\")\naddressName (required): Label (e.g., \"Home\", \"Work\")\naddressLine (required): Street address\ncityId (required): From get_cities\ndistrictId (required): From get_districts\nneighborhoodId (required): From get_neighborhoods\nlatitude (required): Coordinate string\nlongitude (required): Coordinate string\napartmentNumber, floor, doorNumber, addressDescription (optional)\nelevatorAvailable (optional): boolean\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s -X POST \"https://api.tgoapis.com/web-user-apimemberaddress-santral/addresses\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" \\\n  -d '{\n    \"name\": \"{name}\",\n    \"surname\": \"{surname}\",\n    \"phone\": \"{phone}\",\n    \"addressName\": \"{addressName}\",\n    \"addressLine\": \"{addressLine}\",\n    \"cityId\": {cityId},\n    \"districtId\": {districtId},\n    \"neighborhoodId\": {neighborhoodId},\n    \"latitude\": \"{latitude}\",\n    \"longitude\": \"{longitude}\",\n    \"countryCode\": \"TR\",\n    \"elevatorAvailable\": false\n  }' | jq\n\n\nNote: If response is 429, OTP verification is required. Direct user to add the address at tgoyemek.com instead.\n\nget_cities\n\nGet list of all cities for address selection.\n\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s \"https://api.tgoapis.com/web-user-apimemberaddress-santral/cities\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" | jq '.cities[] | {id, name}'\n\nget_districts\n\nGet districts for a city.\n\nParameters:\n\ncityId (required): City ID from get_cities\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s \"https://api.tgoapis.com/web-user-apimemberaddress-santral/cities/{cityId}/districts\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" | jq '.districts[] | {id, name}'\n\nget_neighborhoods\n\nGet neighborhoods for a district.\n\nParameters:\n\ndistrictId (required): District ID from get_districts\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s \"https://api.tgoapis.com/web-user-apimemberaddress-santral/districts/{districtId}/neighborhoods\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" | jq '.neighborhoods[] | {id, name}'\n\nRestaurant Discovery Operations\nget_restaurants\n\nList restaurants near the selected address. Requires select_address first.\n\nParameters:\n\nlatitude (required): From selected address\nlongitude (required): From selected address\npage (optional): Page number, default 1\nsortBy (optional): RECOMMENDED (default), RESTAURANT_SCORE, or RESTAURANT_DISTANCE\nminBasketPrice (optional): Pass 400 to filter min order >= 400 TL\n\nSorting keywords (Turkish & English):\n\n\"önerilen\" / \"recommended\" / \"popüler\" → RECOMMENDED\n\"en yakın\" / \"closest\" / \"yakınımdaki\" → RESTAURANT_DISTANCE\n\"en iyi\" / \"best rated\" / \"en yüksek puanlı\" → RESTAURANT_SCORE\n\"en ucuz\" / \"cheapest\" → Use search_restaurants instead (returns product prices)\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s \"https://api.tgoapis.com/web-discovery-apidiscovery-santral/restaurants/filters?openRestaurants=true&latitude={latitude}&longitude={longitude}&pageSize=50&page={page}\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" | jq\n\n\nAdd &sortType=RESTAURANT_SCORE or &sortType=RESTAURANT_DISTANCE for sorting (omit for RECOMMENDED).\n\nResponse fields: id, name, kitchen, rating, ratingText, minBasketPrice, averageDeliveryInterval, distance, neighborhoodName, isClosed, campaignText\n\nsearch_restaurants\n\nSearch restaurants and products by keyword. Results include product prices (useful for \"cheapest\" queries).\n\nIMPORTANT: Always check isClosed field. Never suggest closed restaurants.\n\nParameters:\n\nsearchQuery (required): Search keyword (e.g., \"pizza\", \"burger\", \"dürüm\")\nlatitude (required): From selected address\nlongitude (required): From selected address\npage (optional): Page number, default 1\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s \"https://api.tgoapis.com/web-restaurant-apirestaurant-santral/restaurants/in/search?searchQuery={searchQuery}&latitude={latitude}&longitude={longitude}&pageSize=50&page={page}\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" | jq\n\n\nResponse includes: Restaurant info plus products[] array with id, name, description, price\n\nMenu & Product Operations\nget_restaurant_menu\n\nGet a restaurant's full menu with categories and items.\n\nParameters:\n\nrestaurantId (required): Restaurant ID\nlatitude (required): Coordinate\nlongitude (required): Coordinate\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s \"https://api.tgoapis.com/web-restaurant-apirestaurant-santral/restaurants/{restaurantId}?latitude={latitude}&longitude={longitude}\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" | jq\n\n\nResponse structure:\n\ninfo: Restaurant details (id, name, rating, workingHours, deliveryTime, minOrderPrice)\ncategories[]: Menu sections with items[] (id, name, description, price, likePercentage)\nget_product_details\n\nGet product customization options (ingredients to exclude, modifier groups for extras/sizes).\n\nParameters:\n\nrestaurantId (required): Restaurant ID\nproductId (required): Product ID from menu\nlatitude (required): Coordinate\nlongitude (required): Coordinate\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s -X POST \"https://api.tgoapis.com/web-restaurant-apirestaurant-santral/restaurants/{restaurantId}/products/{productId}?latitude={latitude}&longitude={longitude}\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" \\\n  -d '{}' | jq\n\n\nResponse includes components[]:\n\ntype: INGREDIENTS (items to exclude) or MODIFIER_GROUP (extras/sizes to select)\nmodifierGroupId: Use this ID when adding modifiers to basket\noptions[]: Available choices with id, name, price, isPopular\nisSingleChoice, minSelections, maxSelections: Selection rules\nget_product_recommendations\n\nGet \"goes well with\" suggestions for products.\n\nParameters:\n\nrestaurantId (required): Restaurant ID\nproductIds (required): Array of product IDs\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s -X POST \"https://api.tgoapis.com/web-discovery-apidiscovery-santral/recommendation/product\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" \\\n  -d '{\n    \"restaurantId\": \"{restaurantId}\",\n    \"productIds\": [\"{productId1}\", \"{productId2}\"],\n    \"page\": \"PDP\"\n  }' | jq\n\nCart Management Operations\nadd_to_basket\n\nAdd items to the shopping cart. Requires select_address first.\n\nParameters:\n\nstoreId (required): Restaurant ID (NUMBER)\nlatitude (required): Coordinate (NUMBER, not string)\nlongitude (required): Coordinate (NUMBER, not string)\nitems[] (required): Array of items to add\n\nItem structure:\n\n{\n  \"productId\": 12345,\n  \"quantity\": 1,\n  \"modifierProducts\": [\n    {\n      \"productId\": 111,\n      \"modifierGroupId\": 222,\n      \"modifierProducts\": [],\n      \"ingredientOptions\": {\"excludes\": [], \"includes\": []}\n    }\n  ],\n  \"ingredientOptions\": {\n    \"excludes\": [{\"id\": 333}],\n    \"includes\": []\n  }\n}\n\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s -X POST \"https://api.tgoapis.com/web-checkout-apicheckout-santral/carts/items\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" \\\n  -d '{\n    \"storeId\": {storeId},\n    \"items\": [{items}],\n    \"latitude\": {latitude},\n    \"longitude\": {longitude},\n    \"isFlashSale\": false,\n    \"storePickup\": false\n  }' | jq\n\n\nIf this fails, try clear_basket first then retry.\n\nget_basket\n\nGet current cart contents.\n\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s \"https://api.tgoapis.com/web-checkout-apicheckout-santral/carts\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" | jq\n\n\nResponse includes: storeGroups[] with store info and products, summary[], totalPrice, deliveryPrice, isEmpty\n\nremove_from_basket\n\nRemove an item from the cart.\n\nParameters:\n\nitemId (required): Item UUID from get_basket response (the itemId field, NOT productId)\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s -X DELETE \"https://api.tgoapis.com/web-checkout-apicheckout-santral/carts/items/{itemId}\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" | jq\n\nclear_basket\n\nClear the entire cart.\n\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s -X DELETE \"https://api.tgoapis.com/web-checkout-apicheckout-santral/carts\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\"\n\nCheckout & Payment Operations\nget_saved_cards\n\nGet user's saved payment cards (masked). If no cards, user must add one at tgoyemek.com.\n\nUses Payment API with different headers:\n\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s \"https://payment.tgoapps.com/v2/cards/\" \\\n  -H \"Authorization: bearer $TOKEN\" \\\n  -H \"app-name: TrendyolGo\" \\\n  -H \"x-applicationid: 1\" \\\n  -H \"x-channelid: 4\" \\\n  -H \"x-storefrontid: 1\" | jq\n\n\nResponse: cards[] with cardId, maskedCardNumber, bankName, cardNetwork, isDebitCard\n\ncheckout_ready\n\nVerify cart is ready for checkout. Call this before place_order.\n\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s \"https://api.tgoapis.com/web-checkout-apicheckout-santral/carts?cartContext=payment&limitPromoMbs=false\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" | jq\n\n\nCheck response:\n\nIf totalProductCount is 0, cart is empty\nCheck warnings[] for issues (e.g., below minimum order)\nReturns full cart details and totalPrice\nset_order_note\n\nSet order note and service preferences. Call before place_order.\n\nParameters:\n\nnote (optional): Note for courier/restaurant\nnoServiceWare (optional): Don't include plastic/cutlery (default: false)\ncontactlessDelivery (optional): Leave at door (default: false)\ndontRingBell (optional): Don't ring doorbell (default: false)\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s -X PUT \"https://api.tgoapis.com/web-checkout-apicheckout-santral/carts/customerNote\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" \\\n  -d '{\n    \"customerNote\": \"{note}\",\n    \"noServiceWare\": false,\n    \"contactlessDelivery\": false,\n    \"dontRingBell\": false\n  }'\n\nplace_order\n\nPlace the order with 3D Secure payment. This is a 3-step process.\n\nParameters:\n\ncardId (required): Card ID from get_saved_cards\n\nStep 1: Get cart with payment context\n\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s \"https://api.tgoapis.com/web-checkout-apicheckout-santral/carts?cartContext=payment&limitPromoMbs=false\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\"\n\n\nStep 2: Select payment method (Payment API)\n\n# Get bin code from card's maskedCardNumber (first 6 digits + **)\nBINCODE=\"${maskedCardNumber:0:6}**\"\n\ncurl -s -X POST \"https://payment.tgoapps.com/v3/payment/options\" \\\n  -H \"Authorization: bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"app-name: TrendyolGo\" \\\n  -H \"x-applicationid: 1\" \\\n  -H \"x-channelid: 4\" \\\n  -H \"x-storefrontid: 1\" \\\n  -d '{\n    \"paymentType\": \"payWithCard\",\n    \"data\": {\n      \"savedCardId\": {cardId},\n      \"binCode\": \"{binCode}\",\n      \"installmentId\": 0,\n      \"reward\": null,\n      \"installmentPostponingSelected\": false\n    }\n  }'\n\n\nStep 3: Submit payment (Payment API)\n\ncurl -s -X POST \"https://payment.tgoapps.com/v2/payment/pay\" \\\n  -H \"Authorization: bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"app-name: TrendyolGo\" \\\n  -H \"x-applicationid: 1\" \\\n  -H \"x-channelid: 4\" \\\n  -H \"x-storefrontid: 1\" \\\n  -d '{\n    \"customerSelectedThreeD\": false,\n    \"paymentOptions\": [{\"name\": \"payWithCard\", \"cardNo\": \"\", \"customerSelectedThreeD\": false}],\n    \"callbackUrl\": \"https://tgoyemek.com/odeme\"\n  }'\n\n\n3D Secure handling: If response contains json.content (HTML) or redirectUrl:\n\nSave HTML to temp file\nOpen in browser: {baseDir}/scripts/3dsecure.sh \"$HTML_CONTENT\"\nInform user to complete verification in browser\nOrder History Operations\nget_orders\n\nGet user's order history with status.\n\nParameters:\n\npage (optional): Page number, default 1\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s \"https://api.tgoapis.com/web-checkout-apicheckout-santral/orders?page={page}&pageSize=50\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" | jq\n\n\nResponse: orders[] with id, orderDate, store, status, price, products[]\n\nget_order_detail\n\nGet detailed information about a specific order including delivery status.\n\nParameters:\n\norderId (required): Order ID from get_orders\nTOKEN=$({baseDir}/scripts/auth.sh get-token)\ncurl -s \"https://api.tgoapis.com/web-checkout-apicheckout-santral/orders/detail?orderId={orderId}\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"x-correlationid: $(uuidgen)\" \\\n  -H \"pid: $(uuidgen)\" \\\n  -H \"sid: $(uuidgen)\" | jq\n\n\nResponse includes: Order details, delivery status steps, ETA, products with prices, delivery address\n\nGoogle Reviews (Optional)\nget_google_reviews\n\nFetch Google Maps rating and reviews for a restaurant. Requires GOOGLE_PLACES_API_KEY env var.\n\nParameters:\n\nrestaurantId, restaurantName, neighborhoodName, tgoDistance, tgoRating, latitude, longitude\n\nThis operation uses Google Places API to find the restaurant and compare ratings. Only use if GOOGLE_PLACES_API_KEY is configured.\n\nError Handling\nStatus\tAction\n401 Unauthorized\tToken expired. Run {baseDir}/scripts/auth.sh clear-token then retry the operation.\n400 Bad Request\tCheck parameters. Parse and show the error message from response body.\n429 Rate Limited\tOTP verification required. Direct user to complete the action at tgoyemek.com instead.\n5xx Server Error\tTGO service temporarily unavailable. Wait a moment and retry once.\n3D Secure\tSave HTML content, open browser with {baseDir}/scripts/3dsecure.sh, inform user to complete verification.\n\nAlways parse error responses and present the error message clearly to the user.\n\nGuidelines\nAlways authenticate before making API calls. Use the auth.sh helper.\nNever expose raw credentials, JWTs, or tokens to the user.\nConfirm destructive operations (clear_basket, place_order) with the user before executing.\nCheck isClosed before suggesting restaurants from search results.\nPresent results in a clean, readable format rather than raw JSON dumps.\nFollow the required workflow: select_address → browse → menu → add to basket → checkout.\nHandle coordinates correctly: get_restaurants uses STRING coordinates, add_to_basket uses NUMBER coordinates.\nIf add_to_basket fails, try clear_basket first then retry.\nFor payment, always use the Payment API headers (lowercase \"bearer\", app-name, x-applicationid, etc.)."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/rersozlu/food402",
    "publisherUrl": "https://clawhub.ai/rersozlu/food402",
    "owner": "rersozlu",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/food402",
    "downloadUrl": "https://openagent3.xyz/downloads/food402",
    "agentUrl": "https://openagent3.xyz/skills/food402/agent",
    "manifestUrl": "https://openagent3.xyz/skills/food402/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/food402/agent.md"
  }
}