groundmail-dev · Schema

SendEmailRequest

`subject` is required unless `template` is provided (subject comes from the published template). Provide `html` and/or `text`, or `template` (mutually exclusive). React Email is compiled client-side by the Node SDK (`react` option) — do not send `react` to the HTTP API.

EmailAPITransactionalSMTPDeveloper

Properties

Name Type Description
from object
to object
subject string Required unless using `template` (optional override when sending with a template).
html string
htmlBody string Alias for html
html_body string Alias for html
text string
textBody string Alias for text
text_body string Alias for text
plain_body string Alias for text
template object
reply_to object
replyTo object Alias for reply_to
cc object
bcc object
tags object Key/value tags stored with the email. Groundmail derives a single tag for delivery metadata.
tag string Optional delivery tag override.
headers object Custom headers after server-side safety filtering.
attachments array Up to 10 files, each up to 10MB decoded. The whole request is at most 20MB, Base64-encoded attachments included (Base64 adds about a third), or the send is refused with 413. Not supported for batch se
scheduled_at string Schedule delivery for a future ISO 8601 timestamp. Returns status `scheduled`.
scheduledAt string Alias for scheduled_at.
unsubscribe boolean Opt in to managed unsubscribe for this send. Injects RFC 8058 `List-Unsubscribe` headers and replaces `{{unsubscribe_url}}` in subject/html/text. When sending with a template, inherits the template's
category string Optional send-level category override. Defaults to the template's category when sending with a template, otherwise `transactional`. `product` (onboarding, lifecycle and notification email) supports ca
tenant string Send as one of your tenants (its `external_id` or `id`). The send uses that tenant's domains, suppression list, sending ramp, daily limit and pause switch. Readers who unsubscribe from a tenant's emai
View JSON Schema on GitHub

JSON Schema

