AhaSend · Schema

CreateMessageRequest

CreateMessageRequest schema from AhaSend API

EmailTransactional EmailDeveloper ToolsSMTPWebhook

Properties

Name Type Description
from object
recipients array This does not set the To header to multiple addresses, it sends a separate message for each recipient
reply_to object If provided, the reply-to header in headers array must not be provided
subject string Email subject line
text_content string Plain text content. Required if html_content is empty
html_content string HTML content. Required if text_content is empty
amp_content string AMP HTML content
attachments array File attachments
headers object Custom email headers. reply-to header cannot be provided if reply_to is provided, message-id will be ignored and automatically generated
substitutions object Global substitutions, recipient substitutions override global
tags array Tags for categorizing messages
sandbox boolean If true, the message will be sent to the sandbox environment
sandbox_result string The result of the sandbox send
tracking object Tracking settings for the message, overrides default account settings
retention object Retention settings for the message, overrides default account settings
schedule object Schedule for message delivery
View JSON Schema on GitHub

JSON Schema

openapi-v2-create-message-request-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/ahasend/refs/heads/main/json-schema/openapi-v2-create-message-request-schema.json",
  "title": "CreateMessageRequest",
  "description": "CreateMessageRequest schema from AhaSend API",
  "type": "object",
  "properties": {
    "from": {
      "$ref": "#/components/schemas/Address"
    },
    "recipients": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/Recipient"
      },
      "minItems": 1,
      "description": "This does not set the To header to multiple addresses, it sends a separate message for each recipient",
      "example": [
        {
          "email": "user@example.com",
          "name": "Example Name",
          "substitutions": {}
        }
      ]
    },
    "reply_to": {
      "$ref": "#/components/schemas/Address",
      "description": "If provided, the reply-to header in headers array must not be provided"
    },
    "subject": {
      "type": "string",
      "description": "Email subject line",
      "example": "example_value"
    },
    "text_content": {
      "type": "string",
      "description": "Plain text content. Required if html_content is empty",
      "example": "example_value"
    },
    "html_content": {
      "type": "string",
      "description": "HTML content. Required if text_content is empty",
      "example": "example_value"
    },
    "amp_content": {
      "type": "string",
      "description": "AMP HTML content",
      "example": "example_value"
    },
    "attachments": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/Attachment"
      },
      "description": "File attachments",
      "example": [
        {
          "base64": true,
          "data": "example_value",
          "content_type": "example_value",
          "content_disposition": "example_value",
          "content_id": "500123"
        }
      ]
    },
    "headers": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      },
      "description": "Custom email headers. reply-to header cannot be provided if reply_to is provided, message-id will be ignored and automatically generated",
      "example": {}
    },
    "substitutions": {
      "type": "object",
      "additionalProperties": true,
      "description": "Global substitutions, recipient substitutions override global",
      "example": {}
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Tags for categorizing messages",
      "example": [
        "example_value"
      ]
    },
    "sandbox": {
      "type": "boolean",
      "description": "If true, the message will be sent to the sandbox environment",
      "default": false,
      "example": true
    },
    "sandbox_result": {
      "type": "string",
      "enum": [
        "deliver",
        "bounce",
        "defer",
        "fail",
        "suppress"
      ],
      "description": "The result of the sandbox send",
      "example": "deliver"
    },
    "tracking": {
      "$ref": "#/components/schemas/Tracking",
      "description": "Tracking settings for the message, overrides default account settings"
    },
    "retention": {
      "$ref": "#/components/schemas/Retention",
      "description": "Retention settings for the message, overrides default account settings"
    },
    "schedule": {
      "$ref": "#/components/schemas/MessageSchedule",
      "description": "Schedule for message delivery"
    }
  },
  "required": [
    "from",
    "recipients",
    "subject"
  ],
  "example": {
    "from": {
      "email": "noreply@example.com",
      "name": "Example Corp"
    },
    "recipients": [
      {
        "email": "user@example.com",
        "name": "John Doe"
      }
    ],
    "subject": "Welcome to Example Corp",
    "html_content": "<h1>Welcome {{first_name}}!</h1>",
    "text_content": "Welcome {{first_name}}!",
    "substitutions": {
      "first_name": "John"
    }
  }
}

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/openapi-v2-create-message-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.