Вход для партнёров
Хочу стать партнёром
Стать партнёром
Не верный номер инн
Ваша заявка принята
Результаты поиска

Оптовое API для клиентов

API представляет набор правил и функций, позволяющих двум разным приложениям взаимодействовать друг с другом (например между 1С и сайтом). API выступает посредником между приложениями, отправляя запросы и ответы.

Для чего это нужно? Для автоматизации: не нужно вручную вносить информацию о товарах (в 1С, на сайт или CRM). Вы можете попросить программиста, который обслуживает Вашу компанию, и он, используя наше API, автоматизирует процесс. Это же касается своевременного обновления цен и остатков.

Для отправки и получения тех самых запросов мы предоставляем следующие типы протоколов и архитектур:

  • XML-RPC — позволяет выполнять обмен функциями между двумя или более сетями. XML-RPC использует XML для описания запросов и ответов и при помощи протоколов HTTP передает информацию от клиента к серверу.
  • REST API — репрезентативная передача состояния (REST) — это архитектурный стиль, который осуществляет реализацию клиента и сервера независимо друг от друга. Сервисы в REST API взаимодействуют по протоколу HTTP.

XML файл

Для клиентов доступен 1 XML файл, который хранит в себе всю необходимую информацию.

output_all.xml

Файл output_all.xml содержит всю необходимую информацию о каталогах (название, id, parent), а также информацию о товарах (название, код товара, описание, фотографии и т.п.). Обновляется он один раз в сутки. Давайте рассмотрим структуру файла output_all.xml

                
<?xml version="1.0" encoding="UTF-8"?>
<yml_catalog date="2024-11-11 10:10">
    <shop>
        <name>АЛМА (в Бийске)</name>
        <company>ООО "АЛМА"</company>
        <url>https://alma.su</url>
        <currencies>
            <currency id="RUR" rate="1"/>
        </currencies>
        <categories>
            <category id="579">Трубопровод</category>
            <category id="623" parentId="579">Полипропилен</category>
            ...
        </categories>

        <offers>
            <offer id="207701" available="true">
                <url>https://alma.su</url>
                <name>Водонагреватель накопительный 6л, эмаль, белый, под раковиной OASIS KP-6</name>
                <price>7600</price>
                <oldprice>10032</oldprice>
                <categoryId>359</categoryId>
                <picture>https://alma.su/upload/iblock/f92/f92bb26e612a93f4bac46e8b7d683b5d.jpg</picture>
                <vat>6</vat>
                <shipment-options>
                    <option days="1" order-before="23"/>
                </shipment-options>
                <vendor>Oasis</vendor>
                <vendorCode>УТ-00029489</vendorCode>
                <description>Электрический накопительный водонагреватель.</description>
                <outlets>
                    <outlet id="36723243728567823" instock="0" price="7600" oldprice="10032"/>
                </outlets>
            </offer>
            ...
        </offers>
    </shop>
</yml_catalog>
                
            
Элемент Описание
xml

Стандартный XML-заголовок. Должен начинаться с первой строки, с нулевого символа.

yml_catalog

Мы используем в качестве корневого xml элементa: <xml_catalog> с атрибутом date. Этот атрибут сообщает дату и время момента, на который актуальны данные в файле.

categories

Cодержит список категорий. Каждая категория описывается отдельным элементом category.

category

Название категории. Атрибут id - идентификатор категории. Атрибут parentId - это идентификатор категории более высокого уровня (если категория является дочерней). Если parentId не указан, категория считается корневой.

offers

Список товаров. Каждый товар описывается в отдельном элементе offer.

offer

Содержит узел информации о конкретном товаре. Атрибут id - это уникальный код товара.

name

Наименование номенклатуры. Не содержит спецсимволов.

categoryId

Идентификатор категории товара (целое число).

unit

Единица измерения, формат и стандарт данных не регламентирован, обрабатывайте как строковые данные.

images

Родительский узел, содержащий информацию о фотографиям к товару. Этот узел содержит дополнительную избыточную информацию, его можно игнорировать. Структура введена для удобства.

count

Содержит информацию о количестве фотографий у товара на текущий момент.

hash

