Товары

Товары с вариантами, разделами, брендами и фото.

Что важно знать

  • Цена, артикул и остаток — у варианта. "stock": null — склад не ведётся, количество не ограничено.
  • Фото — ссылками: магазин скачивает их сам.

Список товаров

GET/productsправо products:read

Страницы по возрастанию номера. Чтобы забрать только изменения, передавайте updated_since со временем прошлой выгрузки.

Параметры

ПараметрГдеТипОписание
limitв адресецелоеСколько объектов вернуть, от 1 до 250. По умолчанию 50.
cursorв адресестрокаЗначение next_cursor из прошлого ответа.
updated_sinceв адресестрокаТолько объекты, изменённые не раньше этого времени. ISO 8601, например 2026-10-28T00:00:00Z или 2026-10-28T00:00:00+03:00. В адресе запроса знак + кодируйте как %2B (иначе он станет пробелом) либо пишите время в UTC с буквой Z.
category_idв адресецелоеТолько товары этого раздела.
skuв адресестрокаТолько товары с вариантом, у которого этот артикул.
visibleв адресестрока (0, 1, true, false)Только видимые (1, true) или скрытые (0, false).

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

curl -G https://api.okeysait.ru/v1/products \
  -H "Authorization: Bearer $OKEANO_KEY" \
  --data-urlencode "updated_since=2026-10-30T09:00:00+03:00" \
  --data-urlencode "limit=100"
