• Авторизация

    Авторизация по токену. В заголовке HTTP ожидает нечто вроде:

    Authorization: Token 43j2h5tb8453345

    Если токен передать как GET-параметр (?token=43j2h5tb8453345), то это значение перекроет заголовок Authorization.

  • Материалы

    GET /api/materials/

    Возвращает список материалов

    [...
    	{"id": 9,
    	"name": "\u0421.....\u043b",
    	"description": "<p>\u0412.....\u0415!</p>",
    	"price": 73.1,
    	"max_size_x": 310.0,
    	"max_size_y": 240.0,
    	"max_size_z": 190.0,
    	"min_thickness": 0.8},
    ...]
    
  • Модели

    GET /api/models/[?material=<MaterialID>[&scale=<scale>]]

    Возвращает список моделей авторизованного пользователя.

    Если параметр material присутствует в запросе, то рассчитывается цена (price).

  • GET /api/models/<ModelID>/[?material=<MaterialID>[&scale=<scale>]]

    Возвращает модель.

    Если модель не принадлежит пользователю: 404 NOT FOUND

    Если параметр material присутствует в запросе, то рассчитывается цена (price).

  • POST /api/models/

    Создает новую модель. При успехе возвращает 201 CREATED, сериализованный объект модели в теле ответа и ссылку на объект в заголовке ответа Location. Параметр file может содержать содержимое файла либо ссылку на скачивание. Ссылка должна указываться с протоколом и именем файла.

    Пример формы запроса:

    <form class="upload-form" method="POST" action="http://localhost:8000/api/models/?token=43j2h5tb8453345" 
    enctype="multipart/form-data">
    	<input name="file" type="input" placeholder="file URL"/>
    	<input name="file" type="file"/>
    	<input name="name" id="id_name" class="i-file-name" type="text">
    	<select class="select-replaced" id="id_category" name="category">
    		<option value="1">Cat 1</option>
    		<option value="2">cat 2</option>
    	</select>
    	<select class="select-replaced" id="id_units" name="units">
    		<option value="mm" selected="selected">Миллиметры</option>
    		<option value="sm">Сантиметры</option>
    		<option value="m">Метры</option>
    		<option value="inches">Дюймы</option>
    	</select>
    	<input type="submit" value="submit">
    </form>
    
  • Заказы

    Пример структуры заказа:

    {
    	"id": 47,
    	"time": "2014-07-17T09:29:54.875Z",
    	"items_cost": 109,
    	"delivery_cost": 0,
    	"payment_type": 2,
    	"status": 3,
    	"items": [
    		{
    			"model": 1528,
    			"material": 4,
    			"scale": 2.5,
    			"quantity": 1,
    			"cost": 109
    		}
    	]
    }
    
  • GET /api/orders/

    Возвращает список заказов пользователя

  • GET /api/orders/<OrderID>/

    Возвращает заказ пользователя

    Если заказ не принадлежит пользователю: 404 NOT FOUND

  • POST /api/orders/

    Создание заказа.

  • PUT /api/orders/<OrderID>/

    Обновление заказа с передачей полного состояния.

    Метод попытается привести *весь* заказ к виду, который был передан в запросе. Т.о., если в запросе был передан список items, содержащий не все(или ни одного) элементы, которые уже есть в заказе, то неуказанные элементы будут удалены из заказа, новые элементы будут добавлены, существующим будет обновлено количество. Если в запросе не было указано обязательное поле, будет получена ошибка 400 BAD REQUEST.

    Работа с полем status

    Изменения поля status в это запросе запрещены, используйте методы CANCEL, PAY, PATCH (deprecated)

  • PATCH /api/orders/<OrderID>/

    Обновление заказа с передачей частичного состояния.

    Метод попытается привести *поля* заказа к тем данным, что пришли в запросе. Т.о. если в запросе был передан список items, содержащий не все элементы, которые уже есть в заказе, то неуказанные элементы останутся неизмененными, новые элементы будут добавлены, существующим будет обновлено количество.

    Если в запросе не было указано обязательное поле, оно останется с прежним значением.

    Работа с полем status

    DEPRECATED: Оставлен из-за возможных проблем с HTTP-proxy. Используйте методы CANCEL, PAY. Изменение поля status выполняется отдельным запросом, в котором никакой информации о других полях присутствовать не должно. Доступные значения поля:

    «CANCELED»: см. метод CANCEL

    «PAID»: см. метод PAY

  • CANCEL /api/orders/<OrderID>/

    Отмена заказа. Если заказ был оплачен, средства будут возвращены на счет. Невозможно выполнить, если заказ на стадии производства.

  • PAY /api/orders/<OrderID>/

    Попытка оплаты заказа с личного счета. Если на счету не хватает средств, вернется ошибка 402 PAYMENT REQUIRED.

  • Доставка

  • PATCH /api/orders/<OrderID>/

    Указание адреса доставки для заказов со статусом WAITING_ADDRESS. После успешного сохранения адреса меняется статус заказа на WAITING_SHIPPING_TYPE или WAITING_PAYMENT

    Список передаваемых полей зависит от типа доставки.

    Для самовывоза:

    type: 0,
    phone: обязательное, номер телефона
    
    

    Для доставки по РФ:

    type: 1,
    phone: обязательное, номер телефона
    street: обязательное, улица
    postcode: обязательное, почтовый индекс
    city_code: обязательное, код города согласно справочнику
    house: обязательное, номер дома
    apt: номер квартиры/офиса
    
    

    Для доставки по миру:

    type: 2,
    phone: обязательное, номер телефона
    street: обязательное, улица
    postcode: обязательное, почтовый индекс
    city: обязательное, название города
    country_code: обязательное, код страны согласно справочнику
    house: обязательное, номер дома
    apt: номер квартиры/офиса
    
    

    Пример:

    PATCH /api/orders/47/
    {
        "address": {
    		"type": 1,
    		"city_code":1,
    		"phone": "+74722123456",
    		"street": "Ленина",
    		"postcode": "308000",
    		"house": 8,
    		"apt": 1
        }
    }
    
  • GET /api/orders/<OrderID>/delivery_options/

    Получение тарифов и способов доставки для указанного в заказе адреса.

    Пример ответа:

    [
        {
            "name": "Почта России (отправление 1-го класса со страховкой)",
            "id": 1,
            "price": 519,
            "delivery_time": "",
            "insurance": 1
        },
        {
            "name": "СПСР Экспресс (пеликан-стандарт)",
            "id": 5,
            "price": 836,
            "delivery_time": "2-4 дня",
            "insurance": 0
        },
        {
            "name": "PickPoint (постаматы и пункты выдачи)",
            "id": 29,
            "price": 697,
            "delivery_time": "3-4 дня",
            "insurance": 0
        }
    ]
    
  • POST /api/deliverycalc/

    Калькулятор доставки. Возвращает варианты доставки со стоимостью для указанной модели и адреса.

    В отличие от расчета стоимости доставки для заказа можно указать только одну модель.

    Пример запроса:

    {
        "postcode": "308000",
        "material": 1,
        "model": 8,
        "city": 1,
        "scale": 1
    }
        

    postcode - почтовый индекс, Для РФ - 6 цифр
    material - код материала
    model - код модели
    city - код города согласно справочнику городов
    country - код страны согласно справочнику
    scale - маштаб, больше 0

    Все поля обязательны за исключением city и country. В запросе должен присутствовать или город, или страна.

  • PATCH /api/orders/<OrderID>/

    Указание способа доставки для заказов со статусом WAITING_ADDRESS. У заказа необходимо установить свойство delivery_code равное ID выбранного способа доставки. После успешного сохранения статус заказа меняется на WAITING_PAYMENT. В возвращаемую информацию о заказе добавляются поля delivery_cost со стоимостью доставки, delivery_name в котором выводится текстовое название способа доставки и delivery_code с кодом доставки.

    Пример:

    PATCH /api/orders/47/
    {
        "delivery_code": 1
    }
    Ответ:
    {
        "id": 47,
        ...
        "status": "WAITING_PAYMENT",
        "delivery_cost": 697,
        "delivery_code": 29,
        "delivery_name": "PickPoint (постаматы и пункты выдачи)"}
        "items": [...],
        "address": {...},
    }
    
  • Справочники

  • GET /api/countries/[?name=<name>]

    Получение списка стран для доставки. При указании параметра name выводит страны, начинающиеся на name (без учета регистра)

  • GET /api/countries/<code>/

    Возвращает страну с кодом code

  • GET /api/cities/[?name=<name>]

    Получение списка городов РФ для доставки. При указании параметра name выводит города, начинающиеся на name (без учета регистра)

  • GET /api/cities/<code>/

    Возвращает город с кодом code