{
 "slug": "typefully",
 "name": "Typefully",
 "url": "https://typefully.com",
 "domain": "typefully.com",
 "category": "social-media-scheduling",
 "category_name": "Social media scheduling",
 "tested_at": "2026-10-06",
 "run": "20261006T095637Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261002T082306Z",
   "date": "2026-10-02",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   }
  },
  {
   "run": "20261006T095637Z",
   "date": "2026-10-06",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   }
  }
 ],
 "level": 1,
 "level_name": "Needs a person",
 "level_selfhost": null,
 "entry": "closed",
 "door": {
  "passed": 0,
  "tries": 2,
  "self_start": false
 },
 "badges": [],
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account"
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Find",
   "state": "yes",
   "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
   "have": [
    "llms_txt",
    "openapi",
    "mcp"
   ]
  },
  {
   "key": "access",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "person",
   "label": "A person sets it up",
   "routes": [],
   "minutes": null,
   "core": null
  }
 ],
 "minutes": null,
 "next": {
  "to": 2,
  "text": "Next: let an agent sign up on its own"
 },
 "stop": "signup",
 "core": "0/8",
 "scores": {
  "coverage": null,
  "reliability": null,
  "resilience": null,
  "setup": 90,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": null,
  "docs_match": null,
  "setup": 90,
  "security": null,
  "standards": [
   {
    "standard": "MCP client registration",
    "state": "current",
    "behind": null,
    "value": "cimd"
   },
   {
    "standard": "OpenAPI",
    "state": "behind",
    "behind": 1,
    "value": "3.1.0"
   }
  ]
 },
 "reliability_method": null,
 "resilience": null,
 "stress": [],
 "surface_audit": null,
 "coverage_core": null,
 "after_wall": null,
 "coverage_source": "computed",
 "driver": {
  "version": 2,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": null,
  "prompt_sha": "f3d0adeeb256",
  "kb_version": "2+overlay-9e43028a2c",
  "identity": null
 },
 "methodology": 15,
 "rules_date": "2026-10-15",
 "engine": {
  "runner": "omp",
  "model": "claude-opus-5-5",
  "driver": 2,
  "signed": true,
  "inbox": [
   "agentdrives.com"
  ],
  "robots": "start"
 },
 "same_level_drives": 2,
 "drives": 2,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": {
  "rung": "signup",
  "vendor": "Cloudflare Turnstile",
  "visible": true,
  "type": "network",
  "human": null,
  "how": "Let verified bots and signed agents past the check on sign-up: in Cloudflare, add a WAF custom rule that skips the bot challenge on your sign-up paths for verified bots and for signed agents (rule field cf.bot_management.signed_agent; since 1 July 2026 signed agents count as verified bots), and render Turnstile only when the request is not from a verified agent.",
  "signed": true
 },
 "agent_pass": null,
 "who_gets_in": {
  "server": {
   "state": "form"
  },
  "signed": {
   "state": "page",
   "kind": "home",
   "at": "2026-10-13"
  },
  "browser": {
   "state": "through",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "llms.txt, /docs/api.md (Markdown, also via Accept: text/markdown with Vary: Accept), OpenAPI 3.1.0 at api.typefully.com/v2/openapi.json, ai-agents.md, RFC 9727 api-catalog"
  },
  "signup": {
   "status": "human",
   "note": "Email sign-up shows an interactive Cloudflare Turnstile ('Verify you are human'); submit never resolved and no request reached Typefully. Other options are Google/X/LinkedIn OAuth."
  },
  "verify": {
   "status": "",
   "note": "No sign-up went through, so no verification code mail.",
   "reached": false
  },
  "credentials": {
   "status": "",
   "note": "API keys are made in web Settings; OAuth AS offers only authorization_code (browser consent) with CIMD, no device flow, no agent registration. No account to get them from.",
   "reached": false
  },
  "first_call": {
   "status": "",
   "note": "GET /v2/me -> 401 UNAUTHORIZED; MCP -> 401 with resource_metadata. No credentials.",
   "reached": false
  },
  "first_action": {
   "status": "",
   "note": "No credentials.",
   "reached": false
  },
  "pay": {
   "status": "",
   "grade": "P2",
   "rails": [
    "Stripe Checkout (in the logged-in web app; seen in app JS, not reached)"
   ],
   "rail_ids": [
    "stripe-checkout"
   ],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "free tier",
   "note": "No 402, x402, MPP, UCP or other agent rail; x402./mpp./agents. subdomains fail TLS. Free plan exists (10 posts/month, API and MCP). Upgrade is Stripe Checkout behind login; not reached because sign-up was blocked, so is unconfirmed.",
   "reached": false
  },
  "cancel": {
   "status": "",
   "grade": "n/a",
   "note": "No plan started. The API has no billing operations.",
   "reached": false
  },
  "delete": {
   "status": "",
   "note": "No account was created. The OpenAPI has no account-delete operation; the account-deletion route is unknown.",
   "account": false,
   "reached": false
  }
 },
 "routes": [],
 "checkout": null,
 "docs": null,
 "claims": null,
 "pay_options": {
  "checked": "2026-10-06",
  "source": "drive",
  "options": [
   {
    "id": "stripe-checkout",
    "name": "Stripe Checkout",
    "kind": "checkout",
    "first_party": false,
    "lead": false,
    "networks": [],
    "testnet": false
   }
  ],
  "agentic": [],
  "paid": null,
  "exercised": null,
  "detected_grade": null,
  "trial": {
   "no_card": null,
   "card_required": null,
   "free_plan": true
  },
  "owner_fixes": [
   {
    "title": "Accept x402 or MPP on your API",
    "how": "Answer an unpaid call with 402 and a payment challenge, so an agent pays per call or buys credits without an account or a card."
   },
   {
    "title": "List your plans on Stripe Projects",
    "how": "Agents buy a plan with `stripe projects add`, paid with a token under a spend cap the owner sets (projects.dev)."
   }
  ]
 },
 "surfaces": {
  "api": true,
  "openapi": true,
  "cli": false,
  "sdk": false,
  "mcp": "official",
  "llms_txt": true,
  "webhooks": false,
  "sandbox": false
 },
 "surface_notes": {
  "api": "REST v2, 24 operations (drafts, media, tags, queue, comments, social sets)",
  "openapi": "3.1.0, info.version 2.0.0",
  "mcp": "official, streamable HTTP, OAuth or API key; tools not listed (no credentials)",
  "llms_txt": "/llms.txt links API md, OpenAPI, agent skills, MCP card"
 },
 "can_do": [
  "Read the full API reference as Markdown and the OpenAPI 3.1.0 spec without an account",
  "Discover the MCP server, its protected-resource metadata and the OAuth server metadata headless"
 ],
 "cannot_do": [
  {
   "what": "Sign up",
   "why": "Interactive Cloudflare Turnstile on the email sign-up form"
  },
  {
   "what": "Get an API key or OAuth token",
   "why": "Keys are created in web settings and OAuth needs browser consent; no account"
  },
  {
   "what": "Draft, schedule, queue or publish posts",
   "why": "No credentials"
  },
  {
   "what": "Delete the account through a documented route",
   "why": "No account-delete operation in the API docs"
  }
 ],
 "blockers": [
  "Cloudflare Turnstile ('Verify you are human') on email sign-up"
 ],
 "tips_for_owner": [
  "Let signed agents through the sign-up check",
  "Add a headless credential path",
  "Document account deletion and add an API route",
  "Publish the MCP card at the draft location"
 ],
 "tips_for_agents": [
  "Have a human create the account and an API key; then use MCP https://mcp.typefully.com/mcp with Authorization: Bearer <key>.",
  "Read https://typefully.com/docs/api.md for the full reference in Markdown.",
  "publish_at 'now' is asynchronous: poll GET draft until publish_state is 'finished'; plan_at makes a dated draft that never auto-publishes.",
  "Media upload: PUT raw bytes to the presigned URL with no extra headers, or you get 403 SignatureDoesNotMatch."
 ],
 "selfhost": null,
 "summary": "Typefully has an agent-ready surface: an OpenAPI 3.1.0 REST API, an official MCP server with OAuth (CIMD) or API-key auth, llms.txt and Markdown docs, and API and MCP on the free plan. An agent cannot get in on its own: email sign-up shows an interactive Cloudflare Turnstile, and keys and tokens need the web settings or a browser consent page. So nothing was driven.",
 "wall": "Cloudflare Turnstile on email sign-up",
 "plan_scope": "",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "Typefully is a tool for drafting, scheduling and publishing social media posts, with a real API and an official MCP server for AI agents. An agent on its own could only read the public docs and discover the API/MCP setup; it could not create an account because the sign-up form shows an interactive human-verification check that never let it through. nothing past that point was tried.",
  "can_do": [
   "Read the full API documentation and technical specs without needing an account",
   "Find and inspect the AI-agent connection points (the MCP server and its login settings) without an account"
  ],
  "cannot_do": [
   {
    "what": "Create an account",
    "why": "A 'Verify you are human' check blocks the sign-up form to pass it"
   },
   {
    "what": "Get an API key or login token",
    "why": "Keys are only issued inside the website after logging in, which needs the blocked sign-up step"
   },
   {
    "what": "Draft, schedule, queue, or publish any post",
    "why": "None of this works without a logged-in account"
   },
   {
    "what": "Delete the account",
    "why": "No account was ever created, and the documentation has no delete feature listed"
   }
  ]
 },
 "plan_gated": [
  {
   "capability": "AI writing suggestions",
   "plan": "Creator",
   "evidence": "typefully.com/pricing: 'AI writing features' under Creator"
  },
  {
   "capability": "Engagement analytics",
   "plan": "Creator",
   "evidence": "typefully.com/pricing: 'X analytics' under Creator"
  },
  {
   "capability": "Comments",
   "plan": "Business",
   "evidence": "typefully.com/pricing: 'Comments & Slack notifications' under Business"
  },
  {
   "capability": "Team workspace",
   "plan": "Business",
   "evidence": "typefully.com/pricing: 'Teams, roles, permissions' under Business"
  }
 ],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Drafting",
   "capability": "Compose a draft post or thread",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v2/social-sets/{social_set_id}/drafts",
    "mcp": "create draft (per ai-agents.md: 'Draft posts and threads in your voice')",
    "cli": null,
    "ui": "Compose editor"
   },
   "check": "GET /v2/social-sets/{id}/drafts/{draft_id} returns the submitted text in platforms/posts",
   "source": "https://typefully.com/docs/api.md; https://typefully.com/ai-agents.md"
  },
  {
   "id": "cap-02",
   "group": "AI Writing",
   "capability": "Get AI writing suggestions, ideas, and rewrites",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Compose editor AI toolbar"
   },
   "check": "Editor returns a rewritten/suggested variant of the selected text for the user to accept",
   "source": "https://support.typefully.com/en/articles/8717738-typefully-ai-rewrites-ideas; https://typefully.com/social-media-scheduling"
  },
  {
   "id": "cap-03",
   "group": "Scheduling",
   "capability": "Schedule a post for a specific date/time (incl. natural language)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "PATCH /v2/social-sets/{id}/drafts/{draft_id} (publish_at=<datetime>)",
    "mcp": "schedule post",
    "cli": null,
    "ui": "Compose editor schedule picker ('wednesday at 2pm')"
   },
   "check": "GET draft shows status=scheduled and scheduled_date set",
   "source": "https://typefully.com/social-media-scheduling; https://typefully.com/docs/api.md"
  },
  {
   "id": "cap-04",
   "group": "Scheduling",
   "capability": "Queue posts into predefined recurring time slots",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET/PUT /v2/social-sets/{id}/queue/schedule, GET /v2/social-sets/{id}/queue",
    "mcp": "manage your queue",
    "cli": null,
    "ui": "Queue view"
   },
   "check": "GET /queue/schedule returns the configured slot times; GET /queue lists drafts placed in those slots",
   "source": "https://support.typefully.com/en/articles/9210135-scheduling-queue-and-calendar; https://typefully.com/docs/api.md"
  },
  {
   "id": "cap-05",
   "group": "Publishing",
   "capability": "Publish a post immediately",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "PATCH /v2/social-sets/{id}/drafts/{draft_id} (publish_at=\"now\")",
    "mcp": "publish post",
    "cli": null,
    "ui": "Compose editor 'Publish now' button"
   },
   "check": "GET draft shows publish_state=finished and a populated {platform}_published_url",
   "source": "https://typefully.com/docs/api.md"
  },
  {
   "id": "cap-06",
   "group": "Publishing",
   "capability": "Cross-post one draft to multiple platforms (X, LinkedIn, Threads, Bluesky, Mastodon, Substack)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "platforms object on draft create/update",
    "mcp": "schedule/publish across X, LinkedIn, Threads, Bluesky, Mastodon",
    "cli": null,
    "ui": "Compose editor platform toggles"
   },
   "check": "GET draft shows multiple {platform}_post_enabled=true and matching {platform}_published_url after publish",
   "source": "https://typefully.com/social-media-scheduling; https://typefully.com/docs/api.md"
  },
  {
   "id": "cap-07",
   "group": "Analytics",
   "capability": "View engagement analytics on published post performance",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Analytics page"
   },
   "check": "Analytics page displays per-post engagement metrics (likes, replies, impressions) for a published draft",
   "source": "https://typefully.com/social-media-scheduling"
  },
  {
   "id": "cap-08",
   "group": "Planning",
   "capability": "Plan content on a visual calendar with drag-and-drop rescheduling",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Calendar view"
   },
   "check": "Calendar view shows drafts positioned on their scheduled_date; dragging a draft to a new day changes its scheduled_date",
   "source": "https://support.typefully.com/en/articles/9155185-calendar; https://typefully.com/social-media-scheduling"
  },
  {
   "id": "cap-09",
   "group": "Drafting",
   "capability": "Edit an existing draft's content, title, or platform config",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "PATCH /v2/social-sets/{id}/drafts/{draft_id}",
    "mcp": "edit drafts",
    "cli": null,
    "ui": "Compose editor"
   },
   "check": "GET draft reflects the updated text/title after PATCH",
   "source": "https://typefully.com/docs/api.md"
  },
  {
   "id": "cap-10",
   "group": "Drafting",
   "capability": "Delete a draft",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "DELETE /v2/social-sets/{id}/drafts/{draft_id}",
    "mcp": null,
    "ui": "Drafts list delete action"
   },
   "check": "Subsequent GET /drafts/{draft_id} returns 404",
   "source": "https://typefully.com/docs/api.md"
  },
  {
   "id": "cap-11",
   "group": "Media",
   "capability": "Upload and attach media (image/video/gif) to a draft",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v2/social-sets/{id}/media/upload, GET/PATCH /v2/social-sets/{id}/media/{media_id}",
    "mcp": "upload media",
    "cli": null,
    "ui": "Compose editor media attach"
   },
   "check": "GET media/{media_id} shows status ready, and it appears attached in the draft's platform content",
   "source": "https://typefully.com/docs/api.md; https://typefully.com/ai-agents.md"
  },
  {
   "id": "cap-12",
   "group": "Organization",
   "capability": "Organize drafts with tags",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET/POST /v2/social-sets/{id}/tags, tags field on draft PATCH",
    "mcp": "organize posts with tags",
    "cli": null,
    "ui": "Compose editor tag picker"
   },
   "check": "GET draft shows the assigned tag slug in its tags array",
   "source": "https://typefully.com/docs/api.md; https://typefully.com/ai-agents.md"
  },
  {
   "id": "cap-13",
   "group": "Collaboration",
   "capability": "Comment on drafts and resolve feedback threads",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "GET/POST /v2/social-sets/{id}/drafts/{draft_id}/comment-threads, .../comments, .../resolve",
    "mcp": "read, reply to, and resolve comments on drafts",
    "cli": null,
    "ui": "Compose editor comment sidebar"
   },
   "check": "GET comment-threads shows resolved=true after calling the resolve endpoint",
   "source": "https://typefully.com/docs/api.md; https://typefully.com/ai-agents.md"
  },
  {
   "id": "cap-14",
   "group": "Sharing",
   "capability": "Generate a public share link for a draft",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "PATCH draft (share:true)",
    "mcp": null,
    "ui": "Compose editor Share button"
   },
   "check": "GET draft returns a share_url, and https://typefully.com/t/{share_id}.md renders the content publicly",
   "source": "https://typefully.com/docs/api.md; https://typefully.com/index.md"
  },
  {
   "id": "cap-15",
   "group": "Drafting",
   "capability": "Keep private scratchpad notes attached to a draft",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "scratchpad_text field on draft PATCH/GET",
    "mcp": null,
    "ui": "Compose editor notes panel"
   },
   "check": "GET draft returns the same scratchpad_text that was submitted",
   "source": "https://typefully.com/docs/api.md"
  },
  {
   "id": "cap-16",
   "group": "Accounts",
   "capability": "Connect and manage multiple social accounts (social sets)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /v2/social-sets, GET /v2/social-sets/{id}/",
    "mcp": "checking connected social accounts",
    "cli": null,
    "ui": "Account switcher / settings"
   },
   "check": "GET /social-sets lists each connected account with its username and platforms",
   "source": "https://typefully.com/docs/api.md; https://typefully.com/ai-agents.md"
  },
  {
   "id": "cap-17",
   "group": "Accounts",
   "capability": "Resolve a LinkedIn company page to post as an organization",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "GET /v2/social-sets/{id}/linkedin/organizations/resolve",
    "mcp": null,
    "ui": "LinkedIn platform settings"
   },
   "check": "Endpoint returns the organization id/name matching the submitted LinkedIn URL",
   "source": "https://typefully.com/docs/api.md"
  },
  {
   "id": "cap-18",
   "group": "Publishing",
   "capability": "Publish long-form X Articles",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "platforms.x_article on draft",
    "mcp": null,
    "ui": "Compose editor X Article mode"
   },
   "check": "GET draft shows x_article_published_url populated after publish",
   "source": "https://typefully.com/docs/api.md"
  },
  {
   "id": "cap-19",
   "group": "Publishing",
   "capability": "Publish Substack Notes",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "platforms.substack on draft",
    "mcp": null,
    "ui": "Compose editor Substack toggle"
   },
   "check": "GET draft shows substack_published_url populated after publish",
   "source": "https://typefully.com/docs/api.md"
  },
  {
   "id": "cap-20",
   "group": "Growth",
   "capability": "Publish a public profile page ('social blog') aggregating your posts",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "typefully.com/profile"
   },
   "check": "Visiting the generated profile URL shows a public page listing the user's posts",
   "source": "https://typefully.com/ (footer link 'Get a social blog' -> /profile)"
  },
  {
   "id": "cap-21",
   "group": "Collaboration",
   "capability": "Share a social set with teammates under a team workspace",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "team field on GET /v2/social-sets/{id}/",
    "mcp": null,
    "ui": "Team settings"
   },
   "check": "GET /social-sets/{id}/ returns a non-null team object naming the shared workspace",
   "source": "https://typefully.com/docs/api.md"
  },
  {
   "id": "cap-22",
   "group": "Accounts",
   "capability": "Track remaining publishing quota for a social set",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "publishing_quota field on GET /v2/social-sets/{id}/",
    "mcp": null,
    "ui": "Account settings / usage indicator"
   },
   "check": "GET /social-sets/{id}/ returns publishing_quota.used and .remaining counts",
   "source": "https://typefully.com/docs/api.md"
  },
  {
   "id": "cap-23",
   "group": "Admin",
   "capability": "Generate and label API keys for integrations",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > API"
   },
   "check": "GET /v2/me returns api_key_label matching the label set in settings for the key used",
   "source": "https://typefully.com/docs/api.md"
  },
  {
   "id": "cap-24",
   "group": "Admin",
   "capability": "Install the minimal browser theme/extension for X",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "typefully.com/minimal-twitter"
   },
   "check": "Installing the extension changes the visual theme of x.com in the browser",
   "source": "https://typefully.com/minimal-twitter"
  },
  {
   "id": "cap-25",
   "group": "Admin",
   "capability": "Join the Typefully affiliate/referral program",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Affiliate"
   },
   "check": "Account settings show a generated referral link and tracked referral stats",
   "source": "https://support.typefully.com/en/articles/8718317"
  }
 ],
 "attempts": [
  {
   "t": "04:30",
   "cap": "discovery",
   "capability": "llms.txt",
   "task": "GET /llms.txt",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "200 text/plain, H1 # Typefully, links api.md, openapi.json, ai-agents.md, agent-skills index, MCP server card"
  },
  {
   "t": "04:30",
   "cap": "discovery",
   "capability": "robots.txt / aipref",
   "task": "GET /robots.txt",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "User-agent: * Disallow: /media-p/; Content-Signal: ai-train=yes, search=yes, ai-input=yes (Cloudflare Content Signals scheme, parses). No aipref Content-Usage line or header."
  },
  {
   "t": "04:30",
   "cap": "discovery",
   "capability": "markdown docs",
   "task": "GET /docs/api with Accept: text/markdown, and /docs/api.md",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Both 200 content-type text/markdown; charset=utf-8 with vary: Accept"
  },
  {
   "t": "04:30",
   "cap": "discovery",
   "capability": "OpenAPI",
   "task": "GET https://api.typefully.com/v2/openapi.json",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "openapi 3.1.0, info.version 2.0.0, 16 paths / 24 operations; also RFC 9727 /.well-known/api-catalog (application/linkset+json)"
  },
  {
   "t": "04:30",
   "cap": "discovery",
   "capability": "MCP server/discover",
   "task": "POST server/discover 2026-07-28 to https://mcp.typefully.com/mcp",
   "route": "mcp",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "401 WWW-Authenticate: Bearer resource_metadata=\"https://mcp.typefully.com/.well-known/oauth-protected-resource\", scope=\"full_access\"; PRM 200 JSON, AS https://api.typefully.com",
   "notes": "auth required before discover; retry with credentials after signup"
  },
  {
   "t": "04:30",
   "cap": "discovery",
   "capability": "MCP server card / A2A / AI catalog",
   "task": "GET <mcp>/server-card, /.well-known/ai-catalog.json, /.well-known/mcp/server-card.json, agent-card.json, agent.json",
   "route": "api",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "/.well-known/mcp/server-card.json 200 application/mcp-server-card+json (remotes streamable-http https://mcp.typefully.com/mcp); <mcp>/server-card 404 JSON; ai-catalog.json 404; agent-card.json 404; agent.json 404"
  },
  {
   "t": "04:30",
   "cap": "discovery",
   "capability": "OAuth AS metadata",
   "task": "GET https://api.typefully.com/.well-known/oauth-authorization-server",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "200 JSON: code grant + refresh, S256, token auth none, client_id_metadata_document_supported: true (CIMD), authorization_response_iss_parameter_supported true, no registration_endpoint, no device_authorization_endpoint, no agent_auth block"
  },
  {
   "t": "04:30",
   "cap": "discovery",
   "capability": "pay discovery",
   "task": "GET /.well-known/ucp, /auth.md, /SKILL.md, x402./mpp./agents. subdomains, unauth /v2/me",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "/.well-known/ucp 404; /auth.md and /SKILL.md 200 text/html SPA soft-404; x402./mpp./agents.typefully.com resolve to 216.150.1.1 but TLS fails (curl exit 35); /v2/me unauth 401 JSON {error:{code:UNAUTHORIZED}} no 402"
  },
  {
   "t": "04:30",
   "cap": "docs",
   "capability": "docs",
   "task": "read API reference and agent guide",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://typefully.com/docs/api.md 233 KB markdown; ai-agents.md describes MCP (OAuth or API key Bearer) and agent-skills repo"
  },
  {
   "t": "04:40",
   "cap": "signup",
   "capability": "sign up",
   "task": "Sign up with email the agent's inbox (Continue with Email)",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "Email modal: after submit, button spins and a visible Cloudflare Turnstile checkbox \"Verify you are human\" appears (shot 006.png); only POSTs were to challenges.cloudflare.com, no request to Typefully auth, no mail arrived in 60 s. No headless sign-up route in docs (API keys come from Settings).",
   "notes": "Other options Google/X/LinkedIn OAuth need third-party accounts we do not have."
  },
  {
   "t": "04:47",
   "cap": "signup",
   "capability": "sign up",
   "task": "Ask a human to sign up in their own browser (Cloudflare Turnstile)",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "",
   "notes": "Check was Cloudflare Turnstile interactive checkbox"
  },
  {
   "t": "06:34",
   "cap": "verify",
   "capability": "verify email",
   "task": "Read verification code mail",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No sign-up request ever reached Typefully (Turnstile); inbox read an inbox --wait 60: no mail"
  },
  {
   "t": "06:34",
   "cap": "credentials",
   "capability": "API key / OAuth token",
   "task": "Get an API key or MCP OAuth token",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Docs: \"Generate your API key from your Typefully settings\" (needs an account). OAuth AS offers only authorization_code (browser consent after Typefully login); no device flow, no agent_auth registration. No account because sign-up stopped at Turnstile."
  },
  {
   "t": "06:34",
   "cap": "first_call",
   "capability": "first authenticated call",
   "task": "GET /v2/me and MCP server/discover without credentials",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "GET https://api.typefully.com/v2/me -> 401 application/json {\"error\":{\"code\":\"UNAUTHORIZED\",\"message\":\"Unauthorized\"}}; MCP -> 401 with resource_metadata",
   "quality": {
    "error_legibility": "clear"
   }
  },
  {
   "t": "06:34",
   "cap": "pay",
   "capability": "buy a plan",
   "task": "Probe agent payment rails and checkout",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "No 402 anywhere (unauth API 401, MCP 401); no PAYMENT-REQUIRED / WWW-Authenticate Payment; /.well-known/ucp 404; x402./mpp./agents. subdomains fail TLS; API docs mention 402 only as \"Account is paused or requires a paid plan\" on draft create/edit. Pricing page: Free (10 posts/month, API+MCP), Creator (annual only), Business; \"Get started\" leads to sign-up. Not reached: sign-up blocked."
  },
  {
   "t": "06:34",
   "cap": "cap-01",
   "capability": "Compose a draft post or thread",
   "task": "Compose a draft post or thread in account",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "API/MCP return 401 without a key"
  },
  {
   "t": "06:34",
   "cap": "cap-03",
   "capability": "Schedule a post",
   "task": "Schedule a post in account",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "API/MCP return 401 without a key"
  },
  {
   "t": "06:34",
   "cap": "cap-04",
   "capability": "Queue posts into slots",
   "task": "Queue posts into slots in account",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "API/MCP return 401 without a key"
  },
  {
   "t": "06:34",
   "cap": "cap-05",
   "capability": "Publish a post immediately",
   "task": "Publish a post immediately in account",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "API/MCP return 401 without a key"
  },
  {
   "t": "06:34",
   "cap": "cap-06",
   "capability": "Cross-post to multiple platforms",
   "task": "Cross-post to multiple platforms in account",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "API/MCP return 401 without a key"
  },
  {
   "t": "06:34",
   "cap": "cap-08",
   "capability": "Visual calendar",
   "task": "Visual calendar in account",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "API/MCP return 401 without a key"
  },
  {
   "t": "06:34",
   "cap": "cap-02",
   "capability": "AI writing suggestions",
   "task": "AI rewrite of a draft",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "typefully.com/pricing: \"AI writing features\" listed under Creator (\"All features in Free +\"); no API/MCP route; also no account"
  },
  {
   "t": "06:34",
   "cap": "cap-07",
   "capability": "Engagement analytics",
   "task": "View post analytics",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "typefully.com/pricing: \"X analytics\" listed under Creator; no API route"
  },
  {
   "t": "06:34",
   "cap": "cap-13",
   "capability": "Comments",
   "task": "Comment and resolve on a draft",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "typefully.com/pricing: \"Comments & Slack notifications\" under Business"
  },
  {
   "t": "06:34",
   "cap": "cap-21",
   "capability": "Team workspace",
   "task": "Share social set with team",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "typefully.com/pricing: \"Teams, roles, permissions\" under Business"
  },
  {
   "t": "06:34",
   "cap": "cancel",
   "capability": "cancel plan",
   "task": "Cancel/downgrade",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "No plan started (no account). No billing endpoints in the OpenAPI (24 operations, none billing)."
  },
  {
   "t": "06:34",
   "cap": "delete",
   "capability": "delete account",
   "task": "Delete account and data",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account created. OpenAPI has no account-delete operation; only DELETE draft/comment routes."
  }
 ],
 "stale": false,
 "icon": "/logos/typefully.png",
 "monitored": false,
 "verdict": "Needs a person to sign up, our agent can't get in on its own: L1 · Needs a person. Email sign-up shows an interactive Cloudflare Turnstile check, and submit never resolved, so no request ever reached Typefully. Every other step, verification, a key, a first call, work done, paying and deleting the account, sits behind that signup, so none of it was reached. The product still has a ready surface for the step after signup: an OpenAPI REST API, an official MCP server with OAuth or key auth, and plain-text docs. A person still has to create the account and make the key before an agent can pick up from there.",
 "page": "https://agentdrives.com/tools/typefully?via=api"
}