Инструкция к API
Общее

Для работы с заказами и товарами Forcs.ru имеется API https://forcs.ru/api/v2/

API может возвращать результаты запросов в двух форматах: json и xml. Для того, чтобы получить ответ от сервера в определённом формате, к пути ресурса через точку необходимо добавить его формат [ресурс][.формат] (например, /references/brands.json). Если в пути ресурса формат не указан, ответ будет возвращён в формате по умолчанию — JSON.

Авторизация

Поддерживается два способа авторизации по ключу API_KEY:

  • передача ключа в параметре "key" строки запроса, пример: /references/brands?key=API_KEY
  • передача ключа в заголовке "Authorization: Bearer" запроса, пример: Authorization: Bearer API_KEY

Ключ запрашивается на сайте в личном кабинете https://forcs.ru/personal/api/.
Для каждой связки логин-договор генерируется отдельный ключ.

Версионирование

С течением времени могут измениться как перечень запросов, так их структура и структура ответов.
Для уверенности в том, что используется API желаемой версии, необходимо передавать версию в строке запроса.
Итого запрос должен выглядеть следующим образом: /[версия]/[ресурс]
Например: https://forcs.ru/api/v2/references/brands?key=123

Перечень версий:

Версия
Статус
v2
Текущая
Ресурсы
URL ресурса не должен иметь закрывающего слеша, запросы со слешем 301-перенаправляются на url без слеша
Название ресурса
Тип запроса
Описание
GET
Справочник брендов
GET
Активные адреса доставки
GET
Наличие, цена товара и его аналогов
POST
Размещение заказа
GET
Справочник статусов заказа
GET
Список активных заказов и статусы по ним
GET
Список статусов заказа по идентификатору
Ошибки и предупреждения методов API
Справочник брендов [GET] /references/brands
Возвращает справочник брендов

Входные данные

Параметр
Обязательность
Описание
Нет входных параметров

Выходные данные

Возвращает массив объектов-брендов (brands), каждый из которых в виде:

Параметр
Тип
Описание
id
Число
Идентификатор бренда
name
Строка
Наименование бренда

Примеры

Активные адреса доставки [GET] /references/shipment_address/active

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

Входные данные

Параметр
Обязательность
Описание
Нет входных параметров

Выходные данные

Возвращает массив объектов-адресов доставки (shipment_address_list), каждый из которых в виде:

Параметр
Тип
Описание
id
Число
Идентификатор адреса доставки
address
Строка
Адрес доставки
person
Строка
Контактное лицо
phone
Строка
Контактный телефон
state
Число
Флаг состояния адреса доставки (1 — активный)

Примеры

Наличие, цена товара и его аналогов [GET] /ordering/get_stock

Возвращает наличие товаров с ценами и сроками доставки.

Сравнение артикула производится в "нормализованном виде", т.е. сравниваются артикулы, из которых удалены все символы, кроме a-zA-Z0-9

Входные данные

Название ресурса
Обязательность
Описание
items
Да
Массив входных поисковых данных. Найденные позиции будут привязываться к ключам этого массива в поле source_idx результата. В случае если по какому-то элементу входного набора нет результатов, элементов с таким source_idx в ответе не будет. Каждый элемент входных данных — это так же массив (ключи описаны ниже)
analogs
Флаг, возвращать ли аналоги (0 — не возвращать (по умолчанию), 1 — возвращать).
warehouse_types

Массив, указывающий какие склады должны быть в результатах выполнения запроса.

  • 1 или 2 - Главный склад (Синюшка)
  • 3 - Другие склады

По умолчанию результат генеририруется для всех типов складов

Массив items

Каждый элемент массива items — это ассоциативный массив, который может содержать элементы со следующими ключами.

Ключ
Описание
resource_id
внутренний идентификатор товара
resource_article
артикул товара
brand_id
внутренний идентификатор бренда (см. /references/brands)
brand_name
имя бренда

Поиск с аналогами (analogs=1) может быть произведён только по одному элементу входных данных (одному элементу массива items) за запрос. Поиск без аналогов (analogs=0) — до 50 элементов (items) в одном запросе (если передано больше items, остальные не обрабатываются)

В случае, если по входным данным невозможно однозначно определить искомый товар (такое может случиться, например, при поиске по артикулу, который встречается у разных брендов), то

  • если осуществляется запрос с analogs=1, будет возвращён HTTP-код 300 (Multiple Choices), в теле ответа будет список товаров, подходящих под входные данные без цен-остатков по ним.
  • если осуществляется запрос с analogs=0, будет возвращены результаты для каждого товара, подходящего под входные данные с ценами-остатками.