Это расчитанное значение crc32, от последоательной (от 1 до n) конкатенации строковых значений атрибутов hash у элементов picture в узле элемента pictures. Пример конкатенации: crc32("aaaaaabbbbbbcccccc"). Используя это значение, можно оптимизировать проверку о необходимости обновления изображений, чтобы не выкачивать их каждый раз и своевременно удалять и обновлять устаревшие.

pictures

Родительский узел содержащий информацию о ссылках на фотографии к товару.

picture

Ссылка на фотографию к товару. Атрибут hash - содержит crc32 значение хэш-функции файла изображения. Используя этот атрибут, можно оптимизировать обновление только изменившихся фотографий.

description

Текстовое описание товара. Формат не регламентирован. Не содержит спецсимволов.

barcode

Штрихкод товара от производителя в формате: EAN-13.

params

Родительский узел содержащий информацию о свойствах товара. Каждое свойство описывается в отдельном элементе param.

param

Текущее значение свойства. Атрибут name - содержит название свойства. Атрибут type - может принимать четыре значения: список, строка, число, логическое (boolean). Атрибут code - уникальный строковый идентификатор свойства.

REST JSON

Пример простейшей функции и работа с ней.

Для предоставления доступа к REST JSON, вы должны отправить заявку к нам на почту opt@alma.su. В заявке укажите: инн и ip адрес (с которого будете делать запросы). В целях безопасности - доступ к api только по whitelist.

Что дальше? Мы присвоим вашей организации базовый токен доступа и внесём ваш ip адрес в список исключений. После этого оповестим Вас ответным письмом или звонком.

Простейший пример запроса к нашему API на языке PHP вы можете посмотреть ниже:

                
/**
 * Выполняем запрос к API
 * 
 * @param array $post - ожидает обязательные параметры: 
 *     $post['token'] - API токен,
 *     $post['inn'] - ИНН
 * @param string $point - точка входа
 *
 * @return array $result
 */
function makeRequest($post, $point)
{
    $agent = 'ALMA API v2.0';
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, 'https://alma.su'.$point);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_HEADER, false);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_USERAGENT, $agent);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
    $result = curl_exec($curl);
    curl_close($curl);
    return $result;
}
                
            

  • $post — одномерный массив (ключ => значение). Обязательно должен содержать:
    $post['token'] - Ваш API TOKEN,
    $post['inn'] - Ваш ИНН
  • $point — точка входа в API. Например '/api/status/' - точка входа для проверки доступности API.

Распространённые коды ошибок

Коды ошибок мы отдаём через функцию php http_response_code(). Можете более подробно изучить её в документации.

INFO HTTP CODE Описание
400

Недопустимые входные данные в запросе. Неверно указан инн и/или базовый токен.

404

Не существующая точка входа. Товар(ы) не найден(ы). Не установлен вид цены.

500

Прервано. Высокая нагрузка на сервер, попробуйте позже.

503

Сервис временно недоступен. API отключено в ручном режиме.

Для получения кода ответа сервера используйте curl_getinfo($curl,CURLINFO_HTTP_CODE);

Запрос к /status

Проверка доступности API (пример на PHP).

                
# заполняем данные
$post['token'] = 'b3mC..dF'; # Ваш TOKEN
$post['inn']   = '113..742'; # Ваш INN
$agent = 'ALMA API v2.0';

# формируем запрос
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://alma.su/api/status/');
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_USERAGENT, $agent);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($curl);
$http = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
                
            

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

200 400 404 500 503

                    
Content-type: application-json
{
    "status":true,
    "message":"API доступен"
}
                    
                
Возвращаемое значение Описание
status

true - API доступно. false - недоступно.

message

Информационное поясняющее сообщение. Содержит описание ошибки или наоборот удачного выполнения запроса.

Запрос к /element

Позволяет получить подробную информацию о товаре по его УТ-коду.

                
# заполняем данные
$post['token'] = 'b3mC..dF'; # Ваш TOKEN
$post['inn']   = '113..742'; # Ваш INN
$agent = 'ALMA API v2.0';

$post['code']  = 'УТ-00007526'; # УТ-код товара (так же подойдет 7526)