<?php
$ch = curl_init('https://api.okeysait.ru/v1/products?' . http_build_query([
    'updated_since' => '2026-10-30T09:00:00+03:00',
    'limit' => '100',
]));
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST  => 'GET',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . getenv('OKEANO_KEY'),
    ],
    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.get(
    "https://api.okeysait.ru/v1/products",
    headers={"Authorization": f"Bearer {os.environ['OKEANO_KEY']}"},
    params={
        "updated_since": "2026-10-30T09:00:00+03:00",
        "limit": "100",
    },
    timeout=30,
)
print(r.status_code)
print(r.text)
// Node.js 18+: файл .mjs (await на верхнем уровне)
const url = new URL("https://api.okeysait.ru/v1/products");
url.search = new URLSearchParams({
  updated_since: "2026-10-30T09:00:00+03:00",
  limit: "100",
});
const res = await fetch(url, {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.OKEANO_KEY}`,
  },
});
console.log(res.status);
console.log(await res.text());
// 1С:Предприятие 8.3
КлючОкеано = "oks_…"; // ключ из панели магазина; в рабочей базе храните его отдельно от кода
Соединение = Новый HTTPСоединение("api.okeysait.ru", 443, , , , 30, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/v1/products?updated_since=2026-10-30T09%3A00%3A00%2B03%3A00&limit=100");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + КлючОкеано);

Ответ = Соединение.Получить(Запрос);
Сообщить(Ответ.КодСостояния);
Сообщить(Ответ.ПолучитьТелоКакСтроку());
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"os"
)

func main() {
	q := url.Values{}
	q.Set("updated_since", "2026-10-30T09:00:00+03:00")
	q.Set("limit", "100")
	req, err := http.NewRequest("GET", "https://api.okeysait.ru/v1/products?"+q.Encode(), nil)
	if err != nil {
		panic(err)
	}
	req.Header.Set("Authorization", "Bearer "+os.Getenv("OKEANO_KEY"))

	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

JSON
{
  "data": [
    {
      "id": 101,
      "name": "Свеча «Лес»",
      "slug": "svecha-les",
      "url": "https://myshop.okeysait.ru/products/svecha-les",
      "visible": true,
      "featured": false,
      "brand_id": null,
      "annotation": "",
      "body": "",
      "category_ids": [
        3
      ],
      "images": [
        "https://myshop.okeysait.ru/files/originals/products/forest.jpg"
      ],
      "variants": [
        {
          "id": 77,
          "sku": "CANDLE-F",
          "name": "",
          "price": "1290.00",
          "compare_price": null,
          "stock": 25
        }
      ],
      "currency": "RUB",
      "created_at": "2026-10-30T09:12:00+00:00",
      "updated_at": "2026-10-30T09:12:00+00:00"
    }
  ],
  "next_cursor": null
}

Другие ответы: 400, 401, 403, 429 — коды ошибок.

Создать товар

POST/productsправо products:write

Нужны name и хотя бы один вариант. Артикул, цена и остаток — у варианта. Фото передаются ссылками, магазин скачивает их сам. Когда лимит товаров тарифа исчерпан — 409 products_limit.

Тело запроса

ПолеТипОписание
nameстрока
slugстрока
visibletrue / false
featuredtrue / false
brand_idцелое или nullНомер бренда; null или 0 — без бренда.
annotationстрока
bodyстрока
category_idsмассив: целоеРазделы товара. Заменяет прежний список.
imagesмассив: строкаСсылки http(s)://…. Заменяет прежний список фото.
variantsмассив: объектВарианты. Заменяет прежний список целиком; пустой список не принимается.
variants[].idцелое
variants[].skuстрока
variants[].nameстрока
variants[].priceстрока или числоЧисло или строка, от 0 до 1 000 000 000.
variants[].compare_priceстрока или число или nullСтарая цена; null или 0 убирают её.
variants[].stockцелое или nullЦелое от 0 до 1 000 000 000; null — склад не ведётся.

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

curl -X POST https://api.okeysait.ru/v1/products \
  -H "Authorization: Bearer $OKEANO_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Свеча «Лес»",
    "visible": true,
    "category_ids": [
      3
    ],
    "images": [
      "https://example.com/forest.jpg"
    ],
    "variants": [
      {
        "sku": "CANDLE-F",
        "price": "1290.00",
        "stock": 25
      }
    ]
  }'
<?php
$ch = curl_init('https://api.okeysait.ru/v1/products');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . getenv('OKEANO_KEY'),
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS     => json_encode([
        'name' => 'Свеча «Лес»',
        'visible' => true,
        'category_ids' => [3],
        'images' => ['https://example.com/forest.jpg'],
        'variants' => [
            ['sku' => 'CANDLE-F', 'price' => '1290.00', 'stock' => 25],
        ],
    ], 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.post(
    "https://api.okeysait.ru/v1/products",
    headers={"Authorization": f"Bearer {os.environ['OKEANO_KEY']}"},
    json={
        "name": "Свеча «Лес»",
        "visible": True,
        "category_ids": [3],
        "images": ["https://example.com/forest.jpg"],
        "variants": [
            {"sku": "CANDLE-F", "price": "1290.00", "stock": 25},
        ],
    },
    timeout=30,
)
print(r.status_code)
print(r.text)
// Node.js 18+: файл .mjs (await на верхнем уровне)
const res = await fetch("https://api.okeysait.ru/v1/products", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.OKEANO_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    name: "Свеча «Лес»",
    visible: true,
    category_ids: [3],
    images: ["https://example.com/forest.jpg"],
    variants: [
      { sku: "CANDLE-F", price: "1290.00", stock: 25 },
    ],
  }),
});
console.log(res.status);
console.log(await res.text());
// 1С:Предприятие 8.3
КлючОкеано = "oks_…"; // ключ из панели магазина; в рабочей базе храните его отдельно от кода
Соединение = Новый HTTPСоединение("api.okeysait.ru", 443, , , , 30, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/v1/products");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + КлючОкеано);
Запрос.Заголовки.Вставить("Content-Type", "application/json");

Данные = Новый Структура;
Данные.Вставить("name", "Свеча «Лес»");
Данные.Вставить("visible", Истина);
Разделы = Новый Массив;
Разделы.Добавить(3);
Данные.Вставить("category_ids", Разделы);
Фото = Новый Массив;
Фото.Добавить("https://example.com/forest.jpg");
Данные.Вставить("images", Фото);
Варианты = Новый Массив;
Вариант = Новый Структура;
Вариант.Вставить("sku", "CANDLE-F");
Вариант.Вставить("price", "1290.00");
Вариант.Вставить("stock", 25);
Варианты.Добавить(Вариант);
Данные.Вставить("variants", Варианты);

Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
ЗаписатьJSON(Запись, Данные);
Запрос.УстановитьТелоИзСтроки(Запись.Закрыть(), КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);

Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Сообщить(Ответ.КодСостояния);
Сообщить(Ответ.ПолучитьТелоКакСтроку());
package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
	"strings"
)

func main() {
	body := strings.NewReader(`{
  "name": "Свеча «Лес»",
  "visible": true,
  "category_ids": [
    3
  ],
  "images": [
    "https://example.com/forest.jpg"
  ],
  "variants": [
    {
      "sku": "CANDLE-F",
      "price": "1290.00",
      "stock": 25
    }
  ]
}`)
	req, err := http.NewRequest("POST", "https://api.okeysait.ru/v1/products", 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))
}

Ответ 201

JSON
{
  "id": 101,
  "name": "Свеча «Лес»",
  "slug": "svecha-les",
  "url": "https://myshop.okeysait.ru/products/svecha-les",
  "visible": true,
  "featured": false,
  "brand_id": null,
  "annotation": "",
  "body": "",
  "category_ids": [
    3
  ],
  "images": [
    "https://myshop.okeysait.ru/files/originals/products/forest.jpg"
  ],
  "variants": [
    {
      "id": 77,
      "sku": "CANDLE-F",
      "name": "",
      "price": "1290.00",
      "compare_price": null,
      "stock": 25
    }
  ],
  "currency": "RUB",
  "created_at": "2026-10-30T09:12:00+00:00",
  "updated_at": "2026-10-30T09:12:00+00:00"
}

Другие ответы: 400, 401, 403, 409, 422, 429 — коды ошибок.

Товар

GET/products/{id}право products:read

Параметры

ПараметрГдеТипОписание
id обязателенв путицелоеНомер объекта.

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

curl https://api.okeysait.ru/v1/products/101 \
  -H "Authorization: Bearer $OKEANO_KEY"
<?php
$ch = curl_init('https://api.okeysait.ru/v1/products/101');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST  => 'GET',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . getenv('OKEANO_KEY'),
    ],
    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.get(
    "https://api.okeysait.ru/v1/products/101",
    headers={"Authorization": f"Bearer {os.environ['OKEANO_KEY']}"},
    timeout=30,
)
print(r.status_code)
print(r.text)
// Node.js 18+: файл .mjs (await на верхнем уровне)
const res = await fetch("https://api.okeysait.ru/v1/products/101", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.OKEANO_KEY}`,
  },
});
console.log(res.status);
console.log(await res.text());
// 1С:Предприятие 8.3
КлючОкеано = "oks_…"; // ключ из панели магазина; в рабочей базе храните его отдельно от кода
Соединение = Новый HTTPСоединение("api.okeysait.ru", 443, , , , 30, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/v1/products/101");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + КлючОкеано);

Ответ = Соединение.Получить(Запрос);
Сообщить(Ответ.КодСостояния);
Сообщить(Ответ.ПолучитьТелоКакСтроку());
package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
)

