{
  "swagger": "2.0",
  "info": {
    "version": "v1",
    "title": "GMass API"
  },
  "host": "api.gmass.co",
  "schemes": [
    "https"
  ],
  "paths": {
    "/api/campaigndrafts": {
      "post": {
        "tags": [
          "CampaignDrafts"
        ],
        "summary": "Creates a new Gmail DRAFT for a campaign that will be sent later.",
        "description": "This will create a DRAFT in your Gmail account and return the actual Gmail DRAFT Id. Then use /campaigns to send the campaign. DO NOT specify a value for campaignDraftId.",
        "operationId": "CampaignDrafts_Index",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "campaignDraft",
            "in": "body",
            "description": "",
            "required": true,
            "schema": {
              "$ref": "#/definitions/campaignDraft"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/campaignDraft"
            }
          }
        }
      }
    },
    "/api/campaigns": {
      "get": {
        "tags": [
          "Campaigns"
        ],
        "summary": "Lists all of your campaigns and their aggregate statistics.",
        "operationId": "Campaigns_Index",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/campaign"
              }
            }
          }
        }
      }
    },
    "/api/campaigns/{campaignDraftId}": {
      "post": {
        "tags": [
          "Campaigns"
        ],
        "summary": "Creates a new campaign and sends it.",
        "description": "Set when the campaign should send, along with other options like tracking in the campaignSettings object. You must already have a campaignDraftId value from the /api/campaigndrafts method.",
        "operationId": "Campaigns_Index",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "campaignSettings",
            "in": "body",
            "description": "",
            "required": true,
            "schema": {
              "$ref": "#/definitions/campaignSettings"
            }
          },
          {
            "name": "campaignDraftId",
            "in": "path",
            "description": "",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/campaign"
            }
          }
        }
      }
    },
    "/api/campaigns/zapier": {
      "get": {
        "tags": [
          "Campaigns"
        ],
        "summary": "For Zapier campaign dropdowns: Lists all of your campaigns and their aggregate statistics.",
        "operationId": "Campaigns_Zapier",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/api/campaigns/{campaignId}": {
      "get": {
        "tags": [
          "Campaigns"
        ],
        "summary": "Gets a single campaign and its aggregate statistics.",
        "operationId": "Campaigns_GetCampaign",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "campaignId",
            "in": "path",
            "description": "",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/campaign"
            }
          }
        }
      }
    },
    "/api/lists": {
      "get": {
        "tags": [
          "Lists"
        ],
        "operationId": "Lists_Lists",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/listSearchResults"
            }
          }
        }
      },
      "post": {
        "tags": [
          "Lists"
        ],
        "summary": "Creates a new email list",
        "description": "Creates a new list and returns a GMass list address alias",
        "operationId": "Lists_CreateEmailList",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "list",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/list"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/list"
            }
          }
        }
      }
    },
    "/api/reports/{campaignId}/recipients": {
      "get": {
        "tags": [
          "Reports"
        ],
        "summary": "Gets the recipients for a campaign.",
        "description": "Specify the numeric campaign ID to retrieve the recipients for that campaign.",
        "operationId": "Reports_Recipients",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "campaignId",
            "in": "path",
            "description": "",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "stage",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "date",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/ApiListResponse[recipient]"
            }
          }
        }
      }
    },
    "/api/reports/{campaignId}/opens": {
      "get": {
        "tags": [
          "Reports"
        ],
        "summary": "Gets the recipients that opened a campaign.",
        "description": "Specify the numeric campaign ID to retrieve the \"opens\" for that campaign. Open tracking must have been enabled.",
        "operationId": "Reports_Opens",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "campaignId",
            "in": "path",
            "description": "",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/ApiListResponse[open]"
            }
          }
        }
      }
    },
    "/api/reports/{campaignId}/clicks": {
      "get": {
        "tags": [
          "Reports"
        ],
        "summary": "Gets the recipients that clicked a URL in this campaign.",
        "description": "Specify the numeric campaign ID to retrieve the recipients that clicked in this campaign. Click tracking must have been enabled.",
        "operationId": "Reports_Clicks",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "campaignId",
            "in": "path",
            "description": "",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/ApiListResponse[click]"
            }
          }
        }
      }
    },
    "/api/reports/{campaignId}/unsubscribes": {
      "get": {
        "tags": [
          "Reports"
        ],
        "summary": "Gets the recipients that unsubscribed from this campaign.",
        "description": "Specify the numeric campaign ID to retrieve the recipients that unsubscribed. Unsubscribed addresses apply account-wide and are eliminated from future campaigns. Use campaignId=0 for all account unsubscribes.",
        "operationId": "Reports_Unsubscribes",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "campaignId",
            "in": "path",
            "description": "",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/ApiListResponse[unsubscribe]"
            }
          }
        }
      }
    },
    "/api/reports/{campaignId}/bounces": {
      "get": {
        "tags": [
          "Reports"
        ],
        "summary": "Gets the recipients that bounced as a result of this campaign.",
        "description": "Specify the numeric campaign ID to retrieve the recipients that bounced. Bounced addresses apply account-wide and are eliminated from future campaigns.",
        "operationId": "Reports_Bounces",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "campaignId",
            "in": "path",
            "description": "",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/ApiListResponse[bounce]"
            }
          }
        }
      }
    },
    "/api/reports/{campaignId}/blocks": {
      "get": {
        "tags": [
          "Reports"
        ],
        "summary": "Gets the blocked recipients as a result of this campaign.",
        "operationId": "Reports_Blocks",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "campaignId",
            "in": "path",
            "description": "",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/ApiListResponse[block]"
            }
          }
        }
      }
    },
    "/api/reports/{campaignId}/replies": {
      "get": {
        "tags": [
          "Reports"
        ],
        "summary": "Gets the recipients that replied to this campaign.",
        "description": "Specify the numeric campaign ID to retrieve the recipients that replied.",
        "operationId": "Reports_Replies",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "campaignId",
            "in": "path",
            "description": "",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/ApiListResponse[reply]"
            }
          }
        }
      }
    },
    "/api/sample/opens": {
      "get": {
        "tags": [
          "Sample"
        ],
        "summary": "Retrieves sample data for opens, for use by third party platforms like Zapier and Integromat.",
        "operationId": "Sample_GetSampleOpens",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/SampleOpen"
              }
            }
          }
        }
      }
    },
    "/api/sample/clicks": {
      "get": {
        "tags": [
          "Sample"
        ],
        "summary": "Retrieves sample data for clicks, for use by third party platforms like Zapier and Integromat.",
        "operationId": "Sample_GetSampleClicks",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/SampleClick"
              }
            }
          }
        }
      }
    },
    "/api/sample/unsubscribes": {
      "get": {
        "tags": [
          "Sample"
        ],
        "summary": "Retrieves sample data for unsubscribes, for use by third party platforms like Zapier and Integromat.",
        "operationId": "Sample_GetSampleUnsubscribes",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/SampleRecipient"
              }
            }
          }
        }
      }
    },
    "/api/sample/bounces": {
      "get": {
        "tags": [
          "Sample"
        ],
        "summary": "Retrieves sample data for bounces, for use by third party platforms like Zapier and Integromat.",
        "operationId": "Sample_GetSampleBounces",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/SampleBounce"
              }
            }
          }
        }
      }
    },
    "/api/sample/sends": {
      "get": {
        "tags": [
          "Sample"
        ],
        "summary": "Retrieves sample data for sends, for use by third party platforms like Zapier and Integromat.",
        "operationId": "Sample_GetSampleSends",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/SampleRecipient"
              }
            }
          }
        }
      }
    },
    "/api/sample/replies": {
      "get": {
        "tags": [
          "Sample"
        ],
        "summary": "Retrieves sample data for replies, for use by third party platforms like Zapier and Integromat.",
        "operationId": "Sample_GetSampleReplies",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/SampleRecipient"
              }
            }
          }
        }
      }
    },
    "/api/sheets": {
      "get": {
        "tags": [
          "Sheets"
        ],
        "summary": "Lists all of your Google Sheets",
        "operationId": "Sheets_Index",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/spreadsheet"
              }
            }
          }
        }
      }
    },
    "/api/sheets/{sheetid}/worksheets": {
      "get": {
        "tags": [
          "Sheets"
        ],
        "summary": "Lists all the worksheets in a given Google Sheet",
        "operationId": "Sheets_WorksheetList",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "sheetid",
            "in": "path",
            "description": "",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/worksheet"
              }
            }
          }
        }
      }
    },
    "/api/transactional": {
      "post": {
        "tags": [
          "Transactional"
        ],
        "summary": "Send a single transactional email through your Gmail/Google Workspace account",
        "description": "If you need to send a transactional email to just one recipient as opposed to a campaign, use this method. You can also send transactional email via the SMTP relay at smtp.gmass.co.",
        "operationId": "Transactional_IndexAsync",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "transactionalEmail",
            "in": "body",
            "description": "",
            "required": true,
            "schema": {
              "$ref": "#/definitions/transactionalEmail"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/transactionalEmail"
            }
          }
        }
      }
    },
    "/api/unsubscribes": {
      "post": {
        "tags": [
          "Unsubscribes"
        ],
        "summary": "Adds an address to your account-wide unsubscribe list.",
        "operationId": "Unsubscribes_AddUnsubscribe",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "unsubscribe",
            "in": "body",
            "description": "",
            "required": true,
            "schema": {
              "$ref": "#/definitions/unsubscribe"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/unsubscribe"
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Unsubscribes"
        ],
        "summary": "Deletes an email address from your unsubscribe list (resumes sending to the address).",
        "operationId": "Unsubscribes_DeleteUnsubscribe",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "emailAddress",
            "in": "query",
            "description": "",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/unsubscribe"
            }
          }
        }
      }
    },
    "/api/unsubscribes/{campaignId}": {
      "post": {
        "tags": [
          "Unsubscribes"
        ],
        "summary": "Suppresses an email address for just a particular email campaign.",
        "operationId": "Unsubscribes_AddUnsubscribeForCampaign",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "unsubscribe",
            "in": "body",
            "description": "",
            "required": true,
            "schema": {
              "$ref": "#/definitions/unsubscribe"
            }
          },
          {
            "name": "campaignId",
            "in": "path",
            "description": "",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/unsubscribe"
            }
          }
        }
      }
    },
    "/api/unsubscribes/domain/{domain}": {
      "post": {
        "tags": [
          "Unsubscribes"
        ],
        "summary": "Unsubscribes a domain from your account (stops sending to this domain).",
        "operationId": "Unsubscribes_AddUnsubscribeDomain",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "description": "",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/unsubscribeDomain"
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Unsubscribes"
        ],
        "summary": "Deletes an unsubscribed domain from your account (resume sending to the domain).",
        "operationId": "Unsubscribes_DeleteUnsubscribeDomain",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "description": "",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/unsubscribeDomain"
            }
          }
        }
      }
    },
    "/api/unsubscribes/domains": {
      "get": {
        "tags": [
          "Unsubscribes"
        ],
        "summary": "Retrieves all unsubscribed domains for your account.",
        "operationId": "Unsubscribes_Index",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/unsubscribeDomain"
              }
            }
          }
        }
      }
    },
    "/api/user": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Gets your account information",
        "operationId": "User_Index",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/api/user/WarmupStats": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Get a user's warm-up statistics.",
        "description": "Learn more about warm-up at https://www.gmass.co/blog/free-email-warm-up-tool/",
        "operationId": "User_WarmupStats",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/WarmUpStatsModel"
              }
            }
          }
        }
      }
    },
    "/api/webhook": {
      "post": {
        "tags": [
          "Webhook"
        ],
        "summary": "Method for platforms like Zapier and Integromat to create webhooks. This method cannot be used by an end GMass user. End users can manage webhooks from the dashboard.",
        "operationId": "Webhook_AddWebHook",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "wh",
            "in": "body",
            "description": "",
            "required": true,
            "schema": {
              "$ref": "#/definitions/webHook"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/webHook"
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Webhook"
        ],
        "summary": "/// Method for platforms like Zapier and Integromat to remove webhooks. This method cannot be used by an end GMass user. End users can manage webhooks from the dashboard.",
        "operationId": "Webhook_DeleteWebHook",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "wh",
            "in": "body",
            "description": "",
            "required": true,
            "schema": {
              "$ref": "#/definitions/webHook"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/webHook"
            }
          }
        }
      }
    }
  },
  "definitions": {
    "campaignDraft": {
      "required": [
        "subject",
        "message"
      ],
      "type": "object",
      "properties": {
        "campaignDraftId": {
          "description": "This is the DRAFT ID that will be returned. Do not specify it.",
          "type": "string"
        },
        "fromEmail": {
          "description": "The from address for the campaign. Must match an authenticated From Address in the Gmail account.",
          "type": "string"
        },
        "subject": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "messageType": {
          "description": "Set to either \"html\" or \"plain\". HTML messages will always result in a plain text message being auto generated by Google and sent along with the HTML MIME part.",
          "type": "string"
        },
        "listAddress": {
          "description": "The list address for this campaign. Example: aaa-bbb-ccc@gmass.co",
          "type": "string"
        },
        "emailAddresses": {
          "type": "string"
        },
        "cc": {
          "description": "One or more Cc addresses, separated by a comma or any other standard delimiter. Cc addresses will receive a copy of each individual email sent as part of the campaign.",
          "type": "string"
        },
        "bcc": {
          "description": "One or more Bcc addresses, separated by a comma or any other standard delimiter. Bcc addresses will receive a blind copy of each individual email sent as part of the campaign.",
          "type": "string"
        },
        "attachments": {
          "description": "The list of attachments for this message",
          "type": "array",
          "items": {
            "$ref": "#/definitions/campaignDraftAttachment"
          }
        }
      }
    },
    "campaignDraftAttachment": {
      "type": "object",
      "properties": {
        "fileName": {
          "description": "The filename for this attachment e.g. \"Proposal.pdf\"",
          "type": "string"
        },
        "base64Content": {
          "description": "The base64 string representation for the bytes of this attachment. Must be a valid base64 string",
          "type": "string"
        },
        "contentType": {
          "description": "The content type for this attachment e.g. \"application/pdf\"",
          "type": "string"
        }
      }
    },
    "campaign": {
      "type": "object",
      "properties": {
        "campaignId": {
          "format": "int32",
          "description": "The GMass-generated campaign ID number for a campaign.",
          "type": "integer"
        },
        "subject": {
          "type": "string"
        },
        "friendlyName": {
          "type": "string"
        },
        "stage": {
          "format": "int32",
          "type": "integer"
        },
        "creationTime": {
          "format": "date-time",
          "type": "string"
        },
        "fromLine": {
          "type": "string"
        },
        "statistics": {
          "$ref": "#/definitions/statistics"
        },
        "status": {
          "description": "Will be set to one of the following: sent, scheduled, error, processing, unknown, cancelled, paused, abpaused",
          "type": "string"
        },
        "lists": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/list"
          }
        },
        "autoFollowups": {
          "description": "Auto follow-ups associated with this campaign",
          "type": "array",
          "items": {
            "$ref": "#/definitions/autoFollowup"
          }
        }
      }
    },
    "statistics": {
      "type": "object",
      "properties": {
        "recipients": {
          "format": "int32",
          "type": "integer"
        },
        "opens": {
          "format": "int32",
          "type": "integer"
        },
        "clicks": {
          "format": "int32",
          "type": "integer"
        },
        "replies": {
          "format": "int32",
          "type": "integer"
        },
        "unsubscribes": {
          "format": "int32",
          "type": "integer"
        },
        "bounces": {
          "format": "int32",
          "type": "integer"
        },
        "blocks": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "list": {
      "type": "object",
      "properties": {
        "listAddress": {
          "description": "The GMass-generated address to represent an email list. Looks like aaabbb-cccc@gmass.co",
          "type": "string"
        },
        "listSource": {
          "$ref": "#/definitions/listSource",
          "description": "A listSource object from which to create a list. Right now the only valid source is a Google Sheet, represented by a listSourceSheet object."
        }
      }
    },
    "autoFollowup": {
      "type": "object",
      "properties": {
        "stage": {
          "format": "int32",
          "type": "integer"
        },
        "campaignId": {
          "format": "int32",
          "type": "integer"
        },
        "batches": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/autoFollowupBatch"
          }
        }
      }
    },
    "listSource": {
      "type": "object",
      "properties": {
        "listSourceSheet": {
          "$ref": "#/definitions/listSourceSheet"
        }
      }
    },
    "autoFollowupBatch": {
      "type": "object",
      "properties": {
        "batchId": {
          "format": "int32",
          "type": "integer"
        },
        "status": {
          "type": "string"
        },
        "creationTime": {
          "format": "date-time",
          "type": "string"
        },
        "estimatedCount": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "listSourceSheet": {
      "type": "object",
      "properties": {
        "spreadsheetId": {
          "description": "The \"id\" value of the Google Sheet. Can be retrieved from the sheets.google.com URL",
          "type": "string"
        },
        "worksheetId": {
          "description": "The Google assigned ID of the worksheet within a Google Sheet. The default worksheet usually has an ID of 0.",
          "type": "string"
        },
        "spreadsheetName": {
          "description": "The name of the Google Sheet",
          "type": "string"
        },
        "worksheetName": {
          "description": "The name of the tab (worksheet) inside the Google Sheet",
          "type": "string"
        },
        "KeepDuplicates": {
          "description": "Whether duplicates should be kept or filtered out. Set to true or false.",
          "type": "boolean"
        },
        "FilterCriteria": {
          "description": "A string value representing a filter of rows in the Sheet. See https://www.gmass.co/blog/send-mail-merge-to-selected-rows-spreadsheet/",
          "type": "string"
        },
        "AndOr": {
          "description": "If FilterCriteria specified, then specify whether the criteria should be joined by a boolean AND or OR. The default is AND. Specify as \"And\" or \"Or\".",
          "type": "string"
        },
        "UpdateSheet": {
          "description": "Whether GMass should update the Sheet with additional columns to track reporting data. Set to true or false.",
          "type": "boolean"
        }
      }
    },
    "campaignSettings": {
      "type": "object",
      "properties": {
        "openTracking": {
          "description": "Choose whether to track opens. True or False.",
          "type": "boolean"
        },
        "clickTracking": {
          "description": "Choose whether to track clicks. True or False.",
          "type": "boolean"
        },
        "sendTime": {
          "description": "Do not specify to send a campaign right now. Otherwise, specify time with an optional time zone offset. Example: \"04/27/21 14:30 -04:00\" indicates April 27, 2021 at 2:30 PM EST time.",
          "type": "string"
        },
        "skipWeekends": {
          "description": "Determines whether the scheduler should avoid sending this campaign on the weekend. True or False.",
          "type": "boolean"
        },
        "skipHolidays": {
          "description": "Determines whether the scheduler should avoid sending this campaign on designated holidays. True or False.",
          "type": "boolean"
        },
        "friendlyName": {
          "description": "A friendly name by which to identify this campaign.",
          "type": "string"
        },
        "allowedDays": {
          "description": "Specify the days of the week on which this campaign may send.\r\nSubmit full weekday names as a comma-separated string.\r\nExample: \"Monday,Wednesday,Friday\".",
          "type": "string"
        },
        "previewText": {
          "description": "Optional preview text which displays next to the subject line in most email clients. See https://www.gmass.co/blog/preview-text/",
          "type": "string"
        },
        "throttling": {
          "format": "int32",
          "description": "Add a pause after each individual email that is sent as part of this campaign. Specify as 1, 2, or 3. See https://www.gmass.co/blog/mail-merge-feature-throttle-your-email-campaign/",
          "type": "integer"
        },
        "suppressionDays": {
          "format": "int32",
          "description": "Filter out recipients that have received another campaign from you in the last X days. Specify the number of days as an integer. 1=5 to 10 seconds.2=10 to 60 seconds.3=1 to 5 minutes. See https://www.gmass.co/blog/suppress-addresses-by-number-of-days-since-last-email/",
          "type": "integer"
        },
        "suppressionCampaigns": {
          "description": "Filter out recipients of a prior campaign. Specify a comma-separated string of campaign ID numbers. See https://www.gmass.co/blog/new-gmail-mail-merge-feature-use-suppression-lists-to-filter-out-recipients-of-past-campaigns/",
          "type": "string"
        },
        "sendAsReply": {
          "description": "Specify whether the campaign should be sent as a new thread of an existing thread. True or False. See https://www.gmass.co/blog/send-email-campaign-as-reply-to-recent-conversation/",
          "type": "boolean"
        },
        "replyTo": {
          "description": "Specify a custom Reply-To header for the campaign. If a Reply-To address is already set in your Gmail account, that will be used. This setting can override what's set in your Gmail account. See https://www.gmass.co/blog/reply-to-address/",
          "type": "string"
        },
        "createDrafts": {
          "description": "Specify whether to actually send emails for this campaign or just create DRAFTs which can be reviewed and sent later. True or False. Default value is False. See https://www.gmass.co/blog/no-more-fear-preview-your-emails-as-drafts-then-send-them-with-one-click/",
          "type": "boolean"
        },
        "emailsPerDay": {
          "format": "int32",
          "description": "Set a fixed number of emails that should be sent per day.",
          "type": "integer"
        },
        "fromName": {
          "description": "Specify the From Name that will be seen by your recipients. This will override the From Name set for the From Address in your Gmail account.",
          "type": "string"
        },
        "useSMTP": {
          "description": "Specify whether the campaign should be sent through your SMTP server or natively through Gmail. True or False.",
          "type": "boolean"
        },
        "skipSent": {
          "description": "Specify whether emails should be logged in your SENT folder. True or False.",
          "type": "boolean"
        },
        "verify": {
          "description": "Specify whether each recipient address should be verified before sending. True or False.",
          "type": "boolean"
        },
        "campaignIdToReplyTo": {
          "format": "int32",
          "description": "To be used in conjunction with sendAsReply. Specify an optional campaign if the replies should be threaded to a prior campaign.",
          "type": "integer"
        },
        "imagesMode": {
          "description": "Specify how images should be included. d: default, h: hosted, e: embedded",
          "type": "string"
        },
        "stageOneDays": {
          "format": "int32",
          "description": "STAGE 1: Number of days after original campaign message that this stage follow-up is sent",
          "type": "integer"
        },
        "stageOneCampaignText": {
          "description": "STAGE 1: Text to use for the follow-up email.",
          "type": "string"
        },
        "stageOneCampaignId": {
          "format": "int32",
          "description": "STAGE 1: Custom content to be used for the follow-up email. If both stageOneCampaignId and stageOneCampaignText are set, then stageOneCampaignId will be used.",
          "type": "integer"
        },
        "stageOneAction": {
          "description": "STAGE 1: Determines which behavior follow-ups should be sent based on. r=No Reply. o=No Open. c=No Click. s=No Reply or Click. a=Everyone",
          "type": "string"
        },
        "stageOneTime": {
          "description": "STAGE 1: Optionally, specify the time of day the follow-up should be sent. Specify without a time zone offset, but in the same time zone as sendTime.",
          "type": "string"
        },
        "stageOneThread": {
          "description": "STAGE 1: Optionally, specify whether the message should be sent as part of the \"same\" thread or a \"new\" thread. Default is \"same\".",
          "type": "string"
        },
        "stageTwoDays": {
          "format": "int32",
          "description": "STAGE 2: Number of days after original campaign message that this stage follow-up is sent",
          "type": "integer"
        },
        "stageTwoCampaignText": {
          "description": "STAGE 2: Text to use for the follow-up email.",
          "type": "string"
        },
        "stageTwoCampaignId": {
          "format": "int32",
          "description": "STAGE 2: Custom content to be used for the follow-up email. If both stageTwoCampaignId and stageTwoCampaignText are set, then stageTwoCampaignId will be used.",
          "type": "integer"
        },
        "stageTwoAction": {
          "description": "STAGE 2: Determines which behavior follow-ups should be sent based on. r=No Reply. o=No Open. c=No Click. s=No Reply or Click. a=Everyone",
          "type": "string"
        },
        "stageTwoTime": {
          "description": "STAGE 2: Optionally, specify the time of day the follow-up should be sent. Specify without a time zone offset, but in the same time zone as sendTime.",
          "type": "string"
        },
        "stageTwoThread": {
          "description": "STAGE 2: Optionally, specify whether the message should be sent as part of the \"same\" thread or a \"new\" thread. Default is \"same\".",
          "type": "string"
        },
        "stageThreeDays": {
          "format": "int32",
          "description": "STAGE 3: Number of days after original campaign message that this stage follow-up is sent",
          "type": "integer"
        },
        "stageThreeCampaignText": {
          "description": "STAGE 3: Text to use for the follow-up email.",
          "type": "string"
        },
        "stageThreeCampaignId": {
          "format": "int32",
          "description": "STAGE 3: Custom content to be used for the follow-up email. If both stageThreeCampaignId and stageThreeCampaignText are set, then stageThreeCampaignId will be used.",
          "type": "integer"
        },
        "stageThreeAction": {
          "description": "STAGE 3: Determines which behavior follow-ups should be sent based on. r=No Reply. o=No Open. c=No Click. s=No Reply or Click. a=Everyone",
          "type": "string"
        },
        "stageThreeTime": {
          "description": "STAGE 3: Optionally, specify the time of day the follow-up should be sent. Specify without a time zone offset, but in the same time zone as sendTime.",
          "type": "string"
        },
        "stageThreeThread": {
          "description": "STAGE 3: Optionally, specify whether the message should be sent as part of the \"same\" thread or a \"new\" thread. Default is \"same\".",
          "type": "string"
        },
        "stageFourDays": {
          "format": "int32",
          "description": "STAGE 4: Number of days after original campaign message that this stage follow-up is sent",
          "type": "integer"
        },
        "stageFourCampaignText": {
          "description": "STAGE 4: Text to use for the follow-up email.",
          "type": "string"
        },
        "stageFourCampaignId": {
          "format": "int32",
          "description": "STAGE 4: Custom content to be used for the follow-up email. If both stageFourCampaignId and stageFourCampaignText are set, then stageFourCampaignId will be used.",
          "type": "integer"
        },
        "stageFourAction": {
          "description": "STAGE 4: Determines which behavior follow-ups should be sent based on. r=No Reply. o=No Open. c=No Click. s=No Reply or Click. a=Everyone",
          "type": "string"
        },
        "stageFourTime": {
          "description": "STAGE 4: Optionally, specify the time of day the follow-up should be sent. Specify without a time zone offset, but in the same time zone as sendTime.",
          "type": "string"
        },
        "stageFourThread": {
          "description": "STAGE 4: Optionally, specify whether the message should be sent as part of the \"same\" thread or a \"new\" thread. Default is \"same\".",
          "type": "string"
        },
        "stageFiveDays": {
          "format": "int32",
          "description": "STAGE 5: Number of days after original campaign message that this stage follow-up is sent",
          "type": "integer"
        },
        "stageFiveCampaignText": {
          "description": "STAGE 5: Text to use for the follow-up email.",
          "type": "string"
        },
        "stageFiveCampaignId": {
          "format": "int32",
          "description": "STAGE 5: Custom content to be used for the follow-up email. If both stageFiveCampaignId and stageFiveCampaignText are set, then stageFiveCampaignId will be used.",
          "type": "integer"
        },
        "stageFiveAction": {
          "description": "STAGE 5: Determines which behavior follow-ups should be sent based on. r=No Reply. o=No Open. c=No Click. s=No Reply or Click. a=Everyone",
          "type": "string"
        },
        "stageFiveTime": {
          "description": "STAGE 5: Optionally, specify the time of day the follow-up should be sent. Specify without a time zone offset, but in the same time zone as sendTime.",
          "type": "string"
        },
        "stageFiveThread": {
          "description": "STAGE 5: Optionally, specify whether the message should be sent as part of the \"same\" thread or a \"new\" thread. Default is \"same\".",
          "type": "string"
        },
        "stageSixDays": {
          "format": "int32",
          "description": "STAGE 6: Number of days after original campaign message that this stage follow-up is sent",
          "type": "integer"
        },
        "stageSixCampaignText": {
          "description": "STAGE 6: Text to use for the follow-up email.",
          "type": "string"
        },
        "stageSixCampaignId": {
          "format": "int32",
          "description": "STAGE 6: Custom content to be used for the follow-up email. If both stageSixCampaignId and stageSixCampaignText are set, then stageSixCampaignId will be used.",
          "type": "integer"
        },
        "stageSixAction": {
          "description": "STAGE 6: Determines which behavior follow-ups should be sent based on. r=No Reply. o=No Open. c=No Click. s=No Reply or Click. a=Everyone",
          "type": "string"
        },
        "stageSixTime": {
          "description": "STAGE 6: Optionally, specify the time of day the follow-up should be sent. Specify without a time zone offset, but in the same time zone as sendTime.",
          "type": "string"
        },
        "stageSixThread": {
          "description": "STAGE 6: Optionally, specify whether the message should be sent as part of the \"same\" thread or a \"new\" thread. Default is \"same\".",
          "type": "string"
        },
        "stageSevenDays": {
          "format": "int32",
          "description": "STAGE 7: Number of days after original campaign message that this stage follow-up is sent",
          "type": "integer"
        },
        "stageSevenCampaignText": {
          "description": "STAGE 7: Text to use for the follow-up email.",
          "type": "string"
        },
        "stageSevenCampaignId": {
          "format": "int32",
          "description": "STAGE 7: Custom content to be used for the follow-up email. If both stageSevenCampaignId and stageSevenCampaignText are set, then stageSevenCampaignId will be used.",
          "type": "integer"
        },
        "stageSevenAction": {
          "description": "STAGE 7: Determines which behavior follow-ups should be sent based on. r=No Reply. o=No Open. c=No Click. s=No Reply or Click. a=Everyone",
          "type": "string"
        },
        "stageSevenTime": {
          "description": "STAGE 7: Optionally, specify the time of day the follow-up should be sent. Specify without a time zone offset, but in the same time zone as sendTime.",
          "type": "string"
        },
        "stageSevenThread": {
          "description": "STAGE 7: Optionally, specify whether the message should be sent as part of the \"same\" thread or a \"new\" thread. Default is \"same\".",
          "type": "string"
        },
        "stageEightDays": {
          "format": "int32",
          "description": "STAGE 8: Number of days after original campaign message that this stage follow-up is sent",
          "type": "integer"
        },
        "stageEightCampaignText": {
          "description": "STAGE 8: Text to use for the follow-up email.",
          "type": "string"
        },
        "stageEightCampaignId": {
          "format": "int32",
          "description": "STAGE 8: Custom content to be used for the follow-up email. If both stageEightCampaignId and stageEightCampaignText are set, then stageEightCampaignId will be used.",
          "type": "integer"
        },
        "stageEightAction": {
          "description": "STAGE 8: Determines which behavior follow-ups should be sent based on. r=No Reply. o=No Open. c=No Click. s=No Reply or Click. a=Everyone",
          "type": "string"
        },
        "stageEightTime": {
          "description": "STAGE 8: Optionally, specify the time of day the follow-up should be sent. Specify without a time zone offset, but in the same time zone as sendTime.",
          "type": "string"
        },
        "stageEightThread": {
          "description": "STAGE 8: Optionally, specify whether the message should be sent as part of the \"same\" thread or a \"new\" thread. Default is \"same\".",
          "type": "string"
        },
        "ABTest": {
          "description": "Set to true or false, based on whether this campaign is being A/B tested",
          "type": "boolean"
        },
        "ABTestDecision": {
          "description": "Set to m or a, based on whether the winner should be decided manually or automatically",
          "type": "string"
        },
        "ABTestHoursAfter": {
          "format": "int32",
          "description": "Set to the number of hours after the test portion is sent that a winner should be picked",
          "type": "integer"
        },
        "ABTestPercentage": {
          "format": "int32",
          "description": "Set the percentage of the campaign that should be sent as the test portion",
          "type": "integer"
        },
        "ABTestDecisionFactor": {
          "description": "Only required if ABTestDecision=a. The parameter by which the winner will be decided. o=opens c=clicks r=replies",
          "type": "string"
        },
        "MultiSend": {
          "description": "Specify a comma-separated list of accounts to distribute the volume over. MultiSend accounts must already be connected to your primary account.",
          "type": "string"
        },
        "MultiSendSkipPrimary": {
          "description": "If true, the primary account making the API request will not be used\r\nto send messages as part of MultiSend.",
          "type": "boolean"
        },
        "MultiSendPrimaryMaxAllowed": {
          "format": "int32",
          "description": "Optional MultiSend daily maximum for the primary account.\r\nOnly applies when MultiSendSkipPrimary is false.\r\nA value of 0 means no custom MultiSend maximum.",
          "type": "integer"
        },
        "SpinMax": {
          "description": "Determines if SpinMax is set for this campaign. True or False.",
          "type": "boolean"
        },
        "additionalStages": {
          "description": "Any follow-up stage ≥ 9.  \r\nOnly specify stages 9 and higher here. The first 8 are specified in the separate fixed parameters.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/extraStage"
          }
        }
      }
    },
    "extraStage": {
      "type": "object",
      "properties": {
        "stageNumber": {
          "format": "int32",
          "description": "Stage number (9, 10, 11 …)",
          "type": "integer"
        },
        "days": {
          "format": "int32",
          "description": "Days after original send.",
          "type": "integer"
        },
        "action": {
          "description": "r = no-reply · o = no-open · c = no-click · s = no reply/click · a = everyone",
          "type": "string"
        },
        "campaignText": {
          "description": "Optional custom text to send for this stage.  \r\nIf both campaignText **and** campaignId are supplied, campaignId wins.",
          "type": "string"
        },
        "campaignId": {
          "format": "int32",
          "description": "Optional ID of an existing campaign to re-use instead of text.",
          "type": "integer"
        },
        "time": {
          "description": "Optional time of day – same format you already use for stageOneTime, etc.",
          "type": "string"
        },
        "thread": {
          "description": "same = reply in same thread · new = force new thread (default = same)",
          "type": "string"
        }
      }
    },
    "listSearchResults": {
      "type": "object",
      "properties": {
        "count": {
          "format": "int32",
          "type": "integer",
          "readOnly": true
        },
        "offset": {
          "format": "int32",
          "type": "integer"
        },
        "limit": {
          "format": "int32",
          "type": "integer"
        },
        "total": {
          "format": "int32",
          "type": "integer"
        },
        "lists": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/listDetails"
          }
        }
      }
    },
    "listDetails": {
      "type": "object",
      "properties": {
        "id": {
          "format": "int32",
          "type": "integer"
        },
        "aliasAddress": {
          "type": "string"
        },
        "spreadSheetName": {
          "type": "string"
        },
        "workSheetName": {
          "type": "string"
        },
        "columns": {
          "type": "string"
        },
        "filterCriteria": {
          "type": "string"
        },
        "andOr": {
          "type": "string"
        },
        "creationDate": {
          "format": "date-time",
          "type": "string"
        },
        "addressCount": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "ApiListResponse[recipient]": {
      "type": "object",
      "properties": {
        "metadata": {
          "$ref": "#/definitions/ApiListResponseMetadata"
        },
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/recipient"
          }
        }
      }
    },
    "ApiListResponseMetadata": {
      "type": "object",
      "properties": {
        "links": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "totalRecords": {
          "format": "int32",
          "type": "integer"
        },
        "offset": {
          "format": "int32",
          "type": "integer"
        },
        "limit": {
          "format": "int32",
          "type": "integer"
        },
        "count": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "recipient": {
      "type": "object",
      "properties": {
        "emailAddress": {
          "type": "string"
        },
        "gmailResponseText": {
          "type": "string"
        },
        "sentTime": {
          "format": "date-time",
          "type": "string"
        },
        "sender": {
          "type": "string"
        }
      }
    },
    "ApiListResponse[open]": {
      "type": "object",
      "properties": {
        "metadata": {
          "$ref": "#/definitions/ApiListResponseMetadata"
        },
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/open"
          }
        }
      }
    },
    "open": {
      "type": "object",
      "properties": {
        "sender": {
          "type": "string"
        },
        "emailAddress": {
          "type": "string"
        },
        "openCount": {
          "format": "int32",
          "type": "integer"
        },
        "lastOpenTime": {
          "format": "date-time",
          "type": "string"
        }
      }
    },
    "ApiListResponse[click]": {
      "type": "object",
      "properties": {
        "metadata": {
          "$ref": "#/definitions/ApiListResponseMetadata"
        },
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/click"
          }
        }
      }
    },
    "click": {
      "type": "object",
      "properties": {
        "emailAddress": {
          "type": "string"
        },
        "url": {
          "type": "string"
        },
        "clickTime": {
          "format": "date-time",
          "type": "string"
        },
        "sender": {
          "type": "string",
          "readOnly": true
        }
      }
    },
    "ApiListResponse[unsubscribe]": {
      "type": "object",
      "properties": {
        "metadata": {
          "$ref": "#/definitions/ApiListResponseMetadata"
        },
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/unsubscribe"
          }
        }
      }
    },
    "unsubscribe": {
      "type": "object",
      "properties": {
        "emailAddress": {
          "type": "string"
        },
        "unsubscribeTime": {
          "format": "date-time",
          "type": "string"
        },
        "sender": {
          "type": "string",
          "readOnly": true
        }
      }
    },
    "ApiListResponse[bounce]": {
      "type": "object",
      "properties": {
        "metadata": {
          "$ref": "#/definitions/ApiListResponseMetadata"
        },
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/bounce"
          }
        }
      }
    },
    "bounce": {
      "type": "object",
      "properties": {
        "emailAddress": {
          "type": "string"
        },
        "bounceReason": {
          "type": "string"
        },
        "bounceTime": {
          "format": "date-time",
          "type": "string"
        },
        "sender": {
          "type": "string",
          "readOnly": true
        }
      }
    },
    "ApiListResponse[block]": {
      "type": "object",
      "properties": {
        "metadata": {
          "$ref": "#/definitions/ApiListResponseMetadata"
        },
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/block"
          }
        }
      }
    },
    "block": {
      "type": "object",
      "properties": {
        "emailAddress": {
          "type": "string"
        },
        "blockReason": {
          "type": "string"
        },
        "blockTime": {
          "format": "date-time",
          "type": "string"
        },
        "sender": {
          "type": "string",
          "readOnly": true
        }
      }
    },
    "ApiListResponse[reply]": {
      "type": "object",
      "properties": {
        "metadata": {
          "$ref": "#/definitions/ApiListResponseMetadata"
        },
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/reply"
          }
        }
      }
    },
    "reply": {
      "type": "object",
      "properties": {
        "emailAddress": {
          "type": "string"
        },
        "replyId": {
          "format": "int32",
          "type": "integer"
        },
        "alreadyReplied": {
          "type": "boolean"
        },
        "replyTime": {
          "format": "date-time",
          "type": "string"
        },
        "sender": {
          "type": "string",
          "readOnly": true
        }
      }
    },
    "SampleOpen": {
      "type": "object",
      "properties": {
        "UserAgent": {
          "type": "string"
        },
        "EmailAddress": {
          "type": "string"
        },
        "CampaignID": {
          "format": "int32",
          "type": "integer"
        },
        "TimeStamp": {
          "format": "date-time",
          "type": "string"
        }
      }
    },
    "SampleClick": {
      "type": "object",
      "properties": {
        "UserAgent": {
          "type": "string"
        },
        "URL": {
          "type": "string"
        },
        "EmailAddress": {
          "type": "string"
        },
        "CampaignID": {
          "format": "int32",
          "type": "integer"
        },
        "TimeStamp": {
          "format": "date-time",
          "type": "string"
        }
      }
    },
    "SampleRecipient": {
      "type": "object",
      "properties": {
        "EmailAddress": {
          "type": "string"
        },
        "CampaignID": {
          "format": "int32",
          "type": "integer"
        },
        "TimeStamp": {
          "format": "date-time",
          "type": "string"
        }
      }
    },
    "SampleBounce": {
      "type": "object",
      "properties": {
        "BounceMessage": {
          "type": "string"
        },
        "EmailAddress": {
          "type": "string"
        },
        "CampaignID": {
          "format": "int32",
          "type": "integer"
        },
        "TimeStamp": {
          "format": "date-time",
          "type": "string"
        }
      }
    },
    "spreadsheet": {
      "type": "object",
      "properties": {
        "spreadsheetId": {
          "description": "The \"id\" value of the Google Sheet. Can be retrieved from the sheets.google.com URL",
          "type": "string"
        },
        "spreadsheetName": {
          "description": "The name you've given to the Google Sheet",
          "type": "string"
        }
      }
    },
    "worksheet": {
      "type": "object",
      "properties": {
        "worksheetId": {
          "format": "int32",
          "description": "The Google assigned ID of the worksheet within a Google Sheet. The default worksheet usually has an ID of 0.",
          "type": "integer"
        },
        "worksheetName": {
          "description": "The name you've given to the particular tab (worksheet) in the Google Sheet.",
          "type": "string"
        }
      }
    },
    "transactionalEmail": {
      "type": "object",
      "properties": {
        "transactionalEmailId": {
          "type": "string"
        },
        "fromEmail": {
          "type": "string"
        },
        "fromName": {
          "type": "string"
        },
        "to": {
          "type": "string"
        },
        "cc": {
          "type": "string"
        },
        "bcc": {
          "type": "string"
        },
        "subject": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "messageRaw": {
          "type": "string"
        },
        "settings": {
          "$ref": "#/definitions/transactionalSettings"
        }
      }
    },
    "transactionalSettings": {
      "type": "object",
      "properties": {
        "openTrack": {
          "type": "boolean"
        },
        "clickTrack": {
          "type": "boolean"
        },
        "messageType": {
          "type": "string"
        },
        "useCustomerSmtp": {
          "type": "boolean"
        },
        "SmtpServerId": {
          "format": "int32",
          "type": "integer"
        },
        "threadToCampaign": {
          "format": "int32",
          "type": "integer"
        },
        "smtpRelay": {
          "type": "boolean"
        },
        "listUnsubscribeHeader": {
          "type": "boolean"
        }
      }
    },
    "unsubscribeDomain": {
      "type": "object",
      "properties": {
        "domain": {
          "type": "string"
        },
        "unsubscribeTime": {
          "format": "date-time",
          "type": "string"
        }
      }
    },
    "WarmUpStatsModel": {
      "type": "object",
      "properties": {
        "Date": {
          "format": "date-time",
          "type": "string"
        },
        "Inbox": {
          "format": "int32",
          "type": "integer"
        },
        "Spam": {
          "format": "int32",
          "type": "integer"
        },
        "Promotions": {
          "format": "int32",
          "type": "integer"
        },
        "Missing": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "webHook": {
      "type": "object",
      "properties": {
        "id": {
          "format": "int32",
          "type": "integer"
        },
        "platformSource": {
          "description": "Must be one of: Opens, Clicks, Replies, Bounces, Unsubscribes, Sends",
          "type": "string"
        },
        "eventType": {
          "type": "string"
        },
        "Url": {
          "type": "string"
        },
        "dataFormat": {
          "type": "string"
        },
        "enabled": {
          "type": "boolean"
        }
      }
    }
  },
  "securityDefinitions": {
    "apikey": {
      "type": "apiKey",
      "description": "API Key Authentication",
      "name": "X-apikey",
      "in": "header"
    }
  }
}