# формируем запрос
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://alma.su/api/element/');
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_USERAGENT, $agent);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($curl);
$http = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
                
            

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

200 400 404 500 503

                    
Content-type: application-json
{
    "status":true,
    "element":
        {
            "id"       : 40394,
            "name"     : "Душевая кабина PROFLINE 8900 B (90*90), средний поддон ...",
            "category" : 482,
            "quantity" : 0,
            "unit"     : "шт",
            "images_count": 9,
            "images": [
                {
                    "240": "https://cdn.ret.su/elements/88/20888/20888_0_240x240.webp",
                    "1024": "https://cdn.ret.su/elements/88/20888/20888_0_1024x1024.webp",
                    "orig": "https://cdn.ret.su/elements/88/20888/20888_0_orig.webp"
                },
                {
                    "240": "https://cdn.ret.su/elements/88/20888/20888_1_240x240.webp",
                    "1024": "https://cdn.ret.su/elements/88/20888/20888_1_1024x1024.webp",
                    "orig": "https://cdn.ret.su/elements/88/20888/20888_1_orig.webp"
                },
                ...
            ],
            "desc"     : "Угловая душевая кабина. <br \/>\nДлина: 90 см. </br \/>\nШирина: ...",
            "price"    : "22728.57"
        }
}
                    
                
Возвращаемое значение Описание
status

true - данные получены. false - товар по коду не найден (вывели с продажи).

element

Массив который содержит подробную информацию о товаре.

element.id

Код товара.

element.name

Наименование товара (текстовая строка).

element.category

Идентификатор родительской категории, к которой привязан товар.

element.quantity

Текущий доступный для продажи остаток.

element.unit

Единица измерения остатка.

element.images_count

Количество фотографий у данного товара.

element.images

Массив фотографий данного товара, где есть три формата картинок: 240, 1024, ORIG.

element.desc

Подробное описание товара. Может содержать в себе экранированный html тег <br> и управляющий символ переноса строки \n. Не доверяйте приходящим данным в целях безопасности, обрабатывайте как сырые данные, чтобы в случае компроментации нашего сервера, нельзя было внедрить вредоносный код к вам через нас.

element.price

Стоимость единицы остатка товара.

Запрос к /elements

Позволяет получить подробную информацию сразу о всех товарах в нашем ассортименте.

                
# заполняем данные
$post['token'] = 'b3mC..dF'; # Ваш TOKEN
$post['inn']   = '113..742'; # Ваш INN
$agent = 'ALMA API v2.0';

# формируем запрос
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://alma.su/api/elements/');
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_USERAGENT, $agent);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($curl);
$http = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
                
            

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

200 400 404 500 503

                    
Content-type: application-json
{
    "status": true,
    "elements": [
        {
            "id": 17816,
            "name": "Пена профессиональная Ultima Gun 65л 820мл (летняя)",
            "category": 385,
            "unit": "шт",
            "images_count": 1,
            "images": [
                {
                    "240": "https://cdn.ret.su/elements/61/17816/17816_0_240x240.webp",
                    "1024": "https://cdn.ret.su/elements/61/17816/17816_0_1024x1024.webp",
                    "orig": "https://cdn.ret.su/elements/61/17816/17816_0_orig.webp"
                }
            ],
            "desc": "Ultima Gun – зимняя монтажная пена, предназначена для ..."
        },
        {
            "id": 7526,
            "name": "Болт DIN 933 16х75 оцинкованный",
            "category": 800,
            "unit": "шт",
            "images_count": 2,
            "images": [
                {
                    "240": "https://cdn.ret.su/elements/62/7526/7526_0_240x240.webp",
                    "1024": "https://cdn.ret.su/elements/62/7526/7526_0_1024x1024.webp",
                    "orig": "https://cdn.ret.su/elements/62/7526/7526_0_orig.webp"
                },
                {
                    "240": "https://cdn.ret.su/elements/62/7526/7526_1_240x240.webp",
                    "1024": "https://cdn.ret.su/elements/62/7526/7526_1_1024x1024.webp",
                    "orig": "https://cdn.ret.su/elements/62/7526/7526_1_orig.webp"
                }
            ],
            "desc": "Шестигранная головка делает возможной затяжку с максимальным ..."
        },
        ...
    ]
}
                    
                
Возвращаемое значение Описание
status

