{
  "schemaVersion": "1.0",
  "item": {
    "slug": "trakt-tv",
    "name": "Trakt.tv",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/d-meagher/trakt-tv",
    "canonicalUrl": "https://clawhub.ai/d-meagher/trakt-tv",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/trakt-tv",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=trakt-tv",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "get_trakt_token.sh",
      "README.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-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-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/trakt-tv"
    },
    "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/trakt-tv",
    "agentPageUrl": "https://openagent3.xyz/skills/trakt-tv/agent",
    "manifestUrl": "https://openagent3.xyz/skills/trakt-tv/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/trakt-tv/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": "Trakt API Integration",
        "body": "Interact with Trakt.tv to manage your watchlist, track viewing history, maintain your collection, rate content, and discover new movies and shows."
      },
      {
        "title": "Authentication",
        "body": "Before using this skill, you need to set up Trakt API credentials:\n\nCreate a Trakt application at https://trakt.tv/oauth/applications\nGet your Client ID and Client Secret\nComplete OAuth flow to get an access token\nSet environment variables in ~/.openclaw/openclaw.json:\n\n{\n  \"skills\": {\n    \"entries\": {\n      \"trakt\": {\n        \"enabled\": true,\n        \"env\": {\n          \"TRAKT_CLIENT_ID\": \"your_client_id\",\n          \"TRAKT_CLIENT_SECRET\": \"your_client_secret\",\n          \"TRAKT_ACCESS_TOKEN\": \"your_access_token\",\n          \"TRAKT_REFRESH_TOKEN\": \"your_refresh_token\"\n        }\n      }\n    }\n  }\n}"
      },
      {
        "title": "Watchlist Management",
        "body": "Add to watchlist:\n\ncurl -X POST https://api.trakt.tv/sync/watchlist \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $TRAKT_ACCESS_TOKEN\" \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\" \\\n  -d '{\"movies\":[{\"title\":\"Inception\",\"year\":2010}]}'\n\nGet watchlist:\n\ncurl https://api.trakt.tv/sync/watchlist/movies \\\n  -H \"Authorization: Bearer $TRAKT_ACCESS_TOKEN\" \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\"\n\nRemove from watchlist:\n\ncurl -X POST https://api.trakt.tv/sync/watchlist/remove \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $TRAKT_ACCESS_TOKEN\" \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\" \\\n  -d '{\"movies\":[{\"ids\":{\"trakt\":12601}}]}'"
      },
      {
        "title": "Search",
        "body": "Search movies:\n\ncurl \"https://api.trakt.tv/search/movie?query=inception\" \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\"\n\nSearch shows:\n\ncurl \"https://api.trakt.tv/search/show?query=breaking+bad\" \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\""
      },
      {
        "title": "History",
        "body": "Get watch history:\n\ncurl https://api.trakt.tv/sync/history \\\n  -H \"Authorization: Bearer $TRAKT_ACCESS_TOKEN\" \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\"\n\nAdd to history (mark as watched):\n\ncurl -X POST https://api.trakt.tv/sync/history \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $TRAKT_ACCESS_TOKEN\" \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\" \\\n  -d '{\"movies\":[{\"title\":\"The Matrix\",\"year\":1999,\"watched_at\":\"2024-01-15T20:00:00.000Z\"}]}'"
      },
      {
        "title": "Collection",
        "body": "Get collection:\n\ncurl https://api.trakt.tv/sync/collection/movies \\\n  -H \"Authorization: Bearer $TRAKT_ACCESS_TOKEN\" \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\"\n\nAdd to collection:\n\ncurl -X POST https://api.trakt.tv/sync/collection \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $TRAKT_ACCESS_TOKEN\" \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\" \\\n  -d '{\"movies\":[{\"title\":\"Blade Runner 2049\",\"year\":2017,\"collected_at\":\"2024-01-15T20:00:00.000Z\",\"media_type\":\"bluray\",\"resolution\":\"uhd_4k\"}]}'"
      },
      {
        "title": "Ratings",
        "body": "Get ratings:\n\ncurl https://api.trakt.tv/sync/ratings/movies \\\n  -H \"Authorization: Bearer $TRAKT_ACCESS_TOKEN\" \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\"\n\nAdd rating:\n\ncurl -X POST https://api.trakt.tv/sync/ratings \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $TRAKT_ACCESS_TOKEN\" \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\" \\\n  -d '{\"movies\":[{\"title\":\"The Shawshank Redemption\",\"year\":1994,\"rating\":10}]}'"
      },
      {
        "title": "Discovery",
        "body": "Get recommendations:\n\ncurl https://api.trakt.tv/recommendations/movies?limit=10 \\\n  -H \"Authorization: Bearer $TRAKT_ACCESS_TOKEN\" \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\"\n\nGet trending:\n\ncurl https://api.trakt.tv/movies/trending \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\"\n\nGet popular:\n\ncurl https://api.trakt.tv/movies/popular \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\""
      },
      {
        "title": "Movie Object",
        "body": "{\n  \"title\": \"Inception\",\n  \"year\": 2010,\n  \"ids\": {\n    \"trakt\": 16662,\n    \"slug\": \"inception-2010\",\n    \"imdb\": \"tt1375666\",\n    \"tmdb\": 27205\n  }\n}"
      },
      {
        "title": "Show Object",
        "body": "{\n  \"title\": \"Breaking Bad\",\n  \"year\": 2008,\n  \"ids\": {\n    \"trakt\": 1,\n    \"slug\": \"breaking-bad\",\n    \"tvdb\": 81189,\n    \"imdb\": \"tt0903747\",\n    \"tmdb\": 1396\n  }\n}"
      },
      {
        "title": "Episode Object",
        "body": "{\n  \"season\": 1,\n  \"number\": 1,\n  \"title\": \"Pilot\",\n  \"ids\": {\n    \"trakt\": 73482,\n    \"tvdb\": 349232,\n    \"imdb\": \"tt0959621\",\n    \"tmdb\": 62085\n  }\n}"
      },
      {
        "title": "Usage Instructions",
        "body": "When the user asks to interact with Trakt:\n\nAlways use curl with proper headers including the access token\n\n\nRequired headers for all requests:\n\ntrakt-api-version: 2\ntrakt-api-key: $TRAKT_CLIENT_ID\nAuthorization: Bearer $TRAKT_ACCESS_TOKEN (for authenticated endpoints)\nContent-Type: application/json (for POST/PUT/DELETE)\n\n\n\nIdentify the item using title and year, or IDs if available\n\n\nUse appropriate endpoint based on the action:\n\nWatchlist: /sync/watchlist (POST to add, /sync/watchlist/remove to remove)\nHistory: /sync/history (GET for viewing, POST for adding)\nCollection: /sync/collection (GET for viewing, POST for adding)\nRatings: /sync/ratings (GET for viewing, POST for adding)\nSearch: /search/{type}?query={q} (no auth required)\nTrending: /{type}/trending (no auth required)\nPopular: /{type}/popular (no auth required)\nRecommendations: /recommendations/{type} (requires auth)\n\n\n\nHandle responses appropriately:\n\nSuccess: 200/201 status codes\nNot found: 404\nUnauthorized: 401 (token may need refresh)\nRate limited: 429"
      },
      {
        "title": "Rate Limits",
        "body": "Authenticated: 1000 GET requests per 5 minutes, 1 POST/PUT/DELETE per second\nUnauthenticated: 1000 GET requests per 5 minutes"
      },
      {
        "title": "Getting OAuth Token",
        "body": "To get an access token, use this helper script:\n\n#!/bin/bash\n# Save as get_trakt_token.sh\n\nCLIENT_ID=\"your_client_id\"\nCLIENT_SECRET=\"your_client_secret\"\nREDIRECT_URI=\"urn:ietf:wg:oauth:2.0:oob\"\n\necho \"1. Open this URL in your browser:\"\necho \"https://trakt.tv/oauth/authorize?response_type=code&client_id=$CLIENT_ID&redirect_uri=$REDIRECT_URI\"\necho \"\"\necho \"2. Authorize the app and copy the code\"\necho -n \"3. Paste the code here: \"\nread CODE\n\necho \"\"\necho \"Exchanging code for token...\"\n\nRESPONSE=$(curl -s -X POST https://api.trakt.tv/oauth/token \\\n  -H \"Content-Type: application/json\" \\\n  -d \"{\n    \\\"code\\\": \\\"$CODE\\\",\n    \\\"client_id\\\": \\\"$CLIENT_ID\\\",\n    \\\"client_secret\\\": \\\"$CLIENT_SECRET\\\",\n    \\\"redirect_uri\\\": \\\"$REDIRECT_URI\\\",\n    \\\"grant_type\\\": \\\"authorization_code\\\"\n  }\")\n\necho \"\"\necho \"Response:\"\necho \"$RESPONSE\" | jq .\necho \"\"\necho \"Add these to your OpenClaw config:\"\necho \"TRAKT_ACCESS_TOKEN=$(echo $RESPONSE | jq -r .access_token)\"\necho \"TRAKT_REFRESH_TOKEN=$(echo $RESPONSE | jq -r .refresh_token)\"\n\nMake it executable: chmod +x get_trakt_token.sh"
      },
      {
        "title": "Examples",
        "body": "User: \"Add Dune to my Trakt watchlist\"\n\nAssistant: I'll add Dune to your Trakt watchlist.\n\ncurl -X POST https://api.trakt.tv/sync/watchlist \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $TRAKT_ACCESS_TOKEN\" \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\" \\\n  -d '{\"movies\":[{\"title\":\"Dune\",\"year\":2021}]}'\n\nUser: \"What movies are trending on Trakt?\"\n\nAssistant: Let me check the trending movies on Trakt.\n\ncurl \"https://api.trakt.tv/movies/trending?limit=10\" \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\"\n\nUser: \"Rate Breaking Bad 10/10 on Trakt\"\n\nAssistant: I'll rate Breaking Bad 10/10 on Trakt.\n\ncurl -X POST https://api.trakt.tv/sync/ratings \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $TRAKT_ACCESS_TOKEN\" \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\" \\\n  -d '{\"shows\":[{\"title\":\"Breaking Bad\",\"year\":2008,\"rating\":10}]}'"
      },
      {
        "title": "Notes",
        "body": "Items are automatically removed from watchlist when marked as watched\nYou can use IDs instead of title/year for more accuracy\nExtended info can be requested with ?extended=full parameter\nAll dates should be in UTC ISO 8601 format\nThe API supports batch operations - you can add multiple items in one request"
      }
    ],
    "body": "Trakt API Integration\n\nInteract with Trakt.tv to manage your watchlist, track viewing history, maintain your collection, rate content, and discover new movies and shows.\n\nAuthentication\n\nBefore using this skill, you need to set up Trakt API credentials:\n\nCreate a Trakt application at https://trakt.tv/oauth/applications\nGet your Client ID and Client Secret\nComplete OAuth flow to get an access token\nSet environment variables in ~/.openclaw/openclaw.json:\n{\n  \"skills\": {\n    \"entries\": {\n      \"trakt\": {\n        \"enabled\": true,\n        \"env\": {\n          \"TRAKT_CLIENT_ID\": \"your_client_id\",\n          \"TRAKT_CLIENT_SECRET\": \"your_client_secret\",\n          \"TRAKT_ACCESS_TOKEN\": \"your_access_token\",\n          \"TRAKT_REFRESH_TOKEN\": \"your_refresh_token\"\n        }\n      }\n    }\n  }\n}\n\nAvailable Commands\nWatchlist Management\n\nAdd to watchlist:\n\ncurl -X POST https://api.trakt.tv/sync/watchlist \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $TRAKT_ACCESS_TOKEN\" \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\" \\\n  -d '{\"movies\":[{\"title\":\"Inception\",\"year\":2010}]}'\n\n\nGet watchlist:\n\ncurl https://api.trakt.tv/sync/watchlist/movies \\\n  -H \"Authorization: Bearer $TRAKT_ACCESS_TOKEN\" \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\"\n\n\nRemove from watchlist:\n\ncurl -X POST https://api.trakt.tv/sync/watchlist/remove \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $TRAKT_ACCESS_TOKEN\" \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\" \\\n  -d '{\"movies\":[{\"ids\":{\"trakt\":12601}}]}'\n\nSearch\n\nSearch movies:\n\ncurl \"https://api.trakt.tv/search/movie?query=inception\" \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\"\n\n\nSearch shows:\n\ncurl \"https://api.trakt.tv/search/show?query=breaking+bad\" \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\"\n\nHistory\n\nGet watch history:\n\ncurl https://api.trakt.tv/sync/history \\\n  -H \"Authorization: Bearer $TRAKT_ACCESS_TOKEN\" \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\"\n\n\nAdd to history (mark as watched):\n\ncurl -X POST https://api.trakt.tv/sync/history \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $TRAKT_ACCESS_TOKEN\" \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\" \\\n  -d '{\"movies\":[{\"title\":\"The Matrix\",\"year\":1999,\"watched_at\":\"2024-01-15T20:00:00.000Z\"}]}'\n\nCollection\n\nGet collection:\n\ncurl https://api.trakt.tv/sync/collection/movies \\\n  -H \"Authorization: Bearer $TRAKT_ACCESS_TOKEN\" \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\"\n\n\nAdd to collection:\n\ncurl -X POST https://api.trakt.tv/sync/collection \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $TRAKT_ACCESS_TOKEN\" \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\" \\\n  -d '{\"movies\":[{\"title\":\"Blade Runner 2049\",\"year\":2017,\"collected_at\":\"2024-01-15T20:00:00.000Z\",\"media_type\":\"bluray\",\"resolution\":\"uhd_4k\"}]}'\n\nRatings\n\nGet ratings:\n\ncurl https://api.trakt.tv/sync/ratings/movies \\\n  -H \"Authorization: Bearer $TRAKT_ACCESS_TOKEN\" \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\"\n\n\nAdd rating:\n\ncurl -X POST https://api.trakt.tv/sync/ratings \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $TRAKT_ACCESS_TOKEN\" \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\" \\\n  -d '{\"movies\":[{\"title\":\"The Shawshank Redemption\",\"year\":1994,\"rating\":10}]}'\n\nDiscovery\n\nGet recommendations:\n\ncurl https://api.trakt.tv/recommendations/movies?limit=10 \\\n  -H \"Authorization: Bearer $TRAKT_ACCESS_TOKEN\" \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\"\n\n\nGet trending:\n\ncurl https://api.trakt.tv/movies/trending \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\"\n\n\nGet popular:\n\ncurl https://api.trakt.tv/movies/popular \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\"\n\nData Format\nMovie Object\n{\n  \"title\": \"Inception\",\n  \"year\": 2010,\n  \"ids\": {\n    \"trakt\": 16662,\n    \"slug\": \"inception-2010\",\n    \"imdb\": \"tt1375666\",\n    \"tmdb\": 27205\n  }\n}\n\nShow Object\n{\n  \"title\": \"Breaking Bad\",\n  \"year\": 2008,\n  \"ids\": {\n    \"trakt\": 1,\n    \"slug\": \"breaking-bad\",\n    \"tvdb\": 81189,\n    \"imdb\": \"tt0903747\",\n    \"tmdb\": 1396\n  }\n}\n\nEpisode Object\n{\n  \"season\": 1,\n  \"number\": 1,\n  \"title\": \"Pilot\",\n  \"ids\": {\n    \"trakt\": 73482,\n    \"tvdb\": 349232,\n    \"imdb\": \"tt0959621\",\n    \"tmdb\": 62085\n  }\n}\n\nUsage Instructions\n\nWhen the user asks to interact with Trakt:\n\nAlways use curl with proper headers including the access token\n\nRequired headers for all requests:\n\ntrakt-api-version: 2\ntrakt-api-key: $TRAKT_CLIENT_ID\nAuthorization: Bearer $TRAKT_ACCESS_TOKEN (for authenticated endpoints)\nContent-Type: application/json (for POST/PUT/DELETE)\n\nIdentify the item using title and year, or IDs if available\n\nUse appropriate endpoint based on the action:\n\nWatchlist: /sync/watchlist (POST to add, /sync/watchlist/remove to remove)\nHistory: /sync/history (GET for viewing, POST for adding)\nCollection: /sync/collection (GET for viewing, POST for adding)\nRatings: /sync/ratings (GET for viewing, POST for adding)\nSearch: /search/{type}?query={q} (no auth required)\nTrending: /{type}/trending (no auth required)\nPopular: /{type}/popular (no auth required)\nRecommendations: /recommendations/{type} (requires auth)\n\nHandle responses appropriately:\n\nSuccess: 200/201 status codes\nNot found: 404\nUnauthorized: 401 (token may need refresh)\nRate limited: 429\nRate Limits\nAuthenticated: 1000 GET requests per 5 minutes, 1 POST/PUT/DELETE per second\nUnauthenticated: 1000 GET requests per 5 minutes\nGetting OAuth Token\n\nTo get an access token, use this helper script:\n\n#!/bin/bash\n# Save as get_trakt_token.sh\n\nCLIENT_ID=\"your_client_id\"\nCLIENT_SECRET=\"your_client_secret\"\nREDIRECT_URI=\"urn:ietf:wg:oauth:2.0:oob\"\n\necho \"1. Open this URL in your browser:\"\necho \"https://trakt.tv/oauth/authorize?response_type=code&client_id=$CLIENT_ID&redirect_uri=$REDIRECT_URI\"\necho \"\"\necho \"2. Authorize the app and copy the code\"\necho -n \"3. Paste the code here: \"\nread CODE\n\necho \"\"\necho \"Exchanging code for token...\"\n\nRESPONSE=$(curl -s -X POST https://api.trakt.tv/oauth/token \\\n  -H \"Content-Type: application/json\" \\\n  -d \"{\n    \\\"code\\\": \\\"$CODE\\\",\n    \\\"client_id\\\": \\\"$CLIENT_ID\\\",\n    \\\"client_secret\\\": \\\"$CLIENT_SECRET\\\",\n    \\\"redirect_uri\\\": \\\"$REDIRECT_URI\\\",\n    \\\"grant_type\\\": \\\"authorization_code\\\"\n  }\")\n\necho \"\"\necho \"Response:\"\necho \"$RESPONSE\" | jq .\necho \"\"\necho \"Add these to your OpenClaw config:\"\necho \"TRAKT_ACCESS_TOKEN=$(echo $RESPONSE | jq -r .access_token)\"\necho \"TRAKT_REFRESH_TOKEN=$(echo $RESPONSE | jq -r .refresh_token)\"\n\n\nMake it executable: chmod +x get_trakt_token.sh\n\nExamples\n\nUser: \"Add Dune to my Trakt watchlist\"\n\nAssistant: I'll add Dune to your Trakt watchlist.\n\ncurl -X POST https://api.trakt.tv/sync/watchlist \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $TRAKT_ACCESS_TOKEN\" \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\" \\\n  -d '{\"movies\":[{\"title\":\"Dune\",\"year\":2021}]}'\n\n\nUser: \"What movies are trending on Trakt?\"\n\nAssistant: Let me check the trending movies on Trakt.\n\ncurl \"https://api.trakt.tv/movies/trending?limit=10\" \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\"\n\n\nUser: \"Rate Breaking Bad 10/10 on Trakt\"\n\nAssistant: I'll rate Breaking Bad 10/10 on Trakt.\n\ncurl -X POST https://api.trakt.tv/sync/ratings \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $TRAKT_ACCESS_TOKEN\" \\\n  -H \"trakt-api-version: 2\" \\\n  -H \"trakt-api-key: $TRAKT_CLIENT_ID\" \\\n  -d '{\"shows\":[{\"title\":\"Breaking Bad\",\"year\":2008,\"rating\":10}]}'\n\nNotes\nItems are automatically removed from watchlist when marked as watched\nYou can use IDs instead of title/year for more accuracy\nExtended info can be requested with ?extended=full parameter\nAll dates should be in UTC ISO 8601 format\nThe API supports batch operations - you can add multiple items in one request"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/d-meagher/trakt-tv",
    "publisherUrl": "https://clawhub.ai/d-meagher/trakt-tv",
    "owner": "d-meagher",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/trakt-tv",
    "downloadUrl": "https://openagent3.xyz/downloads/trakt-tv",
    "agentUrl": "https://openagent3.xyz/skills/trakt-tv/agent",
    "manifestUrl": "https://openagent3.xyz/skills/trakt-tv/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/trakt-tv/agent.md"
  }
}