{
  "swagger": "2.0",
  "info": {
    "version": "1.5.1",
    "title": "REST API SMTP.BZ"
  },
  "host": "api.smtp.bz",
  "basePath": "/v1",
  "tags": [
    {
      "name": "User",
      "description": "Данные о пользователи"
    },
    {
      "name": "Log",
      "description": "Данные по письмам (журнал)"
    },
    {
      "name": "unsubscribe",
      "description": "Данные по отписчками"
    },
    {
      "name": "SMTP",
      "description": "Отправка писем"
    },
    {
      "name": "Validate",
      "description": "Валидация email-адреса"
    }
  ],
  "security": [
    {
      "ApiKeyAuth": []
    }
  ],
  "schemes": [
    "https"
  ],
  "paths": {
    "/user": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Данные о пользователи",
        "operationId": "getUserData",
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Успешно"
          },
          "401": {
            "description": "Не авторизован"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          }
        ]
      }
    },
    "/user/stats": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Статистика по рассылкам",
        "operationId": "getUserStats",
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Успешно"
          },
          "401": {
            "description": "Не авторизован"
          }
        }
      }
    },

    "/user/domain": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Домены отправителя",
        "operationId": "getUserDomains",
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Успешно"
          },
          "401": {
            "description": "Не авторизован"
          }
        }
      }
    },

    "/user/domain/{domain}": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Домен отправителя",
        "operationId": "getUserDomain",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "path",
            "description": "Домен",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Успешно"
          },
          "400": {
            "description": "Имя домена не корректно"
          },
          "401": {
            "description": "Не авторизован"
          },
          "404": {
            "description": "Домен не найден"
          }
        }
      }
    },

    "/user/domain/add": {
      "post": {
        "tags": [
          "User"
        ],
        "summary": "Добавление домена отправителя",
        "operationId": "addDomain",
        "consumes": [
          "multipart/form-data"
        ],
        "parameters": [
          {
            "in": "formData",
            "name": "domain",
            "type": "string",
            "required": true,
            "description": "Домен отправителя без http и https"
          }
        ],
        "responses": {
          "200": {
            "description": "Успешно"
          },
          "400": {
            "description": "Один или несколько агументов указаны не корреткно"
          }
        }
      }
    },


    "/user/domain/verify": {
        "post": {
          "tags": [
            "User"
          ],
          "summary": "Верификация и проверка записей домена отправителя",
          "operationId": "verifyDomain",
          "consumes": [
            "multipart/form-data"
          ],
          "parameters": [
            {
              "in": "formData",
              "name": "domain",
              "type": "string",
              "required": true,
              "description": "Домен отправителя без http и https"
            }
          ],
          "responses": {
            "200": {
              "description": "Успешно"
            },
            "400": {
              "description": "Один или несколько агументов указаны не корреткно"
            }
          }
        }
      },
    "/user/ip": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Выделенные IP-адреса пользователя",
        "operationId": "getUserIps",
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Успешно"
          },
          "400": {
            "description": "IP-адреса не найдены"
          },
          "401": {
            "description": "Не авторизован"
          }
        }
      }
    },
    "/user/ip/{ip}": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Выделенный IP-адрес пользователя",
        "operationId": "getUserIp",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "ip",
            "in": "path",
            "description": "IP-адрес",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Успешно"
          },
          "400": {
            "description": "IP-адрес не корретный"
          },
          "401": {
            "description": "Не авторизован"
          },
          "404": {
            "description": "IP-адрес не найден"
          }
        }
      }
    },
    "/log/message": {
      "get": {
        "tags": [
          "Log"
        ],
        "summary": "Получить отправленные письма",
        "operationId": "getMessages",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "type": "integer",
            "description": "Кол-во строк возврата"
          },
          {
            "name": "offset",
            "in": "query",
            "type": "integer",
            "description": "Шаг (пагинация)"
          },
          {
            "name": "from",
            "in": "query",
            "type": "string",
            "description": "Email отправителя"
          },
          {
            "name": "to",
            "in": "query",
            "type": "string",
            "description": "Email получателя"
          },
          {
            "name": "is_open",
            "in": "query",
            "type": "boolean",
            "description": "Открытые письма"
          },
          {
            "name": "is_unsubscribe",
            "in": "query",
            "type": "boolean",
            "description": "Отписка"
          },
          {
            "name": "startDate",
            "in": "query",
            "type": "string",
            "description": "Дата от, формат 2020-01-01"
          },
          {
            "name": "endDate",
            "in": "query",
            "type": "string",
            "description": "Дата до, формат 2020-01-01"
          },
          {
            "name": "tag",
            "in": "query",
            "type": "string",
            "description": "Индификатор X-Tag"
          },
          {
            "name": "status",
            "in": "query",
            "type": "string",
            "description": "Статус письма - sent, resent, return, bounce, cancel"
          }
        ],
        "responses": {
          "200": {
            "description": "Успешно"
          },
          "401": {
            "description": "Не авторизован"
          },
          "404": {
            "description": "Отправленнын письма не найдены"
          }
        }
      }
    },
    "/log/message/{messageid}": {
      "get": {
        "tags": [
          "Log"
        ],
        "summary": "Получить отправленное письмо по ID",
        "operationId": "getMessage",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "messageid",
            "in": "path",
            "description": "ID письма",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Успешно"
          },
          "400": {
            "description": "MessageId указан не корректно"
          },
          "401": {
            "description": "Не авторизован"
          },
          "404": {
            "description": "Письмо не найдено"
          }
        }
      }
    },
    "/unsubscribe": {
      "get": {
        "tags": [
          "unsubscribe"
        ],
        "summary": "Получить список отписчиков",
        "operationId": "getUnsubscribe",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "type": "integer",
            "description": "Кол-во строк возврата"
          },
          {
            "name": "offset",
            "in": "query",
            "type": "integer",
            "description": "Шаг (пагинация)"
          },
          {
            "name": "address",
            "in": "query",
            "type": "string",
            "description": "Email адрес"
          },
          {
            "name": "reason",
            "in": "query",
            "type": "string",
            "description": "Причина отписки (bounce, user, unsubscribe)"
          }
        ],
        "responses": {
          "200": {
            "description": "Успешно"
          },
          "404": {
            "description": "Отписчики не найдены"
          }
        }
      }
    },
    "/unsubscribe/add": {
      "post": {
        "tags": [
          "unsubscribe"
        ],
        "summary": "Добавление email в список отписчиков",
        "operationId": "addUnsubscribe",
        "consumes": [
          "multipart/form-data"
        ],
        "parameters": [
          {
            "in": "unsubscribe",
            "name": "address",
            "type": "string",
            "required": true,
            "description": "Email адреса, каждый с новой строки, не более 500 за раз"
          }
        ],
        "responses": {
          "200": {
            "description": "Успешно"
          },
          "400": {
            "description": "Один или несколько агументов указаны не корреткно"
          }
        }
      }
    },
    "/unsubscribe/remove": {
      "post": {
        "tags": [
          "unsubscribe"
        ],
        "summary": "Удаление email-адреса из списка отписчиков",
        "operationId": "removeUnsubscribe",
        "consumes": [
          "multipart/form-data"
        ],
        "parameters": [
          {
            "in": "formData",
            "name": "address",
            "type": "string",
            "required": true,
            "description": "Email-адрес"
          }
        ],
        "responses": {
          "200": {
            "description": "Успешно"
          },
          "400": {
            "description": "Один или несколько агументов указаны не корреткно"
          }
        }
      }
    },
    "/unsubscribe/removeall": {
      "post": {
        "tags": [
          "unsubscribe"
        ],
        "summary": "Удаление всего списка отписчиков",
        "operationId": "removeallUnsubscribe",
        "consumes": [
          "multipart/form-data"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Успешно"
          },
          "400": {
            "description": "Один или несколько агументов указаны не корреткно"
          }
        }
      }
    },
    "/smtp/send": {
      "post": {
        "tags": [
          "SMTP"
        ],
        "summary": "Отправка письма",
        "operationId": "smtpSend",
        "consumes": [
          "multipart/form-data"
        ],
        "parameters": [
          {
            "in": "formData",
            "name": "from",
            "type": "string",
            "required": true,
            "description": "Email отправителя"
          },
          {
            "in": "formData",
            "name": "name",
            "type": "string",
            "description": "Имя отправителя"
          },
          {
            "in": "formData",
            "name": "subject",
            "type": "string",
            "required": true,
            "description": "Тема письма"
          },
          {
            "in": "formData",
            "name": "to",
            "type": "string",
            "required": true,
            "description": "Email получателя"
          },
          {
            "in": "formData",
            "name": "bcc",
            "type": "string",
            "required": false,
            "description": "Email получателя в скрытой копии"
          },
          {
            "in": "formData",
            "name": "to_name",
            "type": "string",
            "description": "Имя получателя"
          },
          {
            "in": "formData",
            "name": "reply",
            "type": "string",
            "description": "Email для ответа"
          },
          {
            "in": "formData",
            "name": "html",
            "type": "string",
            "required": true,
            "description": "HTML-версия письма"
          },
          {
            "in": "formData",
            "name": "text",
            "type": "string",
            "description": "TXT-версия письма"
          },
          {
            "in": "formData",
            "name": "tag",
            "type": "string",
            "description": "Тег для выборки писем"
          },
          {
            "in": "formData",
            "name": "files",
            "type": "string",
            "description": "Вложения. Файлы в base64 [{ \"name\": \"file.pdf\", \"body\": \"BASE64_ENCODE_FILE\" }, { \"name\": \"my_img.jpg\", \"body\": \"BASE64_ENCODE_FILE\" }, ...]"
          },
          {
            "in": "formData",
            "name": "headers",
            "type": "string",
            "description": "Дополнительные заголовки [{ \"X-Name1\": \"value1\" }, { \"X-Name2\": \"value2\" }, ...]"
          }
        ],
        "responses": {
          "200": {
            "description": "Успешно"
          },
          "400": {
            "description": "Один или несколько агументов указаны не корреткно"
          },
          "401": {
            "description": "Не авторизован"
          }
        }
      }
    },
  "/smtp/mass": {
      "post": {
        "tags": [
          "SMTP"
        ],
        "summary": "Массовая отправка писем",
        "operationId": "smtpMass",
        "consumes": [
          "multipart/form-data"
        ],
        "parameters": [
          {
            "in": "formData",
            "name": "from",
            "type": "string",
            "required": true,
            "description": "Email отправителя"
          },
          {
            "in": "formData",
            "name": "name",
            "type": "string",
            "description": "Имя отправителя"
          },
          {
            "in": "formData",
            "name": "subject",
            "type": "string",
            "required": true,
            "description": "Тема письма"
          },
          {
            "in": "formData",
            "name": "to",
            "type": "string",
            "required": true,
            "description": "Email получателей массивом:<br>[\"smtpbz@mail.com\", {\"name\": \"Alex\", \"address\": \"emailbz@mail.com\"}]"
          },
          {
            "in": "formData",
            "name": "reply",
            "type": "string",
            "description": "Email для ответа"
          },
          {
            "in": "formData",
            "name": "html",
            "type": "string",
            "required": true,
            "description": "HTML-версия письма"
          },
          {
            "in": "formData",
            "name": "text",
            "type": "string",
            "description": "TXT-версия письма"
          },
          {
            "in": "formData",
            "name": "tag",
            "type": "string",
            "description": "Тег для выборки писем"
          },
          {
            "in": "formData",
            "name": "headers",
            "type": "string",
            "description": "Дополнительные заголовки массивом:<br>[{ \"X-Name1\": \"value1\" }, { \"X-Name2\": \"value2\" }, ...]"
          }
        ],
        "responses": {
          "200": {
            "description": "Успешно"
          },
          "400": {
            "description": "Один или несколько агументов указаны не корреткно"
          },
          "401": {
            "description": "Не авторизован"
          }
        }
      }
    },

    "/check/email/{email}": {
      "get": {
        "tags": [
          "Validate"
        ],
        "summary": "Валидации email-адреса",
        "operationId": "getValidate",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "email",
            "in": "path",
            "description": "E-mail адрес для проверки",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Успешно"
          },
          "400": {
            "description": "Ошибка квоты или валидации"
          },
          "401": {
            "description": "Не авторизован"
          }
        }
      }
    }
  },
  "securityDefinitions": {
    "ApiKeyAuth": {
      "type": "apiKey",
      "name": "Authorization",
      "in": "header"
    }
  }
}