Skip to content
Back to Ragfeed

Card snapshot

api.ragfeed.de · 2026-11-07 20:12:19 UTC · 60df9ed0f73a7c88aeae36a99569ecc9f6543bb8dd0881f15f76577edd5ff45d

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",
  "url": "https://api.ragfeed.de/a2a/v1",
  "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",
  "documentationUrl": "https://ragfeed.de/en/developers",
  "iconUrl": "https://ragfeed.de/static/logo.svg",
  "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"
      ]
    }
  ],
  "capabilities": {
    "streaming": true,
    "pushNotifications": true,
    "stateTransitionHistory": false,
    "extensions": [
      {
        "uri": "https://ragfeed.de/a2a/extensions/eu-web-data/v1",
        "params": {
          "asOf": "2026-11-06",
          "storage": {
            "country": "DE"
          },
          "documents": {
            "privacy": "https://ragfeed.de/datenschutz",
            "specification": "https://ragfeed.de/a2a/extensions/eu-web-data/v1",
            "dataProcessing": "https://ragfeed.de/datenverarbeitung"
          },
          "retention": {
            "serverLogsDays": 7,
            "taskResultsHours": 24,
            "zeroDataRetention": [
              "fetch_clean_webdata"
            ],
            "monitorResultsDaysMax": 90,
            "monitorResultsDaysDefault": 30
          },
          "siteRules": {
            "bypasses": {
              "logins": false,
              "captchas": false,
              "paywalls": false,
              "botProtection": false
            },
            "robotsTxt": {
              "disallow": "enforced",
              "crawlDelay": "enforced"
            },
            "siteOptOuts": "enforced",
            "archiveCopies": false
          },
          "aiProvider": {
            "basis": "provider statement",
            "retainsRequests": false,
            "trainsOnRequests": false
          },
          "processing": {
            "aiFormats": "FR",
            "fetchAndBrowser": "DE"
          },
          "attestation": "self-declared",
          "dataLeavingTheEu": [
            {
              "role": "CDN and attack protection in front of the API",
              "region": "US, data centres worldwide",
              "appliesTo": "all requests",
              "safeguard": "EU-US Data Privacy Framework",
              "terminatesTls": true
            },
            {
              "data": "search query only",
              "role": "public search engines",
              "region": "mostly US",
              "appliesTo": [
                "search_web"
              ]
            }
          ],
          "encryptionAtRest": {
            "scope": "webhook and push secrets only"
          },
          "dataProcessingAgreement": {
            "plans": "all",
            "available": "on request"
          }
        },
        "required": false,
        "description": "Where this agent processes data and which site rules it follows. Self-declared, not an audit."
      }
    ]
  },
  "protocolVersion": "1.0",
  "provider": {
    "organization": "Ragfeed",
    "url": "https://ragfeed.de/en"
  }
}