groundmail-dev-send-email-request-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/groundmail-dev/json-schema/groundmail-dev-send-email-request-schema.json",
  "title": "SendEmailRequest",
  "description": "`subject` is required unless `template` is provided (subject comes from the published template).\nProvide `html` and/or `text`, or `template` (mutually exclusive). React Email is compiled\nclient-side by the Node SDK (`react` option) — do not send `react` to the HTTP API.\n",
  "x-generated": "2026-10-30",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/groundmail-dev-openapi.yaml#/components/schemas/SendEmailRequest",
  "type": "object",
  "required": [
    "from",
    "to"
  ],
  "properties": {
    "from": {
      "oneOf": [
        {
          "type": "string",
          "format": "email"
        },
        {
          "type": "object",
          "required": [
            "email"
          ],
          "properties": {
            "email": {
              "type": "string",
              "format": "email"
            },
            "name": {
              "type": "string"
            }
          }
        }
      ]
    },
    "to": {
      "oneOf": [
        {
          "type": "string",
          "format": "email"
        },
        {
          "type": "array",
          "items": {
            "type": "string",
            "format": "email"
          }
        }
      ]
    },
    "subject": {
      "type": "string",
      "description": "Required unless using `template` (optional override when sending with a template)."
    },
    "html": {
      "type": "string"
    },
    "htmlBody": {
      "type": "string",
      "description": "Alias for html"
    },
    "html_body": {
      "type": "string",
      "description": "Alias for html"
    },
    "text": {
      "type": "string"
    },
    "textBody": {
      "type": "string",
      "description": "Alias for text"
    },
    "text_body": {
      "type": "string",
      "description": "Alias for text"
    },
    "plain_body": {
      "type": "string",
      "description": "Alias for text"
    },
    "template": {
      "$ref": "#/$defs/SendTemplateRef"
    },
    "reply_to": {
      "oneOf": [
        {
          "type": "string",
          "format": "email"
        },
        {
          "type": "array",
          "items": {
            "type": "string",
            "format": "email"
          }
        }
      ]
    },
    "replyTo": {
      "oneOf": [
        {
          "type": "string",
          "format": "email"
        },
        {
          "type": "array",
          "items": {
            "type": "string",
            "format": "email"
          }
        }
      ],
      "description": "Alias for reply_to"
    },
    "cc": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      ]
    },
    "bcc": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      ]
    },
    "tags": {
      "oneOf": [
        {
          "type": "array",
          "maxItems": 10,
          "items": {
            "$ref": "#/$defs/EmailTag"
          }
        },
        {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        }
      ],
      "description": "Key/value tags stored with the email. Groundmail derives a single tag for delivery metadata."
    },
    "tag": {
      "type": "string",
      "description": "Optional delivery tag override."
    },
    "headers": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      },
      "description": "Custom headers after server-side safety filtering."
    },
    "attachments": {
      "type": "array",
      "maxItems": 10,
      "description": "Up to 10 files, each up to 10MB decoded. The whole request is at most 20MB, Base64-encoded attachments included (Base64 adds about a third), or the send is refused with 413. Not supported for batch sends or scheduled sends in v1.\n",
      "items": {
        "$ref": "#/$defs/EmailAttachment"
      }
    },
    "scheduled_at": {
      "type": "string",
      "format": "date-time",
      "description": "Schedule delivery for a future ISO 8601 timestamp. Returns status `scheduled`."
    },
    "scheduledAt": {
      "type": "string",
      "format": "date-time",
      "description": "Alias for scheduled_at."
    },
    "unsubscribe": {
      "type": "boolean",
      "description": "Opt in to managed unsubscribe for this send. Injects RFC 8058 `List-Unsubscribe`\nheaders and replaces `{{unsubscribe_url}}` in subject/html/text. When sending with\na template, inherits the template's `unsubscribe_enabled` setting unless overridden here.\n"
    },
    "category": {
      "type": "string",
      "enum": [
        "transactional",
        "product",
        "newsletter"
      ],
      "description": "Optional send-level category override. Defaults to the template's category when sending\nwith a template, otherwise `transactional`. `product` (onboarding, lifecycle and\nnotification email) supports category-scoped opt-out and auto-enables managed\nunsubscribe. Transactional and product email are sent from separate IP pools.\n`newsletter` (opt-in newsletters) is accepted only for approved accounts: it is sent\nfrom its own IPs, separate from transactional and product email, always carries\n`List-Unsubscribe` and one-click unsubscribe (`unsubscribe: false` is a\n`validation_error`), honours category opt-outs, and has its own daily ramp-up limit.\nOn an account that is not approved it fails with 403 `newsletter_not_enabled` and\nnothing is sent.\n"
    },
    "tenant": {
      "type": "string",
      "description": "Send as one of your tenants (its `external_id` or `id`). The send uses that\ntenant's domains, suppression list, sending ramp, daily limit and pause switch.\nReaders who unsubscribe from a tenant's email are suppressed or opted out for\nthat tenant only, so other tenants can still mail them.\nOmit it to send from the account as a whole; a send from a domain a tenant owns\nis that tenant's even without `tenant`. A key limited to one tenant always sends\nas its tenant. On an account without tenants, naming one returns 403\n`tenants_not_enabled`.\n"
    }
  },
  "$defs": {
    "EmailAttachment": {
      "type": "object",
      "required": [
        "name",
        "content_type",
        "data"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "Filename sent to the recipient."
        },
        "filename": {
          "type": "string",
          "description": "Alias for name."
        },
        "content_type": {
          "type": "string"
        },
        "contentType": {
          "type": "string",
          "description": "Alias for content_type."
        },
        "data": {
          "type": "string",
          "format": "byte",
          "description": "Base64-encoded attachment content (10MB decoded max; the whole request is at most 20MB)."
        },
        "content": {
          "type": "string",
          "format": "byte",
          "description": "Alias for data (base64 string expected over HTTP)."
        },
        "content_id": {
          "type": "string",
          "description": "Optional Content-ID for inline attachments."
        },
        "contentId": {
          "type": "string",
          "description": "Alias for content_id."
        }
      }
    },
    "EmailTag": {
      "type": "object",
      "required": [
        "name",
        "value"
      ],
      "properties": {
        "name": {
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      }
    },
    "SendTemplateRef": {
      "type": "object",
      "required": [
        "id"
      ],
      "description": "Reference a published template by UUID or alias. Mutually exclusive with html/text.",
      "properties": {
        "id": {
          "type": "string",
          "description": "Template UUID or alias"
        },
        "variables": {
          "type": "object",
          "additionalProperties": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              }
            ]
          },
          "description": "Values for `{{variable}}` placeholders (HTML-escaped in html body)"
        }
      }
    }
  }
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/groundmail-dev-send-email-request"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.