func main() {
	req, err := http.NewRequest("GET", "https://api.okeysait.ru/v1/products/101", nil)
	if err != nil {
		panic(err)
	}
	req.Header.Set("Authorization", "Bearer "+os.Getenv("OKEANO_KEY"))

	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

JSON
{
  "id": 101,
  "name": "Свеча «Лес»",
  "slug": "svecha-les",
  "url": "https://myshop.okeysait.ru/products/svecha-les",
  "visible": true,
  "featured": false,
  "brand_id": null,
  "annotation": "",
  "body": "",
  "category_ids": [
    3
  ],
  "images": [
    "https://myshop.okeysait.ru/files/originals/products/forest.jpg"
  ],
  "variants": [
    {
      "id": 77,
      "sku": "CANDLE-F",
      "name": "",
      "price": "1290.00",
      "compare_price": null,
      "stock": 25
    }
  ],
  "currency": "RUB",
  "created_at": "2026-10-30T09:12:00+00:00",
  "updated_at": "2026-10-30T09:12:00+00:00"
}

Другие ответы: 401, 403, 404, 429 — коды ошибок.

Изменить товар

PATCH/products/{id}право products:write

Передайте только те поля, которые меняются.

Списки заменяют прежние целиком:

  • variants — вариант с id обновляется (только переданные поля), вариант без id создаётся, варианты, которых нет в списке, удаляются. Пустой список [] не принимается (variants_required).
  • category_ids — товар остаётся ровно в этих разделах; [] убирает из всех.
  • images — остаются фото с этими ссылками, остальные удаляются, новые добавляются; [] убирает все.

Параметры

ПараметрГдеТипОписание
id обязателенв путицелоеНомер объекта.

Тело запроса

ПолеТипОписание
nameстрока
slugстрока
visibletrue / false
featuredtrue / false
brand_idцелое или nullНомер бренда; null или 0 — без бренда.
annotationстрока
bodyстрока
category_idsмассив: целоеРазделы товара. Заменяет прежний список.
imagesмассив: строкаСсылки http(s)://…. Заменяет прежний список фото.
variantsмассив: объектВарианты. Заменяет прежний список целиком; пустой список не принимается.
variants[].idцелое
variants[].skuстрока
variants[].nameстрока
variants[].priceстрока или числоЧисло или строка, от 0 до 1 000 000 000.
variants[].compare_priceстрока или число или nullСтарая цена; null или 0 убирают её.
variants[].stockцелое или nullЦелое от 0 до 1 000 000 000; null — склад не ведётся.

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

curl -X PATCH https://api.okeysait.ru/v1/products/101 \
  -H "Authorization: Bearer $OKEANO_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "visible": false,
    "variants": [
      {
        "id": 77,
        "price": "1190.00",
        "stock": 20
      }
    ]
  }'
