{
  "schemaVersion": "1.0",
  "item": {
    "slug": "manychat",
    "name": "ManyChat",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/byungkyu/manychat",
    "canonicalUrl": "https://clawhub.ai/byungkyu/manychat",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/manychat",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=manychat",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "LICENSE.txt"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/manychat"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/manychat",
    "agentPageUrl": "https://openagent3.xyz/skills/manychat/agent",
    "manifestUrl": "https://openagent3.xyz/skills/manychat/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/manychat/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "ManyChat",
        "body": "Access the ManyChat API with managed authentication. Manage subscribers, tags, custom fields, flows, and send messages through chat automation."
      },
      {
        "title": "Quick Start",
        "body": "# Get page info\npython <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://gateway.maton.ai/manychat/fb/page/getInfo')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF"
      },
      {
        "title": "Base URL",
        "body": "https://gateway.maton.ai/manychat/{native-api-path}\n\nReplace {native-api-path} with the actual ManyChat API endpoint path. The gateway proxies requests to api.manychat.com and automatically injects your API token."
      },
      {
        "title": "Authentication",
        "body": "All requests require the Maton API key in the Authorization header:\n\nAuthorization: Bearer $MATON_API_KEY\n\nEnvironment Variable: Set your API key as MATON_API_KEY:\n\nexport MATON_API_KEY=\"YOUR_API_KEY\""
      },
      {
        "title": "Getting Your API Key",
        "body": "Sign in or create an account at maton.ai\nGo to maton.ai/settings\nCopy your API key"
      },
      {
        "title": "Connection Management",
        "body": "Manage your ManyChat connections at https://ctrl.maton.ai."
      },
      {
        "title": "List Connections",
        "body": "python <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://ctrl.maton.ai/connections?app=manychat&status=ACTIVE')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF"
      },
      {
        "title": "Create Connection",
        "body": "python <<'EOF'\nimport urllib.request, os, json\ndata = json.dumps({'app': 'manychat'}).encode()\nreq = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nreq.add_header('Content-Type', 'application/json')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF"
      },
      {
        "title": "Get Connection",
        "body": "python <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n\nResponse:\n\n{\n  \"connection\": {\n    \"connection_id\": \"21fd90f9-5935-43cd-b6c8-bde9d915ca80\",\n    \"status\": \"ACTIVE\",\n    \"creation_time\": \"2025-12-08T07:20:53.488460Z\",\n    \"last_updated_time\": \"2026-01-31T20:03:32.593153Z\",\n    \"url\": \"https://connect.maton.ai/?session_token=...\",\n    \"app\": \"manychat\",\n    \"metadata\": {}\n  }\n}\n\nComplete the connection by providing your ManyChat API key through the connection URL."
      },
      {
        "title": "Delete Connection",
        "body": "python <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF"
      },
      {
        "title": "Specifying Connection",
        "body": "If you have multiple ManyChat connections, specify which one to use with the Maton-Connection header:\n\npython <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://gateway.maton.ai/manychat/fb/page/getInfo')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nreq.add_header('Maton-Connection', '21fd90f9-5935-43cd-b6c8-bde9d915ca80')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n\nIf omitted, the gateway uses the default (oldest) active connection."
      },
      {
        "title": "Page Operations",
        "body": "Get Page Info\n\nGET /manychat/fb/page/getInfo\n\nRate limit: 100 queries per second\n\nResponse:\n\n{\n  \"status\": \"success\",\n  \"data\": {\n    \"id\": 123456789,\n    \"name\": \"Page Name\",\n    \"category\": \"Business\",\n    \"avatar_link\": \"https://...\",\n    \"username\": \"pagename\",\n    \"about\": \"About text\",\n    \"description\": \"Page description\",\n    \"is_pro\": true,\n    \"timezone\": \"America/New_York\"\n  }\n}"
      },
      {
        "title": "Tag Operations",
        "body": "List Tags\n\nGET /manychat/fb/page/getTags\n\nRate limit: 100 queries per second\n\nResponse:\n\n{\n  \"status\": \"success\",\n  \"data\": [\n    {\"id\": 1, \"name\": \"VIP\"},\n    {\"id\": 2, \"name\": \"Customer\"}\n  ]\n}\n\nCreate Tag\n\nPOST /manychat/fb/page/createTag\nContent-Type: application/json\n\n{\n  \"name\": \"New Tag\"\n}\n\nRate limit: 10 queries per second\n\nRemove Tag from Page\n\nPOST /manychat/fb/page/removeTag\nContent-Type: application/json\n\n{\n  \"tag_id\": 123\n}\n\nRate limit: 10 queries per second. Removes tag from page and all subscribers.\n\nRemove Tag by Name\n\nPOST /manychat/fb/page/removeTagByName\nContent-Type: application/json\n\n{\n  \"tag_name\": \"Old Tag\"\n}\n\nRate limit: 10 queries per second"
      },
      {
        "title": "Custom Field Operations",
        "body": "List Custom Fields\n\nGET /manychat/fb/page/getCustomFields\n\nRate limit: 100 queries per second\n\nResponse:\n\n{\n  \"status\": \"success\",\n  \"data\": [\n    {\"id\": 1, \"name\": \"phone_number\", \"type\": \"text\"},\n    {\"id\": 2, \"name\": \"purchase_count\", \"type\": \"number\"}\n  ]\n}\n\nCreate Custom Field\n\nPOST /manychat/fb/page/createCustomField\nContent-Type: application/json\n\n{\n  \"caption\": \"Phone Number\",\n  \"type\": \"text\",\n  \"description\": \"Customer phone number\"\n}\n\nRate limit: 10 queries per second\n\nField Types: text, number, date, datetime, boolean"
      },
      {
        "title": "Bot Field Operations",
        "body": "List Bot Fields\n\nGET /manychat/fb/page/getBotFields\n\nRate limit: 100 queries per second\n\nCreate Bot Field\n\nPOST /manychat/fb/page/createBotField\nContent-Type: application/json\n\n{\n  \"name\": \"counter\",\n  \"type\": \"number\",\n  \"description\": \"Global counter\",\n  \"value\": 0\n}\n\nRate limit: 10 queries per second\n\nSet Bot Field\n\nPOST /manychat/fb/page/setBotField\nContent-Type: application/json\n\n{\n  \"field_id\": 123,\n  \"field_value\": 42\n}\n\nRate limit: 10 queries per second\n\nSet Bot Field by Name\n\nPOST /manychat/fb/page/setBotFieldByName\nContent-Type: application/json\n\n{\n  \"field_name\": \"counter\",\n  \"field_value\": 42\n}\n\nRate limit: 10 queries per second\n\nSet Multiple Bot Fields\n\nPOST /manychat/fb/page/setBotFields\nContent-Type: application/json\n\n{\n  \"fields\": [\n    {\"field_id\": 123, \"field_value\": \"value1\"},\n    {\"field_name\": \"field2\", \"field_value\": \"value2\"}\n  ]\n}\n\nRate limit: 10 queries per second. Maximum 20 fields per request."
      },
      {
        "title": "Flow Operations",
        "body": "List Flows\n\nGET /manychat/fb/page/getFlows\n\nRate limit: 10 queries per second\n\nResponse:\n\n{\n  \"status\": \"success\",\n  \"data\": {\n    \"flows\": [\n      {\"ns\": \"content123456\", \"name\": \"Welcome Flow\", \"folder_id\": 1}\n    ],\n    \"folders\": [\n      {\"id\": 1, \"name\": \"Main Folder\"}\n    ]\n  }\n}"
      },
      {
        "title": "Growth Tools",
        "body": "List Growth Tools\n\nGET /manychat/fb/page/getGrowthTools\n\nRate limit: 100 queries per second"
      },
      {
        "title": "OTN Topics",
        "body": "List OTN Topics\n\nGET /manychat/fb/page/getOtnTopics\n\nRate limit: 100 queries per second"
      },
      {
        "title": "Subscriber Operations",
        "body": "Get Subscriber Info\n\nGET /manychat/fb/subscriber/getInfo?subscriber_id=123456789\n\nRate limit: 10 queries per second\n\nResponse:\n\n{\n  \"status\": \"success\",\n  \"data\": {\n    \"id\": 123456789,\n    \"name\": \"John Doe\",\n    \"first_name\": \"John\",\n    \"last_name\": \"Doe\",\n    \"gender\": \"male\",\n    \"profile_pic\": \"https://...\",\n    \"subscribed\": \"2025-01-15T10:30:00Z\",\n    \"last_interaction\": \"2025-02-01T14:20:00Z\",\n    \"tags\": [{\"id\": 1, \"name\": \"VIP\"}],\n    \"custom_fields\": [{\"id\": 1, \"name\": \"phone\", \"value\": \"+1234567890\"}]\n  }\n}\n\nFind Subscriber by Name\n\nGET /manychat/fb/subscriber/findByName?name=John%20Doe\n\nRate limit: 10 queries per second. Maximum 100 results.\n\nFind Subscriber by Custom Field\n\nGET /manychat/fb/subscriber/findByCustomField?field_id=123&field_value=value\n\nRate limit: 10 queries per second. Works with Text and Number fields. Maximum 100 results.\n\nFind Subscriber by System Field\n\nGET /manychat/fb/subscriber/findBySystemField?email=john@example.com\n\nGET /manychat/fb/subscriber/findBySystemField?phone=+1234567890\n\nRate limit: 50 queries per second. Set either email OR phone parameter.\n\nGet Subscriber by User Ref\n\nGET /manychat/fb/subscriber/getInfoByUserRef?user_ref=123456\n\nCreate Subscriber\n\nPOST /manychat/fb/subscriber/createSubscriber\nContent-Type: application/json\n\n{\n  \"first_name\": \"John\",\n  \"last_name\": \"Doe\",\n  \"phone\": \"+1234567890\",\n  \"email\": \"john@example.com\",\n  \"gender\": \"male\",\n  \"has_opt_in_sms\": true,\n  \"has_opt_in_email\": true,\n  \"consent_phrase\": \"I agree to receive messages\"\n}\n\nRate limit: 10 queries per second\n\nNote: Importing subscribers with phone or email requires special permissions from ManyChat. Contact ManyChat support to enable this feature for your account.\n\nUpdate Subscriber\n\nPOST /manychat/fb/subscriber/updateSubscriber\nContent-Type: application/json\n\n{\n  \"subscriber_id\": 123456789,\n  \"first_name\": \"John\",\n  \"last_name\": \"Smith\",\n  \"phone\": \"+1234567890\",\n  \"email\": \"john.smith@example.com\"\n}\n\nRate limit: 10 queries per second\n\nAdd Tag to Subscriber\n\nPOST /manychat/fb/subscriber/addTag\nContent-Type: application/json\n\n{\n  \"subscriber_id\": 123456789,\n  \"tag_id\": 1\n}\n\nRate limit: 10 queries per second\n\nAdd Tag by Name\n\nPOST /manychat/fb/subscriber/addTagByName\nContent-Type: application/json\n\n{\n  \"subscriber_id\": 123456789,\n  \"tag_name\": \"VIP\"\n}\n\nRate limit: 10 queries per second\n\nRemove Tag from Subscriber\n\nPOST /manychat/fb/subscriber/removeTag\nContent-Type: application/json\n\n{\n  \"subscriber_id\": 123456789,\n  \"tag_id\": 1\n}\n\nRate limit: 10 queries per second\n\nRemove Tag by Name\n\nPOST /manychat/fb/subscriber/removeTagByName\nContent-Type: application/json\n\n{\n  \"subscriber_id\": 123456789,\n  \"tag_name\": \"VIP\"\n}\n\nRate limit: 10 queries per second\n\nSet Custom Field\n\nPOST /manychat/fb/subscriber/setCustomField\nContent-Type: application/json\n\n{\n  \"subscriber_id\": 123456789,\n  \"field_id\": 1,\n  \"field_value\": \"+1234567890\"\n}\n\nRate limit: 10 queries per second\n\nSet Custom Field by Name\n\nPOST /manychat/fb/subscriber/setCustomFieldByName\nContent-Type: application/json\n\n{\n  \"subscriber_id\": 123456789,\n  \"field_name\": \"phone_number\",\n  \"field_value\": \"+1234567890\"\n}\n\nRate limit: 10 queries per second\n\nSet Multiple Custom Fields\n\nPOST /manychat/fb/subscriber/setCustomFields\nContent-Type: application/json\n\n{\n  \"subscriber_id\": 123456789,\n  \"fields\": [\n    {\"field_id\": 1, \"field_value\": \"value1\"},\n    {\"field_name\": \"field2\", \"field_value\": \"value2\"}\n  ]\n}\n\nRate limit: 10 queries per second. Maximum 20 fields per request.\n\nVerify Subscriber by Signed Request\n\nPOST /manychat/fb/subscriber/verifyBySignedRequest\nContent-Type: application/json\n\n{\n  \"subscriber_id\": 123456789,\n  \"signed_request\": \"signed_request_token\"\n}\n\nRate limit: 10 queries per second"
      },
      {
        "title": "Sending Operations",
        "body": "Send Content\n\nPOST /manychat/fb/sending/sendContent\nContent-Type: application/json\n\n{\n  \"subscriber_id\": 123456789,\n  \"data\": {\n    \"version\": \"v2\",\n    \"content\": {\n      \"messages\": [\n        {\n          \"type\": \"text\",\n          \"text\": \"Hello! How can I help you today?\"\n        }\n      ]\n    }\n  },\n  \"message_tag\": \"CONFIRMED_EVENT_UPDATE\"\n}\n\nRate limit: 25 queries per second\n\nMessage Tags: Required for sending outside the 24-hour messaging window\n\nCONFIRMED_EVENT_UPDATE\nPOST_PURCHASE_UPDATE\nACCOUNT_UPDATE\n\nOTN (One-Time Notification):\n\n{\n  \"subscriber_id\": 123456789,\n  \"data\": {...},\n  \"otn_topic_name\": \"Price Drop Alert\"\n}\n\nSend Content by User Ref\n\nPOST /manychat/fb/sending/sendContentByUserRef\nContent-Type: application/json\n\n{\n  \"user_ref\": 123456,\n  \"data\": {\n    \"version\": \"v2\",\n    \"content\": {\n      \"messages\": [\n        {\n          \"type\": \"text\",\n          \"text\": \"Welcome!\"\n        }\n      ]\n    }\n  }\n}\n\nRate limit: 25 queries per second\n\nSend Flow\n\nPOST /manychat/fb/sending/sendFlow\nContent-Type: application/json\n\n{\n  \"subscriber_id\": 123456789,\n  \"flow_ns\": \"content123456\"\n}\n\nRate limit: 20 queries per second, maximum 100 per subscriber per hour"
      },
      {
        "title": "Message Content Format",
        "body": "ManyChat uses a structured content format for sending messages:"
      },
      {
        "title": "Text Message",
        "body": "{\n  \"version\": \"v2\",\n  \"content\": {\n    \"messages\": [\n      {\n        \"type\": \"text\",\n        \"text\": \"Your message here\"\n      }\n    ]\n  }\n}"
      },
      {
        "title": "Image Message",
        "body": "{\n  \"version\": \"v2\",\n  \"content\": {\n    \"messages\": [\n      {\n        \"type\": \"image\",\n        \"url\": \"https://example.com/image.jpg\"\n      }\n    ]\n  }\n}"
      },
      {
        "title": "Quick Replies",
        "body": "{\n  \"version\": \"v2\",\n  \"content\": {\n    \"messages\": [\n      {\n        \"type\": \"text\",\n        \"text\": \"Choose an option:\",\n        \"quick_replies\": [\n          {\"type\": \"node\", \"caption\": \"Option 1\", \"target\": \"content123\"},\n          {\"type\": \"node\", \"caption\": \"Option 2\", \"target\": \"content456\"}\n        ]\n      }\n    ]\n  }\n}"
      },
      {
        "title": "Buttons",
        "body": "{\n  \"version\": \"v2\",\n  \"content\": {\n    \"messages\": [\n      {\n        \"type\": \"text\",\n        \"text\": \"Click a button:\",\n        \"buttons\": [\n          {\"type\": \"url\", \"caption\": \"Visit Website\", \"url\": \"https://example.com\"},\n          {\"type\": \"flow\", \"caption\": \"Start Flow\", \"target\": \"content123\"}\n        ]\n      }\n    ]\n  }\n}"
      },
      {
        "title": "JavaScript",
        "body": "// Get page info\nconst response = await fetch(\n  'https://gateway.maton.ai/manychat/fb/page/getInfo',\n  {\n    headers: {\n      'Authorization': `Bearer ${process.env.MATON_API_KEY}`\n    }\n  }\n);\nconst data = await response.json();\n\n// Send a message\nconst sendResponse = await fetch(\n  'https://gateway.maton.ai/manychat/fb/sending/sendContent',\n  {\n    method: 'POST',\n    headers: {\n      'Authorization': `Bearer ${process.env.MATON_API_KEY}`,\n      'Content-Type': 'application/json'\n    },\n    body: JSON.stringify({\n      subscriber_id: 123456789,\n      data: {\n        version: 'v2',\n        content: {\n          messages: [{ type: 'text', text: 'Hello!' }]\n        }\n      }\n    })\n  }\n);"
      },
      {
        "title": "Python",
        "body": "import os\nimport requests\n\n# Get page info\nresponse = requests.get(\n    'https://gateway.maton.ai/manychat/fb/page/getInfo',\n    headers={'Authorization': f'Bearer {os.environ[\"MATON_API_KEY\"]}'}\n)\ndata = response.json()\n\n# Send a message\nsend_response = requests.post(\n    'https://gateway.maton.ai/manychat/fb/sending/sendContent',\n    headers={'Authorization': f'Bearer {os.environ[\"MATON_API_KEY\"]}'},\n    json={\n        'subscriber_id': 123456789,\n        'data': {\n            'version': 'v2',\n            'content': {\n                'messages': [{'type': 'text', 'text': 'Hello!'}]\n            }\n        }\n    }\n)"
      },
      {
        "title": "Notes",
        "body": "Subscriber IDs are unique within your ManyChat page\nFlow namespaces (flow_ns) are used to identify specific automation flows\nThe message_tag parameter is required when sending messages outside the 24-hour messaging window\nOTN (One-Time Notification) allows sending one message per topic subscription\nMost POST endpoints return {\"status\": \"success\"} on success\nIMPORTANT: When using curl commands, use curl -g when URLs contain brackets to disable glob parsing\nIMPORTANT: When piping curl output to jq or other commands, environment variables like $MATON_API_KEY may not expand correctly in some shell environments"
      },
      {
        "title": "Error Handling",
        "body": "StatusMeaning400Missing ManyChat connection401Invalid or missing Maton API key429Rate limited4xx/5xxPassthrough error from ManyChat API"
      },
      {
        "title": "ManyChat Error Codes",
        "body": "CodeMeaning2011Subscriber not found2012User ref not found3011Invalid message content3021Message tag required3031OTN topic not found"
      },
      {
        "title": "Troubleshooting: API Key Issues",
        "body": "Check that the MATON_API_KEY environment variable is set:\n\necho $MATON_API_KEY\n\nVerify the API key is valid by listing connections:\n\npython <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://ctrl.maton.ai/connections')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF"
      },
      {
        "title": "Troubleshooting: Invalid App Name",
        "body": "Ensure your URL path starts with manychat. For example:\n\nCorrect: https://gateway.maton.ai/manychat/fb/page/getInfo\nIncorrect: https://gateway.maton.ai/fb/page/getInfo"
      },
      {
        "title": "Resources",
        "body": "ManyChat API Documentation\nManyChat API Key Generation Guide\nManyChat Dev Program\nMaton Community\nMaton Support"
      }
    ],
    "body": "ManyChat\n\nAccess the ManyChat API with managed authentication. Manage subscribers, tags, custom fields, flows, and send messages through chat automation.\n\nQuick Start\n# Get page info\npython <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://gateway.maton.ai/manychat/fb/page/getInfo')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n\nBase URL\nhttps://gateway.maton.ai/manychat/{native-api-path}\n\n\nReplace {native-api-path} with the actual ManyChat API endpoint path. The gateway proxies requests to api.manychat.com and automatically injects your API token.\n\nAuthentication\n\nAll requests require the Maton API key in the Authorization header:\n\nAuthorization: Bearer $MATON_API_KEY\n\n\nEnvironment Variable: Set your API key as MATON_API_KEY:\n\nexport MATON_API_KEY=\"YOUR_API_KEY\"\n\nGetting Your API Key\nSign in or create an account at maton.ai\nGo to maton.ai/settings\nCopy your API key\nConnection Management\n\nManage your ManyChat connections at https://ctrl.maton.ai.\n\nList Connections\npython <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://ctrl.maton.ai/connections?app=manychat&status=ACTIVE')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n\nCreate Connection\npython <<'EOF'\nimport urllib.request, os, json\ndata = json.dumps({'app': 'manychat'}).encode()\nreq = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nreq.add_header('Content-Type', 'application/json')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n\nGet Connection\npython <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n\n\nResponse:\n\n{\n  \"connection\": {\n    \"connection_id\": \"21fd90f9-5935-43cd-b6c8-bde9d915ca80\",\n    \"status\": \"ACTIVE\",\n    \"creation_time\": \"2025-12-08T07:20:53.488460Z\",\n    \"last_updated_time\": \"2026-01-31T20:03:32.593153Z\",\n    \"url\": \"https://connect.maton.ai/?session_token=...\",\n    \"app\": \"manychat\",\n    \"metadata\": {}\n  }\n}\n\n\nComplete the connection by providing your ManyChat API key through the connection URL.\n\nDelete Connection\npython <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n\nSpecifying Connection\n\nIf you have multiple ManyChat connections, specify which one to use with the Maton-Connection header:\n\npython <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://gateway.maton.ai/manychat/fb/page/getInfo')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nreq.add_header('Maton-Connection', '21fd90f9-5935-43cd-b6c8-bde9d915ca80')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n\n\nIf omitted, the gateway uses the default (oldest) active connection.\n\nAPI Reference\nPage Operations\nGet Page Info\nGET /manychat/fb/page/getInfo\n\n\nRate limit: 100 queries per second\n\nResponse:\n\n{\n  \"status\": \"success\",\n  \"data\": {\n    \"id\": 123456789,\n    \"name\": \"Page Name\",\n    \"category\": \"Business\",\n    \"avatar_link\": \"https://...\",\n    \"username\": \"pagename\",\n    \"about\": \"About text\",\n    \"description\": \"Page description\",\n    \"is_pro\": true,\n    \"timezone\": \"America/New_York\"\n  }\n}\n\nTag Operations\nList Tags\nGET /manychat/fb/page/getTags\n\n\nRate limit: 100 queries per second\n\nResponse:\n\n{\n  \"status\": \"success\",\n  \"data\": [\n    {\"id\": 1, \"name\": \"VIP\"},\n    {\"id\": 2, \"name\": \"Customer\"}\n  ]\n}\n\nCreate Tag\nPOST /manychat/fb/page/createTag\nContent-Type: application/json\n\n{\n  \"name\": \"New Tag\"\n}\n\n\nRate limit: 10 queries per second\n\nRemove Tag from Page\nPOST /manychat/fb/page/removeTag\nContent-Type: application/json\n\n{\n  \"tag_id\": 123\n}\n\n\nRate limit: 10 queries per second. Removes tag from page and all subscribers.\n\nRemove Tag by Name\nPOST /manychat/fb/page/removeTagByName\nContent-Type: application/json\n\n{\n  \"tag_name\": \"Old Tag\"\n}\n\n\nRate limit: 10 queries per second\n\nCustom Field Operations\nList Custom Fields\nGET /manychat/fb/page/getCustomFields\n\n\nRate limit: 100 queries per second\n\nResponse:\n\n{\n  \"status\": \"success\",\n  \"data\": [\n    {\"id\": 1, \"name\": \"phone_number\", \"type\": \"text\"},\n    {\"id\": 2, \"name\": \"purchase_count\", \"type\": \"number\"}\n  ]\n}\n\nCreate Custom Field\nPOST /manychat/fb/page/createCustomField\nContent-Type: application/json\n\n{\n  \"caption\": \"Phone Number\",\n  \"type\": \"text\",\n  \"description\": \"Customer phone number\"\n}\n\n\nRate limit: 10 queries per second\n\nField Types: text, number, date, datetime, boolean\n\nBot Field Operations\nList Bot Fields\nGET /manychat/fb/page/getBotFields\n\n\nRate limit: 100 queries per second\n\nCreate Bot Field\nPOST /manychat/fb/page/createBotField\nContent-Type: application/json\n\n{\n  \"name\": \"counter\",\n  \"type\": \"number\",\n  \"description\": \"Global counter\",\n  \"value\": 0\n}\n\n\nRate limit: 10 queries per second\n\nSet Bot Field\nPOST /manychat/fb/page/setBotField\nContent-Type: application/json\n\n{\n  \"field_id\": 123,\n  \"field_value\": 42\n}\n\n\nRate limit: 10 queries per second\n\nSet Bot Field by Name\nPOST /manychat/fb/page/setBotFieldByName\nContent-Type: application/json\n\n{\n  \"field_name\": \"counter\",\n  \"field_value\": 42\n}\n\n\nRate limit: 10 queries per second\n\nSet Multiple Bot Fields\nPOST /manychat/fb/page/setBotFields\nContent-Type: application/json\n\n{\n  \"fields\": [\n    {\"field_id\": 123, \"field_value\": \"value1\"},\n    {\"field_name\": \"field2\", \"field_value\": \"value2\"}\n  ]\n}\n\n\nRate limit: 10 queries per second. Maximum 20 fields per request.\n\nFlow Operations\nList Flows\nGET /manychat/fb/page/getFlows\n\n\nRate limit: 10 queries per second\n\nResponse:\n\n{\n  \"status\": \"success\",\n  \"data\": {\n    \"flows\": [\n      {\"ns\": \"content123456\", \"name\": \"Welcome Flow\", \"folder_id\": 1}\n    ],\n    \"folders\": [\n      {\"id\": 1, \"name\": \"Main Folder\"}\n    ]\n  }\n}\n\nGrowth Tools\nList Growth Tools\nGET /manychat/fb/page/getGrowthTools\n\n\nRate limit: 100 queries per second\n\nOTN Topics\nList OTN Topics\nGET /manychat/fb/page/getOtnTopics\n\n\nRate limit: 100 queries per second\n\nSubscriber Operations\nGet Subscriber Info\nGET /manychat/fb/subscriber/getInfo?subscriber_id=123456789\n\n\nRate limit: 10 queries per second\n\nResponse:\n\n{\n  \"status\": \"success\",\n  \"data\": {\n    \"id\": 123456789,\n    \"name\": \"John Doe\",\n    \"first_name\": \"John\",\n    \"last_name\": \"Doe\",\n    \"gender\": \"male\",\n    \"profile_pic\": \"https://...\",\n    \"subscribed\": \"2025-01-15T10:30:00Z\",\n    \"last_interaction\": \"2025-02-01T14:20:00Z\",\n    \"tags\": [{\"id\": 1, \"name\": \"VIP\"}],\n    \"custom_fields\": [{\"id\": 1, \"name\": \"phone\", \"value\": \"+1234567890\"}]\n  }\n}\n\nFind Subscriber by Name\nGET /manychat/fb/subscriber/findByName?name=John%20Doe\n\n\nRate limit: 10 queries per second. Maximum 100 results.\n\nFind Subscriber by Custom Field\nGET /manychat/fb/subscriber/findByCustomField?field_id=123&field_value=value\n\n\nRate limit: 10 queries per second. Works with Text and Number fields. Maximum 100 results.\n\nFind Subscriber by System Field\nGET /manychat/fb/subscriber/findBySystemField?email=john@example.com\n\nGET /manychat/fb/subscriber/findBySystemField?phone=+1234567890\n\n\nRate limit: 50 queries per second. Set either email OR phone parameter.\n\nGet Subscriber by User Ref\nGET /manychat/fb/subscriber/getInfoByUserRef?user_ref=123456\n\nCreate Subscriber\nPOST /manychat/fb/subscriber/createSubscriber\nContent-Type: application/json\n\n{\n  \"first_name\": \"John\",\n  \"last_name\": \"Doe\",\n  \"phone\": \"+1234567890\",\n  \"email\": \"john@example.com\",\n  \"gender\": \"male\",\n  \"has_opt_in_sms\": true,\n  \"has_opt_in_email\": true,\n  \"consent_phrase\": \"I agree to receive messages\"\n}\n\n\nRate limit: 10 queries per second\n\nNote: Importing subscribers with phone or email requires special permissions from ManyChat. Contact ManyChat support to enable this feature for your account.\n\nUpdate Subscriber\nPOST /manychat/fb/subscriber/updateSubscriber\nContent-Type: application/json\n\n{\n  \"subscriber_id\": 123456789,\n  \"first_name\": \"John\",\n  \"last_name\": \"Smith\",\n  \"phone\": \"+1234567890\",\n  \"email\": \"john.smith@example.com\"\n}\n\n\nRate limit: 10 queries per second\n\nAdd Tag to Subscriber\nPOST /manychat/fb/subscriber/addTag\nContent-Type: application/json\n\n{\n  \"subscriber_id\": 123456789,\n  \"tag_id\": 1\n}\n\n\nRate limit: 10 queries per second\n\nAdd Tag by Name\nPOST /manychat/fb/subscriber/addTagByName\nContent-Type: application/json\n\n{\n  \"subscriber_id\": 123456789,\n  \"tag_name\": \"VIP\"\n}\n\n\nRate limit: 10 queries per second\n\nRemove Tag from Subscriber\nPOST /manychat/fb/subscriber/removeTag\nContent-Type: application/json\n\n{\n  \"subscriber_id\": 123456789,\n  \"tag_id\": 1\n}\n\n\nRate limit: 10 queries per second\n\nRemove Tag by Name\nPOST /manychat/fb/subscriber/removeTagByName\nContent-Type: application/json\n\n{\n  \"subscriber_id\": 123456789,\n  \"tag_name\": \"VIP\"\n}\n\n\nRate limit: 10 queries per second\n\nSet Custom Field\nPOST /manychat/fb/subscriber/setCustomField\nContent-Type: application/json\n\n{\n  \"subscriber_id\": 123456789,\n  \"field_id\": 1,\n  \"field_value\": \"+1234567890\"\n}\n\n\nRate limit: 10 queries per second\n\nSet Custom Field by Name\nPOST /manychat/fb/subscriber/setCustomFieldByName\nContent-Type: application/json\n\n{\n  \"subscriber_id\": 123456789,\n  \"field_name\": \"phone_number\",\n  \"field_value\": \"+1234567890\"\n}\n\n\nRate limit: 10 queries per second\n\nSet Multiple Custom Fields\nPOST /manychat/fb/subscriber/setCustomFields\nContent-Type: application/json\n\n{\n  \"subscriber_id\": 123456789,\n  \"fields\": [\n    {\"field_id\": 1, \"field_value\": \"value1\"},\n    {\"field_name\": \"field2\", \"field_value\": \"value2\"}\n  ]\n}\n\n\nRate limit: 10 queries per second. Maximum 20 fields per request.\n\nVerify Subscriber by Signed Request\nPOST /manychat/fb/subscriber/verifyBySignedRequest\nContent-Type: application/json\n\n{\n  \"subscriber_id\": 123456789,\n  \"signed_request\": \"signed_request_token\"\n}\n\n\nRate limit: 10 queries per second\n\nSending Operations\nSend Content\nPOST /manychat/fb/sending/sendContent\nContent-Type: application/json\n\n{\n  \"subscriber_id\": 123456789,\n  \"data\": {\n    \"version\": \"v2\",\n    \"content\": {\n      \"messages\": [\n        {\n          \"type\": \"text\",\n          \"text\": \"Hello! How can I help you today?\"\n        }\n      ]\n    }\n  },\n  \"message_tag\": \"CONFIRMED_EVENT_UPDATE\"\n}\n\n\nRate limit: 25 queries per second\n\nMessage Tags: Required for sending outside the 24-hour messaging window\n\nCONFIRMED_EVENT_UPDATE\nPOST_PURCHASE_UPDATE\nACCOUNT_UPDATE\n\nOTN (One-Time Notification):\n\n{\n  \"subscriber_id\": 123456789,\n  \"data\": {...},\n  \"otn_topic_name\": \"Price Drop Alert\"\n}\n\nSend Content by User Ref\nPOST /manychat/fb/sending/sendContentByUserRef\nContent-Type: application/json\n\n{\n  \"user_ref\": 123456,\n  \"data\": {\n    \"version\": \"v2\",\n    \"content\": {\n      \"messages\": [\n        {\n          \"type\": \"text\",\n          \"text\": \"Welcome!\"\n        }\n      ]\n    }\n  }\n}\n\n\nRate limit: 25 queries per second\n\nSend Flow\nPOST /manychat/fb/sending/sendFlow\nContent-Type: application/json\n\n{\n  \"subscriber_id\": 123456789,\n  \"flow_ns\": \"content123456\"\n}\n\n\nRate limit: 20 queries per second, maximum 100 per subscriber per hour\n\nMessage Content Format\n\nManyChat uses a structured content format for sending messages:\n\nText Message\n{\n  \"version\": \"v2\",\n  \"content\": {\n    \"messages\": [\n      {\n        \"type\": \"text\",\n        \"text\": \"Your message here\"\n      }\n    ]\n  }\n}\n\nImage Message\n{\n  \"version\": \"v2\",\n  \"content\": {\n    \"messages\": [\n      {\n        \"type\": \"image\",\n        \"url\": \"https://example.com/image.jpg\"\n      }\n    ]\n  }\n}\n\nQuick Replies\n{\n  \"version\": \"v2\",\n  \"content\": {\n    \"messages\": [\n      {\n        \"type\": \"text\",\n        \"text\": \"Choose an option:\",\n        \"quick_replies\": [\n          {\"type\": \"node\", \"caption\": \"Option 1\", \"target\": \"content123\"},\n          {\"type\": \"node\", \"caption\": \"Option 2\", \"target\": \"content456\"}\n        ]\n      }\n    ]\n  }\n}\n\nButtons\n{\n  \"version\": \"v2\",\n  \"content\": {\n    \"messages\": [\n      {\n        \"type\": \"text\",\n        \"text\": \"Click a button:\",\n        \"buttons\": [\n          {\"type\": \"url\", \"caption\": \"Visit Website\", \"url\": \"https://example.com\"},\n          {\"type\": \"flow\", \"caption\": \"Start Flow\", \"target\": \"content123\"}\n        ]\n      }\n    ]\n  }\n}\n\nCode Examples\nJavaScript\n// Get page info\nconst response = await fetch(\n  'https://gateway.maton.ai/manychat/fb/page/getInfo',\n  {\n    headers: {\n      'Authorization': `Bearer ${process.env.MATON_API_KEY}`\n    }\n  }\n);\nconst data = await response.json();\n\n// Send a message\nconst sendResponse = await fetch(\n  'https://gateway.maton.ai/manychat/fb/sending/sendContent',\n  {\n    method: 'POST',\n    headers: {\n      'Authorization': `Bearer ${process.env.MATON_API_KEY}`,\n      'Content-Type': 'application/json'\n    },\n    body: JSON.stringify({\n      subscriber_id: 123456789,\n      data: {\n        version: 'v2',\n        content: {\n          messages: [{ type: 'text', text: 'Hello!' }]\n        }\n      }\n    })\n  }\n);\n\nPython\nimport os\nimport requests\n\n# Get page info\nresponse = requests.get(\n    'https://gateway.maton.ai/manychat/fb/page/getInfo',\n    headers={'Authorization': f'Bearer {os.environ[\"MATON_API_KEY\"]}'}\n)\ndata = response.json()\n\n# Send a message\nsend_response = requests.post(\n    'https://gateway.maton.ai/manychat/fb/sending/sendContent',\n    headers={'Authorization': f'Bearer {os.environ[\"MATON_API_KEY\"]}'},\n    json={\n        'subscriber_id': 123456789,\n        'data': {\n            'version': 'v2',\n            'content': {\n                'messages': [{'type': 'text', 'text': 'Hello!'}]\n            }\n        }\n    }\n)\n\nNotes\nSubscriber IDs are unique within your ManyChat page\nFlow namespaces (flow_ns) are used to identify specific automation flows\nThe message_tag parameter is required when sending messages outside the 24-hour messaging window\nOTN (One-Time Notification) allows sending one message per topic subscription\nMost POST endpoints return {\"status\": \"success\"} on success\nIMPORTANT: When using curl commands, use curl -g when URLs contain brackets to disable glob parsing\nIMPORTANT: When piping curl output to jq or other commands, environment variables like $MATON_API_KEY may not expand correctly in some shell environments\nError Handling\nStatus\tMeaning\n400\tMissing ManyChat connection\n401\tInvalid or missing Maton API key\n429\tRate limited\n4xx/5xx\tPassthrough error from ManyChat API\nManyChat Error Codes\nCode\tMeaning\n2011\tSubscriber not found\n2012\tUser ref not found\n3011\tInvalid message content\n3021\tMessage tag required\n3031\tOTN topic not found\nTroubleshooting: API Key Issues\nCheck that the MATON_API_KEY environment variable is set:\necho $MATON_API_KEY\n\nVerify the API key is valid by listing connections:\npython <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://ctrl.maton.ai/connections')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n\nTroubleshooting: Invalid App Name\nEnsure your URL path starts with manychat. For example:\nCorrect: https://gateway.maton.ai/manychat/fb/page/getInfo\nIncorrect: https://gateway.maton.ai/fb/page/getInfo\nResources\nManyChat API Documentation\nManyChat API Key Generation Guide\nManyChat Dev Program\nMaton Community\nMaton Support"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/byungkyu/manychat",
    "publisherUrl": "https://clawhub.ai/byungkyu/manychat",
    "owner": "byungkyu",
    "version": "1.0.2",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/manychat",
    "downloadUrl": "https://openagent3.xyz/downloads/manychat",
    "agentUrl": "https://openagent3.xyz/skills/manychat/agent",
    "manifestUrl": "https://openagent3.xyz/skills/manychat/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/manychat/agent.md"
  }
}