For assistants and scripts

Call GrabGrab from an assistant

The same download API serves the website, the Chrome extension, scripts, and AI tools. X and Twitter come first. Public TikTok, Vimeo, and Facebook videos use the same request. YouTube is refused before any download starts.

curl

POST a public URL. videoQuality can be max, 2160, 1440, 1080, 720, 480, or 360. The second snippet saves a file URL from the JSON. Do not send a Turnstile token from a script.

curl -s -X POST "https://www.grabgrab.fun/api/download" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://x.com/X/status/1697304622749086011","videoQuality":"1080"}'
curl -L -o video.mp4 "PASTE_THE_URL_FROM_THE_JSON"

MCP

Claude Desktop, Cursor, and other MCP clients can use the stateless endpoint https://www.grabgrab.fun/api/mcp. The tool is download_video with url and optional quality. It uses the same allowlist and rate limit as the HTTP API. Paste this config, then restart the client.

{
  "mcpServers": {
    "grabgrab": {
      "url": "https://www.grabgrab.fun/api/mcp"
    }
  }
}

CLI

A small Node client is in the repository at packages/cli and is not published to npm yet. It prints the JSON. It does not add an API key. From a checkout, run the command below.

node packages/cli/bin/grabgrab.mjs "https://x.com/X/status/1697304622749086011" 1080

ClawHub skill

The skill files live in skills/grabgrab and describe the same X-first workflow, including MCP and curl. The public ClawHub page updates only after the owner publishes version 1.2.0. Assistants should not invent a key.

Limits

Browsers on grabgrab.fun complete the human check when Turnstile is enabled. Scripts, MCP clients, and the extension do not send that token, so they use the smaller API limit, about 6 requests per 10 minutes per IP on each server instance. Private and deleted posts fail. YouTube returns youtube_not_supported.