<?php
$ch = curl_init('https://api.okeysait.ru/v1/products/101');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST  => 'PATCH',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . getenv('OKEANO_KEY'),
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS     => json_encode([
        'visible' => false,
        'variants' => [
            ['id' => 77, 'price' => '1190.00', 'stock' => 20],
        ],
    ], 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/products/101",
    headers={"Authorization": f"Bearer {os.environ['OKEANO_KEY']}"},
    json={
        "visible": False,
        "variants": [
            {"id": 77, "price": "1190.00", "stock": 20},
        ],
    },
    timeout=30,
)
print(r.status_code)
print(r.text)
// Node.js 18+: файл .mjs (await на верхнем уровне)
const res = await fetch("https://api.okeysait.ru/v1/products/101", {
  method: "PATCH",
  headers: {
    Authorization: `Bearer ${process.env.OKEANO_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    visible: false,
    variants: [
      { id: 77, price: "1190.00", stock: 20 },
    ],
  }),
});
console.log(res.status);
console.log(await res.text());
// 1С:Предприятие 8.3
КлючОкеано = "oks_…"; // ключ из панели магазина; в рабочей базе храните его отдельно от кода
Соединение = Новый HTTPСоединение("api.okeysait.ru", 443, , , , 30, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/v1/products/101");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + КлючОкеано);
Запрос.Заголовки.Вставить("Content-Type", "application/json");

Данные = Новый Структура;
Данные.Вставить("visible", Ложь);
Варианты = Новый Массив;
Вариант = Новый Структура;
Вариант.Вставить("id", 77);
Вариант.Вставить("price", "1190.00");
Вариант.Вставить("stock", 20);
Варианты.Добавить(Вариант);
Данные.Вставить("variants", Варианты);

Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
ЗаписатьJSON(Запись, Данные);
Запрос.УстановитьТелоИзСтроки(Запись.Закрыть(), КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);

Ответ = Соединение.ВызватьHTTPМетод("PATCH", Запрос);
Сообщить(Ответ.КодСостояния);
Сообщить(Ответ.ПолучитьТелоКакСтроку());
package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
	"strings"
)

func main() {
	body := strings.NewReader(`{
  "visible": false,
  "variants": [
    {
      "id": 77,
      "price": "1190.00",
      "stock": 20
    }
  ]
}`)
	req, err := http.NewRequest("PATCH", "https://api.okeysait.ru/v1/products/101", 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

JSON
{
  "id": 101,
  "name": "Свеча «Лес»",
  "slug": "svecha-les",
  "url": "https://myshop.okeysait.ru/products/svecha-les",
  "visible": true,
  "featured": false,
  "brand_id": null,
  "annotation": "",
  "body": "",
  "category_ids": [
    3
  ],
  "images": [
    "https://myshop.okeysait.ru/files/originals/products/forest.jpg"
  ],
  "variants": [
    {
      "id": 77,
      "sku": "CANDLE-F",
      "name": "",
      "price": "1290.00",
      "compare_price": null,
      "stock": 25
    }
  ],
  "currency": "RUB",
  "created_at": "2026-10-30T09:12:00+00:00",
  "updated_at": "2026-10-30T09:12:00+00:00"
}

Другие ответы: 400, 401, 403, 404, 422, 429 — коды ошибок.

Удалить товар

DELETE/products/{id}право products:write

Удаление необратимо. Приходит событие product.deleted.

Параметры

ПараметрГдеТипОписание
id обязателенв путицелоеНомер объекта.

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

curl -X DELETE https://api.okeysait.ru/v1/products/101 \
  -H "Authorization: Bearer $OKEANO_KEY"
<?php
$ch = curl_init('https://api.okeysait.ru/v1/products/101');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST  => 'DELETE',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . getenv('OKEANO_KEY'),
    ],
    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.delete(
    "https://api.okeysait.ru/v1/products/101",
    headers={"Authorization": f"Bearer {os.environ['OKEANO_KEY']}"},
    timeout=30,
)
print(r.status_code)
print(r.text)
// Node.js 18+: файл .mjs (await на верхнем уровне)
const res = await fetch("https://api.okeysait.ru/v1/products/101", {
  method: "DELETE",
  headers: {
    Authorization: `Bearer ${process.env.OKEANO_KEY}`,
  },
});
console.log(res.status);
console.log(await res.text());
// 1С:Предприятие 8.3
КлючОкеано = "oks_…"; // ключ из панели магазина; в рабочей базе храните его отдельно от кода
Соединение = Новый HTTPСоединение("api.okeysait.ru", 443, , , , 30, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/v1/products/101");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + КлючОкеано);

Ответ = Соединение.Удалить(Запрос);
Сообщить(Ответ.КодСостояния);
Сообщить(Ответ.ПолучитьТелоКакСтроку());
package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
)

func main() {
	req, err := http.NewRequest("DELETE", "https://api.okeysait.ru/v1/products/101", nil)
	if err != nil {
		panic(err)
	}
	req.Header.Set("Authorization", "Bearer "+os.Getenv("OKEANO_KEY"))

	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

JSON
{
  "deleted": true,
  "id": 101
}

Другие ответы: 401, 403, 404, 429 — коды ошибок.

Разделы и бренды

Список разделов

GET/categoriesправо products:read

Параметры

ПараметрГдеТипОписание
limitв адресецелоеСколько объектов вернуть, от 1 до 250. По умолчанию 50.
cursorв адресестрокаЗначение next_cursor из прошлого ответа.

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

curl -G https://api.okeysait.ru/v1/categories \
  -H "Authorization: Bearer $OKEANO_KEY" \
  --data-urlencode "limit=250"
<?php
$ch = curl_init('https://api.okeysait.ru/v1/categories?' . http_build_query(['limit' => '250']));
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST  => 'GET',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . getenv('OKEANO_KEY'),
    ],
    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.get(
    "https://api.okeysait.ru/v1/categories",
    headers={"Authorization": f"Bearer {os.environ['OKEANO_KEY']}"},
    params={"limit": "250"},
    timeout=30,
)
print(r.status_code)
print(r.text)
// Node.js 18+: файл .mjs (await на верхнем уровне)
const url = new URL("https://api.okeysait.ru/v1/categories");
url.search = new URLSearchParams({ limit: "250" });
const res = await fetch(url, {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.OKEANO_KEY}`,
  },
});
console.log(res.status);
console.log(await res.text());
// 1С:Предприятие 8.3
КлючОкеано = "oks_…"; // ключ из панели магазина; в рабочей базе храните его отдельно от кода
Соединение = Новый HTTPСоединение("api.okeysait.ru", 443, , , , 30, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/v1/categories?limit=250");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + КлючОкеано);

Ответ = Соединение.Получить(Запрос);
Сообщить(Ответ.КодСостояния);
Сообщить(Ответ.ПолучитьТелоКакСтроку());
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"os"
)

