> ## Documentation Index
> Fetch the complete documentation index at: https://docs.modulex.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# SendGrid Integration for AI Agents & Workflows

> Email delivery and marketing platform for transactional and marketing emails. Send emails, manage contacts, create lists, and handle email suppressions.

{/* Self-hosted logo — build-time vendored from modulex.json / Iconify (see scripts/lib/logo.js). */}

<img src="https://mintcdn.com/modulexaillc/df8MOr-hXotYLTh5/logos/sendgrid.svg?fit=max&auto=format&n=df8MOr-hXotYLTh5&q=85&s=1e99775f6c7f0927a7e6121ce86e4d93" alt="SendGrid logo" width="72" height="72" data-path="logos/sendgrid.svg" />

## Overview

Add **SendGrid** to any ModuleX agent or workflow. SendGrid transactional + marketing email integration via the SendGrid v3 REST API. Pure HTTP, no SDK dep.

<Info>
  **Categories**: Marketing & Advertising · Marketing & Email · Email · Automation · **Auth**: API Key · **Actions**: 15
</Info>

## Authentication

### API Key Authentication

Authenticate using your SendGrid API key. Create one in Settings > API Keys.

#### Required Credentials

| Field            | Description                                  | Required | Format                                |
| ---------------- | -------------------------------------------- | -------- | ------------------------------------- |
| SendGrid API Key | Your SendGrid API key for API authentication | Yes      | `SG.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX` |

## Available Actions

