{
  "schemaVersion": "1.0",
  "item": {
    "slug": "jo4",
    "name": "Modern URL shortening with QR codes and detailed analytics",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/anandrathnas/jo4",
    "canonicalUrl": "https://clawhub.ai/anandrathnas/jo4",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/jo4",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=jo4",
    "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/jo4"
    },
    "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/jo4",
    "agentPageUrl": "https://openagent3.xyz/skills/jo4/agent",
    "manifestUrl": "https://openagent3.xyz/skills/jo4/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/jo4/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": "Jo4 - URL Shortener & Analytics API",
        "body": "Jo4 is a modern URL shortening service with QR code generation and detailed link analytics."
      },
      {
        "title": "Authentication",
        "body": "All protected endpoints require an API key. Set your API key as an environment variable:\n\nexport JO4_API_KEY=\"your-api-key\"\n\nGet your API key from: https://jo4.io/api-keys"
      },
      {
        "title": "API Base URL",
        "body": "https://jo4-api.jo4.io/api/v1"
      },
      {
        "title": "Create Short URL (Authenticated)",
        "body": "curl -X POST \"https://jo4-api.jo4.io/api/v1/protected/url\" \\\n  -H \"X-API-Key: $JO4_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"longUrl\": \"https://example.com/very-long-url\",\n    \"title\": \"My Link\"\n  }'\n\nRequest Body:\n\nlongUrl (required) - The destination URL (max 2048 chars)\ntitle (optional) - Link title (max 200 chars)\ndescription (optional) - Link description (max 500 chars)\nshortUrl (optional) - Custom alias (max 16 chars, alphanumeric/hyphen/underscore)\nexpirationTime (optional) - Unix timestamp for link expiration\npasswordProtected (optional) - Boolean to enable password protection\npassword (optional) - Password if protected (4-128 chars)\n\nUTM Parameters:\n\nutmSource, utmMedium, utmCampaign, utmTerm, utmContent\n\nResponse:\n\n{\n  \"response\": {\n    \"id\": 123,\n    \"slug\": \"abc123\",\n    \"shortUrl\": \"abc123\",\n    \"fullShortUrl\": \"https://jo4.io/a/abc123\",\n    \"longUrl\": \"https://example.com/very-long-url\",\n    \"title\": \"My Link\",\n    \"qrCodeUrl\": \"https://jo4.io/qr/abc123\"\n  }\n}"
      },
      {
        "title": "Create Anonymous Short URL (No Auth Required)",
        "body": "curl -X POST \"https://jo4-api.jo4.io/api/v1/public/url\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"longUrl\": \"https://example.com\"}'\n\nLimited features, no analytics access."
      },
      {
        "title": "Get URL Details",
        "body": "curl -X GET \"https://jo4-api.jo4.io/api/v1/protected/url/{slug}\" \\\n  -H \"X-API-Key: $JO4_API_KEY\""
      },
      {
        "title": "Get URL Analytics",
        "body": "curl -X GET \"https://jo4-api.jo4.io/api/v1/protected/url/{slug}/stats\" \\\n  -H \"X-API-Key: $JO4_API_KEY\"\n\nResponse includes:\n\nTotal clicks\nClicks by date\nGeographic distribution\nDevice/browser breakdown\nReferrer sources"
      },
      {
        "title": "List My URLs",
        "body": "curl -X GET \"https://jo4-api.jo4.io/api/v1/protected/url/myurls?page=0&size=20\" \\\n  -H \"X-API-Key: $JO4_API_KEY\""
      },
      {
        "title": "Update URL",
        "body": "curl -X PUT \"https://jo4-api.jo4.io/api/v1/protected/url/{id}\" \\\n  -H \"X-API-Key: $JO4_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"title\": \"Updated Title\",\n    \"longUrl\": \"https://new-destination.com\"\n  }'"
      },
      {
        "title": "Delete URL",
        "body": "curl -X DELETE \"https://jo4-api.jo4.io/api/v1/protected/url/{id}\" \\\n  -H \"X-API-Key: $JO4_API_KEY\""
      },
      {
        "title": "QR Codes",
        "body": "Every short URL automatically gets a QR code at:\n\nhttps://jo4.io/qr/{shortUrl}"
      },
      {
        "title": "Rate Limits",
        "body": "Rate limits vary by plan:\n\nFree: 60 requests/minute\nPro: Up to 10,000 requests/minute\nAnonymous (public endpoints): 10 requests/minute"
      },
      {
        "title": "API Documentation",
        "body": "Full OpenAPI/Swagger documentation: https://jo4-api.jo4.io/swagger-ui/index.html"
      },
      {
        "title": "1. Shorten a URL for sharing",
        "body": "curl -X POST \"https://jo4-api.jo4.io/api/v1/protected/url\" \\\n  -H \"X-API-Key: $JO4_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"longUrl\": \"https://example.com/article\", \"title\": \"Article\"}'"
      },
      {
        "title": "2. Create campaign tracking link",
        "body": "curl -X POST \"https://jo4-api.jo4.io/api/v1/protected/url\" \\\n  -H \"X-API-Key: $JO4_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"longUrl\": \"https://mysite.com/landing\",\n    \"title\": \"Q1 Campaign\",\n    \"utmSource\": \"twitter\",\n    \"utmMedium\": \"social\",\n    \"utmCampaign\": \"q1-2026\"\n  }'"
      },
      {
        "title": "3. Create expiring link",
        "body": "curl -X POST \"https://jo4-api.jo4.io/api/v1/protected/url\" \\\n  -H \"X-API-Key: $JO4_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"longUrl\": \"https://mysite.com/promo\",\n    \"title\": \"Limited Offer\",\n    \"expirationTime\": 1738454400\n  }'"
      },
      {
        "title": "Error Codes",
        "body": "CodeMeaning400Bad request - invalid parameters401Unauthorized - missing or invalid API key403Forbidden - insufficient permissions404Not found - URL doesn't exist429Rate limit exceeded"
      }
    ],
    "body": "Jo4 - URL Shortener & Analytics API\n\nJo4 is a modern URL shortening service with QR code generation and detailed link analytics.\n\nAuthentication\n\nAll protected endpoints require an API key. Set your API key as an environment variable:\n\nexport JO4_API_KEY=\"your-api-key\"\n\n\nGet your API key from: https://jo4.io/api-keys\n\nAPI Base URL\nhttps://jo4-api.jo4.io/api/v1\n\nEndpoints\nCreate Short URL (Authenticated)\ncurl -X POST \"https://jo4-api.jo4.io/api/v1/protected/url\" \\\n  -H \"X-API-Key: $JO4_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"longUrl\": \"https://example.com/very-long-url\",\n    \"title\": \"My Link\"\n  }'\n\n\nRequest Body:\n\nlongUrl (required) - The destination URL (max 2048 chars)\ntitle (optional) - Link title (max 200 chars)\ndescription (optional) - Link description (max 500 chars)\nshortUrl (optional) - Custom alias (max 16 chars, alphanumeric/hyphen/underscore)\nexpirationTime (optional) - Unix timestamp for link expiration\npasswordProtected (optional) - Boolean to enable password protection\npassword (optional) - Password if protected (4-128 chars)\n\nUTM Parameters:\n\nutmSource, utmMedium, utmCampaign, utmTerm, utmContent\n\nResponse:\n\n{\n  \"response\": {\n    \"id\": 123,\n    \"slug\": \"abc123\",\n    \"shortUrl\": \"abc123\",\n    \"fullShortUrl\": \"https://jo4.io/a/abc123\",\n    \"longUrl\": \"https://example.com/very-long-url\",\n    \"title\": \"My Link\",\n    \"qrCodeUrl\": \"https://jo4.io/qr/abc123\"\n  }\n}\n\nCreate Anonymous Short URL (No Auth Required)\ncurl -X POST \"https://jo4-api.jo4.io/api/v1/public/url\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"longUrl\": \"https://example.com\"}'\n\n\nLimited features, no analytics access.\n\nGet URL Details\ncurl -X GET \"https://jo4-api.jo4.io/api/v1/protected/url/{slug}\" \\\n  -H \"X-API-Key: $JO4_API_KEY\"\n\nGet URL Analytics\ncurl -X GET \"https://jo4-api.jo4.io/api/v1/protected/url/{slug}/stats\" \\\n  -H \"X-API-Key: $JO4_API_KEY\"\n\n\nResponse includes:\n\nTotal clicks\nClicks by date\nGeographic distribution\nDevice/browser breakdown\nReferrer sources\nList My URLs\ncurl -X GET \"https://jo4-api.jo4.io/api/v1/protected/url/myurls?page=0&size=20\" \\\n  -H \"X-API-Key: $JO4_API_KEY\"\n\nUpdate URL\ncurl -X PUT \"https://jo4-api.jo4.io/api/v1/protected/url/{id}\" \\\n  -H \"X-API-Key: $JO4_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"title\": \"Updated Title\",\n    \"longUrl\": \"https://new-destination.com\"\n  }'\n\nDelete URL\ncurl -X DELETE \"https://jo4-api.jo4.io/api/v1/protected/url/{id}\" \\\n  -H \"X-API-Key: $JO4_API_KEY\"\n\nQR Codes\n\nEvery short URL automatically gets a QR code at:\n\nhttps://jo4.io/qr/{shortUrl}\n\nRate Limits\n\nRate limits vary by plan:\n\nFree: 60 requests/minute\nPro: Up to 10,000 requests/minute\nAnonymous (public endpoints): 10 requests/minute\nAPI Documentation\n\nFull OpenAPI/Swagger documentation: https://jo4-api.jo4.io/swagger-ui/index.html\n\nCommon Use Cases\n1. Shorten a URL for sharing\ncurl -X POST \"https://jo4-api.jo4.io/api/v1/protected/url\" \\\n  -H \"X-API-Key: $JO4_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"longUrl\": \"https://example.com/article\", \"title\": \"Article\"}'\n\n2. Create campaign tracking link\ncurl -X POST \"https://jo4-api.jo4.io/api/v1/protected/url\" \\\n  -H \"X-API-Key: $JO4_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"longUrl\": \"https://mysite.com/landing\",\n    \"title\": \"Q1 Campaign\",\n    \"utmSource\": \"twitter\",\n    \"utmMedium\": \"social\",\n    \"utmCampaign\": \"q1-2026\"\n  }'\n\n3. Create expiring link\ncurl -X POST \"https://jo4-api.jo4.io/api/v1/protected/url\" \\\n  -H \"X-API-Key: $JO4_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"longUrl\": \"https://mysite.com/promo\",\n    \"title\": \"Limited Offer\",\n    \"expirationTime\": 1738454400\n  }'\n\nError Codes\nCode\tMeaning\n400\tBad request - invalid parameters\n401\tUnauthorized - missing or invalid API key\n403\tForbidden - insufficient permissions\n404\tNot found - URL doesn't exist\n429\tRate limit exceeded"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/anandrathnas/jo4",
    "publisherUrl": "https://clawhub.ai/anandrathnas/jo4",
    "owner": "anandrathnas",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/jo4",
    "downloadUrl": "https://openagent3.xyz/downloads/jo4",
    "agentUrl": "https://openagent3.xyz/skills/jo4/agent",
    "manifestUrl": "https://openagent3.xyz/skills/jo4/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/jo4/agent.md"
  }
}