func main() {
	q := url.Values{}
	q.Set("limit", "250")
	req, err := http.NewRequest("GET", "https://api.okeysait.ru/v1/categories?"+q.Encode(), nil)
	if err != nil {
		panic(err)
	}
	req.Header.Set("Authorization", "Bearer "+os.Getenv("OKEANO_KEY"))

	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

JSON
{
  "data": [
    {
      "id": 3,
      "parent_id": null,
      "name": "Свечи",
      "slug": "svechi",
      "visible": true,
      "position": 3
    }
  ],
  "next_cursor": null
}

Другие ответы: 400, 401, 403, 429 — коды ошибок.

Создать раздел

POST/categoriesправо products:write

Нужно name. slug — собственная часть адреса раздела, например svechi; полный адрес с родителями (/catalog/odezhda/svechi) магазин строит сам. Без slug он образуется из названия латиницей; занятый slug получает числовой хвост. Родитель не найден — 422 bad_parent. Лимит разделов тарифа исчерпан — 409 categories_limit.

Тело запроса

ПолеТипОписание
nameстрока
slugстрока
parent_idцелое или nullРодительский раздел; null или 0 — корневой.
visibletrue / false
positionцелое

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

curl -X POST https://api.okeysait.ru/v1/categories \
  -H "Authorization: Bearer $OKEANO_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Свечи",
    "parent_id": null,
    "slug": "svechi"
  }'
<?php
$ch = curl_init('https://api.okeysait.ru/v1/categories');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . getenv('OKEANO_KEY'),
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS     => json_encode(['name' => 'Свечи', 'parent_id' => null, 'slug' => 'svechi'], 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.post(
    "https://api.okeysait.ru/v1/categories",
    headers={"Authorization": f"Bearer {os.environ['OKEANO_KEY']}"},
    json={"name": "Свечи", "parent_id": None, "slug": "svechi"},
    timeout=30,
)
print(r.status_code)
print(r.text)
// Node.js 18+: файл .mjs (await на верхнем уровне)
const res = await fetch("https://api.okeysait.ru/v1/categories", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.OKEANO_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ name: "Свечи", parent_id: null, slug: "svechi" }),
});
console.log(res.status);
console.log(await res.text());
// 1С:Предприятие 8.3
КлючОкеано = "oks_…"; // ключ из панели магазина; в рабочей базе храните его отдельно от кода
Соединение = Новый HTTPСоединение("api.okeysait.ru", 443, , , , 30, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/v1/categories");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + КлючОкеано);
Запрос.Заголовки.Вставить("Content-Type", "application/json");

Данные = Новый Структура;
Данные.Вставить("name", "Свечи");
Данные.Вставить("parent_id", Неопределено);
Данные.Вставить("slug", "svechi");

Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
ЗаписатьJSON(Запись, Данные);
Запрос.УстановитьТелоИзСтроки(Запись.Закрыть(), КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);

Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Сообщить(Ответ.КодСостояния);
Сообщить(Ответ.ПолучитьТелоКакСтроку());
package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
	"strings"
)