<AccordionGroup>
  <Accordion title="send_email — Send a single transactional email to one recipient">
    ### Parameters

    <ResponseField name="to_email" type="string" required>
      Recipient email address
    </ResponseField>

    <ResponseField name="from_email" type="string" required>
      Sender email address (must be verified)
    </ResponseField>

    <ResponseField name="subject" type="string" required>
      Email subject line
    </ResponseField>

    <ResponseField name="content" type="string" required>
      Email body content (plain text or HTML)
    </ResponseField>

    <ResponseField name="content_type" type="string">
      Content type ('text/plain' or 'text/html') (Default: `text/plain`)
    </ResponseField>

    <ResponseField name="from_name" type="string">
      Sender display name
    </ResponseField>

    <ResponseField name="to_name" type="string">
      Recipient display name
    </ResponseField>

    <ResponseField name="reply_to_email" type="string">
      Reply-to email address
    </ResponseField>

    <ResponseField name="cc_emails" type="array">
      CC email addresses
    </ResponseField>

    <ResponseField name="bcc_emails" type="array">
      BCC email addresses
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "message": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Message"
        },
        "to": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "To"
        },
        "subject": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Subject"
        },
        "message_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Message Id"
        }
      },
      "required": [
        "success"
      ],
      "title": "SendEmailOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="send_email_multiple_recipients — Send the same email to multiple recipients individually (each recipient gets a separate copy)">
    ### Parameters

    <ResponseField name="to_emails" type="array" required>
      List of recipient email addresses
    </ResponseField>

    <ResponseField name="from_email" type="string" required>
      Sender email address (must be verified)
    </ResponseField>

    <ResponseField name="subject" type="string" required>
      Email subject line
    </ResponseField>

    <ResponseField name="content" type="string" required>
      Email body content (plain text or HTML)
    </ResponseField>

    <ResponseField name="content_type" type="string">
      Content type ('text/plain' or 'text/html') (Default: `text/plain`)
    </ResponseField>

    <ResponseField name="from_name" type="string">
      Sender display name
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "message": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Message"
        },
        "recipient_count": {
          "default": 0,
          "title": "Recipient Count",
          "type": "integer"
        },
        "recipients": {
          "items": {
            "type": "string"
          },
          "title": "Recipients",
          "type": "array"
        },
        "subject": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Subject"
        },
        "message_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Message Id"
        }
      },
      "required": [
        "success"
      ],
      "title": "SendEmailMultipleRecipientsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="add_or_update_contact — Create a new contact or update an existing one (matched by email). Optionally adds to specified lists.">
    ### Parameters

    <ResponseField name="email" type="string" required>
      Contact email address
    </ResponseField>

    <ResponseField name="first_name" type="string">
      Contact's first name
    </ResponseField>

    <ResponseField name="last_name" type="string">
      Contact's last name
    </ResponseField>

    <ResponseField name="address_line_1" type="string">
      First line of address
    </ResponseField>

    <ResponseField name="address_line_2" type="string">
      Second line of address
    </ResponseField>

    <ResponseField name="city" type="string">
      Contact's city
    </ResponseField>

    <ResponseField name="state_province_region" type="string">
      State, province, or region
    </ResponseField>

    <ResponseField name="postal_code" type="string">
      ZIP or postal code
    </ResponseField>

    <ResponseField name="country" type="string">
      Contact's country
    </ResponseField>

    <ResponseField name="alternate_emails" type="array">
      Additional email addresses
    </ResponseField>

    <ResponseField name="list_ids" type="array">
      List IDs to add the contact to
    </ResponseField>

    <ResponseField name="custom_fields" type="object">
      Custom field values
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "message": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Message"
        },
        "job_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Job Id"
        },
        "email": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Email"
        }
      },
      "required": [
        "success"
      ],
      "title": "AddOrUpdateContactOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="search_contacts — Search contacts using SendGrid Query Language (SGQL)">
    ### Parameters

    <ResponseField name="query" type="string" required>
      SGQL query (e.g. "email LIKE 'test%'" or "first\_name='John'")
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "ContactSummary": {
          "additionalProperties": false,
          "properties": {
            "id": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Id"
            },
            "email": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Email"
            },
            "first_name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "First Name"
            },
            "last_name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Last Name"
            },
            "created_at": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Created At"
            },
            "updated_at": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Updated At"
            }
          },
          "title": "ContactSummary",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "contacts": {
          "items": {
            "$ref": "#/$defs/ContactSummary"
          },
          "title": "Contacts",
          "type": "array"
        },
        "count": {
          "default": 0,
          "title": "Count",
          "type": "integer"
        },
        "contact_count": {
          "default": 0,
          "title": "Contact Count",
          "type": "integer"
        }
      },
      "required": [
        "success"
      ],
      "title": "SearchContactsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="create_contact_list — Create a new contact list">
    ### Parameters

    <ResponseField name="name" type="string" required>
      Name for the new list (max 100 characters)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Id"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "contact_count": {
          "default": 0,
          "title": "Contact Count",
          "type": "integer"
        }
      },
      "required": [
        "success"
      ],
      "title": "CreateContactListOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="get_contact_lists — Get all contact lists with their IDs and counts">
    ### Parameters

    <ResponseField name="page_size" type="integer">
      Number of lists to return (max 1000) (Default: `100`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "ListSummary": {
          "additionalProperties": false,
          "properties": {
            "id": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Id"
            },
            "name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Name"
            },
            "contact_count": {
              "default": 0,
              "title": "Contact Count",
              "type": "integer"
            }
          },
          "title": "ListSummary",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "lists": {
          "items": {
            "$ref": "#/$defs/ListSummary"
          },
          "title": "Lists",
          "type": "array"
        },
        "count": {
          "default": 0,
          "title": "Count",
          "type": "integer"
        }
      },
      "required": [
        "success"
      ],
      "title": "GetContactListsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="remove_contact_from_list — Remove contacts from a list (does not delete them)">
    ### Parameters

    <ResponseField name="list_id" type="string" required>
      ID of the list
    </ResponseField>

    <ResponseField name="contact_ids" type="array" required>
      Contact IDs to remove
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "message": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Message"
        },
        "list_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "List Id"
        },
        "contacts_removed": {
          "default": 0,
          "title": "Contacts Removed",
          "type": "integer"
        }
      },
      "required": [
        "success"
      ],
      "title": "RemoveContactFromListOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="delete_contacts — Permanently delete specified contacts (or all)">
    ### Parameters

    <ResponseField name="contact_ids" type="array">
      Contact IDs to delete
    </ResponseField>

    <ResponseField name="delete_all" type="boolean">
      Delete every contact (use with caution) (Default: `false`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "message": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Message"
        },
        "job_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Job Id"
        },
        "deleted_count": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Deleted Count"
        }
      },
      "required": [
        "success"
      ],
      "title": "DeleteContactsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="add_email_to_global_suppression — Add emails to the global suppression group">
    ### Parameters

    <ResponseField name="recipient_emails" type="array" required>
      Email addresses to suppress
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "message": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Message"
        },
        "suppressed_emails": {
          "items": {
            "type": "string"
          },
          "title": "Suppressed Emails",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "AddEmailToGlobalSuppressionOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="delete_global_suppression — Remove an email from the global suppression group">
    ### Parameters

    <ResponseField name="email" type="string" required>
      Email address to remove
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "message": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Message"
        },
        "email": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Email"
        }
      },
      "required": [
        "success"
      ],
      "title": "DeleteGlobalSuppressionOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_global_suppressions — List all globally suppressed (unsubscribed) emails">
    ### Parameters

    <ResponseField name="start_time" type="integer">
      Start time as Unix timestamp
    </ResponseField>

    <ResponseField name="end_time" type="integer">
      End time as Unix timestamp
    </ResponseField>

    <ResponseField name="limit" type="integer">
      Maximum number of results (Default: `100`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "SuppressionRow": {
          "additionalProperties": false,
          "properties": {
            "email": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Email"
            },
            "created": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Created"
            },
            "reason": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Reason"
            },
            "status": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Status"
            }
          },
          "title": "SuppressionRow",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "suppressions": {
          "items": {
            "$ref": "#/$defs/SuppressionRow"
          },
          "title": "Suppressions",
          "type": "array"
        },
        "count": {
          "default": 0,
          "title": "Count",
          "type": "integer"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListGlobalSuppressionsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="get_all_bounces — Get all bounced email addresses">
    ### Parameters

    <ResponseField name="start_time" type="integer">
      Start time as Unix timestamp
    </ResponseField>

    <ResponseField name="end_time" type="integer">
      End time as Unix timestamp
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "SuppressionRow": {
          "additionalProperties": false,
          "properties": {
            "email": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Email"
            },
            "created": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Created"
            },
            "reason": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Reason"
            },
            "status": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Status"
            }
          },
          "title": "SuppressionRow",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "bounces": {
          "items": {
            "$ref": "#/$defs/SuppressionRow"
          },
          "title": "Bounces",
          "type": "array"
        },
        "count": {
          "default": 0,
          "title": "Count",
          "type": "integer"
        }
      },
      "required": [
        "success"
      ],
      "title": "GetAllBouncesOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="delete_bounces — Remove emails from the bounces list">
    ### Parameters

    <ResponseField name="emails" type="array">
      Email addresses to remove from bounce
    </ResponseField>

    <ResponseField name="delete_all" type="boolean">
      Delete every bounce (use with caution) (Default: `false`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "message": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Message"
        },
        "deleted_count": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Deleted Count"
        }
      },
      "required": [
        "success"
      ],
      "title": "DeleteBouncesOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_blocks — List all blocked email addresses">
    ### Parameters

    <ResponseField name="start_time" type="integer">
      Start time as Unix timestamp
    </ResponseField>

    <ResponseField name="end_time" type="integer">
      End time as Unix timestamp
    </ResponseField>

    <ResponseField name="limit" type="integer">
      Maximum number of results (Default: `100`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "SuppressionRow": {
          "additionalProperties": false,
          "properties": {
            "email": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Email"
            },
            "created": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Created"
            },
            "reason": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Reason"
            },
            "status": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Status"
            }
          },
          "title": "SuppressionRow",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "blocks": {
          "items": {
            "$ref": "#/$defs/SuppressionRow"
          },
          "title": "Blocks",
          "type": "array"
        },
        "count": {
          "default": 0,
          "title": "Count",
          "type": "integer"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListBlocksOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="delete_blocks — Remove emails from the blocks list">
    ### Parameters

    <ResponseField name="emails" type="array">
      Email addresses to remove from block
    </ResponseField>

    <ResponseField name="delete_all" type="boolean">
      Delete every block (use with caution) (Default: `false`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "message": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Message"
        },
        "deleted_count": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Deleted Count"
        }
      },
      "required": [
        "success"
      ],
      "title": "DeleteBlocksOutput",
      "type": "object"
    }
    ```
  </Accordion>
</AccordionGroup>

## Limits & Quotas

* 30s timeout on every request.
* `get_contact_lists.page_size` is clamped at 1000 (SendGrid max).
* Mutating actions wrap everything in try/except → `success=False`
  envelope (exa-style); HTTP timeouts surface as a distinct error
  message.

## Related integrations

<CardGroup cols={3}>
  <Card title="Klaviyo" href="/integrations/tools/klaviyo" />

  <Card title="AgentMail" href="/integrations/tools/agentmail" />

  <Card title="Customer.io" href="/integrations/tools/customerio" />
</CardGroup>

## Links

* [SendGrid](https://sendgrid.com)