true - данные получены. false - ошибка, смотрите в message описание ошибки.

elements

Массив с информацией о всех товарах в ассортименте.

elements.id

Код товара.

elements.name

Наименование товара (текстовая строка).

elements.category

Идентификатор родительской категории, к которой привязан товар.

elements.unit

Единица измерения остатка.

element.images_count

Количество фотографий у данного товара.

element.images

Массив фотографий данного товара, где есть три формата картинок: 240, 1024, ORIG.

elements.desc

Подробное описание товара. Может содержать в себе экранированный html тег <br> и управляющий символ переноса строки \n. Не доверяйте приходящим данным в целях безопасности, обрабатывайте как сырые данные, чтобы в случае компроментации нашего сервера, нельзя было внедрить вредоносный код к вам через нас.

Запрос к /prices

Позволяет получить подробную информацию сразу о ценах для всех товаров в нашем ассортименте.

                
# заполняем данные
$post['token'] = 'Ваш токен';
$post['inn']   = 'Ваш ИНН';
$agent = 'ALMA API v2.0';

# формируем запрос
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://alma.su/api/prices/');
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_USERAGENT, $agent);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($curl);
$http = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
                
            

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

200 400 404 500 503

                    
Content-type: application-json
{
    "status":true,
    "elements":
    [
        {
            "id": 10917,
            "price": "2037.52",
            "rrp": "2489.00"
        },
        {
            "id": 16782,
            "price": "155.02",
            "rrp": "219.00"
        },
        {
            "id": 16783,
            "price": "170.17",
            "rrp": "239.00"
        },
    ]
}
                    
                
Возвращаемое значение Описание
status

true - данные получены. false - ошибка, смотрите в message описание ошибки.

elements

Массив с информацией о всех ценах для всех товаров в ассортименте.

elements.id

Код товара.

elements.price

Стоимость товара в рублях.

elements.rrp

Рекомендованная розничная цена товара.

Запрос к /properties

Позволяет получить подробную информацию о свойствах всех товаров.

                
# заполняем данные
$post['token'] = 'Ваш токен';
$post['inn']   = 'Ваш ИНН';
$agent = 'ALMA API v2.0';

# формируем запрос
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://alma.su/api/props/');
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_USERAGENT, $agent);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($curl);
$http = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
                
            

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

200 400 404 500 503

                    
Content-type: application-json
{
    "status": true,
    "17816":"[{\"name\":\"\К\о\д \",\"value\":\"\У\Т-00017816\"},{\"name\":\"\О\б\ъ\е\м \",\"value\":\"750\"},{\"name\":\"\Г\а\р\а\н\т\и\я  (\м\е\с)\",\"value\":\"12\"},{\"name\":\"\Б\р\е\н\д\",\"value\":\"Makroflex\"},{\"name\":\"\С\т\р\а\н\а \",\"value\":\"\Ф\и\н\л\я\н\д\и\я\"},{\"name\":\"\П\р\о\и\з\в\о\д\и\т\е\л\ь \",\"value\":\"Makroflex\"}]",
    "1011":"[{\"name\":\"\К\о\д \",\"value\":\"\У\Т-00001011\"},{\"name\":\"\О\б\ъ\е\м \",\"value\":\"2\"},{\"name\":\"\Г\а\р\а\н\т\и\я  (\м\е\с)\",\"value\":\"12\"},{\"name\":\"\Б\р\е\н\д\",\"value\":\"\н\е \у\к\а\з\а\н\о\"},{\"name\":\"\С\т\р\а\н\а \",\"value\":\"\Р\о\с\с\и\я\"},{\"name\":\"\П\р\о\и\з\в\о\д\и\т\е\л\ь \",\"value\":\"\н\е \у\к\а\з\а\н\о\"}]",
    ...
}
                    
                
Возвращаемое значение Описание
status

true - данные получены. false - ошибка, смотрите в message описание ошибки.

elements

Массив с информацией о всех ценах для всех товаров в ассортименте.