func main() {
	body := strings.NewReader(`{
  "name": "Свечи",
  "parent_id": null,
  "slug": "svechi"
}`)
	req, err := http.NewRequest("POST", "https://api.okeysait.ru/v1/categories", 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))
}

Ответ 201

JSON
{
  "id": 3,
  "parent_id": null,
  "name": "Свечи",
  "slug": "svechi",
  "visible": true,
  "position": 3
}

Другие ответы: 400, 401, 403, 409, 422, 429 — коды ошибок.

Раздел

GET/categories/{id}право products:read

Параметры

ПараметрГдеТипОписание
id обязателенв путицелоеНомер объекта.

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

curl https://api.okeysait.ru/v1/categories/3 \
  -H "Authorization: Bearer $OKEANO_KEY"
<?php
$ch = curl_init('https://api.okeysait.ru/v1/categories/3');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST  => 'GET',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . getenv('OKEANO_KEY'),
    ],
    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.get(
    "https://api.okeysait.ru/v1/categories/3",
    headers={"Authorization": f"Bearer {os.environ['OKEANO_KEY']}"},
    timeout=30,
)
print(r.status_code)
print(r.text)
// Node.js 18+: файл .mjs (await на верхнем уровне)
const res = await fetch("https://api.okeysait.ru/v1/categories/3", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.OKEANO_KEY}`,
  },
});
console.log(res.status);
console.log(await res.text());
// 1С:Предприятие 8.3
КлючОкеано = "oks_…"; // ключ из панели магазина; в рабочей базе храните его отдельно от кода
Соединение = Новый HTTPСоединение("api.okeysait.ru", 443, , , , 30, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/v1/categories/3");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + КлючОкеано);

Ответ = Соединение.Получить(Запрос);
Сообщить(Ответ.КодСостояния);
Сообщить(Ответ.ПолучитьТелоКакСтроку());
package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
)

func main() {
	req, err := http.NewRequest("GET", "https://api.okeysait.ru/v1/categories/3", nil)
	if err != nil {
		panic(err)
	}
	req.Header.Set("Authorization", "Bearer "+os.Getenv("OKEANO_KEY"))

	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

JSON
{
  "id": 3,
  "parent_id": null,
  "name": "Свечи",
  "slug": "svechi",
  "visible": true,
  "position": 3
}

Другие ответы: 401, 403, 404, 429 — коды ошибок.

Изменить раздел

PATCH/categories/{id}право products:write

Родитель, который сам раздел или его потомок, — 422 bad_parent. Удаления нет: у раздела могут быть товары, удаляйте в панели.

Параметры

ПараметрГдеТипОписание
id обязателенв путицелоеНомер объекта.

Тело запроса

ПолеТипОписание
nameстрока
slugстрока
parent_idцелое или nullРодительский раздел; null или 0 — корневой.
visibletrue / false
positionцелое

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

curl -X PATCH https://api.okeysait.ru/v1/categories/3 \
  -H "Authorization: Bearer $OKEANO_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Свечи ручной работы",
    "position": 2
  }'
<?php
$ch = curl_init('https://api.okeysait.ru/v1/categories/3');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST  => 'PATCH',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . getenv('OKEANO_KEY'),
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS     => json_encode(['name' => 'Свечи ручной работы', 'position' => 2], 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/categories/3",
    headers={"Authorization": f"Bearer {os.environ['OKEANO_KEY']}"},
    json={"name": "Свечи ручной работы", "position": 2},
    timeout=30,
)
print(r.status_code)
print(r.text)
// Node.js 18+: файл .mjs (await на верхнем уровне)
const res = await fetch("https://api.okeysait.ru/v1/categories/3", {
  method: "PATCH",
  headers: {
    Authorization: `Bearer ${process.env.OKEANO_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ name: "Свечи ручной работы", position: 2 }),
});
console.log(res.status);
console.log(await res.text());
// 1С:Предприятие 8.3
КлючОкеано = "oks_…"; // ключ из панели магазина; в рабочей базе храните его отдельно от кода
Соединение = Новый HTTPСоединение("api.okeysait.ru", 443, , , , 30, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/v1/categories/3");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + КлючОкеано);
Запрос.Заголовки.Вставить("Content-Type", "application/json");

Данные = Новый Структура;
Данные.Вставить("name", "Свечи ручной работы");
Данные.Вставить("position", 2);

Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
ЗаписатьJSON(Запись, Данные);
Запрос.УстановитьТелоИзСтроки(Запись.Закрыть(), КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);

Ответ = Соединение.ВызватьHTTPМетод("PATCH", Запрос);
Сообщить(Ответ.КодСостояния);
Сообщить(Ответ.ПолучитьТелоКакСтроку());
package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
	"strings"
)

