Skip to content
Back to Ragfeed

Card snapshot

ragfeed.de · 2026-11-08 14:06:11 UTC · 300f7982ed2283ab169965d001aae1a3ada5e0ebfabfd602c8e1167c78fbc1ac

This is a frozen copy of the agent's agent-card.json as we observed it at the timestamp above. We capture a new snapshot every time the card's content hash changes. Useful for: forensic drift analysis, verifying downstream callers see the right version, reproducing routing decisions made historically.

{
  "name": "Ragfeed",
  "description": "EU-hosted web data agent: fetches, searches, crawls and watches public web pages and returns clean Markdown, LLM-ready Markdown or ready-to-embed chunks. Data is stored in Germany and AI processing stays in the EU. It respects robots.txt and site opt-outs and does not bypass logins, paywalls, CAPTCHAs or bot protection. Every task uses credits from your Ragfeed account.",
  "version": "1.1.0",
  "provider": {
    "organization": "Ragfeed",
    "url": "https://ragfeed.de/en"
  },
  "documentationUrl": "https://ragfeed.de/en/developers",
  "iconUrl": "https://ragfeed.de/static/logo.svg",
  "supportedInterfaces": [
    {
      "url": "https://api.ragfeed.de/a2a/v1",
      "protocolBinding": "JSONRPC",
      "protocolVersion": "1.0"
    }
  ],
  "capabilities": {
    "streaming": true,
    "pushNotifications": true,
    "extendedAgentCard": false,
    "extensions": [
      {
        "uri": "https://ragfeed.de/a2a/extensions/eu-web-data/v1",
        "description": "Where this agent processes data and which site rules it follows. Self-declared, not an audit.",
        "required": false,
        "params": {
          "attestation": "self-declared",
          "asOf": "2026-11-06",
          "storage": {
            "country": "DE"
          },
          "processing": {
            "fetchAndBrowser": "DE",
            "aiFormats": "FR"
          },
          "dataLeavingTheEu": [
            {
              "role": "CDN and attack protection in front of the API",
              "region": "US, data centres worldwide",
              "safeguard": "EU-US Data Privacy Framework",
              "terminatesTls": true,
              "appliesTo": "all requests"
            },
            {
              "role": "public search engines",
              "region": "mostly US",
              "data": "search query only",
              "appliesTo": [
                "search_web"
              ]
            }
          ],
          "siteRules": {
            "robotsTxt": {
              "disallow": "enforced",
              "crawlDelay": "enforced"
            },
            "siteOptOuts": "enforced",
            "archiveCopies": false,
            "bypasses": {
              "logins": false,
              "paywalls": false,
              "captchas": false,
              "botProtection": false
            }
          },
          "retention": {
            "taskResultsHours": 24,
            "serverLogsDays": 7,
            "monitorResultsDaysDefault": 30,
            "monitorResultsDaysMax": 90,
            "zeroDataRetention": [
              "fetch_clean_webdata"
            ]
          },
          "dataProcessingAgreement": {
            "available": "on request",
            "plans": "all"
          },
          "encryptionAtRest": {
            "scope": "webhook and push secrets only"
          },
          "documents": {
            "dataProcessing": "https://ragfeed.de/datenverarbeitung",
            "privacy": "https://ragfeed.de/datenschutz",
            "specification": "https://ragfeed.de/a2a/extensions/eu-web-data/v1"
          },
          "aiProvider": {
            "retainsRequests": false,
            "trainsOnRequests": false,
            "basis": "provider statement"
          }
        }
      }
    ]
  },
  "securitySchemes": {
    "apiKey": {
      "httpAuthSecurityScheme": {
        "scheme": "Bearer",
        "bearerFormat": "Ragfeed API key",
        "description": "Your Ragfeed API key. Create one at https://ragfeed.de/en"
      }
    }
  },
  "securityRequirements": [
    {
      "schemes": {
        "apiKey": {
          "list": []
        }
      }
    }
  ],
  "defaultInputModes": [
    "application/json",
    "text/plain"
  ],
  "defaultOutputModes": [
    "text/markdown",
    "application/json"
  ],
  "skills": [
    {
      "id": "fetch_clean_webdata",
      "name": "Fetch clean web data",
      "description": "Fetches one public URL. Send a text part with the URL, or a data part with url and optional formats (markdown, llmMarkdown (default), chunks, links; on paid plans summary, question with a question field, json with a schema field), onlyMainContent, maxAge, waitFor, mobile, zeroDataRetention. 1 credit per page, from 5 more for each AI format. A site's robots.txt can refuse the task; refused and failed tasks cost nothing.",
      "tags": [
        "web",
        "scraping",
        "markdown",
        "rag",
        "chunks",
        "eu",
        "gdpr"
      ],
      "examples": [
        "https://example.com/pricing",
        "{\"url\": \"https://example.com/docs\", \"formats\": [\"chunks\"]}"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "text/markdown",
        "text/plain",
        "application/json"
      ]
    },
    {
      "id": "search_web",
      "name": "Search the web",
      "description": "Finds pages for a query and returns title, URL and description, no page content: fetch what you need with fetch_clean_webdata. Data part with skill: search_web, query, and optional limit (1-20, default 5), source (web, news), country, includeDomains, excludeDomains. 2 credits per 10 results. Your query is passed to public search engines, which may be outside the EU.",
      "tags": [
        "web",
        "search",
        "news"
      ],
      "examples": [
        "{\"skill\": \"search_web\", \"query\": \"EU AI Act Leitlinien\", \"limit\": 5}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "crawl_site",
      "name": "Crawl a website",
      "description": "Fetches several pages of one site, following robots.txt. Data part with skill: crawl_site, url, and optional limit (1-100, default 10), maxDepth, includePaths, excludePaths, onlyMainContent, formats (markdown, llmMarkdown (default), chunks, links). Long-running: stream it for each page as it arrives, or poll GetTask; a blocking request returns the running task after about 85 seconds. 1 credit per page delivered; pages already delivered stay charged when you cancel.",
      "tags": [
        "web",
        "crawl",
        "rag",
        "chunks"
      ],
      "examples": [
        "{\"skill\": \"crawl_site\", \"url\": \"https://example.com/docs\", \"limit\": 20, \"formats\": [\"chunks\"]}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "monitor_page",
      "name": "Watch pages for changes (Beta)",
      "description": "Beta. Checks public pages on a schedule and reports what changed, as live pages only, following robots.txt. Paid plans from Fluss; the account must have accepted the monitoring terms in the dashboard. Data part with skill: monitor_page, url or urls, schedule (cron or a phrase such as 'every day at 8am'), and optional timezone, name, goal (an AI judgment of each change), judgeEnabled. The task first answers TASK_STATE_INPUT_REQUIRED with the costs; send a message with this taskId and a data part {\"confirm\": true} to start, because a monitor keeps using credits. The task then stays TASK_STATE_WORKING and reports every check by stream or push notification. CancelTask pauses the monitor.",
      "tags": [
        "web",
        "monitoring",
        "compliance",
        "changes"
      ],
      "examples": [
        "{\"skill\": \"monitor_page\", \"url\": \"https://example.com/terms\", \"schedule\": \"every day at 8am\"}"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    }
  ]
}