{
  "openapi": "3.1.0",
  "info": {
    "description": "Helo Email API (https://helohq.com)",
    "version": "1.0.0",
    "title": "Helo API"
  },
  "servers": [
    {
      "url": "https://api.helohq.com"
    }
  ],
  "tags": [
    {
      "name": "Activity",
      "description": "Track and retrieve message activity, including messages, delivery and engagement events."
    },
    {
      "name": "Broadcasts",
      "description": "Manage and track broadcast email campaigns."
    },
    {
      "name": "Channels",
      "description": "Create and manage communication channels for organizing messages."
    },
    {
      "name": "Domains",
      "description": "Register, verify, and manage domains for email sending."
    },
    {
      "name": "Sending",
      "description": "Send transactional and broadcast emails."
    },
    {
      "name": "Statistics",
      "description": "Access activity statistics."
    },
    {
      "name": "Webhooks",
      "description": "Create and manage webhooks for event notifications."
    }
  ],
  "paths": {
    "/channels": {
      "post": {
        "tags": [
          "Channels"
        ],
        "description": "Creates a new communication channel for organizing and routing messages.",
        "operationId": "Channels_create",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateChannelRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChannelDetailsResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create a channel",
        "x-codeSampleId": "Channels_create",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\ncreate_channel_request = Helo::CreateChannelRequest.new(\n  name: \"test-name\",\n  delivery_type: Helo::DeliveryType::LIVE,\n  tracking: { links: true, opens: true }\n)\nHelo::Channels.create(create_channel_request)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.channels.create({\n  name: \"test-name\",\n  deliveryType: Helo.DeliveryType.LIVE,\n  tracking: { links: true, opens: true },\n});"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tparams := &helo.CreateChannelRequest{\n\t\tName: \"test-name\",\n\t\tDeliveryType: helo.DeliveryTypeLive,\n\t}\n\tresult, err := client.Channels.Create(ctx, params)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk;\nusing HeloEmail.Sdk.Channels;\n\nvar channelDetails = await helo.Channels.Create(new CreateChannelRequest\n{\n    Name = \"test-name\",\n    DeliveryType = DeliveryType.Live,\n});"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\nchannel_details = client.channels.create(\n    name=\"test-name\",\n    delivery_type=helo.DeliveryType.LIVE,\n    tracking={\"links\": True, \"opens\": True},\n)"
          }
        ]
      },
      "get": {
        "tags": [
          "Channels"
        ],
        "description": "Retrieves a list of all channels accessible to the current user.",
        "operationId": "Channels_list",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of results to return. Defaults to 25.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Number of results to skip for pagination. Defaults to 0.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "name",
            "in": "query",
            "description": "Filter channels by name (partial match).",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "channelIds",
            "in": "query",
            "description": "Filter to a specific set of channel IDs.",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          {
            "name": "deliveryType",
            "in": "query",
            "description": "Filter channels by delivery type.",
            "schema": {
              "enum": [
                "live",
                "sandbox"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginationResultOfChannelBasicResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List all channels",
        "x-codeSampleId": "Channels_list",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nopts = {\n  limit: 10,\n  offset: 10,\n  name: \"example\",\n  channel_ids: [\"550e8400-e29b-41d4-a716-446655440000\", \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\"],\n  delivery_type: \"live\"\n}\nHelo::Channels.list(opts)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.channels.list({\n  limit: 10,\n  offset: 10,\n  name: \"example\",\n  channelIds: [\"550e8400-e29b-41d4-a716-446655440000\"],\n  deliveryType: \"live\",\n});"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tparams := &helo.ChannelsListParams{\n\t\tLimit: 10,\n\t\tOffset: 10,\n\t\tName: \"example\",\n\t\tChannelIds: []string{\"550e8400-e29b-41d4-a716-446655440000\"},\n\t\tDeliveryType: \"live\",\n\t}\n\tresult, err := client.Channels.List(ctx, params)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk;\nusing HeloEmail.Sdk.Channels;\n\nvar paginationResultOfChannelBasic = await helo.Channels.List(limit: 10, offset: 10);"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\npagination_result_of_channel_basic = client.channels.list(limit=10, offset=10)"
          }
        ]
      }
    },
    "/channels/{id}": {
      "patch": {
        "tags": [
          "Channels"
        ],
        "description": "Modifies an existing channel by ID.",
        "operationId": "Channels_update",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The channel ID.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateChannelRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChannelDetailsResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Update a channel",
        "x-codeSampleId": "Channels_update",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nid = \"550e8400-e29b-41d4-a716-446655440000\"\nupdate_channel_request = Helo::UpdateChannelRequest.new(\n  name: \"test-name\",\n  delivery_type: Helo::DeliveryType::LIVE,\n  tracking: { links: true, opens: true }\n)\nHelo::Channels.update(id, update_channel_request)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.channels.update(\n  \"550e8400-e29b-41d4-a716-446655440000\",\n  {\n    name: \"test-name\",\n    deliveryType: Helo.DeliveryType.LIVE,\n    tracking: { links: true, opens: true },\n  },\n);"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tparams := &helo.UpdateChannelRequest{\n\t\tName: \"test-name\",\n\t\tDeliveryType: helo.DeliveryTypeLive,\n\t}\n\tresult, err := client.Channels.Update(ctx, \"550e8400-e29b-41d4-a716-446655440000\", params)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk;\nusing HeloEmail.Sdk.Channels;\n\nvar channelDetails = await helo.Channels.Update(\"550e8400-e29b-41d4-a716-446655440000\", new UpdateChannelRequest\n{\n    Name = \"test-name\",\n    DeliveryType = DeliveryType.Live,\n});"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\nchannel_details = client.channels.update(\n    \"550e8400-e29b-41d4-a716-446655440000\",\n    name=\"test-name\",\n    delivery_type=helo.DeliveryType.LIVE,\n    tracking={\"links\": True, \"opens\": True},\n)"
          }
        ]
      },
      "get": {
        "tags": [
          "Channels"
        ],
        "description": "Fetches the details and configuration of a specific channel.",
        "operationId": "Channels_retrieve",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The channel ID.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChannelDetailsResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Retrieve a channel",
        "x-codeSampleId": "Channels_retrieve",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nid = \"550e8400-e29b-41d4-a716-446655440000\"\nHelo::Channels.retrieve(id)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.channels.retrieve(\n  \"550e8400-e29b-41d4-a716-446655440000\",\n);"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tresult, err := client.Channels.Retrieve(ctx, \"550e8400-e29b-41d4-a716-446655440000\")\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk.Channels;\n\nvar channelDetails = await helo.Channels.Retrieve(\"550e8400-e29b-41d4-a716-446655440000\");"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\nchannel_details = client.channels.retrieve(\"550e8400-e29b-41d4-a716-446655440000\")"
          }
        ]
      },
      "delete": {
        "tags": [
          "Channels"
        ],
        "description": "Permanently removes a channel and all associated data.",
        "operationId": "Channels_delete",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The channel ID.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Delete a channel",
        "x-codeSampleId": "Channels_delete",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nid = \"550e8400-e29b-41d4-a716-446655440000\"\nHelo::Channels.delete(id)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nawait helo.channels.del(\"550e8400-e29b-41d4-a716-446655440000\");"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tif err := client.Channels.Delete(ctx, \"550e8400-e29b-41d4-a716-446655440000\"); err != nil {\n\t\tlog.Fatal(err)\n\t}\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk.Channels;\n\nawait helo.Channels.Delete(\"550e8400-e29b-41d4-a716-446655440000\");"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\nclient.channels.delete(\"550e8400-e29b-41d4-a716-446655440000\")"
          }
        ]
      }
    },
    "/activity/events": {
      "get": {
        "operationId": "Activity_listEvents",
        "tags": [
          "Activity"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "channelId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "messageId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "after",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "startDate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 500
            }
          },
          {
            "name": "recipient",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "subject",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tags",
            "in": "query",
            "required": false,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "mailType",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "transactional",
                "broadcast"
              ]
            }
          },
          {
            "name": "eventTypes",
            "in": "query",
            "required": false,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/EventType"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedEventsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {}
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "summary": "List activity events",
        "description": "Retrieves activity events for messages, including delivery status, opens, clicks, bounces, unsubscribes and complaints.",
        "x-codeSampleId": "Activity_listEvents",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nopts = {\n  channel_id: \"550e8400-e29b-41d4-a716-446655440000\",\n  message_id: \"550e8400-e29b-41d4-a716-446655440000\",\n  after: 10,\n  start_date: \"2024-01-01T00:00:00Z\",\n  end_date: \"2024-01-01T00:00:00Z\",\n  limit: 10,\n  recipient: \"example\",\n  subject: \"example\",\n  tags: [\"example1\", \"example2\"],\n  mail_type: \"transactional\",\n  event_types: [Helo::EventType::ACCEPTED, Helo::EventType::PROCESSED]\n}\nHelo::Activity.list_events(opts)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.activity.listEvents({\n  channelId: \"550e8400-e29b-41d4-a716-446655440000\",\n  messageId: \"550e8400-e29b-41d4-a716-446655440000\",\n  after: 10,\n  startDate: \"2024-01-01T00:00:00Z\",\n  endDate: \"2024-01-01T00:00:00Z\",\n  limit: 10,\n  recipient: \"example\",\n  subject: \"example\",\n  tags: [\"example1\", \"example2\"],\n  mailType: \"transactional\",\n  eventTypes: [Helo.EventType.ACCEPTED, Helo.EventType.PROCESSED],\n});"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\t\"time\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tparams := &helo.ActivityListEventsParams{\n\t\tChannelID: \"550e8400-e29b-41d4-a716-446655440000\",\n\t\tMessageID: \"550e8400-e29b-41d4-a716-446655440000\",\n\t\tAfter: 10,\n\t\tStartDate: time.Now(),\n\t\tEndDate: time.Now(),\n\t\tLimit: 10,\n\t\tRecipient: \"example\",\n\t\tSubject: \"example\",\n\t\tTags: []string{\"example1\", \"example2\"},\n\t\tMailType: \"transactional\",\n\t\tEventTypes: []helo.EventType{helo.EventTypeAccepted, helo.EventTypeProcessed},\n\t}\n\tresult, err := client.Activity.ListEvents(ctx, params)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk;\nusing HeloEmail.Sdk.Activity;\n\nvar paginatedEvents = await helo.Activity.ListEvents(channelId: \"550e8400-e29b-41d4-a716-446655440000\", messageId: \"550e8400-e29b-41d4-a716-446655440000\");"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\npaginated_events = client.activity.list_events(\n    channel_id=\"550e8400-e29b-41d4-a716-446655440000\",\n    message_id=\"550e8400-e29b-41d4-a716-446655440000\",\n)"
          }
        ]
      }
    },
    "/activity/messages": {
      "get": {
        "operationId": "Activity_listMessages",
        "tags": [
          "Activity"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "channelId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "after",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "startDate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100
            }
          },
          {
            "name": "recipient",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "subject",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tags",
            "in": "query",
            "required": false,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "mailType",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "transactional",
                "broadcast"
              ]
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/MessageStatus"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedMessagesResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {}
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "summary": "List messages",
        "description": "Retrieves a paginated list of sent messages with basic tracking information.",
        "x-codeSampleId": "Activity_listMessages",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nopts = {\n  channel_id: \"550e8400-e29b-41d4-a716-446655440000\",\n  after: 10,\n  start_date: \"2024-01-01T00:00:00Z\",\n  end_date: \"2024-01-01T00:00:00Z\",\n  limit: 10,\n  recipient: \"example\",\n  subject: \"example\",\n  tags: [\"example1\", \"example2\"],\n  mail_type: \"transactional\",\n  status: Helo::MessageStatus::QUEUED\n}\nHelo::Activity.list_messages(opts)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.activity.listMessages({\n  channelId: \"550e8400-e29b-41d4-a716-446655440000\",\n  after: 10,\n  startDate: \"2024-01-01T00:00:00Z\",\n  endDate: \"2024-01-01T00:00:00Z\",\n  limit: 10,\n  recipient: \"example\",\n  subject: \"example\",\n  tags: [\"example1\", \"example2\"],\n  mailType: \"transactional\",\n  status: Helo.MessageStatus.QUEUED,\n});"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\t\"time\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tparams := &helo.ActivityListMessagesParams{\n\t\tChannelID: \"550e8400-e29b-41d4-a716-446655440000\",\n\t\tAfter: 10,\n\t\tStartDate: time.Now(),\n\t\tEndDate: time.Now(),\n\t\tLimit: 10,\n\t\tRecipient: \"example\",\n\t\tSubject: \"example\",\n\t\tTags: []string{\"example1\", \"example2\"},\n\t\tMailType: \"transactional\",\n\t\tStatus: helo.MessageStatusQueued,\n\t}\n\tresult, err := client.Activity.ListMessages(ctx, params)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk;\nusing HeloEmail.Sdk.Activity;\n\nvar paginatedMessages = await helo.Activity.ListMessages(channelId: \"550e8400-e29b-41d4-a716-446655440000\", after: 10);"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\npaginated_messages = client.activity.list_messages(\n    channel_id=\"550e8400-e29b-41d4-a716-446655440000\",\n    after=10,\n)"
          }
        ]
      }
    },
    "/activity/messages/{id}": {
      "get": {
        "operationId": "Activity_retrieveMessage",
        "tags": [
          "Activity"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageDetailsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {}
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "summary": "Retrieve message details",
        "description": "Fetches detailed tracking information for a specific message, including all associated events.",
        "x-codeSampleId": "Activity_retrieveMessage",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nid = \"550e8400-e29b-41d4-a716-446655440000\"\nHelo::Activity.retrieve_message(id)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.activity.retrieveMessage(\n  \"550e8400-e29b-41d4-a716-446655440000\",\n);"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tresult, err := client.Activity.RetrieveMessage(ctx, \"550e8400-e29b-41d4-a716-446655440000\")\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk.Activity;\n\nvar messageDetails = await helo.Activity.RetrieveMessage(\"550e8400-e29b-41d4-a716-446655440000\");"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\nmessage_details = client.activity.retrieve_message(\n    \"550e8400-e29b-41d4-a716-446655440000\",\n)"
          }
        ]
      }
    },
    "/domains": {
      "post": {
        "operationId": "Domains_create",
        "description": "Registers a new domain for sending emails. The domain must be verified before it can be used.",
        "tags": [
          "Domains"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateDomainRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainWithDnsResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "Create a domain",
        "x-codeSampleId": "Domains_create",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\ncreate_domain_request = Helo::CreateDomainRequest.new(\n  name: \"test-name\",\n  channel_ids: [\"550e8400-e29b-41d4-a716-446655440000\", \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\"]\n)\nHelo::Domains.create(create_domain_request)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.domains.create({\n  name: \"test-name\",\n  channelIds: [\"550e8400-e29b-41d4-a716-446655440000\"],\n});"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tparams := &helo.CreateDomainRequest{\n\t\tName: \"test-name\",\n\t\tChannelIds: []string{\"550e8400-e29b-41d4-a716-446655440000\"},\n\t}\n\tresult, err := client.Domains.Create(ctx, params)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk.Domains;\n\nvar domainWithDns = await helo.Domains.Create(new CreateDomainRequest\n{\n    Name = \"test-name\",\n    ChannelIds = [\"550e8400-e29b-41d4-a716-446655440000\"],\n});"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\ndomain_with_dns = client.domains.create(\n    name=\"test-name\",\n    channel_ids=[\"550e8400-e29b-41d4-a716-446655440000\"],\n)"
          }
        ]
      },
      "get": {
        "operationId": "Domains_list",
        "description": "Retrieves all domains associated with the current account, including their verification status.",
        "tags": [
          "Domains"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "name",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "channelIds",
            "in": "query",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfDomainResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "List all domains",
        "x-codeSampleId": "Domains_list",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nopts = {\n  limit: 10,\n  offset: 10,\n  name: \"example\",\n  channel_ids: [\"550e8400-e29b-41d4-a716-446655440000\", \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\"]\n}\nHelo::Domains.list(opts)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.domains.list({\n  limit: 10,\n  offset: 10,\n  name: \"example\",\n  channelIds: [\"550e8400-e29b-41d4-a716-446655440000\"],\n});"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tparams := &helo.DomainsListParams{\n\t\tLimit: 10,\n\t\tOffset: 10,\n\t\tName: \"example\",\n\t\tChannelIds: []string{\"550e8400-e29b-41d4-a716-446655440000\"},\n\t}\n\tresult, err := client.Domains.List(ctx, params)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk.Domains;\n\nvar paginatedResponseOfDomain = await helo.Domains.List(limit: 10, offset: 10);"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\npaginated_response_of_domain = client.domains.list(limit=10, offset=10)"
          }
        ]
      }
    },
    "/domains/{id}": {
      "patch": {
        "operationId": "Domains_update",
        "description": "Modifies an existing domain by ID.",
        "tags": [
          "Domains"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateDomainRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "Update a domain",
        "x-codeSampleId": "Domains_update",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nid = \"550e8400-e29b-41d4-a716-446655440000\"\nupdate_domain_request = Helo::UpdateDomainRequest.new(\n  channel_ids: [\"550e8400-e29b-41d4-a716-446655440000\", \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\"]\n)\nHelo::Domains.update(id, update_domain_request)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.domains.update(\n  \"550e8400-e29b-41d4-a716-446655440000\",\n  {\n    channelIds: [\"550e8400-e29b-41d4-a716-446655440000\"],\n  },\n);"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tparams := &helo.UpdateDomainRequest{\n\t\tChannelIds: []string{\"550e8400-e29b-41d4-a716-446655440000\"},\n\t}\n\tresult, err := client.Domains.Update(ctx, \"550e8400-e29b-41d4-a716-446655440000\", params)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk.Domains;\n\nvar domain = await helo.Domains.Update(\"550e8400-e29b-41d4-a716-446655440000\", new UpdateDomainRequest\n{\n    ChannelIds = [\"550e8400-e29b-41d4-a716-446655440000\"],\n});"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\ndomain = client.domains.update(\n    \"550e8400-e29b-41d4-a716-446655440000\",\n    channel_ids=[\"550e8400-e29b-41d4-a716-446655440000\"],\n)"
          }
        ]
      },
      "get": {
        "operationId": "Domains_retrieve",
        "description": "Gets detailed information about a specific domain, including verification status and configuration.",
        "tags": [
          "Domains"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainWithDnsResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "Retrieve a domain",
        "x-codeSampleId": "Domains_retrieve",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nid = \"550e8400-e29b-41d4-a716-446655440000\"\nHelo::Domains.retrieve(id)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.domains.retrieve(\n  \"550e8400-e29b-41d4-a716-446655440000\",\n);"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tresult, err := client.Domains.Retrieve(ctx, \"550e8400-e29b-41d4-a716-446655440000\")\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk.Domains;\n\nvar domainWithDns = await helo.Domains.Retrieve(\"550e8400-e29b-41d4-a716-446655440000\");"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\ndomain_with_dns = client.domains.retrieve(\"550e8400-e29b-41d4-a716-446655440000\")"
          }
        ]
      },
      "delete": {
        "operationId": "Domains_delete",
        "description": "Removes a domain from the account. This will stop all email sending from this domain.",
        "tags": [
          "Domains"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "Delete a domain",
        "x-codeSampleId": "Domains_delete",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nid = \"550e8400-e29b-41d4-a716-446655440000\"\nHelo::Domains.delete(id)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nawait helo.domains.del(\"550e8400-e29b-41d4-a716-446655440000\");"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tif err := client.Domains.Delete(ctx, \"550e8400-e29b-41d4-a716-446655440000\"); err != nil {\n\t\tlog.Fatal(err)\n\t}\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk.Domains;\n\nawait helo.Domains.Delete(\"550e8400-e29b-41d4-a716-446655440000\");"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\nclient.domains.delete(\"550e8400-e29b-41d4-a716-446655440000\")"
          }
        ]
      }
    },
    "/domains/{id}/verify": {
      "post": {
        "operationId": "Domains_verify",
        "description": "Initiates the domain verification process by checking DNS records.",
        "tags": [
          "Domains"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DnsRecordsResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "Verify a domain",
        "x-codeSampleId": "Domains_verify",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nid = \"550e8400-e29b-41d4-a716-446655440000\"\nHelo::Domains.verify(id)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.domains.verify(\n  \"550e8400-e29b-41d4-a716-446655440000\",\n);"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tresult, err := client.Domains.Verify(ctx, \"550e8400-e29b-41d4-a716-446655440000\")\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk.Domains;\n\nvar dnsRecords = await helo.Domains.Verify(\"550e8400-e29b-41d4-a716-446655440000\");"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\ndns_records = client.domains.verify(\"550e8400-e29b-41d4-a716-446655440000\")"
          }
        ]
      }
    },
    "/domains/{id}/rotate-key": {
      "post": {
        "operationId": "Domains_rotateKey",
        "description": "Generates new DKIM keys for the domain. This is recommended for security best practices.",
        "tags": [
          "Domains"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DnsRecordResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "Rotate a domain key",
        "x-codeSampleId": "Domains_rotateKey",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nid = \"550e8400-e29b-41d4-a716-446655440000\"\nHelo::Domains.rotate_key(id)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.domains.rotateKey(\n  \"550e8400-e29b-41d4-a716-446655440000\",\n);"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tresult, err := client.Domains.RotateKey(ctx, \"550e8400-e29b-41d4-a716-446655440000\")\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk.Domains;\n\nvar dnsRecord = await helo.Domains.RotateKey(\"550e8400-e29b-41d4-a716-446655440000\");"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\ndns_record = client.domains.rotate_key(\"550e8400-e29b-41d4-a716-446655440000\")"
          }
        ]
      }
    },
    "/send/transactional": {
      "post": {
        "operationId": "Sending_sendTransactional",
        "tags": [
          "Sending"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "X-Helo-Channel-Id",
            "in": "header",
            "description": "Used to specify a channel ID for sending when using an account-level API credential.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "X-Helo-Idempotency-Key",
            "in": "header",
            "description": "A unique identifier used to prevent duplicate messages being sent when retrying failed requests.",
            "schema": {
              "type": "string",
              "maxLength": 36
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SendMessageRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SendMessageAcceptedResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "Send a transactional email",
        "description": "Sends a single transactional email such as receipts, confirmations, or notifications.",
        "x-codeSampleId": "Sending_sendTransactional",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nsend_message_request = Helo::SendMessageRequest.new(\n  from: { email: \"from@yourdomain.com\", name: \"From name\" },\n  to: [{ email: \"to@example.com\", name: \"To name\" }],\n  cc: [{ email: \"cc@example.com\", name: \"Cc name\" }],\n  bcc: [{ email: \"bcc@example.com\", name: \"Bcc name\" }],\n  reply_to: [{ email: \"reply-to@example.com\", name: \"Reply-To name\" }],\n  subject: \"Hello from Helo\",\n  html: \"<html><body><h1>Hi there, new friend.</h1><p>This is a test message, delivered with <3 by Helo. </p></body></html>\",\n  text: \"This is a test message, delivered with <3 by Helo.\",\n  template: {},\n  tracking: {},\n  attachments: [{ content: \"test-content\", content_id: \"test-contentId\", content_type: \"test-contentType\", file_name: \"test-fileName\", disposition: Helo::AttachmentDisposition::ATTACHMENT }],\n  tags: [\"welcome\", \"onboarding\"],\n  headers: {},\n  metadata: {}\n)\nHelo::Sending.send_transactional(send_message_request, channel_id: \"550e8400-e29b-41d4-a716-446655440000\", idempotency_key: \"example\")"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.sending.sendTransactional(\n  {\n    from: { email: \"from@yourdomain.com\", name: \"From name\" },\n    to: [{ email: \"to@example.com\", name: \"To name\" }],\n    cc: [{ email: \"cc@example.com\", name: \"Cc name\" }],\n    bcc: [{ email: \"bcc@example.com\", name: \"Bcc name\" }],\n    replyTo: [{ email: \"reply-to@example.com\", name: \"Reply-To name\" }],\n    subject: \"Hello from Helo\",\n    html: \"<html><body><h1>Hi there, new friend.</h1><p>This is a test message, delivered with <3 by Helo. </p></body></html>\",\n    text: \"This is a test message, delivered with <3 by Helo.\",\n    template: {\n      subject: \"test-subject\",\n      html: \"test-html\",\n      text: \"test-text\",\n      inlineStyles: true,\n      data: {},\n    },\n    tracking: { opens: true, links: true },\n    attachments: [\n      {\n        content: \"test-content\",\n        contentId: \"test-contentId\",\n        contentType: \"test-contentType\",\n        fileName: \"test-fileName\",\n        disposition: Helo.AttachmentDisposition.ATTACHMENT,\n      },\n    ],\n    tags: [\"welcome\", \"onboarding\"],\n    headers: {},\n    metadata: {},\n  },\n  {\n    channelId: \"550e8400-e29b-41d4-a716-446655440000\",\n    idempotencyKey: \"example\",\n  },\n);"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tparams := &helo.SendMessageRequest{\n\t\tFrom: helo.MailAddress{Email: \"from@yourdomain.com\", Name: \"From name\"},\n\t\tTo: []helo.MailAddress{{Email: \"to@example.com\", Name: \"To name\"}},\n\t\tSubject: \"Hello from Helo\",\n\t\tHtml: \"<html><body><h1>Hi there, new friend.</h1><p>This is a test message, delivered with <3 by Helo. </p></body></html>\",\n\t\tText: \"This is a test message, delivered with <3 by Helo.\",\n\t\tTags: []string{\"welcome\", \"onboarding\"},\n\t}\n\topts := &helo.SendingSendTransactionalOptions{\n\t\tChannelID: \"550e8400-e29b-41d4-a716-446655440000\",\n\t\tIdempotencyKey: \"example\",\n\t}\n\tresult, err := client.Sending.SendTransactional(ctx, params, opts)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk;\nusing HeloEmail.Sdk.Sending;\n\nvar sendMessageAccepted = await helo.Sending.SendTransactional(new SendMessageRequest\n{\n    From = new MailAddress { Email = \"from@yourdomain.com\", Name = \"From name\" },\n    To = [new MailAddress { Email = \"to@example.com\", Name = \"To name\" }],\n    Subject = \"Hello from Helo\",\n    Html = \"<html><body><h1>Hi there, new friend.</h1><p>This is a test message, delivered with <3 by Helo. </p></body></html>\",\n    Text = \"This is a test message, delivered with <3 by Helo.\",\n    Tags = [\"welcome\", \"onboarding\"],\n}, channelId: \"550e8400-e29b-41d4-a716-446655440000\", idempotencyKey: \"test-idempotencyKey\");"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\nsend_message_accepted = client.sending.send_transactional(\n    from_={\"email\": \"from@yourdomain.com\", \"name\": \"From name\"},\n    to=[{\"email\": \"to@example.com\", \"name\": \"To name\"}],\n    cc=[{\"email\": \"cc@example.com\", \"name\": \"Cc name\"}],\n    bcc=[{\"email\": \"bcc@example.com\", \"name\": \"Bcc name\"}],\n    reply_to=[{\"email\": \"reply-to@example.com\", \"name\": \"Reply-To name\"}],\n    subject=\"Hello from Helo\",\n    html=\"<html><body><h1>Hi there, new friend.</h1><p>This is a test message, delivered with <3 by Helo. </p></body></html>\",\n    text=\"This is a test message, delivered with <3 by Helo.\",\n    template={\n        \"subject\": \"test-subject\",\n        \"html\": \"test-html\",\n        \"text\": \"test-text\",\n        \"inlineStyles\": True,\n    },\n    tracking={\"opens\": True, \"links\": True},\n    attachments=[\n        {\n            \"content\": \"SGVsbG8gd29ybGQ=\",\n            \"contentId\": \"test-contentId\",\n            \"contentType\": \"test-contentType\",\n            \"fileName\": \"test-fileName\",\n            \"disposition\": helo.AttachmentDisposition.ATTACHMENT,\n        },\n    ],\n    tags=[\"welcome\", \"onboarding\"],\n    channel_id=\"550e8400-e29b-41d4-a716-446655440000\",\n    idempotency_key=\"test-idempotency_key\",\n)"
          }
        ]
      }
    },
    "/send/transactional/batch": {
      "post": {
        "operationId": "Sending_sendTransactionalBatch",
        "tags": [
          "Sending"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "X-Helo-Channel-Id",
            "in": "header",
            "description": "Used to specify a channel ID for sending when using an account-level API credential.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "X-Helo-Idempotency-Key",
            "in": "header",
            "description": "A unique identifier used to prevent duplicate messages being sent when retrying failed requests.",
            "schema": {
              "type": "string",
              "maxLength": 36
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SendMessageBatchRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SendMessageBatchResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "Send transactional emails in batch",
        "description": "Sends multiple transactional emails in a single API request for better performance.",
        "x-codeSampleId": "Sending_sendTransactionalBatch",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nsend_message_batch_request = Helo::SendMessageBatchRequest.new(\n  requests: [{ to: [], cc: [], bcc: [], reply_to: [], subject: \"Hello from Helo\", html: \"<html><body><h1>Hi there, new friend.</h1><p>This is a test message, delivered with <3 by Helo. </p></body></html>\", text: \"This is a test message, delivered with <3 by Helo.\", template: {}, tracking: {}, attachments: [], tags: [\"welcome\", \"onboarding\"], headers: {}, metadata: {} }]\n)\nHelo::Sending.send_transactional_batch(send_message_batch_request, channel_id: \"550e8400-e29b-41d4-a716-446655440000\", idempotency_key: \"example\")"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.sending.sendTransactionalBatch(\n  {\n    requests: [\n      {\n        from: { email: \"from@yourdomain.com\", name: \"From name\" },\n        to: [{ email: \"to@example.com\", name: \"To name\" }],\n        cc: [{ email: \"cc@example.com\", name: \"Cc name\" }],\n        bcc: [{ email: \"bcc@example.com\", name: \"Bcc name\" }],\n        replyTo: [{ email: \"reply-to@example.com\", name: \"Reply-To name\" }],\n        subject: \"Hello from Helo\",\n        html: \"<html><body><h1>Hi there, new friend.</h1><p>This is a test message, delivered with <3 by Helo. </p></body></html>\",\n        text: \"This is a test message, delivered with <3 by Helo.\",\n        template: {\n          subject: \"test-subject\",\n          html: \"test-html\",\n          text: \"test-text\",\n          inlineStyles: true,\n          data: {},\n        },\n        tracking: { opens: true, links: true },\n        attachments: [\n          {\n            content: \"test-content\",\n            contentId: \"test-contentId\",\n            contentType: \"test-contentType\",\n            fileName: \"test-fileName\",\n            disposition: Helo.AttachmentDisposition.ATTACHMENT,\n          },\n        ],\n        tags: [\"welcome\", \"onboarding\"],\n        headers: {},\n        metadata: {},\n      },\n    ],\n  },\n  {\n    channelId: \"550e8400-e29b-41d4-a716-446655440000\",\n    idempotencyKey: \"example\",\n  },\n);"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tparams := &helo.SendMessageBatchRequest{\n\t\tRequests: []helo.SendMessageRequest{{From: helo.MailAddress{Email: \"from@yourdomain.com\", Name: \"From name\"}, To: []helo.MailAddress{{Email: \"to@example.com\", Name: \"To name\"}}, Subject: \"Hello from Helo\", Html: \"<html><body><h1>Hi there, new friend.</h1><p>This is a test message, delivered with <3 by Helo. </p></body></html>\", Text: \"This is a test message, delivered with <3 by Helo.\", Tags: []string{\"welcome\", \"onboarding\"}}},\n\t}\n\topts := &helo.SendingSendTransactionalBatchOptions{\n\t\tChannelID: \"550e8400-e29b-41d4-a716-446655440000\",\n\t\tIdempotencyKey: \"example\",\n\t}\n\tresult, err := client.Sending.SendTransactionalBatch(ctx, params, opts)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk;\nusing HeloEmail.Sdk.Sending;\n\nvar sendMessageBatch = await helo.Sending.SendTransactionalBatch(new SendMessageBatchRequest\n{\n    Requests = [\n        new SendMessageRequest\n        {\n            From = new MailAddress { Email = \"from@yourdomain.com\", Name = \"From name\" },\n            To = [new MailAddress { Email = \"to@example.com\", Name = \"To name\" }],\n            Subject = \"Hello from Helo\",\n            Html = \"<html><body><h1>Hi there, new friend.</h1><p>This is a test message, delivered with <3 by Helo. </p></body></html>\",\n            Text = \"This is a test message, delivered with <3 by Helo.\",\n            Tags = [\"welcome\", \"onboarding\"],\n        },\n    ],\n}, channelId: \"550e8400-e29b-41d4-a716-446655440000\", idempotencyKey: \"test-idempotencyKey\");"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\nsend_message_batch = client.sending.send_transactional_batch(\n    requests=[\n        {\n            \"from\": {\"email\": \"from@yourdomain.com\", \"name\": \"From name\"},\n            \"to\": [{\"email\": \"to@example.com\", \"name\": \"To name\"}],\n            \"subject\": \"Hello from Helo\",\n            \"html\": \"<html><body><h1>Hi there, new friend.</h1><p>This is a test message, delivered with <3 by Helo. </p></body></html>\",\n            \"text\": \"This is a test message, delivered with <3 by Helo.\",\n            \"tags\": [\"welcome\", \"onboarding\"],\n        },\n    ],\n    channel_id=\"550e8400-e29b-41d4-a716-446655440000\",\n    idempotency_key=\"test-idempotency_key\",\n)"
          }
        ]
      }
    },
    "/send/broadcast": {
      "post": {
        "operationId": "Sending_sendBroadcast",
        "tags": [
          "Sending"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "X-Helo-Channel-Id",
            "in": "header",
            "description": "Used to specify a channel ID for sending when using an account-level API credential.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "X-Helo-Idempotency-Key",
            "in": "header",
            "description": "A unique identifier used to prevent duplicate messages being sent when retrying failed requests.",
            "schema": {
              "type": "string",
              "maxLength": 36
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SendBroadcastRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SendBroadcastResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "Send a broadcast",
        "description": "Sends a broadcast of multiple messages for marketing or announcement purposes.",
        "x-codeSampleId": "Sending_sendBroadcast",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nsend_broadcast_request = Helo::SendBroadcastRequest.new(\n  from: { email: \"test-email\", name: \"test-name\" },\n  reply_to: [{ email: \"test-email\", name: \"test-name\" }],\n  template: {},\n  tracking: {},\n  attachments: [{ content: \"test-content\", content_id: \"test-contentId\", content_type: \"test-contentType\", file_name: \"test-fileName\", disposition: Helo::AttachmentDisposition::ATTACHMENT }],\n  tags: [\"example1\", \"example2\"],\n  headers: {},\n  metadata: {},\n  messages: []\n)\nHelo::Sending.send_broadcast(send_broadcast_request, channel_id: \"550e8400-e29b-41d4-a716-446655440000\", idempotency_key: \"example\")"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.sending.sendBroadcast(\n  {\n    from: { email: \"test@example.com\", name: \"test-name\" },\n    replyTo: [{ email: \"test@example.com\", name: \"test-name\" }],\n    template: {\n      subject: \"test-subject\",\n      html: \"test-html\",\n      text: \"test-text\",\n      inlineStyles: true,\n      data: {},\n    },\n    tracking: { opens: true, links: true },\n    attachments: [\n      {\n        content: \"test-content\",\n        contentId: \"test-contentId\",\n        contentType: \"test-contentType\",\n        fileName: \"test-fileName\",\n        disposition: Helo.AttachmentDisposition.ATTACHMENT,\n      },\n    ],\n    tags: [\"example1\", \"example2\"],\n    headers: {},\n    metadata: {},\n    messages: [\n      {\n        to: [{ email: \"test@example.com\", name: \"test-name\" }],\n        cc: [{ email: \"test@example.com\", name: \"test-name\" }],\n        bcc: [{ email: \"test@example.com\", name: \"test-name\" }],\n        tags: [\"example1\", \"example2\"],\n        headers: {},\n        metadata: {},\n        data: {},\n      },\n    ],\n  },\n  {\n    channelId: \"550e8400-e29b-41d4-a716-446655440000\",\n    idempotencyKey: \"example\",\n  },\n);"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tparams := &helo.SendBroadcastRequest{\n\t\tFrom: helo.MailAddress{Email: \"test@example.com\", Name: \"test-name\"},\n\t\tTemplate: helo.SendBroadcastRequestTemplate{Subject: \"test-subject\", Html: \"test-html\", Text: \"test-text\", InlineStyles: true},\n\t\tTags: []string{\"example1\", \"example2\"},\n\t\tMessages: []helo.SendBroadcastRequestMessage{{To: []helo.MailAddress{{Email: \"test@example.com\", Name: \"test-name\"}}, Tags: []string{\"example1\", \"example2\"}}},\n\t}\n\topts := &helo.SendingSendBroadcastOptions{\n\t\tChannelID: \"550e8400-e29b-41d4-a716-446655440000\",\n\t\tIdempotencyKey: \"example\",\n\t}\n\tresult, err := client.Sending.SendBroadcast(ctx, params, opts)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk;\nusing HeloEmail.Sdk.Sending;\n\nvar sendBroadcast = await helo.Sending.SendBroadcast(new SendBroadcastRequest\n{\n    From = new MailAddress { Email = \"test@example.com\", Name = \"test-name\" },\n    Template = new SendBroadcastRequestTemplate\n    {\n        Subject = \"test-subject\",\n        Html = \"test-html\",\n        Text = \"test-text\",\n        InlineStyles = true,\n    },\n    Tags = [\"test-tag\"],\n    Messages = [\n        new SendBroadcastRequestMessage\n        {\n            To = [new MailAddress { Email = \"test@example.com\", Name = \"test-name\" }],\n            Tags = [\"test-tag\"],\n        },\n    ],\n}, channelId: \"550e8400-e29b-41d4-a716-446655440000\", idempotencyKey: \"test-idempotencyKey\");"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\nsend_broadcast = client.sending.send_broadcast(\n    from_={\"email\": \"test@example.com\", \"name\": \"test-name\"},\n    template={\n        \"subject\": \"test-subject\",\n        \"html\": \"test-html\",\n        \"text\": \"test-text\",\n        \"inlineStyles\": True,\n    },\n    messages=[\n        {\n            \"to\": [{\"email\": \"test@example.com\", \"name\": \"test-name\"}],\n            \"tags\": [\"test-tag\"],\n        },\n    ],\n    reply_to=[{\"email\": \"test@example.com\", \"name\": \"test-name\"}],\n    tracking={\"opens\": True, \"links\": True},\n    attachments=[\n        {\n            \"content\": \"SGVsbG8gd29ybGQ=\",\n            \"contentId\": \"test-contentId\",\n            \"contentType\": \"test-contentType\",\n            \"fileName\": \"test-fileName\",\n            \"disposition\": helo.AttachmentDisposition.ATTACHMENT,\n        },\n    ],\n    tags=[\"test-tag\"],\n    channel_id=\"550e8400-e29b-41d4-a716-446655440000\",\n    idempotency_key=\"test-idempotency_key\",\n)"
          }
        ]
      }
    },
    "/send/broadcast/message": {
      "post": {
        "operationId": "Sending_sendBroadcastMessage",
        "tags": [
          "Sending"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "X-Helo-Channel-Id",
            "in": "header",
            "description": "Used to specify a channel ID for sending when using an account-level API credential.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "X-Helo-Idempotency-Key",
            "in": "header",
            "description": "A unique identifier used to prevent duplicate messages being sent when retrying failed requests.",
            "schema": {
              "type": "string",
              "maxLength": 36
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SendMessageRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SendMessageAcceptedResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "409": {
            "$ref": "#/components/responses/409"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "Send a single broadcast email",
        "description": "Sends a single broadcast email message.",
        "x-codeSampleId": "Sending_sendBroadcastMessage",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nsend_message_request = Helo::SendMessageRequest.new(\n  from: { email: \"from@yourdomain.com\", name: \"From name\" },\n  to: [{ email: \"to@example.com\", name: \"To name\" }],\n  cc: [{ email: \"cc@example.com\", name: \"Cc name\" }],\n  bcc: [{ email: \"bcc@example.com\", name: \"Bcc name\" }],\n  reply_to: [{ email: \"reply-to@example.com\", name: \"Reply-To name\" }],\n  subject: \"Hello from Helo\",\n  html: \"<html><body><h1>Hi there, new friend.</h1><p>This is a test message, delivered with <3 by Helo. </p></body></html>\",\n  text: \"This is a test message, delivered with <3 by Helo.\",\n  template: {},\n  tracking: {},\n  attachments: [{ content: \"test-content\", content_id: \"test-contentId\", content_type: \"test-contentType\", file_name: \"test-fileName\", disposition: Helo::AttachmentDisposition::ATTACHMENT }],\n  tags: [\"welcome\", \"onboarding\"],\n  headers: {},\n  metadata: {}\n)\nHelo::Sending.send_broadcast_message(send_message_request, channel_id: \"550e8400-e29b-41d4-a716-446655440000\", idempotency_key: \"example\")"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.sending.sendBroadcastMessage(\n  {\n    from: { email: \"from@yourdomain.com\", name: \"From name\" },\n    to: [{ email: \"to@example.com\", name: \"To name\" }],\n    cc: [{ email: \"cc@example.com\", name: \"Cc name\" }],\n    bcc: [{ email: \"bcc@example.com\", name: \"Bcc name\" }],\n    replyTo: [{ email: \"reply-to@example.com\", name: \"Reply-To name\" }],\n    subject: \"Hello from Helo\",\n    html: \"<html><body><h1>Hi there, new friend.</h1><p>This is a test message, delivered with <3 by Helo. </p></body></html>\",\n    text: \"This is a test message, delivered with <3 by Helo.\",\n    template: {\n      subject: \"test-subject\",\n      html: \"test-html\",\n      text: \"test-text\",\n      inlineStyles: true,\n      data: {},\n    },\n    tracking: { opens: true, links: true },\n    attachments: [\n      {\n        content: \"test-content\",\n        contentId: \"test-contentId\",\n        contentType: \"test-contentType\",\n        fileName: \"test-fileName\",\n        disposition: Helo.AttachmentDisposition.ATTACHMENT,\n      },\n    ],\n    tags: [\"welcome\", \"onboarding\"],\n    headers: {},\n    metadata: {},\n  },\n  {\n    channelId: \"550e8400-e29b-41d4-a716-446655440000\",\n    idempotencyKey: \"example\",\n  },\n);"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tparams := &helo.SendMessageRequest{\n\t\tFrom: helo.MailAddress{Email: \"from@yourdomain.com\", Name: \"From name\"},\n\t\tTo: []helo.MailAddress{{Email: \"to@example.com\", Name: \"To name\"}},\n\t\tSubject: \"Hello from Helo\",\n\t\tHtml: \"<html><body><h1>Hi there, new friend.</h1><p>This is a test message, delivered with <3 by Helo. </p></body></html>\",\n\t\tText: \"This is a test message, delivered with <3 by Helo.\",\n\t\tTags: []string{\"welcome\", \"onboarding\"},\n\t}\n\topts := &helo.SendingSendBroadcastMessageOptions{\n\t\tChannelID: \"550e8400-e29b-41d4-a716-446655440000\",\n\t\tIdempotencyKey: \"example\",\n\t}\n\tresult, err := client.Sending.SendBroadcastMessage(ctx, params, opts)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk;\nusing HeloEmail.Sdk.Sending;\n\nvar sendMessageAccepted = await helo.Sending.SendBroadcastMessage(new SendMessageRequest\n{\n    From = new MailAddress { Email = \"from@yourdomain.com\", Name = \"From name\" },\n    To = [new MailAddress { Email = \"to@example.com\", Name = \"To name\" }],\n    Subject = \"Hello from Helo\",\n    Html = \"<html><body><h1>Hi there, new friend.</h1><p>This is a test message, delivered with <3 by Helo. </p></body></html>\",\n    Text = \"This is a test message, delivered with <3 by Helo.\",\n    Tags = [\"welcome\", \"onboarding\"],\n}, channelId: \"550e8400-e29b-41d4-a716-446655440000\", idempotencyKey: \"test-idempotencyKey\");"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\nsend_message_accepted = client.sending.send_broadcast_message(\n    from_={\"email\": \"from@yourdomain.com\", \"name\": \"From name\"},\n    to=[{\"email\": \"to@example.com\", \"name\": \"To name\"}],\n    cc=[{\"email\": \"cc@example.com\", \"name\": \"Cc name\"}],\n    bcc=[{\"email\": \"bcc@example.com\", \"name\": \"Bcc name\"}],\n    reply_to=[{\"email\": \"reply-to@example.com\", \"name\": \"Reply-To name\"}],\n    subject=\"Hello from Helo\",\n    html=\"<html><body><h1>Hi there, new friend.</h1><p>This is a test message, delivered with <3 by Helo. </p></body></html>\",\n    text=\"This is a test message, delivered with <3 by Helo.\",\n    template={\n        \"subject\": \"test-subject\",\n        \"html\": \"test-html\",\n        \"text\": \"test-text\",\n        \"inlineStyles\": True,\n    },\n    tracking={\"opens\": True, \"links\": True},\n    attachments=[\n        {\n            \"content\": \"SGVsbG8gd29ybGQ=\",\n            \"contentId\": \"test-contentId\",\n            \"contentType\": \"test-contentType\",\n            \"fileName\": \"test-fileName\",\n            \"disposition\": helo.AttachmentDisposition.ATTACHMENT,\n        },\n    ],\n    tags=[\"welcome\", \"onboarding\"],\n    channel_id=\"550e8400-e29b-41d4-a716-446655440000\",\n    idempotency_key=\"test-idempotency_key\",\n)"
          }
        ]
      }
    },
    "/broadcasts": {
      "get": {
        "operationId": "Broadcasts_list",
        "tags": [
          "Broadcasts"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "channelId",
            "in": "query",
            "description": "The channel to list broadcasts for.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "status",
            "in": "query",
            "description": "Filter by broadcast status.",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/BroadcastStatus"
            }
          },
          {
            "name": "subject",
            "in": "query",
            "description": "Filter by subject (partial match). Max 500 characters.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Results per page. Min 1, max 500.",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 500,
              "minimum": 1,
              "format": "int32"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Pagination offset.",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfBroadcast"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "List broadcasts",
        "description": "Retrieves a paginated list of sent broadcasts with summary statistics.",
        "x-codeSampleId": "Broadcasts_list",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nopts = {\n  channel_id: \"550e8400-e29b-41d4-a716-446655440000\",\n  status: Helo::BroadcastStatus::ACCEPTED,\n  subject: \"example\",\n  limit: 10,\n  offset: 10\n}\nHelo::Broadcasts.list(opts)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.broadcasts.list({\n  channelId: \"550e8400-e29b-41d4-a716-446655440000\",\n  status: Helo.BroadcastStatus.ACCEPTED,\n  subject: \"example\",\n  limit: 10,\n  offset: 10,\n});"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tparams := &helo.BroadcastsListParams{\n\t\tChannelID: \"550e8400-e29b-41d4-a716-446655440000\",\n\t\tStatus: helo.BroadcastStatusAccepted,\n\t\tSubject: \"example\",\n\t\tLimit: 10,\n\t\tOffset: 10,\n\t}\n\tresult, err := client.Broadcasts.List(ctx, params)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk.Broadcasts;\n\nvar paginatedResponseOfBroadcast = await helo.Broadcasts.List(\"550e8400-e29b-41d4-a716-446655440000\", status: BroadcastStatus.Accepted, subject: \"test-subject\");"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\npaginated_response_of_broadcast = client.broadcasts.list(\n    channel_id=\"550e8400-e29b-41d4-a716-446655440000\",\n    status=helo.BroadcastStatus.ACCEPTED,\n    subject=\"test-subject\",\n)"
          }
        ]
      }
    },
    "/broadcasts/{id}": {
      "get": {
        "operationId": "Broadcasts_retrieve",
        "tags": [
          "Broadcasts"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The broadcast ID.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BroadcastDetailsResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "Retrieve a broadcast",
        "description": "Fetches details and statistics for a specific broadcast.",
        "x-codeSampleId": "Broadcasts_retrieve",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nid = \"550e8400-e29b-41d4-a716-446655440000\"\nHelo::Broadcasts.retrieve(id)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.broadcasts.retrieve(\n  \"550e8400-e29b-41d4-a716-446655440000\",\n);"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tresult, err := client.Broadcasts.Retrieve(ctx, \"550e8400-e29b-41d4-a716-446655440000\")\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk.Broadcasts;\n\nvar broadcastDetails = await helo.Broadcasts.Retrieve(\"550e8400-e29b-41d4-a716-446655440000\");"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\nbroadcast_details = client.broadcasts.retrieve(\"550e8400-e29b-41d4-a716-446655440000\")"
          }
        ]
      }
    },
    "/broadcasts/{id}/failures": {
      "get": {
        "operationId": "Broadcasts_listFailures",
        "tags": [
          "Broadcasts"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The broadcast ID.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Results per page. Min 1, max 500.",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 500,
              "minimum": 1,
              "format": "int32"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Pagination offset.",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfBroadcastFailure"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "List failed broadcast messages",
        "description": "Returns messages that could not be delivered due to permanent errors (e.g. invalid addresses, domain issues). Transient errors that were retried successfully do not appear here.",
        "x-codeSampleId": "Broadcasts_listFailures",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nid = \"550e8400-e29b-41d4-a716-446655440000\"\nopts = {\n  limit: 10,\n  offset: 10\n}\nHelo::Broadcasts.list_failures(id, opts)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.broadcasts.listFailures(\n  \"550e8400-e29b-41d4-a716-446655440000\",\n  {\n    limit: 10,\n    offset: 10,\n  },\n);"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tparams := &helo.BroadcastsListFailuresParams{\n\t\tLimit: 10,\n\t\tOffset: 10,\n\t}\n\tresult, err := client.Broadcasts.ListFailures(ctx, \"550e8400-e29b-41d4-a716-446655440000\", params)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk.Broadcasts;\n\nvar paginatedResponseOfBroadcastFailure = await helo.Broadcasts.ListFailures(\"550e8400-e29b-41d4-a716-446655440000\", limit: 10, offset: 10);"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\npaginated_response_of_broadcast_failure = client.broadcasts.list_failures(\n    \"550e8400-e29b-41d4-a716-446655440000\",\n    limit=10,\n    offset=10,\n)"
          }
        ]
      }
    },
    "/broadcasts/{id}/suppressions": {
      "get": {
        "operationId": "Broadcasts_listSuppressions",
        "tags": [
          "Broadcasts"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The broadcast ID.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Results per page. Min 1, max 500.",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 500,
              "minimum": 1,
              "format": "int32"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Pagination offset.",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfBroadcastSuppression"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "List broadcast suppressed recipients",
        "description": "Returns recipients that were skipped because they appear on a suppression list (e.g. previous bounces or unsubscribes).",
        "x-codeSampleId": "Broadcasts_listSuppressions",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nid = \"550e8400-e29b-41d4-a716-446655440000\"\nopts = {\n  limit: 10,\n  offset: 10\n}\nHelo::Broadcasts.list_suppressions(id, opts)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.broadcasts.listSuppressions(\n  \"550e8400-e29b-41d4-a716-446655440000\",\n  {\n    limit: 10,\n    offset: 10,\n  },\n);"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tparams := &helo.BroadcastsListSuppressionsParams{\n\t\tLimit: 10,\n\t\tOffset: 10,\n\t}\n\tresult, err := client.Broadcasts.ListSuppressions(ctx, \"550e8400-e29b-41d4-a716-446655440000\", params)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk.Broadcasts;\n\nvar paginatedResponseOfBroadcastSuppression = await helo.Broadcasts.ListSuppressions(\"550e8400-e29b-41d4-a716-446655440000\", limit: 10, offset: 10);"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\npaginated_response_of_broadcast_suppression = client.broadcasts.list_suppressions(\n    \"550e8400-e29b-41d4-a716-446655440000\",\n    limit=10,\n    offset=10,\n)"
          }
        ]
      }
    },
    "/statistics/hourly": {
      "get": {
        "operationId": "Statistics_retrieveHourly",
        "tags": [
          "Statistics"
        ],
        "security": [],
        "parameters": [
          {
            "name": "channelId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "from",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "to",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "tags",
            "in": "query",
            "required": false,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatisticsHourlyResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {}
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "summary": "Retrieve hourly statistics",
        "description": "Fetches hourly aggregated statistics.",
        "x-codeSampleId": "Statistics_retrieveHourly",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nopts = {\n  channel_id: \"550e8400-e29b-41d4-a716-446655440000\",\n  from: \"2024-01-01T00:00:00Z\",\n  to: \"2024-01-01T00:00:00Z\",\n  tags: [\"example1\", \"example2\"]\n}\nHelo::Statistics.retrieve_hourly(opts)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.statistics.retrieveHourly({\n  channelId: \"550e8400-e29b-41d4-a716-446655440000\",\n  from: \"2024-01-01T00:00:00Z\",\n  to: \"2024-01-01T00:00:00Z\",\n  tags: [\"example1\", \"example2\"],\n});"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\t\"time\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tparams := &helo.StatisticsRetrieveHourlyParams{\n\t\tChannelID: \"550e8400-e29b-41d4-a716-446655440000\",\n\t\tFrom: time.Now(),\n\t\tTo: time.Now(),\n\t\tTags: []string{\"example1\", \"example2\"},\n\t}\n\tresult, err := client.Statistics.RetrieveHourly(ctx, params)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using System;\nusing HeloEmail.Sdk.Statistics;\n\nvar statisticsHourly = await helo.Statistics.RetrieveHourly(DateTimeOffset.UtcNow, DateTimeOffset.UtcNow, channelId: \"550e8400-e29b-41d4-a716-446655440000\");"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\nstatistics_hourly = client.statistics.retrieve_hourly(\n    from_=\"2024-01-01T00:00:00Z\",\n    to=\"2024-01-01T00:00:00Z\",\n    channel_id=\"550e8400-e29b-41d4-a716-446655440000\",\n)"
          }
        ]
      }
    },
    "/statistics/daily": {
      "get": {
        "operationId": "Statistics_retrieveDaily",
        "tags": [
          "Statistics"
        ],
        "security": [],
        "parameters": [
          {
            "name": "channelId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "from",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "to",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "tags",
            "in": "query",
            "required": false,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "timezone",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatisticsDailyResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {}
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "summary": "Retrieve daily statistics",
        "description": "Fetches daily aggregated statistics.",
        "x-codeSampleId": "Statistics_retrieveDaily",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nopts = {\n  channel_id: \"550e8400-e29b-41d4-a716-446655440000\",\n  from: \"2024-01-01\",\n  to: \"2024-01-01\",\n  tags: [\"example1\", \"example2\"],\n  timezone: \"America/New_York\"\n}\nHelo::Statistics.retrieve_daily(opts)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.statistics.retrieveDaily({\n  channelId: \"550e8400-e29b-41d4-a716-446655440000\",\n  from: \"2024-01-01\",\n  to: \"2024-01-01\",\n  tags: [\"example1\", \"example2\"],\n  timezone: \"America/New_York\",\n});"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tparams := &helo.StatisticsRetrieveDailyParams{\n\t\tChannelID: \"550e8400-e29b-41d4-a716-446655440000\",\n\t\tFrom: \"2024-01-01\",\n\t\tTo: \"2024-01-01\",\n\t\tTags: []string{\"example1\", \"example2\"},\n\t\tTimezone: \"America/New_York\",\n\t}\n\tresult, err := client.Statistics.RetrieveDaily(ctx, params)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using System;\nusing HeloEmail.Sdk.Statistics;\n\nvar statisticsDaily = await helo.Statistics.RetrieveDaily(DateTimeOffset.UtcNow, DateTimeOffset.UtcNow, \"America/New_York\", channelId: \"550e8400-e29b-41d4-a716-446655440000\");"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\nstatistics_daily = client.statistics.retrieve_daily(\n    from_=\"2024-01-01\",\n    to=\"2024-01-01\",\n    timezone=\"America/New_York\",\n    channel_id=\"550e8400-e29b-41d4-a716-446655440000\",\n)"
          }
        ]
      }
    },
    "/statistics/totals": {
      "get": {
        "operationId": "Statistics_retrieveTotals",
        "tags": [
          "Statistics"
        ],
        "security": [],
        "parameters": [
          {
            "name": "channelId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "from",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "to",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "tags",
            "in": "query",
            "required": false,
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatisticsTotalsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {}
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "summary": "Retrieve all time statistics",
        "description": "Fetches cumulative statistics.",
        "x-codeSampleId": "Statistics_retrieveTotals",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nopts = {\n  channel_id: \"550e8400-e29b-41d4-a716-446655440000\",\n  from: \"2024-01-01T00:00:00Z\",\n  to: \"2024-01-01T00:00:00Z\",\n  tags: [\"example1\", \"example2\"]\n}\nHelo::Statistics.retrieve_totals(opts)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.statistics.retrieveTotals({\n  channelId: \"550e8400-e29b-41d4-a716-446655440000\",\n  from: \"2024-01-01T00:00:00Z\",\n  to: \"2024-01-01T00:00:00Z\",\n  tags: [\"example1\", \"example2\"],\n});"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\t\"time\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tparams := &helo.StatisticsRetrieveTotalsParams{\n\t\tChannelID: \"550e8400-e29b-41d4-a716-446655440000\",\n\t\tFrom: time.Now(),\n\t\tTo: time.Now(),\n\t\tTags: []string{\"example1\", \"example2\"},\n\t}\n\tresult, err := client.Statistics.RetrieveTotals(ctx, params)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using System;\nusing HeloEmail.Sdk.Statistics;\n\nvar statisticsTotals = await helo.Statistics.RetrieveTotals(DateTimeOffset.UtcNow, DateTimeOffset.UtcNow, channelId: \"550e8400-e29b-41d4-a716-446655440000\");"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\nstatistics_totals = client.statistics.retrieve_totals(\n    from_=\"2024-01-01T00:00:00Z\",\n    to=\"2024-01-01T00:00:00Z\",\n    channel_id=\"550e8400-e29b-41d4-a716-446655440000\",\n)"
          }
        ]
      }
    },
    "/suppressions": {
      "get": {
        "operationId": "Suppressions_list",
        "tags": [
          "Suppressions"
        ],
        "security": [],
        "parameters": [
          {
            "name": "channelId",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "mailType",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/MailType"
            }
          },
          {
            "name": "reason",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/SuppressionReason"
            }
          },
          {
            "name": "email",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 500,
              "minimum": 1,
              "format": "int32"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponseOfSuppressionResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401WithError"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "List suppressions",
        "description": "Retrieves a list of suppressed email addresses for a channel.",
        "x-codeSampleId": "Suppressions_list",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nopts = {\n  channel_id: \"550e8400-e29b-41d4-a716-446655440000\",\n  mail_type: Helo::MailType::TRANSACTIONAL,\n  reason: Helo::SuppressionReason::BOUNCE,\n  email: \"example\",\n  limit: 10,\n  offset: 10\n}\nHelo::Suppressions.list(opts)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.suppressions.list({\n  channelId: \"550e8400-e29b-41d4-a716-446655440000\",\n  mailType: Helo.MailType.TRANSACTIONAL,\n  reason: Helo.SuppressionReason.BOUNCE,\n  email: \"test@example.com\",\n  limit: 10,\n  offset: 10,\n});"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tparams := &helo.SuppressionsListParams{\n\t\tChannelID: \"550e8400-e29b-41d4-a716-446655440000\",\n\t\tMailType: helo.MailTypeTransactional,\n\t\tReason: helo.SuppressionReasonBounce,\n\t\tEmail: \"test@example.com\",\n\t\tLimit: 10,\n\t\tOffset: 10,\n\t}\n\tresult, err := client.Suppressions.List(ctx, params)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk;\nusing HeloEmail.Sdk.Suppressions;\n\nvar paginatedResponseOfSuppression = await helo.Suppressions.List(\"550e8400-e29b-41d4-a716-446655440000\", MailType.Transactional, reason: SuppressionReason.Bounce, email: \"test@example.com\");"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\npaginated_response_of_suppression = client.suppressions.list(\n    channel_id=\"550e8400-e29b-41d4-a716-446655440000\",\n    mail_type=helo.MailType.TRANSACTIONAL,\n    reason=helo.SuppressionReason.BOUNCE,\n    email=\"test@example.com\",\n)"
          }
        ]
      },
      "post": {
        "operationId": "Suppressions_create",
        "tags": [
          "Suppressions"
        ],
        "security": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateSuppressionsRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateSuppressionsResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401WithError"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "Create suppressions",
        "description": "Adds email addresses to the suppression list to prevent future sends.",
        "x-codeSampleId": "Suppressions_create",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\ncreate_suppressions_request = Helo::CreateSuppressionsRequest.new(\n  channel_id: \"550e8400-e29b-41d4-a716-446655440000\",\n  mail_type: Helo::MailType::TRANSACTIONAL,\n  emails: [\"example1\", \"example2\"]\n)\nHelo::Suppressions.create(create_suppressions_request)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.suppressions.create({\n  channelId: \"550e8400-e29b-41d4-a716-446655440000\",\n  mailType: Helo.MailType.TRANSACTIONAL,\n  emails: [\"example1\", \"example2\"],\n});"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tparams := &helo.CreateSuppressionsRequest{\n\t\tChannelID: \"550e8400-e29b-41d4-a716-446655440000\",\n\t\tMailType: helo.MailTypeTransactional,\n\t\tEmails: []string{\"example1\", \"example2\"},\n\t}\n\tresult, err := client.Suppressions.Create(ctx, params)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk;\nusing HeloEmail.Sdk.Suppressions;\n\nvar createSuppressions = await helo.Suppressions.Create(new CreateSuppressionsRequest\n{\n    ChannelId = \"550e8400-e29b-41d4-a716-446655440000\",\n    MailType = MailType.Transactional,\n    Emails = [\"test@example.com\"],\n});"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\ncreate_suppressions = client.suppressions.create(\n    channel_id=\"550e8400-e29b-41d4-a716-446655440000\",\n    mail_type=helo.MailType.TRANSACTIONAL,\n    emails=[\"test@example.com\"],\n)"
          }
        ]
      }
    },
    "/suppressions/remove": {
      "post": {
        "operationId": "Suppressions_remove",
        "tags": [
          "Suppressions"
        ],
        "security": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RemoveSuppressionsRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RemoveSuppressionsResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401WithError"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "422": {
            "$ref": "#/components/responses/422"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "Remove suppressions",
        "description": "Removes email addresses from the suppression list to allow future sends.",
        "x-codeSampleId": "Suppressions_remove",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nremove_suppressions_request = Helo::RemoveSuppressionsRequest.new(\n  channel_id: \"550e8400-e29b-41d4-a716-446655440000\",\n  mail_type: Helo::MailType::TRANSACTIONAL,\n  emails: [\"example1\", \"example2\"]\n)\nHelo::Suppressions.remove(remove_suppressions_request)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.suppressions.remove({\n  channelId: \"550e8400-e29b-41d4-a716-446655440000\",\n  mailType: Helo.MailType.TRANSACTIONAL,\n  emails: [\"example1\", \"example2\"],\n});"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tparams := &helo.RemoveSuppressionsRequest{\n\t\tChannelID: \"550e8400-e29b-41d4-a716-446655440000\",\n\t\tMailType: helo.MailTypeTransactional,\n\t\tEmails: []string{\"example1\", \"example2\"},\n\t}\n\tresult, err := client.Suppressions.Remove(ctx, params)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk;\nusing HeloEmail.Sdk.Suppressions;\n\nvar removeSuppressions = await helo.Suppressions.Remove(new RemoveSuppressionsRequest\n{\n    ChannelId = \"550e8400-e29b-41d4-a716-446655440000\",\n    MailType = MailType.Transactional,\n    Emails = [\"test@example.com\"],\n});"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\nremove_suppressions = client.suppressions.remove(\n    channel_id=\"550e8400-e29b-41d4-a716-446655440000\",\n    mail_type=helo.MailType.TRANSACTIONAL,\n    emails=[\"test@example.com\"],\n)"
          }
        ]
      }
    },
    "/webhooks": {
      "post": {
        "operationId": "Webhooks_create",
        "tags": [
          "Webhooks"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateWebhookRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "summary": "Create a webhook",
        "description": "Registers a new webhook to receive event notifications.",
        "x-codeSampleId": "Webhooks_create",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\ncreate_webhook_request = Helo::CreateWebhookRequest.new(\n  url: \"test-url\",\n  events: [Helo::WebhookEvent::MESSAGE_ACCEPTED, Helo::WebhookEvent::MESSAGE_PROCESSED],\n  channel_id: \"550e8400-e29b-41d4-a716-446655440000\",\n  additional_headers: [{ name: \"test-name\", value: \"test-value\" }],\n  enabled: true\n)\nHelo::Webhooks.create(create_webhook_request)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.webhooks.create({\n  url: \"test-url\",\n  events: [\n    Helo.WebhookEvent.MESSAGE_ACCEPTED,\n    Helo.WebhookEvent.MESSAGE_PROCESSED,\n  ],\n  channelId: \"550e8400-e29b-41d4-a716-446655440000\",\n  additionalHeaders: [{ name: \"test-name\", value: \"test-value\" }],\n  enabled: true,\n});"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tparams := &helo.CreateWebhookRequest{\n\t\tURL: \"test-url\",\n\t\tEvents: []helo.WebhookEvent{helo.WebhookEventMessageAccepted, helo.WebhookEventMessageProcessed},\n\t\tChannelID: \"550e8400-e29b-41d4-a716-446655440000\",\n\t\tEnabled: true,\n\t}\n\tresult, err := client.Webhooks.Create(ctx, params)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk.Webhooks;\n\nvar webhook = await helo.Webhooks.Create(new CreateWebhookRequest\n{\n    Url = \"test-url\",\n    Events = [WebhookEvent.MessageAccepted],\n    ChannelId = \"550e8400-e29b-41d4-a716-446655440000\",\n    Enabled = true,\n});"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\nwebhook = client.webhooks.create(\n    url=\"test-url\",\n    events=[helo.WebhookEvent.MESSAGE_ACCEPTED],\n    channel_id=\"550e8400-e29b-41d4-a716-446655440000\",\n    additional_headers=[{\"name\": \"test-name\", \"value\": \"test-value\"}],\n    enabled=True,\n)"
          }
        ]
      },
      "get": {
        "operationId": "Webhooks_list",
        "tags": [
          "Webhooks"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of results to return.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Number of results to skip for pagination.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "channelIds",
            "in": "query",
            "description": "Filter webhooks belonging to specific channels.",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginationResultOfWebhookResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "summary": "List all webhooks",
        "description": "Retrieves all webhooks configured for the account.",
        "x-codeSampleId": "Webhooks_list",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nopts = {\n  limit: 10,\n  offset: 10,\n  channel_ids: [\"550e8400-e29b-41d4-a716-446655440000\", \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\"]\n}\nHelo::Webhooks.list(opts)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.webhooks.list({\n  limit: 10,\n  offset: 10,\n  channelIds: [\"550e8400-e29b-41d4-a716-446655440000\"],\n});"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tparams := &helo.WebhooksListParams{\n\t\tLimit: 10,\n\t\tOffset: 10,\n\t\tChannelIds: []string{\"550e8400-e29b-41d4-a716-446655440000\"},\n\t}\n\tresult, err := client.Webhooks.List(ctx, params)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk.Webhooks;\n\nvar paginationResultOfWebhook = await helo.Webhooks.List(limit: 10, offset: 10);"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\npagination_result_of_webhook = client.webhooks.list(limit=10, offset=10)"
          }
        ]
      }
    },
    "/webhooks/{id}": {
      "get": {
        "operationId": "Webhooks_retrieve",
        "tags": [
          "Webhooks"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Unique identifier of the webhook.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "summary": "Retrieve a webhook",
        "description": "Fetches the details and configuration of a specific webhook.",
        "x-codeSampleId": "Webhooks_retrieve",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nid = \"550e8400-e29b-41d4-a716-446655440000\"\nHelo::Webhooks.retrieve(id)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.webhooks.retrieve(\n  \"550e8400-e29b-41d4-a716-446655440000\",\n);"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tresult, err := client.Webhooks.Retrieve(ctx, \"550e8400-e29b-41d4-a716-446655440000\")\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk.Webhooks;\n\nvar webhook = await helo.Webhooks.Retrieve(\"550e8400-e29b-41d4-a716-446655440000\");"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\nwebhook = client.webhooks.retrieve(\"550e8400-e29b-41d4-a716-446655440000\")"
          }
        ]
      },
      "patch": {
        "operationId": "Webhooks_update",
        "tags": [
          "Webhooks"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Unique identifier of the webhook.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateWebhookRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "summary": "Update a webhook",
        "description": "Modifies an existing webhook by ID.",
        "x-codeSampleId": "Webhooks_update",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nid = \"550e8400-e29b-41d4-a716-446655440000\"\nupdate_webhook_request = Helo::UpdateWebhookRequest.new(\n  url: \"test-url\",\n  events: [Helo::WebhookEvent::MESSAGE_ACCEPTED, Helo::WebhookEvent::MESSAGE_PROCESSED],\n  channel_id: \"550e8400-e29b-41d4-a716-446655440000\",\n  additional_headers: [{ name: \"test-name\", value: \"test-value\" }],\n  enabled: true\n)\nHelo::Webhooks.update(id, update_webhook_request)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.webhooks.update(\n  \"550e8400-e29b-41d4-a716-446655440000\",\n  {\n    url: \"test-url\",\n    events: [\n      Helo.WebhookEvent.MESSAGE_ACCEPTED,\n      Helo.WebhookEvent.MESSAGE_PROCESSED,\n    ],\n    channelId: \"550e8400-e29b-41d4-a716-446655440000\",\n    additionalHeaders: [{ name: \"test-name\", value: \"test-value\" }],\n    enabled: true,\n  },\n);"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tparams := &helo.UpdateWebhookRequest{\n\t\tURL: \"test-url\",\n\t\tEvents: []helo.WebhookEvent{helo.WebhookEventMessageAccepted, helo.WebhookEventMessageProcessed},\n\t\tChannelID: \"550e8400-e29b-41d4-a716-446655440000\",\n\t\tEnabled: true,\n\t}\n\tresult, err := client.Webhooks.Update(ctx, \"550e8400-e29b-41d4-a716-446655440000\", params)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk.Webhooks;\n\nvar webhook = await helo.Webhooks.Update(\"550e8400-e29b-41d4-a716-446655440000\", new UpdateWebhookRequest\n{\n    Url = \"test-url\",\n    Events = [WebhookEvent.MessageAccepted],\n    ChannelId = \"550e8400-e29b-41d4-a716-446655440000\",\n    Enabled = true,\n});"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\nwebhook = client.webhooks.update(\n    \"550e8400-e29b-41d4-a716-446655440000\",\n    url=\"test-url\",\n    events=[helo.WebhookEvent.MESSAGE_ACCEPTED],\n    channel_id=\"550e8400-e29b-41d4-a716-446655440000\",\n    additional_headers=[{\"name\": \"test-name\", \"value\": \"test-value\"}],\n    enabled=True,\n)"
          }
        ]
      },
      "delete": {
        "operationId": "Webhooks_delete",
        "tags": [
          "Webhooks"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Unique identifier of the webhook.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "summary": "Delete a webhook",
        "description": "Permanently removes a webhook.",
        "x-codeSampleId": "Webhooks_delete",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nid = \"550e8400-e29b-41d4-a716-446655440000\"\nHelo::Webhooks.delete(id)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nawait helo.webhooks.del(\"550e8400-e29b-41d4-a716-446655440000\");"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tif err := client.Webhooks.Delete(ctx, \"550e8400-e29b-41d4-a716-446655440000\"); err != nil {\n\t\tlog.Fatal(err)\n\t}\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk.Webhooks;\n\nawait helo.Webhooks.Delete(\"550e8400-e29b-41d4-a716-446655440000\");"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\nclient.webhooks.delete(\"550e8400-e29b-41d4-a716-446655440000\")"
          }
        ]
      }
    },
    "/webhooks/{id}/regenerate-signing-key": {
      "post": {
        "operationId": "Webhooks_regenerateSigningKey",
        "tags": [
          "Webhooks"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Unique identifier of the webhook.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "summary": "Regenerate webhook signing key",
        "description": "Regenerate the signing key used for the webhook signature. This operation replaces the old key.",
        "x-codeSampleId": "Webhooks_regenerateSigningKey",
        "x-codeSamples": [
          {
            "lang": "ruby",
            "source": "Helo.configure do |config|\n  config.api_key = ENV.fetch(\"HELO_API_KEY\")\nend\n\nid = \"550e8400-e29b-41d4-a716-446655440000\"\nHelo::Webhooks.regenerate_signing_key(id)"
          },
          {
            "lang": "javascript",
            "source": "import Helo from \"@helo-email/sdk\";\n\nconst apiKey = process.env.HELO_API_KEY;\nconst helo = new Helo(apiKey);\n\nconst result = await helo.webhooks.regenerateSigningKey(\n  \"550e8400-e29b-41d4-a716-446655440000\",\n);"
          },
          {
            "lang": "go",
            "source": "package main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/helo-email/helo-sdk-go\"\n)\n\nfunc main() {\n\tclient := helo.NewHelo(os.Getenv(\"HELO_API_KEY\"))\n\tctx := context.Background()\n\n\tresult, err := client.Webhooks.RegenerateSigningKey(ctx, \"550e8400-e29b-41d4-a716-446655440000\")\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t_ = result\n}"
          },
          {
            "lang": "csharp",
            "source": "using HeloEmail.Sdk.Webhooks;\n\nvar webhook = await helo.Webhooks.RegenerateSigningKey(\"550e8400-e29b-41d4-a716-446655440000\");"
          },
          {
            "lang": "python",
            "source": "import sdk_helo_email as helo\n\nclient = helo.Helo()  # reads HELO_API_KEY from the environment\n\nwebhook = client.webhooks.regenerate_signing_key(\"550e8400-e29b-41d4-a716-446655440000\")"
          }
        ]
      }
    }
  },
  "webhooks": {
    "message-accepted": {
      "post": {
        "operationId": "webhook_messageAccepted",
        "summary": "Message accepted",
        "description": "Sent when a message has been accepted for sending.",
        "tags": [
          "Webhooks"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WebhookSignatureHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookEventIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookChannelIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookTestHeader"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MessageAcceptedWebhookPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "2XX": {
            "description": "Return any 2XX status code to acknowledge receipt."
          }
        }
      }
    },
    "message-processed": {
      "post": {
        "operationId": "webhook_processed",
        "summary": "Message processed",
        "description": "Sent when a message has been processed and is ready for delivery.",
        "tags": [
          "Webhooks"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WebhookSignatureHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookEventIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookChannelIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookTestHeader"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MessageProcessedWebhookPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "2XX": {
            "description": "Return any 2XX status code to acknowledge receipt."
          }
        }
      }
    },
    "email-delivered": {
      "post": {
        "operationId": "webhook_delivered",
        "summary": "Email delivered",
        "description": "Sent when an email has been successfully delivered to the recipient's mail server.",
        "tags": [
          "Webhooks"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WebhookSignatureHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookEventIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookChannelIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookTestHeader"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmailDeliveredWebhookPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "2XX": {
            "description": "Return any 2XX status code to acknowledge receipt."
          }
        }
      }
    },
    "email-bounced": {
      "post": {
        "operationId": "webhook_bounced",
        "summary": "Email bounced",
        "description": "Sent when an email could not be delivered and bounced.",
        "tags": [
          "Webhooks"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WebhookSignatureHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookEventIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookChannelIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookTestHeader"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmailBouncedWebhookPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "2XX": {
            "description": "Return any 2XX status code to acknowledge receipt."
          }
        }
      }
    },
    "email-opened": {
      "post": {
        "operationId": "webhook_opened",
        "summary": "Email opened",
        "description": "Sent when a recipient opens an email (when tracking is enabled).",
        "tags": [
          "Webhooks"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WebhookSignatureHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookEventIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookChannelIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookTestHeader"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmailOpenedWebhookPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "2XX": {
            "description": "Return any 2XX status code to acknowledge receipt."
          }
        }
      }
    },
    "link-clicked": {
      "post": {
        "operationId": "webhook_clicked",
        "summary": "Link clicked",
        "description": "Sent when a recipient clicks a link in an email (when tracking is enabled).",
        "tags": [
          "Webhooks"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WebhookSignatureHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookEventIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookChannelIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookTestHeader"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LinkClickedWebhookPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "2XX": {
            "description": "Return any 2XX status code to acknowledge receipt."
          }
        }
      }
    },
    "recipient-complained": {
      "post": {
        "operationId": "webhook_complained",
        "summary": "Recipient complained",
        "description": "Sent when a recipient marks an email as spam.",
        "tags": [
          "Webhooks"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WebhookSignatureHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookEventIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookChannelIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookTestHeader"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RecipientComplainedWebhookPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "2XX": {
            "description": "Return any 2XX status code to acknowledge receipt."
          }
        }
      }
    },
    "recipient-unsubscribed": {
      "post": {
        "operationId": "webhook_unsubscribed",
        "summary": "Recipient unsubscribed",
        "description": "Sent when a recipient unsubscribes.",
        "tags": [
          "Webhooks"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WebhookSignatureHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookEventIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookChannelIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookTestHeader"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RecipientUnsubscribedWebhookPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "2XX": {
            "description": "Return any 2XX status code to acknowledge receipt."
          }
        }
      }
    },
    "recipient-resubscribed": {
      "post": {
        "operationId": "webhook_resubscribed",
        "summary": "Recipient resubscribed",
        "description": "Sent when a previously unsubscribed recipient resubscribes.",
        "tags": [
          "Webhooks"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WebhookSignatureHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookEventIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookChannelIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookTestHeader"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RecipientResubscribedWebhookPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "2XX": {
            "description": "Return any 2XX status code to acknowledge receipt."
          }
        }
      }
    },
    "domain-key-verified": {
      "post": {
        "operationId": "webhook_domain_key_verified",
        "summary": "Domain key verified",
        "description": "Sent when the DKIM domain key DNS record for a domain has been verified.",
        "tags": [
          "Webhooks"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WebhookSignatureHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookEventIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookChannelIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookTestHeader"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DomainKeyVerifiedPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "2XX": {
            "description": "Return any 2XX status code to acknowledge receipt."
          }
        }
      }
    },
    "domain-key-verification-failed": {
      "post": {
        "operationId": "webhook_domain_key_verification_failed",
        "summary": "Domain key verification failed",
        "description": "Sent when verification of the DKIM domain key DNS record for a domain has failed.",
        "tags": [
          "Webhooks"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WebhookSignatureHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookEventIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookChannelIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookTestHeader"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DomainKeyVerificationFailedPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "2XX": {
            "description": "Return any 2XX status code to acknowledge receipt."
          }
        }
      }
    },
    "return-path-domain-verified": {
      "post": {
        "operationId": "webhook_return_path_domain_verified",
        "summary": "Return path domain verified",
        "description": "Sent when the return path domain DNS record for a domain has been verified.",
        "tags": [
          "Webhooks"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WebhookSignatureHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookEventIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookChannelIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookTestHeader"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReturnPathDomainVerifiedPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "2XX": {
            "description": "Return any 2XX status code to acknowledge receipt."
          }
        }
      }
    },
    "return-path-domain-verification-failed": {
      "post": {
        "operationId": "webhook_return_path_domain_verification_failed",
        "summary": "Return path domain verification failed",
        "description": "Sent when verification of the return path domain DNS record for a domain has failed.",
        "tags": [
          "Webhooks"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WebhookSignatureHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookEventIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookChannelIdHeader"
          },
          {
            "$ref": "#/components/parameters/WebhookTestHeader"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReturnPathDomainVerificationFailedPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "2XX": {
            "description": "Return any 2XX status code to acknowledge receipt."
          }
        }
      }
    }
  },
  "components": {
    "responses": {
      "400": {
        "description": "Bad Request",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            }
          }
        }
      },
      "401": {
        "description": "Unauthorized"
      },
      "403": {
        "description": "Forbidden",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            }
          }
        }
      },
      "404": {
        "description": "Not Found",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            }
          }
        }
      },
      "409": {
        "description": "Conflict",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            }
          }
        }
      },
      "422": {
        "description": "Unprocessable Entity",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            }
          }
        }
      },
      "500": {
        "description": "Internal server error",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            }
          }
        }
      },
      "401WithError": {
        "description": "Unauthorized",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            }
          }
        }
      }
    },
    "schemas": {
      "MailType": {
        "enum": [
          "transactional",
          "broadcast"
        ]
      },
      "ChannelDetailsResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "The unique channel ID."
          },
          "name": {
            "type": "string",
            "description": "The display name of the channel."
          },
          "deliveryType": {
            "$ref": "#/components/schemas/DeliveryType"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "When the channel was created."
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "description": "When the channel was last updated."
          },
          "tracking": {
            "$ref": "#/components/schemas/ChannelTracking"
          }
        }
      },
      "ChannelBasicResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "The unique channel ID."
          },
          "name": {
            "type": "string",
            "description": "The display name of the channel."
          },
          "deliveryType": {
            "$ref": "#/components/schemas/DeliveryType"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "When the channel was created."
          }
        }
      },
      "ChannelTracking": {
        "type": "object",
        "required": [
          "links",
          "opens"
        ],
        "properties": {
          "links": {
            "type": "boolean",
            "description": "Whether link-click tracking is enabled."
          },
          "opens": {
            "type": "boolean",
            "description": "Whether open tracking is enabled."
          }
        }
      },
      "CreateChannelRequest": {
        "required": [
          "name",
          "deliveryType"
        ],
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "The display name for the channel."
          },
          "deliveryType": {
            "$ref": "#/components/schemas/DeliveryType"
          },
          "tracking": {
            "$ref": "#/components/schemas/CreateChannelTracking"
          }
        }
      },
      "CreateChannelTracking": {
        "type": "object",
        "properties": {
          "links": {
            "type": "boolean",
            "description": "Whether to track link clicks in outgoing emails."
          },
          "opens": {
            "type": "boolean",
            "description": "Whether to track email opens."
          }
        }
      },
      "DeliveryType": {
        "description": "Delivery mode for a channel. `live` sends real emails, whereas `sandbox`\naccepts and processes messages without delivering them to recipients.\n",
        "enum": [
          "live",
          "sandbox"
        ]
      },
      "ValidationError": {
        "description": "A single field validation error.",
        "required": [
          "message"
        ],
        "type": "object",
        "properties": {
          "message": {
            "description": "Description of the validation failure.",
            "type": "string"
          }
        }
      },
      "ErrorResponse": {
        "description": "Standard error response body.",
        "type": "object",
        "properties": {
          "type": {
            "description": "A URI reference identifying the problem type.",
            "type": "string"
          },
          "title": {
            "description": "Short, human-readable summary of the problem.",
            "type": "string"
          },
          "instance": {
            "description": "URI reference identifying the specific occurrence of the problem.",
            "type": "string"
          },
          "status": {
            "description": "HTTP status code.",
            "type": "integer",
            "format": "int32"
          },
          "code": {
            "description": "Application-specific error code.",
            "type": "string"
          },
          "detail": {
            "description": "Human-readable explanation of this specific occurrence.",
            "type": "string"
          },
          "requestId": {
            "description": "Unique request ID, useful for support correlation.",
            "type": "string"
          },
          "errors": {
            "description": "Field-level validation errors, keyed by field name.",
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/ValidationError"
              }
            }
          }
        }
      },
      "PaginationResultOfChannelBasicResponse": {
        "required": [
          "results",
          "totalCount"
        ],
        "type": "object",
        "properties": {
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ChannelBasicResponse"
            }
          },
          "totalCount": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "UpdateChannelRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "The new display name for the channel. Omit to keep the current value."
          },
          "deliveryType": {
            "$ref": "#/components/schemas/DeliveryType"
          },
          "tracking": {
            "$ref": "#/components/schemas/UpdateChannelTracking"
          }
        }
      },
      "UpdateChannelTracking": {
        "type": "object",
        "properties": {
          "links": {
            "type": "boolean",
            "description": "Whether to track link clicks in outgoing emails."
          },
          "opens": {
            "type": "boolean",
            "description": "Whether to track email opens."
          }
        }
      },
      "EventType": {
        "type": "string",
        "enum": [
          "accepted",
          "processed",
          "delivered",
          "bounced",
          "opened",
          "clicked",
          "complained",
          "unsubscribed",
          "resubscribed"
        ]
      },
      "MessageStatus": {
        "type": "string",
        "enum": [
          "queued",
          "sent"
        ]
      },
      "ActivityMailAddress": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "format": "email"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "email"
        ]
      },
      "ActivityEvent": {
        "type": "object",
        "properties": {
          "messageId": {
            "type": "string",
            "format": "uuid"
          },
          "channelId": {
            "type": "string",
            "format": "uuid"
          },
          "mailType": {
            "type": "string",
            "enum": [
              "transactional",
              "broadcast"
            ]
          },
          "mailSource": {
            "type": "string",
            "enum": [
              "api",
              "smtp"
            ]
          },
          "eventType": {
            "$ref": "#/components/schemas/EventType"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "subject": {
            "type": "string"
          },
          "recipients": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "details": {
            "type": "object"
          }
        },
        "required": [
          "messageId",
          "channelId",
          "mailType",
          "eventType",
          "timestamp",
          "subject",
          "recipients"
        ]
      },
      "PaginatedEventsResponse": {
        "type": "object",
        "properties": {
          "after": {
            "type": "integer",
            "format": "int64"
          },
          "totalCount": {
            "type": "number"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ActivityEvent"
            }
          }
        },
        "required": [
          "results",
          "totalCount"
        ]
      },
      "PaginatedMessagesResponse": {
        "type": "object",
        "properties": {
          "after": {
            "type": "integer",
            "format": "int64"
          },
          "totalCount": {
            "type": "number"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Message"
            }
          }
        },
        "required": [
          "results",
          "totalCount"
        ]
      },
      "Message": {
        "type": "object",
        "properties": {
          "messageId": {
            "type": "string",
            "format": "uuid"
          },
          "channelId": {
            "type": "string",
            "format": "uuid"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "mailType": {
            "type": "string",
            "enum": [
              "transactional",
              "broadcast"
            ]
          },
          "mailSource": {
            "type": "string",
            "enum": [
              "api",
              "smtp"
            ]
          },
          "deliveryType": {
            "type": "string",
            "enum": [
              "live",
              "sandbox"
            ]
          },
          "status": {
            "$ref": "#/components/schemas/MessageStatus"
          },
          "subject": {
            "type": "string"
          },
          "recipients": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "statistics": {
            "$ref": "#/components/schemas/MessageStatistics"
          }
        },
        "required": [
          "messageId",
          "channelId",
          "timestamp",
          "mailType",
          "mailSource",
          "deliveryType",
          "status",
          "subject",
          "recipients",
          "statistics"
        ]
      },
      "MessageStatistics": {
        "type": "object",
        "properties": {
          "delivered": {
            "type": "integer",
            "format": "int32"
          },
          "bounced": {
            "type": "integer",
            "format": "int32"
          },
          "opened": {
            "type": "integer",
            "format": "int32"
          },
          "clicked": {
            "type": "integer",
            "format": "int32"
          },
          "complained": {
            "type": "integer",
            "format": "int32"
          },
          "unsubscribed": {
            "type": "integer",
            "format": "int32"
          }
        },
        "required": [
          "delivered",
          "bounced",
          "opened",
          "clicked",
          "complained",
          "unsubscribed"
        ]
      },
      "MessageDetailsResponse": {
        "type": "object",
        "properties": {
          "messageId": {
            "type": "string",
            "format": "uuid"
          },
          "channelId": {
            "type": "string",
            "format": "uuid"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "mailType": {
            "type": "string",
            "enum": [
              "transactional",
              "broadcast"
            ]
          },
          "mailSource": {
            "type": "string",
            "enum": [
              "api",
              "smtp"
            ]
          },
          "deliveryType": {
            "type": "string",
            "enum": [
              "live",
              "sandbox"
            ]
          },
          "status": {
            "$ref": "#/components/schemas/MessageStatus"
          },
          "subject": {
            "type": "string"
          },
          "from": {
            "$ref": "#/components/schemas/ActivityMailAddress"
          },
          "to": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ActivityMailAddress"
            }
          },
          "cc": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ActivityMailAddress"
            }
          },
          "bcc": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ActivityMailAddress"
            }
          },
          "replyTo": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ActivityMailAddress"
            }
          },
          "text": {
            "type": "string"
          },
          "html": {
            "type": "string"
          },
          "body": {
            "type": "string"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "headers": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "attachments": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "fileName": {
                  "type": "string"
                },
                "disposition": {
                  "type": "string",
                  "enum": [
                    "inline",
                    "attachment"
                  ]
                },
                "size": {
                  "type": "number"
                }
              },
              "required": [
                "fileName",
                "disposition",
                "size"
              ]
            }
          },
          "tracking": {
            "type": "object",
            "properties": {
              "links": {
                "type": "boolean"
              },
              "opens": {
                "type": "boolean"
              }
            },
            "required": [
              "links",
              "opens"
            ]
          },
          "events": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "eventType": {
                  "$ref": "#/components/schemas/EventType"
                },
                "timestamp": {
                  "type": "string",
                  "format": "date-time"
                },
                "recipients": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "details": {
                  "type": "object"
                }
              },
              "required": [
                "eventType",
                "timestamp",
                "recipients"
              ]
            }
          },
          "statistics": {
            "$ref": "#/components/schemas/MessageStatistics"
          }
        },
        "required": [
          "messageId",
          "channelId",
          "timestamp",
          "mailType",
          "mailSource",
          "deliveryType",
          "status",
          "subject",
          "from",
          "to",
          "tracking",
          "events"
        ]
      },
      "CreateDomainRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "channelIds": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          }
        },
        "required": [
          "name"
        ]
      },
      "DnsRecordResponse": {
        "type": "object",
        "properties": {
          "type": {
            "$ref": "#/components/schemas/DnsRecordType"
          },
          "host": {
            "type": "string"
          },
          "value": {
            "type": "string"
          },
          "status": {
            "$ref": "#/components/schemas/DnsRecordStatus"
          },
          "lastCheckedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "DnsRecordsResponse": {
        "type": "object",
        "properties": {
          "domainKeyActive": {
            "$ref": "#/components/schemas/DnsRecordResponse"
          },
          "domainKeyPending": {
            "$ref": "#/components/schemas/DnsRecordResponse"
          },
          "returnPath": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DnsRecordResponse"
            }
          }
        }
      },
      "DnsRecordStatus": {
        "enum": [
          "pending",
          "verified",
          "failing",
          "failed"
        ]
      },
      "DnsRecordType": {
        "enum": [
          "txt",
          "cname"
        ]
      },
      "DomainChannelResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "deliveryType": {
            "$ref": "#/components/schemas/DeliveryType"
          },
          "deleted": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "name",
          "deliveryType"
        ]
      },
      "DomainResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "name": {
            "type": "string"
          },
          "verified": {
            "type": "boolean"
          },
          "channels": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DomainChannelResponse"
            }
          }
        },
        "required": [
          "id",
          "createdAt",
          "name",
          "verified"
        ]
      },
      "DomainWithDnsResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "name": {
            "type": "string"
          },
          "verified": {
            "type": "boolean"
          },
          "channels": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DomainChannelResponse"
            }
          },
          "dnsRecords": {
            "$ref": "#/components/schemas/DnsRecordsResponse"
          }
        },
        "required": [
          "id",
          "createdAt",
          "name",
          "verified",
          "dnsRecords"
        ]
      },
      "PaginatedResponseOfDomainResponse": {
        "type": "object",
        "properties": {
          "totalCount": {
            "type": "integer",
            "format": "int32"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DomainResponse"
            }
          }
        },
        "required": [
          "totalCount",
          "results"
        ]
      },
      "UpdateDomainRequest": {
        "type": "object",
        "properties": {
          "channelIds": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          }
        }
      },
      "BroadcastStatus": {
        "enum": [
          "accepted",
          "processing",
          "completed",
          "canceled"
        ],
        "description": "Current processing state of a broadcast. `accepted` — queued, waiting for the channel to become available. `processing` — actively sending messages. `completed` — all messages have been processed. `canceled` — stopped before completing."
      },
      "MailAddress": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "description": "Email address. Max 254 characters."
          },
          "name": {
            "type": "string",
            "description": "Display name shown to recipients in their email client."
          }
        },
        "required": [
          "email"
        ]
      },
      "Attachment": {
        "type": "object",
        "properties": {
          "content": {
            "type": "string",
            "format": "byte",
            "description": "Base64-encoded file content."
          },
          "contentId": {
            "type": "string",
            "description": "Used to reference inline images in HTML (e.g. `cid:logo`). Only applicable when `disposition` is `inline`."
          },
          "contentType": {
            "type": "string",
            "description": "MIME type (e.g. `application/pdf`). Inferred from the file extension if not provided."
          },
          "fileName": {
            "type": "string",
            "description": "File name including extension (e.g. `report.pdf`). Executable and potentially harmful file types are blocked."
          },
          "disposition": {
            "$ref": "#/components/schemas/AttachmentDisposition"
          }
        },
        "required": [
          "content",
          "fileName",
          "disposition"
        ]
      },
      "AttachmentDisposition": {
        "enum": [
          "attachment",
          "inline"
        ],
        "description": "How the attachment is presented. Use `attachment` for downloadable files and `inline` for embedded content (e.g. images referenced in HTML)."
      },
      "SendBroadcastRequest": {
        "type": "object",
        "properties": {
          "from": {
            "$ref": "#/components/schemas/MailAddress"
          },
          "replyTo": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MailAddress"
            },
            "description": "Reply-to addresses."
          },
          "template": {
            "type": "object",
            "properties": {
              "subject": {
                "type": "string",
                "description": "Subject line. Max 256 characters. Supports `{{variable}}` syntax."
              },
              "html": {
                "type": "string",
                "description": "HTML body. Supports `{{variable}}` syntax."
              },
              "text": {
                "type": "string",
                "description": "Plain-text fallback body. Supports `{{variable}}` syntax."
              },
              "inlineStyles": {
                "type": "boolean",
                "description": "When true, CSS styles are inlined into the HTML before sending."
              },
              "data": {
                "type": "object",
                "description": "Default template variables applied to every message. Message-level `data` values override these defaults."
              }
            },
            "required": [
              "subject"
            ],
            "description": "Email template applied to every message in the broadcast. At least one of `html` or `text` is required."
          },
          "tracking": {
            "type": "object",
            "properties": {
              "opens": {
                "type": "boolean",
                "description": "Track email opens. Defaults to the channel setting when not provided."
              },
              "links": {
                "type": "boolean",
                "description": "Track link clicks. Defaults to the channel setting when not provided."
              }
            },
            "description": "Override channel-level open and link tracking settings."
          },
          "attachments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Attachment"
            },
            "description": "File attachments included with every message in the broadcast. Executable and potentially harmful file types are blocked."
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Up to 5 tags for filtering and analytics. Allowed characters are letters, numbers, hyphens, and underscores. Max 100 characters per tag."
          },
          "headers": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Custom email headers applied to every message. Total size of all headers combined must not exceed 5,000 characters."
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Custom key/value metadata stored with the broadcast. Max 10 fields; keys max 50 characters, values max 100 characters."
          },
          "messages": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "to": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MailAddress"
                  },
                  "description": "Primary recipients. At least one required. Combined with `cc` and `bcc`, total recipients per message must not exceed 50."
                },
                "cc": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MailAddress"
                  },
                  "description": "Carbon copy recipients."
                },
                "bcc": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MailAddress"
                  },
                  "description": "Blind carbon copy recipients."
                },
                "tags": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "Message-specific tags. Merged with broadcast-level tags."
                },
                "headers": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "Message-specific headers. Merged with broadcast-level headers."
                },
                "metadata": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "Message-specific metadata. Merged with broadcast-level metadata."
                },
                "data": {
                  "type": "object",
                  "description": "Message-specific template variables. Merged with and overrides template-level `data`."
                }
              },
              "required": [
                "to"
              ]
            },
            "description": "One entry per outbound email. At least one message is required."
          }
        },
        "required": [
          "from",
          "template",
          "messages"
        ]
      },
      "SendBroadcastResponse": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "`accepted` — broadcast queued successfully. `failed` — validation or account error (see `errorCode`). `delayed` — transient submission error, will be retried automatically."
          },
          "broadcastId": {
            "type": "string",
            "format": "uuid",
            "description": "Unique identifier for the broadcast. Use this to track progress via `GET /broadcasts/{id}`."
          }
        }
      },
      "SendMessageRequest": {
        "type": "object",
        "properties": {
          "from": {
            "$ref": "#/components/schemas/MailAddress"
          },
          "to": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MailAddress"
            }
          },
          "cc": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MailAddress"
            }
          },
          "bcc": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MailAddress"
            }
          },
          "replyTo": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MailAddress"
            }
          },
          "subject": {
            "type": "string"
          },
          "html": {
            "type": "string"
          },
          "text": {
            "type": "string"
          },
          "template": {
            "type": "object",
            "properties": {
              "subject": {
                "type": "string"
              },
              "html": {
                "type": "string"
              },
              "text": {
                "type": "string"
              },
              "inlineStyles": {
                "type": "boolean"
              },
              "data": {
                "type": "object",
                "description": "Model used for template placeholder replacement"
              }
            }
          },
          "tracking": {
            "type": "object",
            "properties": {
              "opens": {
                "type": "boolean"
              },
              "links": {
                "type": "boolean"
              }
            }
          },
          "attachments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Attachment"
            }
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "headers": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          }
        },
        "required": [
          "from",
          "to"
        ]
      },
      "SendMessageResponse": {
        "type": "object",
        "anyOf": [
          {
            "$ref": "#/components/schemas/SendMessageAcceptedResponse"
          },
          {
            "$ref": "#/components/schemas/SendMessageFailedResponse"
          }
        ],
        "discriminator": {
          "propertyName": "status",
          "mapping": {
            "accepted": "#/components/schemas/SendMessageAcceptedResponse",
            "delayed": "#/components/schemas/SendMessageAcceptedResponse",
            "failed": "#/components/schemas/SendMessageFailedResponse"
          }
        },
        "required": [
          "status"
        ]
      },
      "SendMessageAcceptedResponse": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string"
          },
          "messageId": {
            "type": "string",
            "format": "uuid"
          },
          "suppressions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "SendMessageFailedResponse": {
        "properties": {
          "status": {
            "type": "string"
          },
          "errorCode": {
            "type": "string"
          },
          "errorMessage": {
            "type": "string"
          }
        },
        "required": [
          "status",
          "errorCode",
          "errorMessage"
        ]
      },
      "SendMessageBatchRequest": {
        "type": "object",
        "properties": {
          "requests": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SendMessageRequest"
            }
          }
        },
        "required": [
          "requests"
        ]
      },
      "SendMessageBatchResponse": {
        "type": "object",
        "properties": {
          "responses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SendMessageResponse"
            }
          }
        },
        "required": [
          "responses"
        ]
      },
      "BroadcastResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "Unique broadcast identifier."
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "When the broadcast was submitted."
          },
          "status": {
            "$ref": "#/components/schemas/BroadcastStatus"
          },
          "subject": {
            "type": "string",
            "description": "Email subject line."
          },
          "completion": {
            "type": "string",
            "description": "Processing progress as a percentage (e.g. `\"45%\"`)."
          },
          "messages": {
            "type": "integer",
            "format": "int32",
            "description": "Total number of messages in the broadcast."
          }
        },
        "required": [
          "id",
          "createdAt",
          "status",
          "subject",
          "completion",
          "messages",
          "performance"
        ]
      },
      "BroadcastDetailsResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "status": {
            "$ref": "#/components/schemas/BroadcastStatus"
          },
          "subject": {
            "type": "string"
          },
          "completion": {
            "type": "string"
          },
          "messages": {
            "type": "integer",
            "format": "int32"
          },
          "failed": {
            "type": "integer",
            "format": "int32",
            "description": "Number of messages that failed permanently. Retrieve details via `GET /broadcasts/{id}/failures`."
          },
          "suppressed": {
            "type": "integer",
            "format": "int32",
            "description": "Number of recipients skipped because they appear on a suppression list. Retrieve details via `GET /broadcasts/{id}/suppressions`."
          },
          "content": {
            "$ref": "#/components/schemas/BroadcastContent"
          },
          "tracking": {
            "$ref": "#/components/schemas/BroadcastTracking"
          },
          "statistics": {
            "$ref": "#/components/schemas/BroadcastStatistics"
          }
        },
        "required": [
          "id",
          "createdAt",
          "status",
          "subject",
          "completion",
          "messages",
          "failed",
          "suppressed",
          "content",
          "tracking",
          "statistics"
        ]
      },
      "BroadcastContent": {
        "type": "object",
        "properties": {
          "from": {
            "$ref": "#/components/schemas/MailAddress"
          },
          "replyTo": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MailAddress"
            },
            "description": "Reply-to addresses."
          },
          "template": {
            "type": "object",
            "properties": {
              "subject": {
                "type": "string",
                "description": "Subject line."
              },
              "html": {
                "type": "string",
                "description": "HTML body."
              },
              "text": {
                "type": "string",
                "description": "Plain-text fallback body."
              }
            },
            "required": [
              "subject"
            ]
          },
          "attachments": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "fileName": {
                  "type": "string",
                  "description": "File name including extension."
                },
                "disposition": {
                  "$ref": "#/components/schemas/AttachmentDisposition"
                },
                "size": {
                  "type": "integer",
                  "format": "int32",
                  "description": "File size in bytes."
                }
              },
              "required": [
                "fileName",
                "disposition",
                "size"
              ]
            },
            "description": "File attachments included with the broadcast."
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Tags associated with the broadcast."
          },
          "headers": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Custom email headers applied to every message."
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Custom key/value metadata stored with the broadcast."
          }
        }
      },
      "BroadcastTracking": {
        "type": "object",
        "properties": {
          "opens": {
            "type": "boolean",
            "description": "Whether open tracking is enabled for this broadcast."
          },
          "links": {
            "type": "boolean",
            "description": "Whether link click tracking is enabled for this broadcast."
          }
        },
        "required": [
          "opens",
          "links"
        ]
      },
      "BroadcastStatistics": {
        "type": "object",
        "properties": {
          "sent": {
            "type": "integer",
            "format": "int32",
            "description": "Total messages submitted to the mail transfer agent."
          },
          "delivered": {
            "type": "integer",
            "format": "int32",
            "description": "Messages accepted by the recipient mail server."
          },
          "bounced": {
            "type": "integer",
            "format": "int32",
            "description": "Messages rejected by the recipient mail server."
          },
          "opened": {
            "type": "integer",
            "format": "int32",
            "description": "Unique recipients who opened the email (requires open tracking)."
          },
          "clicked": {
            "type": "integer",
            "format": "int32",
            "description": "Unique recipients who clicked a tracked link (requires link tracking)."
          },
          "complained": {
            "type": "integer",
            "format": "int32",
            "description": "Recipients who marked the email as spam."
          },
          "unsubscribed": {
            "type": "integer",
            "format": "int32",
            "description": "Recipients who clicked the unsubscribe link."
          }
        },
        "required": [
          "sent",
          "delivered",
          "bounced",
          "opened",
          "clicked",
          "complained",
          "unsubscribed"
        ]
      },
      "BroadcastFailureResponse": {
        "type": "object",
        "properties": {
          "recipients": {
            "$ref": "#/components/schemas/RecipientHeaders"
          },
          "messageIndex": {
            "type": "integer",
            "format": "int32",
            "description": "Zero-based index of the failed message within the original `messages` array."
          },
          "errorCode": {
            "type": "string",
            "description": "Machine-readable error code (e.g. `invalid_recipient`, `domain_unverified`)."
          },
          "errorMessage": {
            "type": "string",
            "description": "Human-readable description of the failure."
          }
        },
        "required": [
          "recipients",
          "messageIndex",
          "errorCode",
          "errorMessage"
        ]
      },
      "RecipientHeaders": {
        "type": "object",
        "properties": {
          "to": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MailAddress"
            }
          },
          "cc": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MailAddress"
            }
          },
          "bcc": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MailAddress"
            }
          }
        },
        "required": [
          "to"
        ]
      },
      "PaginatedResponseOfBroadcast": {
        "type": "object",
        "properties": {
          "totalCount": {
            "type": "integer",
            "format": "int32"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BroadcastResponse"
            }
          }
        },
        "required": [
          "totalCount",
          "results"
        ]
      },
      "PaginatedResponseOfBroadcastFailure": {
        "type": "object",
        "properties": {
          "totalCount": {
            "type": "integer",
            "format": "int32"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BroadcastFailureResponse"
            }
          }
        },
        "required": [
          "totalCount",
          "results"
        ]
      },
      "PaginatedResponseOfBroadcastSuppression": {
        "type": "object",
        "properties": {
          "totalCount": {
            "type": "integer",
            "format": "int32"
          },
          "results": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "totalCount",
          "results"
        ]
      },
      "DeliveryStats": {
        "type": "object",
        "properties": {
          "sent": {
            "type": "integer"
          },
          "delivered": {
            "type": "integer"
          },
          "opened": {
            "type": "integer"
          },
          "clicked": {
            "type": "integer"
          },
          "bounced": {
            "type": "integer"
          },
          "unsubscribed": {
            "type": "integer"
          },
          "complained": {
            "type": "integer"
          }
        }
      },
      "StatisticsTotalsResponse": {
        "type": "object",
        "properties": {
          "transactional": {
            "$ref": "#/components/schemas/DeliveryStats"
          },
          "broadcast": {
            "$ref": "#/components/schemas/DeliveryStats"
          }
        }
      },
      "StatisticsDailyResponse": {
        "type": "object",
        "properties": {
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "timestamp": {
                  "type": "string",
                  "format": "date"
                },
                "transactional": {
                  "$ref": "#/components/schemas/DeliveryStats"
                },
                "broadcast": {
                  "$ref": "#/components/schemas/DeliveryStats"
                }
              }
            }
          }
        }
      },
      "StatisticsHourlyResponse": {
        "type": "object",
        "properties": {
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "timestamp": {
                  "type": "string",
                  "format": "date-time"
                },
                "transactional": {
                  "$ref": "#/components/schemas/DeliveryStats"
                },
                "broadcast": {
                  "$ref": "#/components/schemas/DeliveryStats"
                }
              }
            }
          }
        }
      },
      "SuppressionReason": {
        "enum": [
          "bounce",
          "complaint",
          "unsubscribe",
          "manual"
        ]
      },
      "PaginatedResponseOfSuppressionResponse": {
        "type": "object",
        "properties": {
          "totalCount": {
            "type": "integer",
            "format": "int32"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SuppressionResponse"
            }
          }
        },
        "required": [
          "totalCount",
          "results"
        ]
      },
      "SuppressionResponse": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string"
          },
          "reason": {
            "$ref": "#/components/schemas/SuppressionReason"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "email",
          "reason",
          "createdAt"
        ]
      },
      "CreateSuppressionsRequest": {
        "type": "object",
        "properties": {
          "channelId": {
            "type": "string",
            "format": "uuid"
          },
          "mailType": {
            "$ref": "#/components/schemas/MailType"
          },
          "emails": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "channelId",
          "mailType",
          "emails"
        ]
      },
      "CreateSuppressionsResponse": {
        "type": "object",
        "properties": {
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SuppressionResult"
            }
          }
        },
        "required": [
          "results"
        ]
      },
      "SuppressionResult": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string"
          },
          "success": {
            "type": "boolean"
          },
          "message": {
            "type": "string"
          }
        },
        "required": [
          "email",
          "success"
        ]
      },
      "RemoveSuppressionsRequest": {
        "type": "object",
        "properties": {
          "channelId": {
            "type": "string",
            "format": "uuid"
          },
          "mailType": {
            "$ref": "#/components/schemas/MailType"
          },
          "emails": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "channelId",
          "mailType",
          "emails"
        ]
      },
      "RemoveSuppressionsResponse": {
        "type": "object",
        "properties": {
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RemoveSuppressionResult"
            }
          }
        },
        "required": [
          "results"
        ]
      },
      "RemoveSuppressionResult": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string"
          },
          "success": {
            "type": "boolean"
          },
          "message": {
            "type": "string"
          }
        },
        "required": [
          "email",
          "success"
        ]
      },
      "CreateWebhookRequest": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "The HTTPS URL to deliver webhook events to."
          },
          "events": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebhookEvent"
            },
            "description": "List of event types that will trigger this webhook."
          },
          "channelId": {
            "type": "string",
            "format": "uuid",
            "description": "Optional channel scope. If set, only events for this channel trigger the webhook."
          },
          "additionalHeaders": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebhookHeader"
            },
            "description": "Custom headers to include in each webhook request. Each header name is prefixed with X-Customer-."
          },
          "enabled": {
            "type": "boolean",
            "description": "Whether the webhook is active or not. Defaults to true."
          }
        },
        "required": [
          "url",
          "events"
        ],
        "description": "Request body for creating a new webhook."
      },
      "WebhookHeader": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Header name, without the X-Customer- prefix."
          },
          "value": {
            "type": "string",
            "description": "Header value."
          }
        },
        "required": [
          "name",
          "value"
        ],
        "description": "A custom HTTP header to include in webhook deliveries."
      },
      "PaginationResultOfWebhookResponse": {
        "type": "object",
        "properties": {
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebhookResponse"
            },
            "description": "The page of results."
          },
          "totalCount": {
            "type": "integer",
            "format": "int32",
            "description": "Total number of webhooks matching the query."
          }
        },
        "required": [
          "results",
          "totalCount"
        ],
        "description": "Paginated list of webhooks."
      },
      "UpdateWebhookRequest": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "New delivery URL. Must be HTTPS."
          },
          "events": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebhookEvent"
            },
            "description": "Replaces the full list of event type subscriptions."
          },
          "channelId": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid",
            "description": "Set to a UUID to scope to a channel, or null to remove channel scoping."
          },
          "additionalHeaders": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/WebhookHeader"
            },
            "description": "Replaces all custom headers. Set to null to remove all custom headers."
          },
          "enabled": {
            "type": "boolean",
            "description": "Enables or disables the webhook."
          }
        },
        "description": "Request body for updating a webhook. Only provided fields are changed."
      },
      "WebhookResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "Unique identifier for the webhook."
          },
          "channelId": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid",
            "description": "Channel this webhook is scoped to, or null for account-wide."
          },
          "url": {
            "type": "string",
            "description": "The HTTPS URL events are delivered to."
          },
          "payloadSigningKey": {
            "type": "string",
            "description": "HMAC-SHA256 signing key used to verify webhook authenticity. Sent as the X-Helo-Webhook-Signature request header on each delivery."
          },
          "enabled": {
            "type": "boolean",
            "description": "Whether the webhook is active and will receive events."
          },
          "additionalHeaders": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebhookHeader"
            },
            "description": "Custom headers sent with each webhook delivery."
          },
          "events": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebhookEvent"
            },
            "description": "Event types that trigger this webhook."
          },
          "lastResponse": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/WebhookLastResponse"
              },
              {
                "type": "null"
              }
            ],
            "description": "The most recent delivery outcome for this webhook, or null if no delivery has been attempted yet."
          }
        },
        "description": "Webhook configuration properties."
      },
      "WebhookLastResponse": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "description": "HTTP status code returned by the endpoint, or null when no HTTP response was received (network error, timeout, or blocked host)."
          },
          "error": {
            "type": [
              "string",
              "null"
            ],
            "description": "Reason a delivery failed without an HTTP response (e.g. a connection error or BlockedHost). Null when an HTTP response was received."
          },
          "at": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of the most recent delivery attempt."
          }
        },
        "description": "The most recent delivery outcome recorded for a webhook."
      },
      "WebhookEvent": {
        "enum": [
          "message-accepted",
          "message-processed",
          "email-delivered",
          "email-bounced",
          "email-opened",
          "link-clicked",
          "recipient-complained",
          "recipient-unsubscribed",
          "recipient-resubscribed",
          "domain-key-verified",
          "domain-key-verification-failed",
          "return-path-domain-verified",
          "return-path-domain-verification-failed"
        ],
        "description": "Email lifecycle event type that can trigger a webhook delivery."
      },
      "WebhookPayloadCommon": {
        "type": "object",
        "properties": {
          "timestamp": {
            "type": "string",
            "format": "date-time",
            "description": "When the event occurred (ISO 8601 / RFC 3339)."
          }
        },
        "description": "Fields common to every webhook payload."
      },
      "DeliveryWebhookPayloadCommon": {
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookPayloadCommon"
          },
          {
            "type": "object",
            "properties": {
              "messageId": {
                "type": "string",
                "format": "uuid",
                "description": "Unique identifier of the message the event relates to."
              },
              "channelId": {
                "type": "string",
                "format": "uuid",
                "description": "Unique identifier of the channel the message was sent from."
              },
              "mailType": {
                "$ref": "#/components/schemas/MailType"
              },
              "subject": {
                "type": "string",
                "description": "Subject line of the message."
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Tags associated with the message."
              },
              "metadata": {
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                },
                "description": "Arbitrary key/value metadata associated with the message."
              }
            }
          }
        ],
        "description": "Fields common to every delivery webhook payload."
      },
      "MessageAcceptedWebhookPayload": {
        "allOf": [
          {
            "$ref": "#/components/schemas/DeliveryWebhookPayloadCommon"
          },
          {
            "type": "object",
            "properties": {
              "eventType": {
                "type": "string",
                "enum": [
                  "message-accepted"
                ]
              },
              "recipients": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "The recipients the message was sent to."
              }
            },
            "required": [
              "eventType",
              "timestamp",
              "messageId",
              "channelId",
              "mailType",
              "recipients"
            ]
          }
        ],
        "description": "Payload delivered for the `message-accepted` event."
      },
      "MessageProcessedWebhookPayload": {
        "allOf": [
          {
            "$ref": "#/components/schemas/DeliveryWebhookPayloadCommon"
          },
          {
            "type": "object",
            "properties": {
              "eventType": {
                "type": "string",
                "enum": [
                  "message-processed"
                ]
              },
              "recipients": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "The recipients the message was sent to."
              }
            },
            "required": [
              "eventType",
              "timestamp",
              "messageId",
              "channelId",
              "mailType",
              "recipients"
            ]
          }
        ],
        "description": "Payload delivered for the `message-processed` event."
      },
      "EmailDeliveredWebhookPayload": {
        "allOf": [
          {
            "$ref": "#/components/schemas/DeliveryWebhookPayloadCommon"
          },
          {
            "$ref": "#/components/schemas/RecipientEventFields"
          },
          {
            "type": "object",
            "properties": {
              "eventType": {
                "type": "string",
                "enum": [
                  "email-delivered"
                ]
              },
              "details": {
                "$ref": "#/components/schemas/DeliveredDetails"
              }
            },
            "required": [
              "eventType"
            ]
          }
        ],
        "description": "Payload delivered for the `email-delivered` event."
      },
      "EmailBouncedWebhookPayload": {
        "allOf": [
          {
            "$ref": "#/components/schemas/DeliveryWebhookPayloadCommon"
          },
          {
            "$ref": "#/components/schemas/RecipientEventFields"
          },
          {
            "type": "object",
            "properties": {
              "eventType": {
                "type": "string",
                "enum": [
                  "email-bounced"
                ]
              },
              "details": {
                "$ref": "#/components/schemas/BouncedDetails"
              }
            },
            "required": [
              "eventType"
            ]
          }
        ],
        "description": "Payload delivered for the `email-bounced` event."
      },
      "EmailOpenedWebhookPayload": {
        "allOf": [
          {
            "$ref": "#/components/schemas/DeliveryWebhookPayloadCommon"
          },
          {
            "$ref": "#/components/schemas/RecipientEventFields"
          },
          {
            "type": "object",
            "properties": {
              "eventType": {
                "type": "string",
                "enum": [
                  "email-opened"
                ]
              },
              "details": {
                "$ref": "#/components/schemas/OpenedDetails"
              }
            },
            "required": [
              "eventType"
            ]
          }
        ],
        "description": "Payload delivered for the `email-opened` event."
      },
      "LinkClickedWebhookPayload": {
        "allOf": [
          {
            "$ref": "#/components/schemas/DeliveryWebhookPayloadCommon"
          },
          {
            "$ref": "#/components/schemas/RecipientEventFields"
          },
          {
            "type": "object",
            "properties": {
              "eventType": {
                "type": "string",
                "enum": [
                  "link-clicked"
                ]
              },
              "details": {
                "$ref": "#/components/schemas/ClickedDetails"
              }
            },
            "required": [
              "eventType"
            ]
          }
        ],
        "description": "Payload delivered for the `link-clicked` event."
      },
      "RecipientComplainedWebhookPayload": {
        "allOf": [
          {
            "$ref": "#/components/schemas/DeliveryWebhookPayloadCommon"
          },
          {
            "$ref": "#/components/schemas/RecipientEventFields"
          },
          {
            "type": "object",
            "properties": {
              "eventType": {
                "type": "string",
                "enum": [
                  "recipient-complained"
                ]
              },
              "details": {
                "$ref": "#/components/schemas/ComplainedDetails"
              }
            },
            "required": [
              "eventType"
            ]
          }
        ],
        "description": "Payload delivered for the `recipient-complained` event."
      },
      "RecipientUnsubscribedWebhookPayload": {
        "allOf": [
          {
            "$ref": "#/components/schemas/DeliveryWebhookPayloadCommon"
          },
          {
            "$ref": "#/components/schemas/RecipientEventFields"
          },
          {
            "type": "object",
            "properties": {
              "eventType": {
                "type": "string",
                "enum": [
                  "recipient-unsubscribed"
                ]
              },
              "details": {
                "$ref": "#/components/schemas/UnsubscribedDetails"
              }
            },
            "required": [
              "eventType"
            ]
          }
        ],
        "description": "Payload delivered for the `recipient-unsubscribed` event."
      },
      "RecipientResubscribedWebhookPayload": {
        "allOf": [
          {
            "$ref": "#/components/schemas/DeliveryWebhookPayloadCommon"
          },
          {
            "$ref": "#/components/schemas/RecipientEventFields"
          },
          {
            "type": "object",
            "properties": {
              "eventType": {
                "type": "string",
                "enum": [
                  "recipient-resubscribed"
                ]
              },
              "details": {
                "$ref": "#/components/schemas/ResubscribedDetails"
              }
            },
            "required": [
              "eventType"
            ]
          }
        ],
        "description": "Payload delivered for the `recipient-resubscribed` event."
      },
      "RecipientEventFields": {
        "type": "object",
        "properties": {
          "recipient": {
            "type": "string",
            "description": "The single recipient the event relates to."
          }
        },
        "required": [
          "timestamp",
          "messageId",
          "channelId",
          "mailType",
          "recipient"
        ],
        "description": "Fields shared by per-recipient sending events (email-delivered,  email-bounced, email-opened, link-clicked, recipient-complained,  recipient-unsubscribed, recipient-resubscribed)."
      },
      "ClientDetails": {
        "type": "object",
        "properties": {
          "family": {
            "type": "string"
          },
          "version": {
            "type": "string"
          }
        },
        "description": "The mail client the recipient engaged with the message from."
      },
      "DeviceDetails": {
        "type": "object",
        "properties": {
          "brand": {
            "type": "string"
          },
          "family": {
            "type": "string"
          },
          "model": {
            "type": "string"
          }
        },
        "description": "The device the recipient engaged with the message from."
      },
      "EngagementDetails": {
        "type": "object",
        "properties": {
          "ip": {
            "type": "string",
            "description": "IP address the recipient engaged from."
          },
          "country": {
            "type": "string",
            "description": "Country the recipient engaged from."
          },
          "countryCode": {
            "type": "string",
            "description": "ISO 3166-1 alpha-2 country code the recipient engaged from."
          },
          "client": {
            "$ref": "#/components/schemas/ClientDetails"
          },
          "device": {
            "$ref": "#/components/schemas/DeviceDetails"
          }
        },
        "description": "Fields shared by the engagement events (email-opened, link-clicked).  Individual fields are omitted when the information is unavailable."
      },
      "DeliveredDetails": {
        "type": "object",
        "properties": {
          "response": {
            "type": "string",
            "description": "SMTP response returned by the receiving server."
          }
        },
        "description": "Details of an `email-delivered` event."
      },
      "BouncedDetails": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "Bounce classification, e.g. `Permanent` or `Transient`."
          },
          "subType": {
            "type": "string",
            "description": "More specific bounce classification, e.g. `General` or `Suppressed`."
          },
          "code": {
            "type": "string",
            "description": "Diagnostic code returned by the receiving server."
          }
        },
        "description": "Details of an `email-bounced` event."
      },
      "OpenedDetails": {
        "allOf": [
          {
            "$ref": "#/components/schemas/EngagementDetails"
          }
        ],
        "description": "Details of an `email-opened` event."
      },
      "ClickedDetails": {
        "allOf": [
          {
            "$ref": "#/components/schemas/EngagementDetails"
          },
          {
            "type": "object",
            "properties": {
              "link": {
                "type": "string",
                "description": "The URL that was clicked."
              }
            }
          }
        ],
        "description": "Details of a `link-clicked` event."
      },
      "ComplainedDetails": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "Complaint feedback type reported by the receiving server."
          }
        },
        "description": "Details of a `recipient-complained` event."
      },
      "UnsubscribedDetails": {
        "type": "object",
        "properties": {
          "ip": {
            "type": "string",
            "description": "IP address the unsubscribe was made from."
          }
        },
        "description": "Details of a `recipient-unsubscribed` event."
      },
      "ResubscribedDetails": {
        "type": "object",
        "properties": {
          "ip": {
            "type": "string",
            "description": "IP address the resubscribe was made from."
          }
        },
        "description": "Details of a `recipient-resubscribed` event."
      },
      "DomainPayloadCommon": {
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookPayloadCommon"
          },
          {
            "type": "object",
            "properties": {
              "domainId": {
                "type": "string",
                "format": "uuid",
                "description": "Unique identifier for the domain."
              },
              "domainName": {
                "type": "string",
                "description": "The name of the domain."
              },
              "dnsRecordHost": {
                "type": "string",
                "description": "The host for the DNS record."
              }
            }
          }
        ],
        "description": "Fields common to every domain webhook payload."
      },
      "DomainKeyVerifiedPayload": {
        "allOf": [
          {
            "$ref": "#/components/schemas/DomainPayloadCommon"
          },
          {
            "type": "object",
            "properties": {
              "eventType": {
                "type": "string",
                "enum": [
                  "domain-key-verified"
                ]
              }
            },
            "required": [
              "domainId",
              "domainName",
              "eventType",
              "timestamp",
              "dnsRecordHost"
            ]
          }
        ],
        "description": "Payload delivered when a domain key is verified."
      },
      "DomainKeyVerificationFailedPayload": {
        "allOf": [
          {
            "$ref": "#/components/schemas/DomainPayloadCommon"
          },
          {
            "type": "object",
            "properties": {
              "eventType": {
                "type": "string",
                "enum": [
                  "domain-key-verification-failed"
                ]
              }
            },
            "required": [
              "domainId",
              "domainName",
              "eventType",
              "timestamp",
              "dnsRecordHost"
            ]
          }
        ],
        "description": "Payload delivered when a domain key verification fails."
      },
      "ReturnPathDomainVerifiedPayload": {
        "allOf": [
          {
            "$ref": "#/components/schemas/DomainPayloadCommon"
          },
          {
            "type": "object",
            "properties": {
              "eventType": {
                "type": "string",
                "enum": [
                  "return-path-domain-verified"
                ]
              }
            },
            "required": [
              "domainId",
              "domainName",
              "eventType",
              "timestamp",
              "dnsRecordHost"
            ]
          }
        ],
        "description": "Payload delivered when a return path domain is verified."
      },
      "ReturnPathDomainVerificationFailedPayload": {
        "allOf": [
          {
            "$ref": "#/components/schemas/DomainPayloadCommon"
          },
          {
            "type": "object",
            "properties": {
              "eventType": {
                "type": "string",
                "enum": [
                  "return-path-domain-verification-failed"
                ]
              }
            },
            "required": [
              "domainId",
              "domainName",
              "eventType",
              "timestamp",
              "dnsRecordHost"
            ]
          }
        ],
        "description": "Payload delivered when a return path domain verification fails."
      }
    },
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    },
    "parameters": {
      "WebhookSignatureHeader": {
        "name": "X-Helo-Webhook-Signature",
        "in": "header",
        "description": "HMAC-SHA256 signature of the request, formatted as `t={timestamp},v1={signature}`. Verify it against the webhook's signing key to authenticate the delivery.",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "WebhookEventIdHeader": {
        "name": "X-Helo-Webhook-Event-Id",
        "in": "header",
        "description": "Unique identifier of the event, useful for idempotent processing.",
        "required": true,
        "schema": {
          "type": "string",
          "format": "uuid"
        }
      },
      "WebhookIdHeader": {
        "name": "X-Helo-Webhook-Id",
        "in": "header",
        "description": "Unique identifier of the webhook.",
        "required": true,
        "schema": {
          "type": "string",
          "format": "uuid"
        }
      },
      "WebhookChannelIdHeader": {
        "name": "X-Helo-Channel-Id",
        "in": "header",
        "description": "Unique identifier of the channel associated with the webhook, if applicable.",
        "required": false,
        "schema": {
          "type": "string",
          "format": "uuid"
        }
      },
      "WebhookTestHeader": {
        "name": "X-Helo-Webhook-Test",
        "in": "header",
        "description": "Set to `true` when the delivery is a test, otherwise omitted.",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "true"
          ]
        }
      }
    }
  }
}