func main() {
	body := strings.NewReader(`{
  "name": "Свечи ручной работы",
  "position": 2
}`)
	req, err := http.NewRequest("PATCH", "https://api.okeysait.ru/v1/categories/3", 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

JSON
{
  "id": 3,
  "parent_id": null,
  "name": "Свечи",
  "slug": "svechi",
  "visible": true,
  "position": 3
}

Другие ответы: 400, 401, 403, 404, 422, 429 — коды ошибок.

Список брендов

GET/brandsправо products:read

Параметры

ПараметрГдеТипОписание
limitв адресецелоеСколько объектов вернуть, от 1 до 250. По умолчанию 50.
cursorв адресестрокаЗначение next_cursor из прошлого ответа.

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

curl -G https://api.okeysait.ru/v1/brands \
  -H "Authorization: Bearer $OKEANO_KEY" \
  --data-urlencode "limit=250"
<?php
$ch = curl_init('https://api.okeysait.ru/v1/brands?' . http_build_query(['limit' => '250']));
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST  => 'GET',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . getenv('OKEANO_KEY'),
    ],
    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.get(
    "https://api.okeysait.ru/v1/brands",
    headers={"Authorization": f"Bearer {os.environ['OKEANO_KEY']}"},
    params={"limit": "250"},
    timeout=30,
)
print(r.status_code)
print(r.text)
// Node.js 18+: файл .mjs (await на верхнем уровне)
const url = new URL("https://api.okeysait.ru/v1/brands");
url.search = new URLSearchParams({ limit: "250" });
const res = await fetch(url, {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.OKEANO_KEY}`,
  },
});
console.log(res.status);
console.log(await res.text());
// 1С:Предприятие 8.3
КлючОкеано = "oks_…"; // ключ из панели магазина; в рабочей базе храните его отдельно от кода
Соединение = Новый HTTPСоединение("api.okeysait.ru", 443, , , , 30, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/v1/brands?limit=250");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + КлючОкеано);

Ответ = Соединение.Получить(Запрос);
Сообщить(Ответ.КодСостояния);
Сообщить(Ответ.ПолучитьТелоКакСтроку());
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"os"
)

func main() {
	q := url.Values{}
	q.Set("limit", "250")
	req, err := http.NewRequest("GET", "https://api.okeysait.ru/v1/brands?"+q.Encode(), nil)
	if err != nil {
		panic(err)
	}
	req.Header.Set("Authorization", "Bearer "+os.Getenv("OKEANO_KEY"))

	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

JSON
{
  "data": [
    {
      "id": 2,
      "name": "Лесная мануфактура",
      "slug": "lesnaya-manufaktura",
      "visible": true
    }
  ],
  "next_cursor": null
}

Другие ответы: 400, 401, 403, 429 — коды ошибок.

Создать бренд

POST/brandsправо products:write

Нужно name.

Тело запроса

ПолеТипОписание
nameстрока
slugстрока
visibletrue / false

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

curl -X POST https://api.okeysait.ru/v1/brands \
  -H "Authorization: Bearer $OKEANO_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Лесная мануфактура"
  }'
<?php
$ch = curl_init('https://api.okeysait.ru/v1/brands');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . getenv('OKEANO_KEY'),
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS     => json_encode(['name' => 'Лесная мануфактура'], 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.post(
    "https://api.okeysait.ru/v1/brands",
    headers={"Authorization": f"Bearer {os.environ['OKEANO_KEY']}"},
    json={"name": "Лесная мануфактура"},
    timeout=30,
)
print(r.status_code)
print(r.text)
// Node.js 18+: файл .mjs (await на верхнем уровне)
const res = await fetch("https://api.okeysait.ru/v1/brands", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.OKEANO_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ name: "Лесная мануфактура" }),
});
console.log(res.status);
console.log(await res.text());
// 1С:Предприятие 8.3
КлючОкеано = "oks_…"; // ключ из панели магазина; в рабочей базе храните его отдельно от кода
Соединение = Новый HTTPСоединение("api.okeysait.ru", 443, , , , 30, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/v1/brands");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + КлючОкеано);
Запрос.Заголовки.Вставить("Content-Type", "application/json");

Данные = Новый Структура;
Данные.Вставить("name", "Лесная мануфактура");

Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
ЗаписатьJSON(Запись, Данные);
Запрос.УстановитьТелоИзСтроки(Запись.Закрыть(), КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);

Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Сообщить(Ответ.КодСостояния);
Сообщить(Ответ.ПолучитьТелоКакСтроку());
package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
	"strings"
)

func main() {
	body := strings.NewReader(`{
  "name": "Лесная мануфактура"
}`)
	req, err := http.NewRequest("POST", "https://api.okeysait.ru/v1/brands", 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))
}

Ответ 201

JSON
{
  "id": 2,
  "name": "Лесная мануфактура",
  "slug": "lesnaya-manufaktura",
  "visible": true
}

Другие ответы: 400, 401, 403, 422, 429 — коды ошибок.

Бренд

GET/brands/{id}право products:read

Параметры

ПараметрГдеТипОписание
id обязателенв путицелоеНомер объекта.

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

curl https://api.okeysait.ru/v1/brands/2 \
  -H "Authorization: Bearer $OKEANO_KEY"
<?php
$ch = curl_init('https://api.okeysait.ru/v1/brands/2');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST  => 'GET',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . getenv('OKEANO_KEY'),
    ],
    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.get(
    "https://api.okeysait.ru/v1/brands/2",
    headers={"Authorization": f"Bearer {os.environ['OKEANO_KEY']}"},
    timeout=30,
)
print(r.status_code)
print(r.text)
// Node.js 18+: файл .mjs (await на верхнем уровне)
const res = await fetch("https://api.okeysait.ru/v1/brands/2", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.OKEANO_KEY}`,
  },
});
console.log(res.status);
console.log(await res.text());
// 1С:Предприятие 8.3
КлючОкеано = "oks_…"; // ключ из панели магазина; в рабочей базе храните его отдельно от кода
Соединение = Новый HTTPСоединение("api.okeysait.ru", 443, , , , 30, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/v1/brands/2");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + КлючОкеано);

Ответ = Соединение.Получить(Запрос);
Сообщить(Ответ.КодСостояния);
Сообщить(Ответ.ПолучитьТелоКакСтроку());
package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
)

