{
 "openapi": "3.1.0",
 "info": {
  "title": "GEO Optimization API",
  "version": "2.2",
  "description": "Смета по прайс-листу и заявка на GEO-оптимизацию. Исполнитель — ООО «САРМАТЕХ».",
  "contact": {
   "email": "info@geooptimization.ru"
  }
 },
 "servers": [
  {
   "url": "https://geooptimization.ru"
  }
 ],
 "paths": {
  "/api/v1/quote": {
   "get": {
    "operationId": "quote",
    "summary": "Смета по прайс-листу",
    "parameters": [
     {
      "name": "engine",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "enum": [
        "custom",
        "bitrix",
        "wordpress",
        "constructor"
       ],
       "default": "custom"
      },
      "description": "Движок сайта"
     },
     {
      "name": "templates",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "minimum": 0,
       "maximum": 50
      },
      "description": "Типов страниц для разметки"
     },
     {
      "name": "measures",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "minimum": 0,
       "maximum": 20
      },
      "description": "Замеров ответов нейросетей"
     },
     {
      "name": "skus",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "minimum": 0
      },
      "description": "Товаров в каталоге"
     },
     {
      "name": "feeds",
      "in": "query",
      "required": false,
      "schema": {
       "type": "boolean"
      },
      "description": "Фиды YML и Google"
     },
     {
      "name": "kp",
      "in": "query",
      "required": false,
      "schema": {
       "type": "boolean"
      },
      "description": "Машиночитаемое КП — API запроса КП"
     },
     {
      "name": "calc_params",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "minimum": 0,
       "maximum": 50
      },
      "description": "Параметров API расчёта цены"
     },
     {
      "name": "ycp",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "enum": [
        "none",
        "bitrix",
        "api"
       ]
      },
      "description": "Подключение к YCP"
     },
     {
      "name": "hours",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "minimum": 0
      },
      "description": "Нестандартных часов"
     },
     {
      "name": "audit",
      "in": "query",
      "required": false,
      "schema": {
       "type": "boolean"
      },
      "description": "Разбор отчёта (только без внедрения)"
     },
     {
      "name": "urgent",
      "in": "query",
      "required": false,
      "schema": {
       "type": "boolean"
      },
      "description": "Срочность ×1,3"
     },
     {
      "name": "public_case",
      "in": "query",
      "required": false,
      "schema": {
       "type": "boolean"
      },
      "description": "Публичный кейс −15%"
     },
     {
      "name": "prepay",
      "in": "query",
      "required": false,
      "schema": {
       "type": "boolean"
      },
      "description": "Предоплата 100% −5%"
     },
     {
      "name": "support",
      "in": "query",
      "required": false,
      "schema": {
       "type": "boolean"
      },
      "description": "Поддержка помесячно"
     },
     {
      "name": "vat",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "enum": [
        "vat5",
        "vat22"
       ],
       "default": "vat5"
      },
      "description": "Ставка НДС"
     }
    ],
    "responses": {
     "200": {
      "description": "Смета",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "ok": {
           "type": "boolean"
          },
          "price_list_version": {
           "type": "string"
          },
          "lines": {
           "type": "array",
           "items": {
            "type": "object"
           }
          },
          "net": {
           "type": "integer"
          },
          "vat": {
           "type": "integer"
          },
          "total": {
           "type": "integer"
          },
          "monthly": {
           "type": "object"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Ошибка параметров"
     }
    }
   }
  },
  "/api/v1/request": {
   "post": {
    "operationId": "request",
    "summary": "Заявка на смету от имени человека (с его согласия)",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "required": [
         "name",
         "email",
         "phone",
         "site",
         "consent"
        ],
        "properties": {
         "name": {
          "type": "string",
          "maxLength": 60
         },
         "email": {
          "type": "string",
          "format": "email"
         },
         "phone": {
          "type": "string"
         },
         "country": {
          "type": "string",
          "default": "RU"
         },
         "site": {
          "type": "string",
          "format": "uri"
         },
         "package": {
          "type": "string",
          "enum": [
           "osnova",
           "katalog",
           "razbor",
           "konsult"
          ]
         },
         "message": {
          "type": "string",
          "maxLength": 2000
         },
         "consent": {
          "type": "boolean",
          "const": true,
          "description": "Согласие человека на обработку персональных данных"
         }
        }
       }
      }
     }
    },
    "responses": {
     "201": {
      "description": "Заявка принята",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "ok": {
           "type": "boolean"
          },
          "id": {
           "type": "string"
          },
          "message": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Ошибка полей"
     },
     "429": {
      "description": "Лимит заявок"
     }
    }
   }
  }
 }
}
