openapi: 3.0.3
info:
  title: 'Manager API (MAPI) для подключения новых площадок'
  description: ''
  version: 1.0.0
servers:
  -
    url: 'https://www.amapi.ru'
paths:
  /api/create-order:
    post:
      summary: 'POST api/create-order'
      description: "Создание заказа\n<aside class=\"warning\">Метод доступен только авторизованным пользователям. Необходимо передать полученный при регистрации или авторизации токен через HTTP-заголовок Authorization.</aside>"
      parameters:
        -
          in: header
          name: Authorization
          description: ''
          example: 'Bearer 1Dg4PfVhaEcve36Z56dk8ab'
          schema:
            type: string
        -
          in: header
          name: Accept
          description: ''
          example: application/json
          schema:
            type: string
      responses:
        201:
          description: '201'
          content:
            application/json:
              schema:
                type: object
                example:
                  OrderCreated: true
                  OrderCode: XX0000-00000
                properties:
                  OrderCreated:
                    type: boolean
                    example: true
                    description: 'Заказ создан'
                  OrderCode:
                    type: string
                    example: XX0000-00000
        400:
          description: '400'
          content:
            application/json:
              schema:
                type: object
                example:
                  signedIn: false
                  message: 'Не создан заказ'
                properties:
                  signedIn:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Не создан заказ'
                    description: 'Сообщение об ошибке. При 2 или более ошибках передается в массиве'
      tags:
        - Заказ
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: "Фамилия Имя Отчество заказчика/покупателя. Указываем максимуму из того что есть на сайте:<br>\nЕсть только Имя - указываем \"Имя\"<br>\nЕсть Имя и Фамилия - указываем \"Фамилия Имя\"<br>\nЕсть Имя и Фамилия и Отчество - указываем \"Фамилия Имя Отчество\"."
                  example: 'Иванов Иван Иванович'
                email:
                  type: string
                  description: 'Электронная почта.'
                  example: ivan.petrov@example.com
                phone:
                  type: string
                  description: 'Номер телефона в формате +7 000 000-00-00.'
                  example: '+7 999 999-99-99'
                deliveryType:
                  type: string
                  description: 'Тип доставки. Возможные варианты: address - доставка компанией; external - доставка транспортной компанией; pickup - самовывоз из пунка выдачи компании, pickpoint - постаматы.'
                  example: address
                deliveryCompany:
                  type: string
                  description: 'Транспортная компания. Возможные варианты: СДЭК, dpd. Обязательный параметр при доставке транспортной компанией (deliveryType - external).'
                  example: СДЭК
                lgsTerminalCode:
                  type: string
                  description: 'Код терминала ТК (СДЭК, dpd). Обязательный параметр при доставке транспортной компанией (deliveryType - external).'
                  example: null
                lgsTerminalId:
                  type: string
                  description: 'Код ПВЗ. Параметр при самовывозе из ПВЗ (deliveryType - pickup).'
                  example: '103'
                lgsCompanyId:
                  type: number
                  description: 'Код транспортной компании. Обязательный параметр при доставке транспортной компанией (deliveryType - external).'
                  example: !!float 304
                lgsTariffId:
                  type: number
                  description: 'Код тариф ТК (СДЭК, dpd). Обязательный параметр при доставке транспортной компанией (deliveryType - external).'
                  example: !!float 1502
                address:
                  type: object
                  description: ''
                  example: []
                  properties:
                    city:
                      type: string
                      description: 'Город. Обязательный параметр при выборе deliveryType = address или deliveryType external c доставкой по адресу.'
                      example: Москва
                    street:
                      type: string
                      description: 'Улица. Обязательный параметр при выборе deliveryType address или deliveryType external. При доставке транспортной компанией (deliveryType external) до терминала тут передается полный адрес терминала.'
                      example: 'Красная площадь'
                    house:
                      type: string
                      description: 'Номер дома. Обязательный параметр при выборе deliveryType address или deliveryType external c доставкой по адресу.'
                      example: '3'
                    corp:
                      type: string
                      description: Корпус.
                      example: null
                    build:
                      type: string
                      description: Строение.
                      example: null
                    porch:
                      type: string
                      description: Подъезд.
                      example: null
                    floor:
                      type: string
                      description: Этаж.
                      example: null
                    flat:
                      type: string
                      description: Квартира.
                      example: null
                    elevator:
                      type: integer
                      description: 'Лифт. Возможные значения: 0 - нет, 1 - пассажирский лифт, 2 - грузовой лифт.'
                      example: null
                    intercom:
                      type: string
                      description: 'Код домофона.'
                      example: null
                    metro:
                      type: string
                      description: 'Станция метро.'
                      example: null
                    latitude:
                      type: number
                      description: Широта.
                      example: 55.76
                    longitude:
                      type: number
                      description: Долгота.
                      example: 37.64
                    kladr:
                      type: string
                      description: КЛАДР.
                      example: '7700000000000'
                comment:
                  type: string
                  description: Примечание.
                  example: null
                paymentOption:
                  type: integer
                  description: 'Код способа оплаты. Возможные варианты: 1 - Наличные, 2 - Пластиковая карта, 3 - Кредит, 4 - Рассрочка, 5 - Оплата онлайн, 39 - Безналичный расчет, 43 - Подарочный сертификат.'
                  example: 1
                desiredDeliveryDate:
                  type: integer
                  description: 'Выбранная покупателем дата доставки. В UNIX timestamp.'
                  example: 1626695813
                desiredDeliveryInterval:
                  type: string
                  description: 'Выбранный покупателем интервал доставки.'
                  example: 'с 12 до 18'
                deliveryIntervalCost:
                  type: number
                  description: 'Дополнительная стоимость доставки за выбранный интервал.'
                  example: !!float 0
                totalDeliveryPrice:
                  type: number
                  description: 'Стоимость доставки заказа через ТК.'
                  example: !!float 0
                summWithoutDelivery:
                  type: number
                  description: 'Общая сумма заказа без стоимости доставки.'
                  example: !!float 0
                totalWeight:
                  type: number
                  description: Вес.
                  example: 0.48
                totalVolume:
                  type: number
                  description: Объем.
                  example: 0.00098
                items:
                  type: array
                  description: 'Корзина с товарами'
                  example:
                    - []
                    - []
                  items:
                    type: object
                    properties:
                      productId:
                        type: integer
                        description: 'ID товара.'
                        example: 1191767
                      itemId:
                        type: integer
                        description: 'ID позиции.'
                        example: 857
                      parentId:
                        type: integer
                        description: 'ID родительской позиции. Заполняется для подчинённых товаров – подарков, сертификатов, и т.п.'
                        example: null
                      name:
                        type: string
                        description: 'Название товара.'
                        example: 'Смартфон Xiaomi Redmi Note 9 3/64Gb Green'
                      price:
                        type: number
                        description: 'Цена товара.'
                        example: !!float 12554
                      quantity:
                        type: integer
                        description: 'Количество товара.'
                        example: 1
                      deliveryPrice:
                        type: number
                        description: 'Стоимость доставки одной позиции отдельно. Заполняется только при выборе deliveryType address.'
                        example: !!float 300
                      status:
                        type: integer
                        description: 'Статус товара. Вожможные варианты: 0 – Нет в наличии, 1 – Ограниченное количество, 2 – На заказ, 3 – В наличии.'
                        example: 12554
                    required:
                      - productId
                      - itemId
                      - name
                      - price
                      - quantity
                      - deliveryPrice
                      - status
              required:
                - name
                - email
                - phone
                - deliveryType
                - paymentOption
                - desiredDeliveryDate
                - desiredDeliveryInterval
                - totalWeight
                - totalVolume
                - items
  /api/buy-click:
    post:
      summary: 'POST api/buy-click'
      description: "Покупка товара в 1 клик\n<aside class=\"warning\">Метод доступен только авторизованным пользователям. Необходимо передать полученный при регистрации или авторизации токен через HTTP-заголовок Authorization.</aside>"
      parameters:
        -
          in: header
          name: Authorization
          description: ''
          example: 'Bearer 6cZDfP6Vhaeagk31b5vdE84'
          schema:
            type: string
        -
          in: header
          name: Accept
          description: ''
          example: application/json
          schema:
            type: string
      responses:
        201:
          description: '201'
          content:
            application/json:
              schema:
                type: object
                example:
                  OrderCreated: true
                  OrderCode: XX0000-00000
                properties:
                  OrderCreated:
                    type: boolean
                    example: true
                    description: 'Заказ создан'
                  OrderCode:
                    type: string
                    example: XX0000-00000
        400:
          description: '400'
          content:
            application/json:
              schema:
                type: object
                example:
                  signedIn: false
                  message: 'Не создан заказ'
                properties:
                  signedIn:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Не создан заказ'
                    description: 'Сообщение об ошибке. При 2 или более ошибках передается в массиве'
      tags:
        - Заказ
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                phone:
                  type: string
                  description: 'required, если не указан email Номер телефона в формате +7 000 000-00-00.'
                  example: '+7 999 999-99-99'
                email:
                  type: string
                  description: 'required, если не указан phone Электронная почта.'
                  example: ivan.petrov@example.com
                name:
                  type: string
                  description: "Фамилия Имя Отчество заказчика/покупателя. Указываем максимуму из того что есть на сайте:<br>\nЕсть только Имя - указываем \"Имя\"<br>\nЕсть Имя и Фамилия - указываем \"Фамилия Имя\"<br>\nЕсть Имя и Фамилия и Отчество - указываем \"Фамилия Имя Отчество\"."
                  example: 'Иванов Иван Иванович'
                comment:
                  type: string
                  description: Примечание.
                  example: null
                totalWeight:
                  type: number
                  description: 'Общий вес заказа.'
                  example: 0.48
                totalVolume:
                  type: number
                  description: 'Общий объем заказа.'
                  example: 0.00098
                items:
                  type: array
                  description: 'Корзина с товарами'
                  example:
                    - []
                    - []
                  items:
                    type: object
                    properties:
                      productId:
                        type: integer
                        description: 'ID товара.'
                        example: 1191767
                      itemId:
                        type: integer
                        description: 'ID позиции.'
                        example: 857
                      parentId:
                        type: integer
                        description: 'ID родительской позиции. Заполняется для подчинённых товаров – подарков, сертификатов, и т.п.'
                        example: null
                      name:
                        type: string
                        description: 'Название товара.'
                        example: 'Смартфон Xiaomi Redmi Note 9 3/64Gb Green'
                      price:
                        type: number
                        description: 'Цена товара.'
                        example: !!float 12554
                      quantity:
                        type: integer
                        description: 'Количество товара.'
                        example: 1
                      deliveryPrice:
                        type: number
                        description: 'Стоимость доставки одной позиции отдельно. Заполняется только при выборе deliveryType address.'
                        example: !!float 300
                      status:
                        type: integer
                        description: 'Статус товара. Вожможные варианты: 0 – Нет в наличии, 1 – Ограниченное количество, 2 – На заказ, 3 – В наличии.'
                        example: 12554
                    required:
                      - productId
                      - itemId
                      - name
                      - price
                      - quantity
                      - deliveryPrice
                      - status
              required:
                - totalWeight
                - totalVolume
                - items
  /api/callback:
    post:
      summary: 'POST api/callback'
      description: "Заказ обратного звонка\n<aside class=\"warning\">Метод доступен только авторизованным пользователям. Необходимо передать полученный при регистрации или авторизации токен через HTTP-заголовок Authorization.</aside>"
      parameters:
        -
          in: header
          name: Authorization
          description: ''
          example: 'Bearer DEbh8veakgfPZ5cVd613a46'
          schema:
            type: string
        -
          in: header
          name: Accept
          description: ''
          example: application/json
          schema:
            type: string
      responses:
        201:
          description: '201'
          content:
            application/json:
              schema:
                type: object
                example:
                  OrderCreated: true
                  OrderCode: XX0000-00000
                properties:
                  OrderCreated:
                    type: boolean
                    example: true
                    description: 'Заказ создан'
                  OrderCode:
                    type: string
                    example: XX0000-00000
        400:
          description: '400'
          content:
            application/json:
              schema:
                type: object
                example:
                  signedIn: false
                  message: 'Не создан заказ'
                properties:
                  signedIn:
                    type: boolean
                    example: false
                  message:
                    type: string
                    example: 'Не создан заказ'
                    description: 'Сообщение об ошибке. При 2 или более ошибках передается в массиве'
      tags:
        - Заказ
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                phone:
                  type: string
                  description: 'Номер телефона в формате +7 000 000-00-00.'
                  example: '+7 999 999-99-99'
                name:
                  type: string
                  description: "Фамилия Имя Отчество заказчика/покупателя. Указываем максимуму из того что есть на сайте:<br>\nЕсть только Имя - указываем \"Имя\"<br>\nЕсть Имя и Фамилия - указываем \"Фамилия Имя\"<br>\nЕсть Имя и Фамилия и Отчество - указываем \"Фамилия Имя Отчество\"."
                  example: 'Иванов Иван Иванович'
                comment:
                  type: string
                  description: Примечание.
                  example: null
              required:
                - phone
  /api/register:
    post:
      summary: 'POST api/register'
      description: 'Регистрация нового пользователя и его авторизация'
      parameters:
        -
          in: header
          name: Accept
          description: ''
          example: application/json
          schema:
            type: string
      responses:
        201:
          description: '201'
          content:
            application/json:
              schema:
                type: object
                example:
                  signedUp: true
                  token: 2|8xUSKeX9YfnaaxvzPSsMG6uCGoJE3MHVEbdf0Ibn
                properties:
                  signedUp:
                    type: boolean
                    example: true
                    description: 'Регистрация успешная или нет'
                  token:
                    type: string
                    example: 2|8xUSKeX9YfnaaxvzPSsMG6uCGoJE3MHVEbdf0Ibn
                    description: 'Вновь созданный токен'
        400:
          description: '400'
          content:
            application/json:
              schema:
                type: object
                example:
                  signedUp: false
                  message: 'Ошибка при регистрации'
                properties:
                  signedUp:
                    type: boolean
                    example: false
                    description: 'Регистрация успешная или нет'
                  message:
                    type: string
                    example: 'Ошибка при регистрации'
                    description: 'Сообщение об ошибке'
      tags:
        - 'Личный кабинет'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Имя пользователя.'
                  example: 'Ваше имя'
                email:
                  type: string
                  description: 'Электронная почта пользователя.'
                  example: 'Ваша электронная почта'
                password:
                  type: string
                  description: Пароль.
                  example: 'Ваш пароль'
                password_confirmation:
                  type: string
                  description: 'Ещё раз тот же пароль.'
                  example: 'Ваш пароль'
              required:
                - name
                - email
                - password
                - password_confirmation
      security: []
  /api/login:
    post:
      summary: 'POST api/login'
      description: 'Авторизация пользователя и получение токена'
      parameters:
        -
          in: header
          name: Accept
          description: ''
          example: application/json
          schema:
            type: string
      responses:
        201:
          description: '201'
          content:
            application/json:
              schema:
                type: object
                example:
                  signedIn: true
                  token: 2|8xUSKeX9YfnaaxvzPSsMG6uCGoJE3MHVEbdf0Ibn
                properties:
                  signedIn:
                    type: boolean
                    example: true
                    description: 'Авторизация успешная или нет'
                  token:
                    type: string
                    example: 2|8xUSKeX9YfnaaxvzPSsMG6uCGoJE3MHVEbdf0Ibn
                    description: 'Вновь созданный токен'
        400:
          description: '400'
          content:
            application/json:
              schema:
                type: object
                example:
                  signedIn: false
                  message: 'Неправильный логин (электронная почта) и/или пароль.'
                properties:
                  signedIn:
                    type: boolean
                    example: false
                    description: 'Авторизация успешная или нет'
                  message:
                    type: string
                    example: 'Неправильный логин (электронная почта) и/или пароль.'
                    description: 'Сообщение об ошибке'
      tags:
        - 'Личный кабинет'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: 'Электронная почта пользователя.'
                  example: 'Ваша электронная почта'
                password:
                  type: string
                  description: Пароль.
                  example: 'Ваш пароль'
              required:
                - email
                - password
      security: []
  /api/logout:
    post:
      summary: 'POST api/logout'
      description: "выход из системы и аннулирование токенов\n<aside class=\"warning\">Метод доступен только авторизованным пользователям. Необходимо передать полученный при регистрации или авторизации токен через HTTP-заголовок Authorization.</aside>"
      parameters:
        -
          in: header
          name: Authorization
          description: ''
          example: 'Bearer 8d6caPgVkh1fE4Z6D5bva3e'
          schema:
            type: string
        -
          in: header
          name: Accept
          description: ''
          example: application/json
          schema:
            type: string
      responses:
        200:
          description: '200'
          content:
            application/json:
              schema:
                type: object
                example:
                  signedOut: true
                properties:
                  signedOut:
                    type: boolean
                    example: true
                    description: 'Выход из системы и аннулирование токенов'
        400:
          description: '400'
          content:
            application/json:
              schema:
                type: object
                example:
                  message: Unauthenticated
                properties:
                  message:
                    type: string
                    example: Unauthenticated
                    description: 'Сообщение об ошибке'
      tags:
        - 'Личный кабинет'
  /api/change-password:
    post:
      summary: 'POST api/change-password'
      description: "Смена пароля пользователя\n<aside class=\"warning\">Метод доступен только авторизованным пользователям. Необходимо передать полученный при регистрации или авторизации токен через HTTP-заголовок Authorization.</aside>"
      parameters:
        -
          in: header
          name: Authorization
          description: ''
          example: 'Bearer D3468kcvbdZa5gPea1V6hfE'
          schema:
            type: string
        -
          in: header
          name: Accept
          description: ''
          example: application/json
          schema:
            type: string
      responses:
        201:
          description: '201'
          content:
            application/json:
              schema:
                type: object
                example:
                  passwordChanged: true
                  token: 2|8xUSKeX9YfnaaxvzPSsMG6uCGoJE3MHVEbdf0Ibn
                properties:
                  passwordChanged:
                    type: boolean
                    example: true
                    description: 'Регистрация успешная или нет'
                  token:
                    type: string
                    example: 2|8xUSKeX9YfnaaxvzPSsMG6uCGoJE3MHVEbdf0Ibn
                    description: 'Вновь созданный токен'
        400:
          description: '400'
          content:
            application/json:
              schema:
                type: object
                example:
                  passwordChanged: false
                  message: 'Ошибка при регистрации'
                properties:
                  passwordChanged:
                    type: boolean
                    example: false
                    description: 'Регистрация успешная или нет'
                  message:
                    type: string
                    example: 'Ошибка при регистрации'
                    description: 'Сообщение об ошибке'
      tags:
        - 'Личный кабинет'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: 'Электронная почта пользователя.'
                  example: 'Ваша электронная почта'
                old_password:
                  type: string
                  description: 'Старый пароль.'
                  example: 'Ваш пароль'
                password:
                  type: string
                  description: Пароль.
                  example: 'Ваш пароль'
                password_confirmation:
                  type: string
                  description: 'Ещё раз тот же пароль.'
                  example: 'Ваш пароль'
              required:
                - email
                - old_password
                - password
                - password_confirmation
  /api/test:
    get:
      summary: 'GET api/test'
      description: "Проверка доступности сервиса\n<aside class=\"notice\">Если пользователь авторизован и имеется токен, необходимо передать токен через HTTP-заголовок Authorization.</aside>"
      parameters:
        -
          in: header
          name: Accept
          description: ''
          example: application/json
          schema:
            type: string
      responses:
        200:
          description: '200'
          content:
            application/json:
              schema:
                type: object
                example:
                  isAuthenticated: true
                  serviceAvailable: true
                properties:
                  isAuthenticated:
                    type: boolean
                    example: true
                    description: 'Пользователь авторизован'
                  serviceAvailable:
                    type: boolean
                    example: true
                    description: 'Сервиса доступен'
      tags:
        - Проверка
      security: []
components:
  securitySchemes:
    default:
      type: http
      scheme: bearer
      description: ''
security:
  -
    default: []