func main() {
	req, err := http.NewRequest("GET", "https://api.okeysait.ru/v1/brands/2", nil)
	if err != nil {
		panic(err)
	}
	req.Header.Set("Authorization", "Bearer "+os.Getenv("OKEANO_KEY"))

	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

JSON
{
  "id": 2,
  "name": "Лесная мануфактура",
  "slug": "lesnaya-manufaktura",
  "visible": true
}

Другие ответы: 401, 403, 404, 429 — коды ошибок.

Изменить бренд

PATCH/brands/{id}право products:write

Удаления нет — только в панели.

Параметры

ПараметрГдеТипОписание
id обязателенв путицелоеНомер объекта.

Тело запроса

ПолеТипОписание
nameстрока
slugстрока
visibletrue / false

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

curl -X PATCH https://api.okeysait.ru/v1/brands/2 \
  -H "Authorization: Bearer $OKEANO_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "visible": false
  }'
<?php
$ch = curl_init('https://api.okeysait.ru/v1/brands/2');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST  => 'PATCH',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . getenv('OKEANO_KEY'),
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS     => json_encode(['visible' => false], 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/brands/2",
    headers={"Authorization": f"Bearer {os.environ['OKEANO_KEY']}"},
    json={"visible": False},
    timeout=30,
)
print(r.status_code)
print(r.text)
// Node.js 18+: файл .mjs (await на верхнем уровне)
const res = await fetch("https://api.okeysait.ru/v1/brands/2", {
  method: "PATCH",
  headers: {
    Authorization: `Bearer ${process.env.OKEANO_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ visible: false }),
});
console.log(res.status);
console.log(await res.text());
// 1С:Предприятие 8.3
КлючОкеано = "oks_…"; // ключ из панели магазина; в рабочей базе храните его отдельно от кода
Соединение = Новый HTTPСоединение("api.okeysait.ru", 443, , , , 30, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/v1/brands/2");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + КлючОкеано);
Запрос.Заголовки.Вставить("Content-Type", "application/json");

Данные = Новый Структура;
Данные.Вставить("visible", Ложь);

Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
ЗаписатьJSON(Запись, Данные);
Запрос.УстановитьТелоИзСтроки(Запись.Закрыть(), КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);

Ответ = Соединение.ВызватьHTTPМетод("PATCH", Запрос);
Сообщить(Ответ.КодСостояния);
Сообщить(Ответ.ПолучитьТелоКакСтроку());
package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
	"strings"
)

func main() {
	body := strings.NewReader(`{
  "visible": false
}`)
	req, err := http.NewRequest("PATCH", "https://api.okeysait.ru/v1/brands/2", 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

JSON
{
  "id": 2,
  "name": "Лесная мануфактура",
  "slug": "lesnaya-manufaktura",
  "visible": true
}

Другие ответы: 400, 401, 403, 404, 422, 429 — коды ошибок.

Выбор города
Ваш город можно выбрать через корзину или в комментариях к заказу