Выходные данные

Возвращает массив объектов-товаров (resources), а так же предупреждений (warnings), если такие есть.
Каждый элемент resource представляет собой ассоциативный массив:

Параметр
Тип
Описание
id
Число
Внутренний идентификатор товара
name
Строка
Наименование товара
article
Строка
Артикул товара
brand
Объект
Объект бренда (см. /references/brands)
offers
Массив
Массив объектов-предложений по данному товару (см. описание объекта-предложения ниже)
source_idx
Число
Ключ входных данных ассоциативного массива items, для которого был найден этот товар

Объект предложения (Offer)

Параметр
Тип
Описание
price
Число
Цена в валюте договора
quantity
Число
Количество товара, доступное по текущему предложению
available_more
Логический
На складе доступно большее количество товара (можно заказать больше, чем указано в quantity)
warehouse
Объект
Объект, описывающий склад предложения (см. описание ниже)

Объект склада (Warehouse)

Параметр
Тип
Описание
id
Число
Внутренний идентификатор склада
name
Строка
Название склада
type
Число
Тип склада (1 или 2 - Главный склад (Синюшка), 3 - Другие склады)

Примеры

Размещение заказа [POST] /ordering/place_order

Разместить заказ

Входные данные

Параметр
Обязательность
Описание
order
Да
Объект заказа (см. описание ниже)

Объект заказа order

Параметр
Обязательность
Описание
is_test
флаг тестового заказа. В случае установки в 1, заказ будет сохранён системой и доступен в истории заказов, но не будет принят к дальнейшей обработке. (по умолчанию — 0)
reference
Уникальный числовой идентификатор заказа клиента (для данного api ключа). Можно передать для исключения ситуации с дублированием заказов (невозможно сохранить заказ с таким же reference для одного api ключа).
payment_type
Тип оплаты (1 — наличный расчет, 2 — безналичный расчет)
dispatch_type
Да
Дата доставки (в формате ГГГГ-ММ-ДД)
dispatch_time
Да
Дата доставки (в формате ГГГГ-ММ-ДД)
person
Контактное лицо
phone
Контактный телефон
comment
Комментарий
shipment_address
Адрес доставки ( можно не передавать, если передан shipment_address_id )
shipment_address_id
Идентификатор адреса доставки (см. /references/shipment_address/active). Должен быть указан Тип отгрузки — доставка
items
Да
Массив объектов заказываемых товаров

Объект заказываемого товара (items):

Параметр
Обязательность
Описание
resource_id
Да
Внутренний идентификатор товара (см. /ordering/get_stock)
warehouse_id
Да
Внутренний идентификатор склада (см. /ordering/get_stock)
quantity
Да
Заказываемое количество
max_price

Максимальная цена за единицу товара. Если передана, то с ней сравнивается цена на момент оформления заказа. При превышении строка не попадает в заказ.

При этом в массив предупреждений будет содержать "WARN_ORDER_ITEM_PRICE_RESTRICTION".

Выходные данные

Возвращает объект заказа (см. описание - Объект заказа order) с заполненным полем id, либо массив ошибок (errors). В обоих случаях так же может быть возвращён массив предупреждений (warnings), если такие имеются.

Пример

application/json

    POST /ordering/place_order.json?key=123 HTTP/1.1
    Host: api.forcs.ru
    Content-Type: application/json
    Content-Length: 695

    {
        "order": {
            "is_test": 1,
            "dispatch_type": 3,
            "dispatch_time": 1,
            "dispatch_at": "2021-07-07",
            "person": "Иван Иванович",
            "comment": "запчасти для Ипполита",
            "shipment_address": "Москва, 3-я улица Строителей, дом 25, квартира 12",
            "items": [
                {"resource_id": 213857, "warehouse_id": 17, "quantity": 1},
                {"resource_id": 213858, "warehouse_id": 17, "quantity": 2}
            ]
        }
    }
Справочник статусов заказа [GET] /references/states

Входные данные

Параметр
Обязательность
Описание
Нет входных параметров

Выходные данные

Возвращает массив объектов-статусов, каждый из которых в виде:

Параметр
Тип
Описание
id
Строка
Идентификатор статуса
name
Строка
Наименование статуса
type
Число
Тип статуса (0 — обычный; 1 — статус, который присваивается в момент размещения заказа, 2 — статус, который присваивается по завершению обработки заказа)

