Go2.gg

Use Go2.gg API for URL shortening, link analytics, QR code generation, webhooks, and link-in-bio pages. Use when the user needs to create short links, track clicks, generate QR codes, set up link-in-bio pages, or manage branded URLs. Free tier includes short links, QR codes, and analytics. Requires GO2GG_API_KEY env var. QR code generation is free without auth.

MIT-0 · Free to use, modify, and redistribute. No attribution required.
1 · 2k · 1 current installs · 1 all-time installs
MIT-0
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Suspicious
medium confidence
!
Purpose & Capability
SKILL.md clearly documents a Go2.gg integration (create/update/delete links, analytics, QR generation) and requires an API key (GO2GG_API_KEY) for most operations. That capability matches the name/description. However the registry metadata lists no required environment variables or primary credential, which contradicts the SKILL.md and is an incoherence.
Instruction Scope
The runtime instructions are instruction-only curl examples targeting api.go2.gg endpoints and explicitly reference the Authorization header using GO2GG_API_KEY. The instructions do not ask the agent to read unrelated local files or other environment variables. They will transmit user-supplied URLs and the API key to the go2.gg API as expected for this service.
Install Mechanism
No install spec and no code files — the skill is instruction-only, which minimizes on-disk risk. There is nothing being downloaded or installed by the skill manifest.
!
Credentials
SKILL.md requires GO2GG_API_KEY for authenticated operations, but the registry metadata lists no required env vars or primary credential. This mismatch could cause the agent to not surface a credential prompt in UI or assume the key is available in environment unexpectedly. The API key will be sent to api.go2.gg; that is proportionate for the described functionality but must be explicitly declared.
Persistence & Privilege
always is not set (good), but disable-model-invocation is also not set, so the model could invoke this skill autonomously. That is typical for API integrations but means the agent could make outbound requests to api.go2.gg without an explicit, per-use user confirmation if the platform allows it.
What to consider before installing
This skill appears to be a straightforward integration with go2.gg, but the manifest metadata omits the GO2GG_API_KEY requirement that the SKILL.md clearly uses. Before installing: 1) Confirm whether the platform will prompt you to supply GO2GG_API_KEY (and where that key will be stored). 2) Only provide a key with the minimum privileges needed and be prepared to rotate it if you stop using the skill. 3) If you don’t want the agent to call external services autonomously, request or configure disable-model-invocation (or equivalent) so actions require explicit user approval. 4) Review the full SKILL.md to ensure no additional unexpected network calls are present and verify you trust go2.gg for handling your shortened URLs and analytics data.

Like a lobster shell, security has layers — review code before you run it.

Current versionv1.0.0
Download zip
latestvk97b7aywy4km11e2jp0w30h44h809dqk

License

MIT-0
Free to use, modify, and redistribute. No attribution required.

SKILL.md

Go2.gg — Edge-Native URL Shortener

URL shortening, analytics, QR codes, webhooks, galleries (link-in-bio). Built on Cloudflare's edge network with sub-10ms redirects globally.

Setup

Get API key from: https://go2.gg/dashboard/api-keys (free, no credit card required)

export GO2GG_API_KEY="go2_your_key_here"

API base: https://api.go2.gg/api/v1 Auth: Authorization: Bearer $GO2GG_API_KEY Docs: https://go2.gg/docs/api/links


Short Links

Create, manage, and track short links with custom slugs, tags, expiration, passwords, and geo/device targeting.

Create a Link

curl -X POST "https://api.go2.gg/api/v1/links" \
  -H "Authorization: Bearer $GO2GG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "destinationUrl": "https://example.com/landing-page",
    "slug": "my-link",
    "title": "My Campaign Link",
    "tags": ["marketing", "q1-2025"]
  }'

Important: Field is destinationUrl (not url). Slug is optional (auto-generated if omitted).

Response

{
  "success": true,
  "data": {
    "id": "lnk_abc123",
    "shortUrl": "https://go2.gg/my-link",
    "destinationUrl": "https://example.com/landing-page",
    "slug": "my-link",
    "domain": "go2.gg",
    "title": "My Campaign Link",
    "tags": ["marketing", "q1-2025"],
    "clickCount": 0,
    "createdAt": "2025-01-01T10:30:00Z"
  }
}

List Links

# List all links (paginated)
curl "https://api.go2.gg/api/v1/links?perPage=20&sort=clicks" \
  -H "Authorization: Bearer $GO2GG_API_KEY"

# Search links
curl "https://api.go2.gg/api/v1/links?search=marketing&tag=q1-2025" \
  -H "Authorization: Bearer $GO2GG_API_KEY"

Query params: page, perPage (max 100), search, domain, tag, archived, sort (created/clicks/updated)

Update a Link

