{
  "schema_version": "1.0",
  "name": "rtwoai",
  "description": "Professional community platform for AI practitioners in Colorado. Provides curated AI content, events, learning tools, and a personal AI agent that learns from browsing behavior.",
  "url": "https://rtwo.ai",
  "api": {
    "base_url": "https://api.rtwo.ai/v1",
    "documentation_url": "https://rtwo.ai/developer",
    "llms_txt_url": "https://rtwo.ai/llms.txt"
  },
  "authentication": {
    "type": "bearer",
    "header": "Authorization",
    "scheme": "Bearer <Clerk session token>",
    "third_party_access": "unavailable",
    "summary": "Read-only endpoints are open. Endpoints scoped to a person need a Clerk session token issued to a signed-in rtwoai account, and there is no API key a third-party agent can request today, so those endpoints are not usable by an external agent.",
    "public_endpoints": [
      "GET /v1/topics",
      "GET /v1/events",
      "GET /v1/offerings",
      "GET /v1/activities/feed"
    ],
    "account_scoped_endpoints": [
      "GET /v1/feed",
      "/v1/my-agent/*"
    ],
    "non_production_headers": {
      "names": ["X-Tenant-ID", "X-Identity-ID"],
      "description": "Accepted in local development only. Ignored in production, where the request returns 401."
    },
    "documentation_url": "https://rtwo.ai/developer"
  },
  "capabilities": [
    {
      "name": "signal_ingestion",
      "description": "Send browsing signals for content classification and curation",
      "endpoint": "POST /v1/my-agent/signals",
      "rate_limit": "50 per batch, 200 per day per member, 120 requests an hour per member, refused requests included"
    },
    {
      "name": "signal_query",
      "description": "List and filter browsing signals by classification and domain",
      "endpoint": "GET /v1/my-agent/signals"
    },
    {
      "name": "url_dedup",
      "description": "Batch check if URLs have been shared as articles on the platform",
      "endpoint": "POST /v1/my-agent/url-status",
      "rate_limit": "50 URLs per batch, 1200 requests an hour per member, refused requests included"
    },
    {
      "name": "agent_config",
      "description": "Get domain classification lists, block rules, and user exclusions",
      "endpoint": "GET /v1/my-agent/config"
    },
    {
      "name": "exclusion_management",
      "description": "Manage the member's own excluded domains (add, remove; a domain matches that exact host, with or without www.) and URLs (addUrls, removeUrls; the fragment, userinfo and trailing dots are ignored). An admin's exclusion also removes matching content from the shared content pool, unless an admin has rejected it, it's being promoted, or it has already been promoted to an article",
      "endpoints": [
        "GET /v1/my-agent/exclusions",
        "PATCH /v1/my-agent/exclusions"
      ],
      "rate_limit": "120 requests an hour per member, refused ones included"
    },
    {
      "name": "user_context",
      "description": "Save and retrieve user context directives (interests, focus areas, ignore list)",
      "endpoints": [
        "POST /v1/my-agent/context",
        "GET /v1/my-agent/context"
      ]
    },
    {
      "name": "feedback",
      "description": "Record micro-feedback on agent features (idempotent per feature per day)",
      "endpoint": "GET /v1/my-agent/feedback"
    },
    {
      "name": "content_feed",
      "description": "Access curated article feed with personalization",
      "endpoint": "GET /v1/feed"
    },
    {
      "name": "topics",
      "description": "List discussion topics with follow counts and activity",
      "endpoint": "GET /v1/topics"
    },
    {
      "name": "events",
      "description": "Unified event listing filterable by state, county, and date",
      "endpoint": "GET /v1/events"
    }
  ],
  "content_pipeline": {
    "description": "Signals flow through: ingestion -> classification (domain heuristics + LLM batch) -> content pool (dedup) -> an admin approves or rejects each page -> article publishing, for what's approved -> personalized briefings",
    "classifications": ["ai", "personal", "blocked", "unclassified"],
    "output_formats": ["json"]
  },
  "rate_limits": {
    "signals": "50 per batch, 200 per day per member, 120 requests an hour per member, refused requests included",
    "url_status": "50 URLs per batch, 1200 requests an hour per member, refused requests included",
    "exclusions": "120 requests an hour per member, refused ones included",
    "agent_settings": "120 requests an hour per member, refused ones included"
  },
  "contact": {
    "developer_portal": "https://rtwo.ai/developer"
  }
}
