Остатки
Остатки и цены по артикулу — до 500 позиций за запрос.
Остатки и цены пачкой
PATCH/stockправо products:write
До 500 позиций за запрос; каждая находит варианты по артикулу и меняет stock, price и compare_price (только переданные поля). Если один артикул у нескольких вариантов, обновятся все. Ответ — результат по каждой позиции в том же порядке; артикул, которого нет, не мешает остальным. Неверное значение (bad_price, bad_stock) отклоняет весь запрос: ничего не изменится.
stock: null — склад не ведётся, количество не ограничено.
Большая пачка (больше 200 изменений) даёт один вебхук catalog.imported вместо события на каждый товар.
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
items обязательно | массив: объект | |
items[].sku обязательно | строка | |
items[].stock | целое или null | Новый остаток; null — склад не ведётся. |
items[].price | строка или число | |
items[].compare_price | строка или число или null |
Пример запроса
curl -X PATCH https://api.okeysait.ru/v1/stock \
-H "Authorization: Bearer $OKEANO_KEY" \
-H "Content-Type: application/json" \
-d '{
"items": [
{
"sku": "CANDLE-F",
"stock": 18
},
{
"sku": "CANDLE-S",
"price": "990.00",
"compare_price": "1290.00"
}
]
}'<?php
$ch = curl_init('https://api.okeysait.ru/v1/stock');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('OKEANO_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'items' => [
['sku' => 'CANDLE-F', 'stock' => 18],
[
'sku' => 'CANDLE-S',
'price' => '990.00',
'compare_price' => '1290.00',
],
],
], JSON_UNESCAPED_UNICODE),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
echo $status, PHP_EOL, $response, PHP_EOL;import os
import requests
r = requests.patch(
"https://api.okeysait.ru/v1/stock",
headers={"Authorization": f"Bearer {os.environ['OKEANO_KEY']}"},
json={
"items": [
{"sku": "CANDLE-F", "stock": 18},
{
"sku": "CANDLE-S",
"price": "990.00",
"compare_price": "1290.00",
},
],
},
timeout=30,
)
print(r.status_code)
print(r.text)// Node.js 18+: файл .mjs (await на верхнем уровне)
const res = await fetch("https://api.okeysait.ru/v1/stock", {
method: "PATCH",
headers: {
Authorization: `Bearer ${process.env.OKEANO_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
items: [
{ sku: "CANDLE-F", stock: 18 },
{
sku: "CANDLE-S",
price: "990.00",
compare_price: "1290.00",
},
],
}),
});
console.log(res.status);
console.log(await res.text());// 1С:Предприятие 8.3
КлючОкеано = "oks_…"; // ключ из панели магазина; в рабочей базе храните его отдельно от кода
Соединение = Новый HTTPСоединение("api.okeysait.ru", 443, , , , 30, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/v1/stock");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + КлючОкеано);
Запрос.Заголовки.Вставить("Content-Type", "application/json");
Данные = Новый Структура;
Позиции = Новый Массив;
Позиция1 = Новый Структура;
Позиция1.Вставить("sku", "CANDLE-F");
Позиция1.Вставить("stock", 18);
Позиции.Добавить(Позиция1);
Позиция2 = Новый Структура;
Позиция2.Вставить("sku", "CANDLE-S");
Позиция2.Вставить("price", "990.00");
Позиция2.Вставить("compare_price", "1290.00");
Позиции.Добавить(Позиция2);
Данные.Вставить("items", Позиции);
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
ЗаписатьJSON(Запись, Данные);
Запрос.УстановитьТелоИзСтроки(Запись.Закрыть(), КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Ответ = Соединение.ВызватьHTTPМетод("PATCH", Запрос);
Сообщить(Ответ.КодСостояния);
Сообщить(Ответ.ПолучитьТелоКакСтроку());package main
import (
"fmt"
"io"
"net/http"
"os"
"strings"
)
func main() {
body := strings.NewReader(`{
"items": [
{
"sku": "CANDLE-F",
"stock": 18
},
{
"sku": "CANDLE-S",
"price": "990.00",
"compare_price": "1290.00"
}
]
}`)
req, err := http.NewRequest("PATCH", "https://api.okeysait.ru/v1/stock", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("OKEANO_KEY"))
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
data, err := io.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println(resp.StatusCode)
fmt.Println(string(data))
}Ответ 200
{
"data": [
{
"sku": "CANDLE-F",
"result": "updated",
"variants": 1
},
{
"sku": "CANDLE-S",
"result": "not_found"
}
]
}Другие ответы: 400, 401, 403, 422, 429 — коды ошибок.