element.key

УТ-код товара.

elements.value.name

Название свойства товара.

elements.value.value

Значение свойства товара.

Запрос к /quantity

Позволяет получить подробную информацию сразу об остатках для всех товаров в нашем ассортименте.

                
# заполняем данные
$post['token'] = 'Ваш токен';
$post['inn']   = 'Ваш ИНН';
$agent = 'ALMA API v2.0';

# формируем запрос
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://alma.su/api/quantity/');
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_USERAGENT, $agent);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($curl);
$http = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
                
            

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

200 400 404 500 503

                    
Content-type: application-json
{
    "status":true,
    "elements":
    [
        {
            "id"    : 40394,
            "quantity" : 0
        },
        {
            "id"    : 1011,
            "quantity" : 129
        },
        {
            "id"    : 7526,
            "quantity" : 111
        },
        ...
    ]
}
                    
                
Возвращаемое значение Описание
status

true - данные получены. false - ошибка, смотрите в message описание ошибки.

elements

Массив с информацией о всех ценах для всех товаров в ассортименте.

elements.[].id

Код товара.

elements.[].quantity

Текущий остаток доступный для продажи.

Запрос к /category

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

                
# заполняем данные
$post['token'] = 'Ваш токен';
$post['inn']   = 'Ваш ИНН';
$agent = 'ALMA API v2.0';

# формируем запрос
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://alma.su/api/category/');
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_USERAGENT, $agent);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($curl);
$http = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);

# ответ сервера
var_dump($result);
                
            

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

200 400 404 500 503

                    
Content-type: application-json
{
        "status":true,
        "category":
        [
            {
                "id"       : 579,
                "name"     : "Трубопровод",
                "code"     : "truboprovod",
                "parent"   : null,
                "depth"    : "1",
                "picture"  : "https://cdn.alma.su/category/9/579/579_200x200.webp"
            },
            {
                "id"       : 623,
                "name"     : "Полипропилен",
                "code"     : "polipropilen_belyy",
                "parent"   : "579",
                "depth"    : "2",
                "picture"  : "https://cdn.alma.su/category/3/623/623_200x200.webp"
            }
            ...
        ]
    }
                    
                
Возвращаемое значение Описание
status

true - данные получены. false - ошибка, смотрите в message описание ошибки.

category

Массив с информацией о всех категориях товара.

category.id

Идентификатор категории.

category.name

Наименование категории

category.code

Символьный код, если вы применяете у себя ЧПУ.

category.parent

Идентификатор родительского узла (древовидная структура данных).

category.depth

Глубина вложения узла (нумерация с 1 и далее).

category.picture

Ссылка на основное изображение для категории.

PHP Библиотека

Если вы используете PHP на задней стороне вашего приложения - использование нашей библиотеки будет отличным решением

Наша готовая PHP библиотека с открытым исходным кодом позволяет подключиться к API и выполнять все вышеперечисленные запросы из документации в одну строчку.

Начало работы

Для начала работы склонируйте в свой проект наши файлы из публичного репозитория на гитхабе

Определите параметры ТОКЕН и ИНН как константы const TOKEN = "3vc...21c"; и const INN = "123...789";

Подключите библиотеку alma.class.php и создайте её экземпляр класса, передав в него констаты с параметрами

$api = new Alma\Api(TOKEN, INN);

Примеры запросов

                
<?php

# подключим класс АПИ
require_once '/alma.class.php';

# определим параметры
const TOKEN = "3v5...43v";
const INN   = "123...789"; 

# создаем экземпляр класса
$api = new Alma\Api(TOKEN, INN);


# Проверка доступности API
# /status
$api->getStatus();


# Получить информацию о товаре по УТ
# /element
$element = 20888;
$api->getElement( $element );


# Получить информацию о всех товарах
# /elements
$api->getElements();


# Получить информацию о всех ценах
# /prices
$api->getPrices();


# Получить информацию о всех props
# /properties
$api->getProperties();


# Получить информацию о всех остатках
# /quantity
$api->getQuantity();


# Получить информацию о всех категориях
# /category
$api->getCategory();
                
            

МЫ РЕКОМЕНДУЕМ