curl -X PATCH "https://api.go2.gg/api/v1/links/lnk_abc123" \
  -H "Authorization: Bearer $GO2GG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"destinationUrl": "https://example.com/updated-page", "tags": ["updated"]}'

Delete a Link

curl -X DELETE "https://api.go2.gg/api/v1/links/lnk_abc123" \
  -H "Authorization: Bearer $GO2GG_API_KEY"
# Returns 204 No Content

Link Analytics

curl "https://api.go2.gg/api/v1/links/lnk_abc123/stats" \
  -H "Authorization: Bearer $GO2GG_API_KEY"

Returns: totalClicks, byCountry, byDevice, byBrowser, byReferrer, overTime

Advanced Link Options

# Password-protected link
curl -X POST "https://api.go2.gg/api/v1/links" \
  -H "Authorization: Bearer $GO2GG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"destinationUrl": "https://example.com/secret", "slug": "exclusive", "password": "secure123"}'

# Link with expiration + click limit
curl -X POST "https://api.go2.gg/api/v1/links" \
  -H "Authorization: Bearer $GO2GG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"destinationUrl": "https://example.com/flash", "expiresAt": "2025-12-31T23:59:59Z", "clickLimit": 1000}'

# Geo-targeted link (different URLs per country)
curl -X POST "https://api.go2.gg/api/v1/links" \
  -H "Authorization: Bearer $GO2GG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "destinationUrl": "https://example.com/default",
    "geoTargets": {"US": "https://example.com/us", "GB": "https://example.com/uk", "IN": "https://example.com/in"}
  }'

# Device-targeted link + app deep links
curl -X POST "https://api.go2.gg/api/v1/links" \
  -H "Authorization: Bearer $GO2GG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "destinationUrl": "https://example.com/default",
    "deviceTargets": {"mobile": "https://m.example.com"},
    "iosUrl": "https://apps.apple.com/app/myapp",
    "androidUrl": "https://play.google.com/store/apps/details?id=com.myapp"
  }'

# Link with UTM parameters
curl -X POST "https://api.go2.gg/api/v1/links" \
  -H "Authorization: Bearer $GO2GG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "destinationUrl": "https://example.com/product",
    "slug": "summer-sale",
    "utmSource": "email",
    "utmMedium": "newsletter",
    "utmCampaign": "summer-sale"
  }'

Create Link Parameters

FieldTypeRequiredDescription
destinationUrlstringyesTarget URL to redirect to
slugstringnoCustom slug (auto-generated if omitted)
domainstringnoCustom domain (default: go2.gg)
titlestringnoLink title
descriptionstringnoLink description
tagsstring[]noTags for filtering
passwordstringnoPassword protection
expiresAtstringnoISO 8601 expiration date
clickLimitnumbernoMax clicks allowed
geoTargetsobjectnoCountry → URL mapping
deviceTargetsobjectnoDevice → URL mapping
iosUrlstringnoiOS app deep link
androidUrlstringnoAndroid app deep link
utmSource/Medium/Campaign/Term/ContentstringnoUTM parameters

QR Codes

Generate customizable QR codes. QR generation is free and requires no auth.

Generate QR Code (No Auth Required)

# Generate SVG QR code (free, no API key needed)
curl -X POST "https://api.go2.gg/api/v1/qr/generate" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://go2.gg/my-link",
    "size": 512,
    "foregroundColor": "#1a365d",
    "backgroundColor": "#FFFFFF",
    "cornerRadius": 10,
    "errorCorrection": "H",
    "format": "svg"
  }' -o qr-code.svg

# PNG format
curl -X POST "https://api.go2.gg/api/v1/qr/generate" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com", "format": "png", "size": 1024}' -o qr-code.png

QR Parameters

FieldTypeDefaultDescription
urlstringrequiredURL to encode
sizenumber256Size in pixels (64-2048)
foregroundColorstring#000000Hex color for modules
backgroundColorstring#FFFFFFHex color for background
cornerRadiusnumber0Module corner radius (0-50)
errorCorrectionstringML (7%), M (15%), Q (25%), H (30%)
formatstringsvgsvg or png

Save & Track QR Codes (Auth Required)

# Save QR config for tracking
curl -X POST "https://api.go2.gg/api/v1/qr" \
  -H "Authorization: Bearer $GO2GG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Business Card QR", "url": "https://go2.gg/contact", "linkId": "lnk_abc123"}'

# List saved QR codes
curl "https://api.go2.gg/api/v1/qr" -H "Authorization: Bearer $GO2GG_API_KEY"

# Download saved QR
curl "https://api.go2.gg/api/v1/qr/qr_abc123/download?format=svg" \
  -H "Authorization: Bearer $GO2GG_API_KEY" -o qr.svg

# Delete QR
curl -X DELETE "https://api.go2.gg/api/v1/qr/qr_abc123" -H "Authorization: Bearer $GO2GG_API_KEY"

Webhooks

