{
  "name": "Beintalk news for AI agents",
  "description": "Reverse CAPTCHA subscription: solve a schema question and a small proof-of-work inside the time window, then poll the JSON Feed.",
  "version": 1,
  "proves": "an automated agent that can reason and run code (not a cryptographic AI identity)",
  "docs": "https://beintalk.com/llms.txt",
  "referenceClient": "https://beintalk.com/ai-subscribe-demo.mjs",
  "endpoints": {
    "challenge": {
      "method": "GET",
      "url": "https://beintalk.com/api/ai/challenge",
      "returns": {
        "id": "string, ch_ + 24 hex",
        "expiresAt": "ISO 8601, about 20 s after issue",
        "schema": "DBML text, 8-12 tables; refs inline [ref: > t.id], 'Ref: a.x > b.id' or 'Ref: b.id < a.x'; // lines are comments",
        "question": "natural language; answer is a JSON array of table names sorted ascending",
        "answerFormat": "JSON array of strings",
        "pow": { "algo": "sha256", "prefix": "string", "difficulty": "integer: required leading zero hex chars of sha256(prefix + nonce)" }
      },
      "rateLimit": "30 per minute per IP"
    },
    "subscribe": {
      "method": "POST",
      "url": "https://beintalk.com/api/ai/subscribe",
      "contentType": "application/json",
      "maxBodyBytes": 8192,
      "body": {
        "challengeId": "string, required",
        "answer": "array of strings, required",
        "nonce": "string, 1-64 chars [A-Za-z0-9_-], required",
        "agent": {
          "name": "string 1-80, required",
          "model": "string 1-80, optional",
          "operator": "string 1-120, required: the org or person responsible for the agent",
          "contact": "required: email address or https:// URL",
          "purpose": "string up to 500, optional"
        },
        "topics": ["schemas", "contracts", "flows", "impact", "decisions", "ai", "security", "company"]
      },
      "returns": { "subscriptionId": "string", "manageToken": "string, shown once; only its hash is stored" },
      "errors": {
        "400": "invalid_input (see details)",
        "410": "challenge_expired or challenge_used_or_unknown: fetch a new challenge",
        "422": "wrong_answer or bad_proof_of_work (the challenge is used up either way)",
        "429": "rate_limited"
      },
      "singleUse": true,
      "rateLimit": "10 per minute per IP"
    },
    "view": {
      "method": "GET",
      "url": "https://beintalk.com/api/ai/subscriptions/{subscriptionId}",
      "auth": "Authorization: Bearer <manageToken> (or X-Manage-Token header)"
    },
    "erase": {
      "method": "DELETE",
      "url": "https://beintalk.com/api/ai/subscriptions/{subscriptionId}",
      "auth": "Authorization: Bearer <manageToken> (or X-Manage-Token header)",
      "returns": "204, the subscription and its data are deleted"
    }
  },
  "delivery": {
    "feed": "https://beintalk.com/feed.json",
    "format": "https://jsonfeed.org/version/1.1",
    "filter": "?topics=schemas,ai",
    "poll": "at most once per hour",
    "webhooks": "coming later; no outbound calls are made to URLs you submit"
  },
  "privacy": "https://beintalk.com/privacy"
}
