{
  "schemaVersion": "1.0",
  "item": {
    "slug": "ipinfo",
    "name": "IPinfo",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/tiagom101/ipinfo",
    "canonicalUrl": "https://clawhub.ai/tiagom101/ipinfo",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/ipinfo",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=ipinfo",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "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. 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/ipinfo"
    },
    "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/ipinfo",
    "agentPageUrl": "https://openagent3.xyz/skills/ipinfo/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ipinfo/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ipinfo/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": "IPinfo Geolocation",
        "body": "Free IP geolocation API. No API key required for basic usage (50k requests/month), optional token for higher limits."
      },
      {
        "title": "Configuration",
        "body": "The IPINFO_TOKEN environment variable is optional - the skill works without it using the free tier. Configure it via the OpenClaw dashboard UI for higher rate limits, or set it manually:\n\nDashboard UI: Configure IPINFO_TOKEN in the OpenClaw dashboard (optional)\nEnvironment variable: export IPINFO_TOKEN=\"your-token\"\nQuery parameter: ?token=YOUR_TOKEN (for one-off requests)"
      },
      {
        "title": "Quick Lookup",
        "body": "Single IP:\n\ncurl -s \"https://ipinfo.io/8.8.8.8\"\n\nCurrent IP:\n\ncurl -s \"https://ipinfo.io/json\"\n\nWith token (optional, from environment):\n\ncurl -s \"https://ipinfo.io/8.8.8.8?token=${IPINFO_TOKEN}\"\n\nOr pass token directly:\n\ncurl -s \"https://ipinfo.io/8.8.8.8?token=YOUR_TOKEN\""
      },
      {
        "title": "Response Format",
        "body": "JSON response includes:\n\nip: IP address\nhostname: Reverse DNS hostname\ncity: City name\nregion: State/region\ncountry: Two-letter country code (ISO 3166-1 alpha-2)\npostal: Postal/ZIP code\ntimezone: IANA timezone\nloc: Coordinates as \"latitude,longitude\"\norg: Organization/ASN information"
      },
      {
        "title": "Extract Specific Fields",
        "body": "Using jq:\n\ncurl -s \"https://ipinfo.io/8.8.8.8\" | jq -r '.city, .country, .loc'\n\nCountry only:\n\ncurl -s \"https://ipinfo.io/8.8.8.8\" | jq -r '.country'\n\nParse coordinates:\n\ncurl -s \"https://ipinfo.io/8.8.8.8\" | jq -r '.loc' | tr ',' '\\n'"
      },
      {
        "title": "Batch Processing",
        "body": "Process multiple IPs:\n\nfor ip in 8.8.8.8 1.1.1.1 208.67.222.222; do\n  if [ -n \"$IPINFO_TOKEN\" ]; then\n    echo \"$ip: $(curl -s \"https://ipinfo.io/$ip?token=$IPINFO_TOKEN\" | jq -r '.city, .country' | tr '\\n' ', ')\"\n  else\n    echo \"$ip: $(curl -s \"https://ipinfo.io/$ip\" | jq -r '.city, .country' | tr '\\n' ', ')\"\n  fi\ndone"
      },
      {
        "title": "Python Usage",
        "body": "import os\nimport requests\n\n# Without token (free tier)\nresponse = requests.get(\"https://ipinfo.io/8.8.8.8\")\ndata = response.json()\nprint(f\"{data['city']}, {data['country']}\")\nprint(f\"Coordinates: {data['loc']}\")\n\nWith token from environment:\n\nimport os\nimport requests\n\ntoken = os.getenv(\"IPINFO_TOKEN\")\nif token:\n    response = requests.get(\"https://ipinfo.io/8.8.8.8\", params={\"token\": token})\nelse:\n    response = requests.get(\"https://ipinfo.io/8.8.8.8\")\ndata = response.json()\n\nOr pass token directly:\n\nresponse = requests.get(\"https://ipinfo.io/8.8.8.8\", params={\"token\": \"YOUR_TOKEN\"})"
      },
      {
        "title": "Rate Limits",
        "body": "Free tier: 50,000 requests/month, ~1 req/sec\nWith token: Higher limits based on plan\nConfigure IPINFO_TOKEN via OpenClaw dashboard UI or environment variable"
      },
      {
        "title": "Common Use Cases",
        "body": "Geolocate IP addresses\nEnrich IP lists with location data\nFilter IPs by country\nCalculate distances between IPs using coordinates\nTimezone detection for IPs"
      }
    ],
    "body": "IPinfo Geolocation\n\nFree IP geolocation API. No API key required for basic usage (50k requests/month), optional token for higher limits.\n\nConfiguration\n\nThe IPINFO_TOKEN environment variable is optional - the skill works without it using the free tier. Configure it via the OpenClaw dashboard UI for higher rate limits, or set it manually:\n\nDashboard UI: Configure IPINFO_TOKEN in the OpenClaw dashboard (optional)\nEnvironment variable: export IPINFO_TOKEN=\"your-token\"\nQuery parameter: ?token=YOUR_TOKEN (for one-off requests)\nQuick Lookup\n\nSingle IP:\n\ncurl -s \"https://ipinfo.io/8.8.8.8\"\n\n\nCurrent IP:\n\ncurl -s \"https://ipinfo.io/json\"\n\n\nWith token (optional, from environment):\n\ncurl -s \"https://ipinfo.io/8.8.8.8?token=${IPINFO_TOKEN}\"\n\n\nOr pass token directly:\n\ncurl -s \"https://ipinfo.io/8.8.8.8?token=YOUR_TOKEN\"\n\nResponse Format\n\nJSON response includes:\n\nip: IP address\nhostname: Reverse DNS hostname\ncity: City name\nregion: State/region\ncountry: Two-letter country code (ISO 3166-1 alpha-2)\npostal: Postal/ZIP code\ntimezone: IANA timezone\nloc: Coordinates as \"latitude,longitude\"\norg: Organization/ASN information\nExtract Specific Fields\n\nUsing jq:\n\ncurl -s \"https://ipinfo.io/8.8.8.8\" | jq -r '.city, .country, .loc'\n\n\nCountry only:\n\ncurl -s \"https://ipinfo.io/8.8.8.8\" | jq -r '.country'\n\n\nParse coordinates:\n\ncurl -s \"https://ipinfo.io/8.8.8.8\" | jq -r '.loc' | tr ',' '\\n'\n\nBatch Processing\n\nProcess multiple IPs:\n\nfor ip in 8.8.8.8 1.1.1.1 208.67.222.222; do\n  if [ -n \"$IPINFO_TOKEN\" ]; then\n    echo \"$ip: $(curl -s \"https://ipinfo.io/$ip?token=$IPINFO_TOKEN\" | jq -r '.city, .country' | tr '\\n' ', ')\"\n  else\n    echo \"$ip: $(curl -s \"https://ipinfo.io/$ip\" | jq -r '.city, .country' | tr '\\n' ', ')\"\n  fi\ndone\n\nPython Usage\nimport os\nimport requests\n\n# Without token (free tier)\nresponse = requests.get(\"https://ipinfo.io/8.8.8.8\")\ndata = response.json()\nprint(f\"{data['city']}, {data['country']}\")\nprint(f\"Coordinates: {data['loc']}\")\n\n\nWith token from environment:\n\nimport os\nimport requests\n\ntoken = os.getenv(\"IPINFO_TOKEN\")\nif token:\n    response = requests.get(\"https://ipinfo.io/8.8.8.8\", params={\"token\": token})\nelse:\n    response = requests.get(\"https://ipinfo.io/8.8.8.8\")\ndata = response.json()\n\n\nOr pass token directly:\n\nresponse = requests.get(\"https://ipinfo.io/8.8.8.8\", params={\"token\": \"YOUR_TOKEN\"})\n\nRate Limits\nFree tier: 50,000 requests/month, ~1 req/sec\nWith token: Higher limits based on plan\nConfigure IPINFO_TOKEN via OpenClaw dashboard UI or environment variable\nCommon Use Cases\nGeolocate IP addresses\nEnrich IP lists with location data\nFilter IPs by country\nCalculate distances between IPs using coordinates\nTimezone detection for IPs"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/tiagom101/ipinfo",
    "publisherUrl": "https://clawhub.ai/tiagom101/ipinfo",
    "owner": "tiagom101",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/ipinfo",
    "downloadUrl": "https://openagent3.xyz/downloads/ipinfo",
    "agentUrl": "https://openagent3.xyz/skills/ipinfo/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ipinfo/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ipinfo/agent.md"
  }
}