Receive real-time notifications for link clicks, creations, and updates.

# Create webhook
curl -X POST "https://api.go2.gg/api/v1/webhooks" \
  -H "Authorization: Bearer $GO2GG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Click Tracker", "url": "https://your-server.com/webhook", "events": ["click", "link.created"]}'

# List webhooks
curl "https://api.go2.gg/api/v1/webhooks" -H "Authorization: Bearer $GO2GG_API_KEY"

# Test webhook
curl -X POST "https://api.go2.gg/api/v1/webhooks/wh_abc123/test" \
  -H "Authorization: Bearer $GO2GG_API_KEY"

# Delete webhook
curl -X DELETE "https://api.go2.gg/api/v1/webhooks/wh_abc123" \
  -H "Authorization: Bearer $GO2GG_API_KEY"

Events: click, link.created, link.updated, link.deleted, domain.verified, qr.scanned, * (all)

Webhook payloads include X-Webhook-Signature (HMAC SHA256) for verification. Retries: 5s → 30s → 2m → 10m.


Galleries (Link-in-Bio)

Create link-in-bio pages programmatically.

# Create gallery
curl -X POST "https://api.go2.gg/api/v1/galleries" \
  -H "Authorization: Bearer $GO2GG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"slug": "myprofile", "title": "My Name", "bio": "Creator & developer", "theme": "gradient"}'

# Add link item
curl -X POST "https://api.go2.gg/api/v1/galleries/gal_abc123/items" \
  -H "Authorization: Bearer $GO2GG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type": "link", "title": "My Website", "url": "https://example.com"}'

# Add YouTube embed
curl -X POST "https://api.go2.gg/api/v1/galleries/gal_abc123/items" \
  -H "Authorization: Bearer $GO2GG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type": "embed", "title": "Latest Video", "embedType": "youtube", "embedData": {"videoId": "dQw4w9WgXcQ"}}'

# Publish gallery (makes it live at go2.gg/bio/myprofile)
curl -X POST "https://api.go2.gg/api/v1/galleries/gal_abc123/publish" \
  -H "Authorization: Bearer $GO2GG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"isPublished": true}'

# Reorder items
curl -X PATCH "https://api.go2.gg/api/v1/galleries/gal_abc123/items/reorder" \
  -H "Authorization: Bearer $GO2GG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"itemIds": ["item_3", "item_1", "item_2"]}'

# List galleries
curl "https://api.go2.gg/api/v1/galleries" -H "Authorization: Bearer $GO2GG_API_KEY"

Themes: default, minimal, gradient, dark, neon, custom (with customCss) Item types: link, header, divider, embed (youtube), image


Python Example

import requests

API_KEY = "go2_your_key_here"  # or os.environ["GO2GG_API_KEY"]
BASE = "https://api.go2.gg/api/v1"
headers = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}

# Create short link
resp = requests.post(f"{BASE}/links", headers=headers, json={
    "destinationUrl": "https://example.com/product",
    "slug": "my-product",
    "title": "Product Link",
    "tags": ["product"]
})
link = resp.json()["data"]
print(f"Short URL: {link['shortUrl']}")

# Get analytics
stats = requests.get(f"{BASE}/links/{link['id']}/stats", headers=headers).json()["data"]
print(f"Clicks: {stats['totalClicks']}")

# Generate QR (no auth needed)
qr = requests.post(f"{BASE}/qr/generate", json={"url": link["shortUrl"], "size": 512, "format": "png"})
with open("qr.png", "wb") as f:
    f.write(qr.content)

API Endpoint Summary

ServiceEndpointMethodAuth
Links create/api/v1/linksPOSTyes
Links list/api/v1/linksGETyes
Links get/api/v1/links/:idGETyes
Links update/api/v1/links/:idPATCHyes
Links delete/api/v1/links/:idDELETEyes
Links stats/api/v1/links/:id/statsGETyes
QR generate/api/v1/qr/generatePOSTno
QR save/api/v1/qrPOSTyes
QR list/api/v1/qrGETyes
QR download/api/v1/qr/:id/downloadGETyes
Webhooks/api/v1/webhooksCRUDyes
Webhook test/api/v1/webhooks/:id/testPOSTyes
Galleries/api/v1/galleriesCRUDyes
Gallery items/api/v1/galleries/:id/itemsCRUDyes
Gallery publish/api/v1/galleries/:id/publishPOSTyes

Rate Limits

PlanRequests/min
Free60
Pro300
Business1000

Error Codes

CodeDescription
SLUG_RESERVEDSlug is reserved
SLUG_EXISTSSlug already in use on this domain
INVALID_URLDestination URL is invalid
LIMIT_REACHEDPlan's link limit reached
DOMAIN_NOT_VERIFIEDCustom domain not verified

Files

1 total
Select a file
Select a file to preview.

Comments

Loading comments…