{
  "schemaVersion": "1.0",
  "item": {
    "slug": "sendgrid",
    "name": "SendGrid",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/byungkyu/sendgrid",
    "canonicalUrl": "https://clawhub.ai/byungkyu/sendgrid",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/sendgrid",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=sendgrid",
    "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",
      "slug": "sendgrid",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-08T16:40:43.673Z",
      "expiresAt": "2026-05-15T16:40:43.673Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=sendgrid",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=sendgrid",
        "contentDisposition": "attachment; filename=\"sendgrid-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "sendgrid"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/sendgrid"
    },
    "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/sendgrid",
    "agentPageUrl": "https://openagent3.xyz/skills/sendgrid/agent",
    "manifestUrl": "https://openagent3.xyz/skills/sendgrid/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/sendgrid/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": "SendGrid",
        "body": "Access the SendGrid API with managed OAuth authentication. Send transactional and marketing emails, manage contacts, templates, suppressions, and analyze email performance."
      },
      {
        "title": "Quick Start",
        "body": "# Get user profile\npython <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://gateway.maton.ai/sendgrid/v3/user/profile')\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/sendgrid/{native-api-path}\n\nReplace {native-api-path} with the actual SendGrid API endpoint path. The gateway proxies requests to api.sendgrid.com and automatically injects your OAuth 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 SendGrid OAuth 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=sendgrid&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': 'sendgrid'}).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\": \"943c6cd5-9a56-4f5b-8adf-ecd4a140049f\",\n    \"status\": \"ACTIVE\",\n    \"creation_time\": \"2026-02-11T10:53:41.817938Z\",\n    \"last_updated_time\": \"2026-02-11T10:54:05.554084Z\",\n    \"url\": \"https://connect.maton.ai/?session_token=...\",\n    \"app\": \"sendgrid\",\n    \"metadata\": {}\n  }\n}\n\nOpen the returned url in a browser to complete OAuth authorization."
      },
      {
        "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 SendGrid 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/sendgrid/v3/user/profile')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nreq.add_header('Maton-Connection', '943c6cd5-9a56-4f5b-8adf-ecd4a140049f')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n\nIf omitted, the gateway uses the default (oldest) active connection."
      },
      {
        "title": "API Reference",
        "body": "All SendGrid API endpoints follow this pattern:\n\n/sendgrid/v3/{resource}"
      },
      {
        "title": "Send Email",
        "body": "POST /sendgrid/v3/mail/send\nContent-Type: application/json\n\n{\n  \"personalizations\": [\n    {\n      \"to\": [{\"email\": \"recipient@example.com\", \"name\": \"Recipient\"}],\n      \"subject\": \"Hello from SendGrid\"\n    }\n  ],\n  \"from\": {\"email\": \"sender@example.com\", \"name\": \"Sender\"},\n  \"content\": [\n    {\n      \"type\": \"text/plain\",\n      \"value\": \"This is a test email.\"\n    }\n  ]\n}\n\nWith HTML content:\n\nPOST /sendgrid/v3/mail/send\nContent-Type: application/json\n\n{\n  \"personalizations\": [\n    {\n      \"to\": [{\"email\": \"recipient@example.com\"}],\n      \"subject\": \"HTML Email\"\n    }\n  ],\n  \"from\": {\"email\": \"sender@example.com\"},\n  \"content\": [\n    {\n      \"type\": \"text/html\",\n      \"value\": \"<h1>Hello</h1><p>This is an HTML email.</p>\"\n    }\n  ]\n}\n\nWith template:\n\nPOST /sendgrid/v3/mail/send\nContent-Type: application/json\n\n{\n  \"personalizations\": [\n    {\n      \"to\": [{\"email\": \"recipient@example.com\"}],\n      \"dynamic_template_data\": {\n        \"first_name\": \"John\",\n        \"order_id\": \"12345\"\n      }\n    }\n  ],\n  \"from\": {\"email\": \"sender@example.com\"},\n  \"template_id\": \"d-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"\n}"
      },
      {
        "title": "Get User Profile",
        "body": "GET /sendgrid/v3/user/profile\n\nResponse:\n\n{\n  \"type\": \"user\",\n  \"userid\": 59796657\n}"
      },
      {
        "title": "Get Account Details",
        "body": "GET /sendgrid/v3/user/account"
      },
      {
        "title": "List Contacts",
        "body": "GET /sendgrid/v3/marketing/contacts\n\nResponse:\n\n{\n  \"result\": [],\n  \"contact_count\": 0,\n  \"_metadata\": {\n    \"self\": \"https://api.sendgrid.com/v3/marketing/contacts\"\n  }\n}"
      },
      {
        "title": "Search Contacts",
        "body": "POST /sendgrid/v3/marketing/contacts/search\nContent-Type: application/json\n\n{\n  \"query\": \"email LIKE '%@example.com%'\"\n}"
      },
      {
        "title": "Add/Update Contacts",
        "body": "PUT /sendgrid/v3/marketing/contacts\nContent-Type: application/json\n\n{\n  \"contacts\": [\n    {\n      \"email\": \"contact@example.com\",\n      \"first_name\": \"John\",\n      \"last_name\": \"Doe\"\n    }\n  ]\n}\n\nResponse:\n\n{\n  \"job_id\": \"2387e363-4104-4225-8960-4a5758492351\"\n}\n\nNote: Contact operations are asynchronous. Use the job status endpoint to check progress."
      },
      {
        "title": "Get Import Job Status",
        "body": "GET /sendgrid/v3/marketing/contacts/imports/{job_id}\n\nResponse:\n\n{\n  \"id\": \"2387e363-4104-4225-8960-4a5758492351\",\n  \"status\": \"pending\",\n  \"job_type\": \"upsert_contacts\",\n  \"results\": {\n    \"requested_count\": 1,\n    \"created_count\": 1\n  },\n  \"started_at\": \"2026-02-11T11:00:14Z\"\n}"
      },
      {
        "title": "Delete Contacts",
        "body": "DELETE /sendgrid/v3/marketing/contacts?ids=contact_id_1,contact_id_2"
      },
      {
        "title": "Get Contact by ID",
        "body": "GET /sendgrid/v3/marketing/contacts/{contact_id}"
      },
      {
        "title": "Get Contact by Email",
        "body": "POST /sendgrid/v3/marketing/contacts/search/emails\nContent-Type: application/json\n\n{\n  \"emails\": [\"contact@example.com\"]\n}"
      },
      {
        "title": "List All Lists",
        "body": "GET /sendgrid/v3/marketing/lists\n\nResponse:\n\n{\n  \"result\": [],\n  \"_metadata\": {\n    \"self\": \"https://api.sendgrid.com/v3/marketing/lists?page_size=100&page_token=\"\n  }\n}"
      },
      {
        "title": "Create List",
        "body": "POST /sendgrid/v3/marketing/lists\nContent-Type: application/json\n\n{\n  \"name\": \"My Contact List\"\n}\n\nResponse:\n\n{\n  \"name\": \"My Contact List\",\n  \"id\": \"b050f139-4231-47c8-bf32-94ad76376d3b\",\n  \"contact_count\": 0,\n  \"_metadata\": {\n    \"self\": \"https://api.sendgrid.com/v3/marketing/lists/b050f139-4231-47c8-bf32-94ad76376d3b\"\n  }\n}"
      },
      {
        "title": "Get List by ID",
        "body": "GET /sendgrid/v3/marketing/lists/{list_id}"
      },
      {
        "title": "Update List",
        "body": "PATCH /sendgrid/v3/marketing/lists/{list_id}\nContent-Type: application/json\n\n{\n  \"name\": \"Updated List Name\"\n}"
      },
      {
        "title": "Delete List",
        "body": "DELETE /sendgrid/v3/marketing/lists/{list_id}"
      },
      {
        "title": "Add Contacts to List",
        "body": "PUT /sendgrid/v3/marketing/contacts\nContent-Type: application/json\n\n{\n  \"list_ids\": [\"list_id\"],\n  \"contacts\": [\n    {\"email\": \"contact@example.com\"}\n  ]\n}"
      },
      {
        "title": "List Segments",
        "body": "GET /sendgrid/v3/marketing/segments"
      },
      {
        "title": "Create Segment",
        "body": "POST /sendgrid/v3/marketing/segments\nContent-Type: application/json\n\n{\n  \"name\": \"Active Users\",\n  \"query_dsl\": \"email_clicks > 0\"\n}"
      },
      {
        "title": "Get Segment by ID",
        "body": "GET /sendgrid/v3/marketing/segments/{segment_id}"
      },
      {
        "title": "Delete Segment",
        "body": "DELETE /sendgrid/v3/marketing/segments/{segment_id}"
      },
      {
        "title": "List Templates",
        "body": "GET /sendgrid/v3/templates\n\nWith generation filter:\n\nGET /sendgrid/v3/templates?generations=dynamic"
      },
      {
        "title": "Create Template",
        "body": "POST /sendgrid/v3/templates\nContent-Type: application/json\n\n{\n  \"name\": \"My Template\",\n  \"generation\": \"dynamic\"\n}\n\nResponse:\n\n{\n  \"id\": \"d-ffcdb43ed8a04beba48a702e1717ddb5\",\n  \"name\": \"My Template\",\n  \"generation\": \"dynamic\",\n  \"updated_at\": \"2026-02-11 11:00:20\",\n  \"versions\": []\n}"
      },
      {
        "title": "Get Template by ID",
        "body": "GET /sendgrid/v3/templates/{template_id}"
      },
      {
        "title": "Update Template",
        "body": "PATCH /sendgrid/v3/templates/{template_id}\nContent-Type: application/json\n\n{\n  \"name\": \"Updated Template Name\"\n}"
      },
      {
        "title": "Delete Template",
        "body": "DELETE /sendgrid/v3/templates/{template_id}"
      },
      {
        "title": "Create Template Version",
        "body": "POST /sendgrid/v3/templates/{template_id}/versions\nContent-Type: application/json\n\n{\n  \"name\": \"Version 1\",\n  \"subject\": \"{{subject}}\",\n  \"html_content\": \"<html><body><h1>Hello {{name}}</h1></body></html>\",\n  \"active\": 1\n}\n\nResponse:\n\n{\n  \"id\": \"54230a99-1e89-4edf-821d-d4925b40c64b\",\n  \"template_id\": \"d-ffcdb43ed8a04beba48a702e1717ddb5\",\n  \"active\": 1,\n  \"name\": \"Version 1\",\n  \"html_content\": \"<html><body><h1>Hello {{name}}</h1></body></html>\",\n  \"plain_content\": \"Hello {{name}}\",\n  \"generate_plain_content\": true,\n  \"subject\": \"{{subject}}\",\n  \"editor\": \"code\",\n  \"thumbnail_url\": \"//...\"\n}"
      },
      {
        "title": "List Senders",
        "body": "GET /sendgrid/v3/senders"
      },
      {
        "title": "Create Sender",
        "body": "POST /sendgrid/v3/senders\nContent-Type: application/json\n\n{\n  \"nickname\": \"My Sender\",\n  \"from\": {\"email\": \"sender@example.com\", \"name\": \"Sender Name\"},\n  \"reply_to\": {\"email\": \"reply@example.com\", \"name\": \"Reply To\"},\n  \"address\": \"123 Main St\",\n  \"city\": \"San Francisco\",\n  \"country\": \"USA\"\n}\n\nResponse:\n\n{\n  \"id\": 8513177,\n  \"nickname\": \"My Sender\",\n  \"from\": {\"email\": \"sender@example.com\", \"name\": \"Sender Name\"},\n  \"reply_to\": {\"email\": \"reply@example.com\", \"name\": \"Reply To\"},\n  \"address\": \"123 Main St\",\n  \"city\": \"San Francisco\",\n  \"country\": \"USA\",\n  \"verified\": {\"status\": false, \"reason\": null},\n  \"updated_at\": 1770786031,\n  \"created_at\": 1770786031,\n  \"locked\": false\n}\n\nNote: Sender verification is required before use. Check verified.status."
      },
      {
        "title": "Get Sender by ID",
        "body": "GET /sendgrid/v3/senders/{sender_id}"
      },
      {
        "title": "Update Sender",
        "body": "PATCH /sendgrid/v3/senders/{sender_id}\nContent-Type: application/json\n\n{\n  \"nickname\": \"Updated Sender Name\"\n}"
      },
      {
        "title": "Delete Sender",
        "body": "DELETE /sendgrid/v3/senders/{sender_id}"
      },
      {
        "title": "Bounces",
        "body": "# List bounces\nGET /sendgrid/v3/suppression/bounces\n\n# Get bounce by email\nGET /sendgrid/v3/suppression/bounces/{email}\n\n# Delete bounces\nDELETE /sendgrid/v3/suppression/bounces\nContent-Type: application/json\n\n{\n  \"emails\": [\"bounce@example.com\"]\n}"
      },
      {
        "title": "Blocks",
        "body": "# List blocks\nGET /sendgrid/v3/suppression/blocks\n\n# Get block by email\nGET /sendgrid/v3/suppression/blocks/{email}\n\n# Delete blocks\nDELETE /sendgrid/v3/suppression/blocks\nContent-Type: application/json\n\n{\n  \"emails\": [\"blocked@example.com\"]\n}"
      },
      {
        "title": "Invalid Emails",
        "body": "# List invalid emails\nGET /sendgrid/v3/suppression/invalid_emails\n\n# Delete invalid emails\nDELETE /sendgrid/v3/suppression/invalid_emails\nContent-Type: application/json\n\n{\n  \"emails\": [\"invalid@example.com\"]\n}"
      },
      {
        "title": "Spam Reports",
        "body": "# List spam reports\nGET /sendgrid/v3/suppression/spam_reports\n\n# Delete spam reports\nDELETE /sendgrid/v3/suppression/spam_reports\nContent-Type: application/json\n\n{\n  \"emails\": [\"spam@example.com\"]\n}"
      },
      {
        "title": "Global Unsubscribes",
        "body": "# List global unsubscribes\nGET /sendgrid/v3/suppression/unsubscribes\n\n# Add to global unsubscribes\nPOST /sendgrid/v3/asm/suppressions/global\nContent-Type: application/json\n\n{\n  \"recipient_emails\": [\"unsubscribe@example.com\"]\n}"
      },
      {
        "title": "List Groups",
        "body": "GET /sendgrid/v3/asm/groups"
      },
      {
        "title": "Create Group",
        "body": "POST /sendgrid/v3/asm/groups\nContent-Type: application/json\n\n{\n  \"name\": \"Weekly Newsletter\",\n  \"description\": \"Weekly newsletter updates\"\n}\n\nResponse:\n\n{\n  \"name\": \"Weekly Newsletter\",\n  \"id\": 122741,\n  \"description\": \"Weekly newsletter updates\",\n  \"is_default\": false\n}"
      },
      {
        "title": "Get Group by ID",
        "body": "GET /sendgrid/v3/asm/groups/{group_id}"
      },
      {
        "title": "Update Group",
        "body": "PATCH /sendgrid/v3/asm/groups/{group_id}\nContent-Type: application/json\n\n{\n  \"name\": \"Updated Group Name\"\n}"
      },
      {
        "title": "Delete Group",
        "body": "DELETE /sendgrid/v3/asm/groups/{group_id}"
      },
      {
        "title": "Add Suppressions to Group",
        "body": "POST /sendgrid/v3/asm/groups/{group_id}/suppressions\nContent-Type: application/json\n\n{\n  \"recipient_emails\": [\"user@example.com\"]\n}"
      },
      {
        "title": "List Suppressions in Group",
        "body": "GET /sendgrid/v3/asm/groups/{group_id}/suppressions"
      },
      {
        "title": "Get Global Stats",
        "body": "GET /sendgrid/v3/stats?start_date=2026-02-01\n\nWith end date:\n\nGET /sendgrid/v3/stats?start_date=2026-02-01&end_date=2026-02-28\n\nResponse:\n\n[\n  {\n    \"date\": \"2026-02-01\",\n    \"stats\": [\n      {\n        \"metrics\": {\n          \"blocks\": 0,\n          \"bounce_drops\": 0,\n          \"bounces\": 0,\n          \"clicks\": 0,\n          \"deferred\": 0,\n          \"delivered\": 0,\n          \"invalid_emails\": 0,\n          \"opens\": 0,\n          \"processed\": 0,\n          \"requests\": 0,\n          \"spam_report_drops\": 0,\n          \"spam_reports\": 0,\n          \"unique_clicks\": 0,\n          \"unique_opens\": 0,\n          \"unsubscribe_drops\": 0,\n          \"unsubscribes\": 0\n        }\n      }\n    ]\n  }\n]"
      },
      {
        "title": "Category Stats",
        "body": "GET /sendgrid/v3/categories/stats?start_date=2026-02-01&categories=category1,category2"
      },
      {
        "title": "Mailbox Provider Stats",
        "body": "GET /sendgrid/v3/mailbox_providers/stats?start_date=2026-02-01"
      },
      {
        "title": "Browser Stats",
        "body": "GET /sendgrid/v3/browsers/stats?start_date=2026-02-01"
      },
      {
        "title": "List API Keys",
        "body": "GET /sendgrid/v3/api_keys\n\nResponse:\n\n{\n  \"result\": [\n    {\n      \"name\": \"MatonTest\",\n      \"api_key_id\": \"WJBgv5EKR8y0nn2F8Qfk5w\"\n    }\n  ]\n}"
      },
      {
        "title": "Create API Key",
        "body": "POST /sendgrid/v3/api_keys\nContent-Type: application/json\n\n{\n  \"name\": \"New API Key\",\n  \"scopes\": [\"mail.send\", \"alerts.read\"]\n}"
      },
      {
        "title": "Get API Key by ID",
        "body": "GET /sendgrid/v3/api_keys/{api_key_id}"
      },
      {
        "title": "Update API Key",
        "body": "PATCH /sendgrid/v3/api_keys/{api_key_id}\nContent-Type: application/json\n\n{\n  \"name\": \"Updated Key Name\"\n}"
      },
      {
        "title": "Delete API Key",
        "body": "DELETE /sendgrid/v3/api_keys/{api_key_id}"
      },
      {
        "title": "Pagination",
        "body": "SendGrid uses token-based pagination for marketing endpoints:\n\nGET /sendgrid/v3/marketing/lists?page_size=100&page_token={token}\n\nResponse includes:\n\n{\n  \"result\": [...],\n  \"_metadata\": {\n    \"self\": \"https://api.sendgrid.com/v3/marketing/lists?page_size=100&page_token=\",\n    \"next\": \"https://api.sendgrid.com/v3/marketing/lists?page_size=100&page_token=abc123\"\n  }\n}\n\nFor suppression endpoints, use limit and offset:\n\nGET /sendgrid/v3/suppression/bounces?limit=100&offset=0"
      },
      {
        "title": "JavaScript",
        "body": "// Send an email\nconst response = await fetch(\n  'https://gateway.maton.ai/sendgrid/v3/mail/send',\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      personalizations: [{\n        to: [{email: 'recipient@example.com'}],\n        subject: 'Hello'\n      }],\n      from: {email: 'sender@example.com'},\n      content: [{type: 'text/plain', value: 'Hello World'}]\n    })\n  }\n);"
      },
      {
        "title": "Python",
        "body": "import os\nimport requests\n\n# Get email stats\nresponse = requests.get(\n    'https://gateway.maton.ai/sendgrid/v3/stats',\n    headers={'Authorization': f'Bearer {os.environ[\"MATON_API_KEY\"]}'},\n    params={'start_date': '2026-02-01'}\n)\ndata = response.json()\nfor day in data:\n    metrics = day['stats'][0]['metrics']\n    print(f\"{day['date']}: {metrics['delivered']} delivered, {metrics['opens']} opens\")"
      },
      {
        "title": "Notes",
        "body": "All requests use JSON content type\nDates are in YYYY-MM-DD format\nTemplate IDs for dynamic templates start with d-\nMail send returns 202 Accepted on success (not 200)\nMarketing contact operations are asynchronous - use job status endpoints\nSuppression endpoints support date filtering with start_time and end_time (Unix timestamps)\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": "StatusMeaning400Bad request or validation error401Invalid or missing Maton API key403Insufficient permissions404Resource not found429Rate limited500Internal server error"
      },
      {
        "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 sendgrid. For example:\n\nCorrect: https://gateway.maton.ai/sendgrid/v3/user/profile\nIncorrect: https://gateway.maton.ai/v3/user/profile"
      },
      {
        "title": "Resources",
        "body": "SendGrid API Documentation\nMail Send API\nMarketing Campaigns API\nSuppressions Overview\nMaton Community\nMaton Support"
      }
    ],
    "body": "SendGrid\n\nAccess the SendGrid API with managed OAuth authentication. Send transactional and marketing emails, manage contacts, templates, suppressions, and analyze email performance.\n\nQuick Start\n# Get user profile\npython <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://gateway.maton.ai/sendgrid/v3/user/profile')\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/sendgrid/{native-api-path}\n\n\nReplace {native-api-path} with the actual SendGrid API endpoint path. The gateway proxies requests to api.sendgrid.com and automatically injects your OAuth 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 SendGrid OAuth 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=sendgrid&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': 'sendgrid'}).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\": \"943c6cd5-9a56-4f5b-8adf-ecd4a140049f\",\n    \"status\": \"ACTIVE\",\n    \"creation_time\": \"2026-02-11T10:53:41.817938Z\",\n    \"last_updated_time\": \"2026-02-11T10:54:05.554084Z\",\n    \"url\": \"https://connect.maton.ai/?session_token=...\",\n    \"app\": \"sendgrid\",\n    \"metadata\": {}\n  }\n}\n\n\nOpen the returned url in a browser to complete OAuth authorization.\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 SendGrid 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/sendgrid/v3/user/profile')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nreq.add_header('Maton-Connection', '943c6cd5-9a56-4f5b-8adf-ecd4a140049f')\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\n\nAll SendGrid API endpoints follow this pattern:\n\n/sendgrid/v3/{resource}\n\nMail Send\nSend Email\nPOST /sendgrid/v3/mail/send\nContent-Type: application/json\n\n{\n  \"personalizations\": [\n    {\n      \"to\": [{\"email\": \"recipient@example.com\", \"name\": \"Recipient\"}],\n      \"subject\": \"Hello from SendGrid\"\n    }\n  ],\n  \"from\": {\"email\": \"sender@example.com\", \"name\": \"Sender\"},\n  \"content\": [\n    {\n      \"type\": \"text/plain\",\n      \"value\": \"This is a test email.\"\n    }\n  ]\n}\n\n\nWith HTML content:\n\nPOST /sendgrid/v3/mail/send\nContent-Type: application/json\n\n{\n  \"personalizations\": [\n    {\n      \"to\": [{\"email\": \"recipient@example.com\"}],\n      \"subject\": \"HTML Email\"\n    }\n  ],\n  \"from\": {\"email\": \"sender@example.com\"},\n  \"content\": [\n    {\n      \"type\": \"text/html\",\n      \"value\": \"<h1>Hello</h1><p>This is an HTML email.</p>\"\n    }\n  ]\n}\n\n\nWith template:\n\nPOST /sendgrid/v3/mail/send\nContent-Type: application/json\n\n{\n  \"personalizations\": [\n    {\n      \"to\": [{\"email\": \"recipient@example.com\"}],\n      \"dynamic_template_data\": {\n        \"first_name\": \"John\",\n        \"order_id\": \"12345\"\n      }\n    }\n  ],\n  \"from\": {\"email\": \"sender@example.com\"},\n  \"template_id\": \"d-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"\n}\n\nUser Profile\nGet User Profile\nGET /sendgrid/v3/user/profile\n\n\nResponse:\n\n{\n  \"type\": \"user\",\n  \"userid\": 59796657\n}\n\nGet Account Details\nGET /sendgrid/v3/user/account\n\nMarketing Contacts\nList Contacts\nGET /sendgrid/v3/marketing/contacts\n\n\nResponse:\n\n{\n  \"result\": [],\n  \"contact_count\": 0,\n  \"_metadata\": {\n    \"self\": \"https://api.sendgrid.com/v3/marketing/contacts\"\n  }\n}\n\nSearch Contacts\nPOST /sendgrid/v3/marketing/contacts/search\nContent-Type: application/json\n\n{\n  \"query\": \"email LIKE '%@example.com%'\"\n}\n\nAdd/Update Contacts\nPUT /sendgrid/v3/marketing/contacts\nContent-Type: application/json\n\n{\n  \"contacts\": [\n    {\n      \"email\": \"contact@example.com\",\n      \"first_name\": \"John\",\n      \"last_name\": \"Doe\"\n    }\n  ]\n}\n\n\nResponse:\n\n{\n  \"job_id\": \"2387e363-4104-4225-8960-4a5758492351\"\n}\n\n\nNote: Contact operations are asynchronous. Use the job status endpoint to check progress.\n\nGet Import Job Status\nGET /sendgrid/v3/marketing/contacts/imports/{job_id}\n\n\nResponse:\n\n{\n  \"id\": \"2387e363-4104-4225-8960-4a5758492351\",\n  \"status\": \"pending\",\n  \"job_type\": \"upsert_contacts\",\n  \"results\": {\n    \"requested_count\": 1,\n    \"created_count\": 1\n  },\n  \"started_at\": \"2026-02-11T11:00:14Z\"\n}\n\nDelete Contacts\nDELETE /sendgrid/v3/marketing/contacts?ids=contact_id_1,contact_id_2\n\nGet Contact by ID\nGET /sendgrid/v3/marketing/contacts/{contact_id}\n\nGet Contact by Email\nPOST /sendgrid/v3/marketing/contacts/search/emails\nContent-Type: application/json\n\n{\n  \"emails\": [\"contact@example.com\"]\n}\n\nMarketing Lists\nList All Lists\nGET /sendgrid/v3/marketing/lists\n\n\nResponse:\n\n{\n  \"result\": [],\n  \"_metadata\": {\n    \"self\": \"https://api.sendgrid.com/v3/marketing/lists?page_size=100&page_token=\"\n  }\n}\n\nCreate List\nPOST /sendgrid/v3/marketing/lists\nContent-Type: application/json\n\n{\n  \"name\": \"My Contact List\"\n}\n\n\nResponse:\n\n{\n  \"name\": \"My Contact List\",\n  \"id\": \"b050f139-4231-47c8-bf32-94ad76376d3b\",\n  \"contact_count\": 0,\n  \"_metadata\": {\n    \"self\": \"https://api.sendgrid.com/v3/marketing/lists/b050f139-4231-47c8-bf32-94ad76376d3b\"\n  }\n}\n\nGet List by ID\nGET /sendgrid/v3/marketing/lists/{list_id}\n\nUpdate List\nPATCH /sendgrid/v3/marketing/lists/{list_id}\nContent-Type: application/json\n\n{\n  \"name\": \"Updated List Name\"\n}\n\nDelete List\nDELETE /sendgrid/v3/marketing/lists/{list_id}\n\nAdd Contacts to List\nPUT /sendgrid/v3/marketing/contacts\nContent-Type: application/json\n\n{\n  \"list_ids\": [\"list_id\"],\n  \"contacts\": [\n    {\"email\": \"contact@example.com\"}\n  ]\n}\n\nSegments\nList Segments\nGET /sendgrid/v3/marketing/segments\n\nCreate Segment\nPOST /sendgrid/v3/marketing/segments\nContent-Type: application/json\n\n{\n  \"name\": \"Active Users\",\n  \"query_dsl\": \"email_clicks > 0\"\n}\n\nGet Segment by ID\nGET /sendgrid/v3/marketing/segments/{segment_id}\n\nDelete Segment\nDELETE /sendgrid/v3/marketing/segments/{segment_id}\n\nTemplates\nList Templates\nGET /sendgrid/v3/templates\n\n\nWith generation filter:\n\nGET /sendgrid/v3/templates?generations=dynamic\n\nCreate Template\nPOST /sendgrid/v3/templates\nContent-Type: application/json\n\n{\n  \"name\": \"My Template\",\n  \"generation\": \"dynamic\"\n}\n\n\nResponse:\n\n{\n  \"id\": \"d-ffcdb43ed8a04beba48a702e1717ddb5\",\n  \"name\": \"My Template\",\n  \"generation\": \"dynamic\",\n  \"updated_at\": \"2026-02-11 11:00:20\",\n  \"versions\": []\n}\n\nGet Template by ID\nGET /sendgrid/v3/templates/{template_id}\n\nUpdate Template\nPATCH /sendgrid/v3/templates/{template_id}\nContent-Type: application/json\n\n{\n  \"name\": \"Updated Template Name\"\n}\n\nDelete Template\nDELETE /sendgrid/v3/templates/{template_id}\n\nCreate Template Version\nPOST /sendgrid/v3/templates/{template_id}/versions\nContent-Type: application/json\n\n{\n  \"name\": \"Version 1\",\n  \"subject\": \"{{subject}}\",\n  \"html_content\": \"<html><body><h1>Hello {{name}}</h1></body></html>\",\n  \"active\": 1\n}\n\n\nResponse:\n\n{\n  \"id\": \"54230a99-1e89-4edf-821d-d4925b40c64b\",\n  \"template_id\": \"d-ffcdb43ed8a04beba48a702e1717ddb5\",\n  \"active\": 1,\n  \"name\": \"Version 1\",\n  \"html_content\": \"<html><body><h1>Hello {{name}}</h1></body></html>\",\n  \"plain_content\": \"Hello {{name}}\",\n  \"generate_plain_content\": true,\n  \"subject\": \"{{subject}}\",\n  \"editor\": \"code\",\n  \"thumbnail_url\": \"//...\"\n}\n\nSenders\nList Senders\nGET /sendgrid/v3/senders\n\nCreate Sender\nPOST /sendgrid/v3/senders\nContent-Type: application/json\n\n{\n  \"nickname\": \"My Sender\",\n  \"from\": {\"email\": \"sender@example.com\", \"name\": \"Sender Name\"},\n  \"reply_to\": {\"email\": \"reply@example.com\", \"name\": \"Reply To\"},\n  \"address\": \"123 Main St\",\n  \"city\": \"San Francisco\",\n  \"country\": \"USA\"\n}\n\n\nResponse:\n\n{\n  \"id\": 8513177,\n  \"nickname\": \"My Sender\",\n  \"from\": {\"email\": \"sender@example.com\", \"name\": \"Sender Name\"},\n  \"reply_to\": {\"email\": \"reply@example.com\", \"name\": \"Reply To\"},\n  \"address\": \"123 Main St\",\n  \"city\": \"San Francisco\",\n  \"country\": \"USA\",\n  \"verified\": {\"status\": false, \"reason\": null},\n  \"updated_at\": 1770786031,\n  \"created_at\": 1770786031,\n  \"locked\": false\n}\n\n\nNote: Sender verification is required before use. Check verified.status.\n\nGet Sender by ID\nGET /sendgrid/v3/senders/{sender_id}\n\nUpdate Sender\nPATCH /sendgrid/v3/senders/{sender_id}\nContent-Type: application/json\n\n{\n  \"nickname\": \"Updated Sender Name\"\n}\n\nDelete Sender\nDELETE /sendgrid/v3/senders/{sender_id}\n\nSuppressions\nBounces\n# List bounces\nGET /sendgrid/v3/suppression/bounces\n\n# Get bounce by email\nGET /sendgrid/v3/suppression/bounces/{email}\n\n# Delete bounces\nDELETE /sendgrid/v3/suppression/bounces\nContent-Type: application/json\n\n{\n  \"emails\": [\"bounce@example.com\"]\n}\n\nBlocks\n# List blocks\nGET /sendgrid/v3/suppression/blocks\n\n# Get block by email\nGET /sendgrid/v3/suppression/blocks/{email}\n\n# Delete blocks\nDELETE /sendgrid/v3/suppression/blocks\nContent-Type: application/json\n\n{\n  \"emails\": [\"blocked@example.com\"]\n}\n\nInvalid Emails\n# List invalid emails\nGET /sendgrid/v3/suppression/invalid_emails\n\n# Delete invalid emails\nDELETE /sendgrid/v3/suppression/invalid_emails\nContent-Type: application/json\n\n{\n  \"emails\": [\"invalid@example.com\"]\n}\n\nSpam Reports\n# List spam reports\nGET /sendgrid/v3/suppression/spam_reports\n\n# Delete spam reports\nDELETE /sendgrid/v3/suppression/spam_reports\nContent-Type: application/json\n\n{\n  \"emails\": [\"spam@example.com\"]\n}\n\nGlobal Unsubscribes\n# List global unsubscribes\nGET /sendgrid/v3/suppression/unsubscribes\n\n# Add to global unsubscribes\nPOST /sendgrid/v3/asm/suppressions/global\nContent-Type: application/json\n\n{\n  \"recipient_emails\": [\"unsubscribe@example.com\"]\n}\n\nUnsubscribe Groups (ASM)\nList Groups\nGET /sendgrid/v3/asm/groups\n\nCreate Group\nPOST /sendgrid/v3/asm/groups\nContent-Type: application/json\n\n{\n  \"name\": \"Weekly Newsletter\",\n  \"description\": \"Weekly newsletter updates\"\n}\n\n\nResponse:\n\n{\n  \"name\": \"Weekly Newsletter\",\n  \"id\": 122741,\n  \"description\": \"Weekly newsletter updates\",\n  \"is_default\": false\n}\n\nGet Group by ID\nGET /sendgrid/v3/asm/groups/{group_id}\n\nUpdate Group\nPATCH /sendgrid/v3/asm/groups/{group_id}\nContent-Type: application/json\n\n{\n  \"name\": \"Updated Group Name\"\n}\n\nDelete Group\nDELETE /sendgrid/v3/asm/groups/{group_id}\n\nAdd Suppressions to Group\nPOST /sendgrid/v3/asm/groups/{group_id}/suppressions\nContent-Type: application/json\n\n{\n  \"recipient_emails\": [\"user@example.com\"]\n}\n\nList Suppressions in Group\nGET /sendgrid/v3/asm/groups/{group_id}/suppressions\n\nStatistics\nGet Global Stats\nGET /sendgrid/v3/stats?start_date=2026-02-01\n\n\nWith end date:\n\nGET /sendgrid/v3/stats?start_date=2026-02-01&end_date=2026-02-28\n\n\nResponse:\n\n[\n  {\n    \"date\": \"2026-02-01\",\n    \"stats\": [\n      {\n        \"metrics\": {\n          \"blocks\": 0,\n          \"bounce_drops\": 0,\n          \"bounces\": 0,\n          \"clicks\": 0,\n          \"deferred\": 0,\n          \"delivered\": 0,\n          \"invalid_emails\": 0,\n          \"opens\": 0,\n          \"processed\": 0,\n          \"requests\": 0,\n          \"spam_report_drops\": 0,\n          \"spam_reports\": 0,\n          \"unique_clicks\": 0,\n          \"unique_opens\": 0,\n          \"unsubscribe_drops\": 0,\n          \"unsubscribes\": 0\n        }\n      }\n    ]\n  }\n]\n\nCategory Stats\nGET /sendgrid/v3/categories/stats?start_date=2026-02-01&categories=category1,category2\n\nMailbox Provider Stats\nGET /sendgrid/v3/mailbox_providers/stats?start_date=2026-02-01\n\nBrowser Stats\nGET /sendgrid/v3/browsers/stats?start_date=2026-02-01\n\nAPI Keys\nList API Keys\nGET /sendgrid/v3/api_keys\n\n\nResponse:\n\n{\n  \"result\": [\n    {\n      \"name\": \"MatonTest\",\n      \"api_key_id\": \"WJBgv5EKR8y0nn2F8Qfk5w\"\n    }\n  ]\n}\n\nCreate API Key\nPOST /sendgrid/v3/api_keys\nContent-Type: application/json\n\n{\n  \"name\": \"New API Key\",\n  \"scopes\": [\"mail.send\", \"alerts.read\"]\n}\n\nGet API Key by ID\nGET /sendgrid/v3/api_keys/{api_key_id}\n\nUpdate API Key\nPATCH /sendgrid/v3/api_keys/{api_key_id}\nContent-Type: application/json\n\n{\n  \"name\": \"Updated Key Name\"\n}\n\nDelete API Key\nDELETE /sendgrid/v3/api_keys/{api_key_id}\n\nPagination\n\nSendGrid uses token-based pagination for marketing endpoints:\n\nGET /sendgrid/v3/marketing/lists?page_size=100&page_token={token}\n\n\nResponse includes:\n\n{\n  \"result\": [...],\n  \"_metadata\": {\n    \"self\": \"https://api.sendgrid.com/v3/marketing/lists?page_size=100&page_token=\",\n    \"next\": \"https://api.sendgrid.com/v3/marketing/lists?page_size=100&page_token=abc123\"\n  }\n}\n\n\nFor suppression endpoints, use limit and offset:\n\nGET /sendgrid/v3/suppression/bounces?limit=100&offset=0\n\nCode Examples\nJavaScript\n// Send an email\nconst response = await fetch(\n  'https://gateway.maton.ai/sendgrid/v3/mail/send',\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      personalizations: [{\n        to: [{email: 'recipient@example.com'}],\n        subject: 'Hello'\n      }],\n      from: {email: 'sender@example.com'},\n      content: [{type: 'text/plain', value: 'Hello World'}]\n    })\n  }\n);\n\nPython\nimport os\nimport requests\n\n# Get email stats\nresponse = requests.get(\n    'https://gateway.maton.ai/sendgrid/v3/stats',\n    headers={'Authorization': f'Bearer {os.environ[\"MATON_API_KEY\"]}'},\n    params={'start_date': '2026-02-01'}\n)\ndata = response.json()\nfor day in data:\n    metrics = day['stats'][0]['metrics']\n    print(f\"{day['date']}: {metrics['delivered']} delivered, {metrics['opens']} opens\")\n\nNotes\nAll requests use JSON content type\nDates are in YYYY-MM-DD format\nTemplate IDs for dynamic templates start with d-\nMail send returns 202 Accepted on success (not 200)\nMarketing contact operations are asynchronous - use job status endpoints\nSuppression endpoints support date filtering with start_time and end_time (Unix timestamps)\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\tBad request or validation error\n401\tInvalid or missing Maton API key\n403\tInsufficient permissions\n404\tResource not found\n429\tRate limited\n500\tInternal server error\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 sendgrid. For example:\nCorrect: https://gateway.maton.ai/sendgrid/v3/user/profile\nIncorrect: https://gateway.maton.ai/v3/user/profile\nResources\nSendGrid API Documentation\nMail Send API\nMarketing Campaigns API\nSuppressions Overview\nMaton Community\nMaton Support"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/byungkyu/sendgrid",
    "publisherUrl": "https://clawhub.ai/byungkyu/sendgrid",
    "owner": "byungkyu",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/sendgrid",
    "downloadUrl": "https://openagent3.xyz/downloads/sendgrid",
    "agentUrl": "https://openagent3.xyz/skills/sendgrid/agent",
    "manifestUrl": "https://openagent3.xyz/skills/sendgrid/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/sendgrid/agent.md"
  }
}