{
  "schemaVersion": "1.0",
  "item": {
    "slug": "dub-links-api",
    "name": "Dub.co Links API",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/ferminrp/dub-links-api",
    "canonicalUrl": "https://clawhub.ai/ferminrp/dub-links-api",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/dub-links-api",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=dub-links-api",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "references/openapi-spec.json"
    ],
    "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/dub-links-api"
    },
    "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/dub-links-api",
    "agentPageUrl": "https://openagent3.xyz/skills/dub-links-api/agent",
    "manifestUrl": "https://openagent3.xyz/skills/dub-links-api/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/dub-links-api/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": "Dub Links API",
        "body": "Skill for integrating Dub Links API with strict scope limited to /links* endpoints."
      },
      {
        "title": "API Overview",
        "body": "Base URL: https://api.dub.co\nAuth: Bearer token required\nHeader: Authorization: Bearer <DUB_API_KEY>\nResponse format: JSON\nScope: Links endpoints only\nDocs: https://dub.co/docs/api-reference/endpoint/create-a-link\nToken docs (onboarding): https://dub.co/docs/api-reference/tokens\nLocal snapshot: references/openapi-spec.json"
      },
      {
        "title": "API Key Onboarding",
        "body": "Use this flow when the user does not have an API key yet:\n\nCreate a Dub account/workspace (if needed).\nGo to the dashboard token section (per docs):\n\nhttps://dub.co/docs/api-reference/tokens\n\n\nGenerate an API key and export it in shell:\n\nexport DUB_API_KEY=\"...\"\n\n\nValidate credentials with a Links endpoint:\n\ncurl -s -H \"Authorization: Bearer $DUB_API_KEY\" \"https://api.dub.co/links/count\" | jq '.'\n\nUseful onboarding note: if initial signup is needed, this referral can be used:\nhttps://refer.dub.co/agents"
      },
      {
        "title": "1) Create",
        "body": "POST /links\nCreates a link in the authenticated workspace.\nMinimum recommended body: url.\n\ncurl -s -X POST \"https://api.dub.co/links\" \\\n  -H \"Authorization: Bearer $DUB_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"url\":\"https://example.com\"}' | jq '.'"
      },
      {
        "title": "2) Update",
        "body": "PATCH /links/{linkId}\nUpdates an existing link by linkId.\n\ncurl -s -X PATCH \"https://api.dub.co/links/{linkId}\" \\\n  -H \"Authorization: Bearer $DUB_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"url\":\"https://example.com/new\"}' | jq '.'"
      },
      {
        "title": "3) Upsert",
        "body": "PUT /links/upsert\nIf a link with the same URL exists, returns/updates it; otherwise creates it.\n\ncurl -s -X PUT \"https://api.dub.co/links/upsert\" \\\n  -H \"Authorization: Bearer $DUB_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"url\":\"https://example.com\"}' | jq '.'"
      },
      {
        "title": "4) Delete",
        "body": "DELETE /links/{linkId}\nDeletes a link by linkId.\n\ncurl -s -X DELETE \"https://api.dub.co/links/{linkId}\" \\\n  -H \"Authorization: Bearer $DUB_API_KEY\" | jq '.'"
      },
      {
        "title": "5) Retrieve one",
        "body": "GET /links/info\nRetrieves a link by one of these selectors:\n\ndomain + key\nlinkId\nexternalId\n\ncurl -s \"https://api.dub.co/links/info?domain=acme.link&key=promo\" \\\n  -H \"Authorization: Bearer $DUB_API_KEY\" | jq '.'"
      },
      {
        "title": "6) List",
        "body": "GET /links\nReturns paginated list with filters.\nCommon query params: domain, search, tagId, tagIds, tagNames, folderId, tenantId, page, pageSize, sortBy, sortOrder.\n\ncurl -s \"https://api.dub.co/links?page=1&pageSize=20&sortBy=createdAt&sortOrder=desc\" \\\n  -H \"Authorization: Bearer $DUB_API_KEY\" | jq '.'"
      },
      {
        "title": "7) Count",
        "body": "GET /links/count\nReturns number of links for the provided filters.\n\ncurl -s \"https://api.dub.co/links/count?domain=acme.link\" \\\n  -H \"Authorization: Bearer $DUB_API_KEY\" | jq '.'"
      },
      {
        "title": "8) Bulk create",
        "body": "POST /links/bulk\nCreates up to 100 links.\nBody: array of objects (each item should include url).\n\ncurl -s -X POST \"https://api.dub.co/links/bulk\" \\\n  -H \"Authorization: Bearer $DUB_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '[{\"url\":\"https://example.com/a\"},{\"url\":\"https://example.com/b\"}]' | jq '.'"
      },
      {
        "title": "9) Bulk update",
        "body": "PATCH /links/bulk\nUpdates up to 100 links.\nBody requires data; target selection via linkIds or externalIds.\n\ncurl -s -X PATCH \"https://api.dub.co/links/bulk\" \\\n  -H \"Authorization: Bearer $DUB_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"linkIds\":[\"lnk_123\",\"lnk_456\"],\"data\":{\"archived\":true}}' | jq '.'"
      },
      {
        "title": "10) Bulk delete",
        "body": "DELETE /links/bulk\nDeletes up to 100 links.\nRequired query param: linkIds.\n\ncurl -s -X DELETE \"https://api.dub.co/links/bulk?linkIds=lnk_123,lnk_456\" \\\n  -H \"Authorization: Bearer $DUB_API_KEY\" | jq '.'"
      },
      {
        "title": "Key Fields",
        "body": "Common response fields (from LinkSchema):\n\nid\ndomain\nkey\nshortLink\nurl\ncreatedAt\nupdatedAt\narchived\nexternalId\ntags\nfolderId\n\nResult shapes by endpoint:\n\nGET /links: array of links\nGET /links/count: number\nBulk endpoints: array/object depending on operation"
      },
      {
        "title": "Recommended Workflow",
        "body": "Detect intent: create/update/upsert/delete/get/list/count/bulk.\nValidate minimum inputs (url, linkId, filters, bulk ids).\nExecute request with curl -s and Bearer header.\nParse with jq and verify logical operation result.\nRespond first with a useful snapshot:\n\nid, shortLink, url, and archived status when relevant.\n\n\nFor lists, provide a short table with relevant columns.\nKeep strict scope on /links*."
      },
      {
        "title": "Error Handling",
        "body": "401/403: missing, invalid, or unauthorized token.\n404: link not found for linkId or GET /links/info criteria.\n422: invalid payload (missing/invalid fields).\n429: rate limited; respect Retry-After if present.\nNetwork/timeout: retry up to 2 times with short delay.\nUnexpected JSON: return minimal raw output and warn about inconsistency."
      },
      {
        "title": "Presenting Results",
        "body": "Recommended output format:\n\nExecutive summary (action + result).\nShort table for multiple links:\n\nid | domain | key | shortLink | url | createdAt\n\n\nFor bulk operations:\n\nrequested total, processed total, errors if any.\n\n\nClarify data is scoped to the authenticated workspace."
      },
      {
        "title": "Out of Scope",
        "body": "This skill must not use:\n\nAnalytics, events, conversions, partners, customers, commissions, payouts endpoints.\nDomains, folders, tags endpoints.\n/tokens/* endpoints (including /tokens/embed/referrals).\n\nThe tokens page is used only for API key onboarding, not as operational scope."
      },
      {
        "title": "OpenAPI Spec",
        "body": "Use references/openapi-spec.json as the stable local source for methods, paths, parameters, and schemas."
      }
    ],
    "body": "Dub Links API\n\nSkill for integrating Dub Links API with strict scope limited to /links* endpoints.\n\nAPI Overview\nBase URL: https://api.dub.co\nAuth: Bearer token required\nHeader: Authorization: Bearer <DUB_API_KEY>\nResponse format: JSON\nScope: Links endpoints only\nDocs: https://dub.co/docs/api-reference/endpoint/create-a-link\nToken docs (onboarding): https://dub.co/docs/api-reference/tokens\nLocal snapshot: references/openapi-spec.json\nAPI Key Onboarding\n\nUse this flow when the user does not have an API key yet:\n\nCreate a Dub account/workspace (if needed).\nGo to the dashboard token section (per docs):\nhttps://dub.co/docs/api-reference/tokens\nGenerate an API key and export it in shell:\nexport DUB_API_KEY=\"...\"\nValidate credentials with a Links endpoint:\ncurl -s -H \"Authorization: Bearer $DUB_API_KEY\" \"https://api.dub.co/links/count\" | jq '.'\n\nUseful onboarding note: if initial signup is needed, this referral can be used: https://refer.dub.co/agents\n\nLinks Endpoints\n1) Create\nPOST /links\nCreates a link in the authenticated workspace.\nMinimum recommended body: url.\ncurl -s -X POST \"https://api.dub.co/links\" \\\n  -H \"Authorization: Bearer $DUB_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"url\":\"https://example.com\"}' | jq '.'\n\n2) Update\nPATCH /links/{linkId}\nUpdates an existing link by linkId.\ncurl -s -X PATCH \"https://api.dub.co/links/{linkId}\" \\\n  -H \"Authorization: Bearer $DUB_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"url\":\"https://example.com/new\"}' | jq '.'\n\n3) Upsert\nPUT /links/upsert\nIf a link with the same URL exists, returns/updates it; otherwise creates it.\ncurl -s -X PUT \"https://api.dub.co/links/upsert\" \\\n  -H \"Authorization: Bearer $DUB_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"url\":\"https://example.com\"}' | jq '.'\n\n4) Delete\nDELETE /links/{linkId}\nDeletes a link by linkId.\ncurl -s -X DELETE \"https://api.dub.co/links/{linkId}\" \\\n  -H \"Authorization: Bearer $DUB_API_KEY\" | jq '.'\n\n5) Retrieve one\nGET /links/info\nRetrieves a link by one of these selectors:\ndomain + key\nlinkId\nexternalId\ncurl -s \"https://api.dub.co/links/info?domain=acme.link&key=promo\" \\\n  -H \"Authorization: Bearer $DUB_API_KEY\" | jq '.'\n\n6) List\nGET /links\nReturns paginated list with filters.\nCommon query params: domain, search, tagId, tagIds, tagNames, folderId, tenantId, page, pageSize, sortBy, sortOrder.\ncurl -s \"https://api.dub.co/links?page=1&pageSize=20&sortBy=createdAt&sortOrder=desc\" \\\n  -H \"Authorization: Bearer $DUB_API_KEY\" | jq '.'\n\n7) Count\nGET /links/count\nReturns number of links for the provided filters.\ncurl -s \"https://api.dub.co/links/count?domain=acme.link\" \\\n  -H \"Authorization: Bearer $DUB_API_KEY\" | jq '.'\n\n8) Bulk create\nPOST /links/bulk\nCreates up to 100 links.\nBody: array of objects (each item should include url).\ncurl -s -X POST \"https://api.dub.co/links/bulk\" \\\n  -H \"Authorization: Bearer $DUB_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '[{\"url\":\"https://example.com/a\"},{\"url\":\"https://example.com/b\"}]' | jq '.'\n\n9) Bulk update\nPATCH /links/bulk\nUpdates up to 100 links.\nBody requires data; target selection via linkIds or externalIds.\ncurl -s -X PATCH \"https://api.dub.co/links/bulk\" \\\n  -H \"Authorization: Bearer $DUB_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"linkIds\":[\"lnk_123\",\"lnk_456\"],\"data\":{\"archived\":true}}' | jq '.'\n\n10) Bulk delete\nDELETE /links/bulk\nDeletes up to 100 links.\nRequired query param: linkIds.\ncurl -s -X DELETE \"https://api.dub.co/links/bulk?linkIds=lnk_123,lnk_456\" \\\n  -H \"Authorization: Bearer $DUB_API_KEY\" | jq '.'\n\nKey Fields\n\nCommon response fields (from LinkSchema):\n\nid\ndomain\nkey\nshortLink\nurl\ncreatedAt\nupdatedAt\narchived\nexternalId\ntags\nfolderId\n\nResult shapes by endpoint:\n\nGET /links: array of links\nGET /links/count: number\nBulk endpoints: array/object depending on operation\nRecommended Workflow\nDetect intent: create/update/upsert/delete/get/list/count/bulk.\nValidate minimum inputs (url, linkId, filters, bulk ids).\nExecute request with curl -s and Bearer header.\nParse with jq and verify logical operation result.\nRespond first with a useful snapshot:\nid, shortLink, url, and archived status when relevant.\nFor lists, provide a short table with relevant columns.\nKeep strict scope on /links*.\nError Handling\n401/403: missing, invalid, or unauthorized token.\n404: link not found for linkId or GET /links/info criteria.\n422: invalid payload (missing/invalid fields).\n429: rate limited; respect Retry-After if present.\nNetwork/timeout: retry up to 2 times with short delay.\nUnexpected JSON: return minimal raw output and warn about inconsistency.\nPresenting Results\n\nRecommended output format:\n\nExecutive summary (action + result).\nShort table for multiple links:\nid | domain | key | shortLink | url | createdAt\nFor bulk operations:\nrequested total, processed total, errors if any.\nClarify data is scoped to the authenticated workspace.\nOut of Scope\n\nThis skill must not use:\n\nAnalytics, events, conversions, partners, customers, commissions, payouts endpoints.\nDomains, folders, tags endpoints.\n/tokens/* endpoints (including /tokens/embed/referrals).\n\nThe tokens page is used only for API key onboarding, not as operational scope.\n\nOpenAPI Spec\n\nUse references/openapi-spec.json as the stable local source for methods, paths, parameters, and schemas."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/ferminrp/dub-links-api",
    "publisherUrl": "https://clawhub.ai/ferminrp/dub-links-api",
    "owner": "ferminrp",
    "version": "1.0.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/dub-links-api",
    "downloadUrl": "https://openagent3.xyz/downloads/dub-links-api",
    "agentUrl": "https://openagent3.xyz/skills/dub-links-api/agent",
    "manifestUrl": "https://openagent3.xyz/skills/dub-links-api/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/dub-links-api/agent.md"
  }
}