Примеры

Список активных заказов и статусы по ним [GET] /ordering/states/active

Возвращает список активных заказов и статусы по ним.

Входные данные

Параметр
Обязательность
Описание
Нет входных параметров

Выходные данные

Возвращает массив объектов заказов (Order):

Параметр
Тип
Описание
id
Число
Идентификатор статуса
is_test
Число
флаг тестового заказа. В случае установки в 1, заказ будет сохранён системой и доступен в истории заказов, но не будет принят к дальнейшей обработке. (по умолчанию — 0)
reference
Число
Уникальный числовой идентификатор заказа клиента (для данного api ключа). Можно передать для исключения ситуации с дублированием заказов (невозможно сохранить заказ с таким же reference для одного api ключа).
payment_type
Число
Тип оплаты (1 — наличный расчет, 2 — безналичный расчет)
dispatch_type
Число
Тип отгрузки (2 — самовывоз, 3 — доставка)
dispatch_at
Строка
Дата доставки (в формате ГГГГ-ММ-ДД)
dispatch_time
Число
Флаг времени доставки (1 — до 15:00, 2 — после 15:00)
person
Строка
Контактное лицо
phone
Строка
Контактный телефон
comment
Строка
Комментарий
shipment_address
Строка
Адрес доставки ( можно не передавать, если передан shipment_address_id )
shipment_address_id
Строка
Идентификатор адреса доставки (см. /references/shipment_address/active). Должен быть указан Тип отгрузки — доставка.
created_at
Строка
Дата и время создания заказа
items
Число
Массив объектов заказанных товаров

Объект заказанного товара (items):

Параметр
Тип
Описание
sequence
Число
Порядковый номер позиции в заказе
resource
Объект
Объект описания товара (см. /ordering/get_stock)
warehouse
Объект
Объект склада (см. /ordering/get_stock)
quantity
Число
Количество
price
Число
Цена
state
Объект
Объект статуса заказа (см. /references/states)
comment
Строка
Комментарий к заказу

Примеры

Список статусов заказа по идентификатору [GET] /ordering/states

Возвращает список заказов с переданными идентификаторами и статусы по ним.

Входные данные

Параметр
Обязательность
Описание
orders
Да
Массив идентификаторов заказов, по которым необходимо получить статусы (заказы только для текущего контрагента)

Выходные данные

Возвращает массив объектов заказов Order (см. /ordering/states/active)

Примеры

Ошибки и предупреждения методов API

Формат предупреждений json

{
    "resources": [{}]
    "warnings": [
        {
            "code": "WARN_ARTICLE_IS_AMBIGUOUS",
            "text": "Поиск не дает точных результатов. Пожалуйста уточните параметры поиска"
            [могут присутствовать дополнительные поля, в зависимости от предупреждений]
        }
    ]
}
                        

Список предупреждений

code
text
WARN_ARTICLE_IS_AMBIGUOUS
Поиск не дает точных результатов. Пожалуйста уточните параметры поиска
WARN_ORDER_ITEM_PRICE_RESTRICTION
Для заказываемой позиции сработало ограничение стоимости
так же содержит поля
  • "price" - текущая цена товара с которой сравнивается "max_price"
  • "max_price" - переданная максимальная цена за единицу товара
  • "item" - объект заказываемого товара массива объектов "items" в котором сработало ограничение

Формат ошибок json

{
    "errors": [
        {
            "code": "ERROR_GET_ORDER_STATUS_ACTIVE",
            "text": "Ошибка при получении списка статусов активных заказов"
            [могут присутствовать дополнительные поля, в зависимости от ошибок]
        }
    ]
}
                        

Список ошибок

code
text
ERROR_GET_BRANDS
Ошибка при получении списка брендов
ERROR_GET_DELIVERY_ADDRESS
Ошибка при получении списка адресов доставки
ERROR_GET_STOCK
Ошибка при получении списка товаров
ERROR_ADD_ORDER
Ошибка при добавлении заказа
так же содержит поля
  • "reason" - причина ошибки
ERROR_GET_ORDER_STATUS_LIST
Ошибка при получении справочника статусов заказа
ERROR_GET_ORDER_ACTIVE_STATUS
Ошибка при получении списка статусов активных заказов
ERROR_GET_ORDER_STATUS
Ошибка при получении списка статусов заказов
Выберите, что вы хотите сделать
Удалить
Переместить в другую корзину
Копировать в другую корзину