Ключи и права

Ключ привязан к одному магазину и выбранным правам. Отозвать его можно в любой момент.

В каждом запросе — заголовок Authorization: Bearer oks_…. Без него ответ 401 missing_key, с неверным или отозванным ключом — 401 invalid_key.

Права

ПравоЧто открывает
products:readтовары, разделы, бренды
products:writeсоздание и правка товаров, остатков, разделов, брендов; удаление товаров
orders:readчтение заказов; в заказе есть контакты покупателя (имя, телефон, почта, адрес) — персональные данные
orders:writeсоздание заказов, смена статуса, оплата, заметка менеджера
customers:readчтение покупателей (персональные данные, отдельное право)

Нет нужного права — 403 insufficient_scope. Сколько ключей и запросов разрешено тарифу — в разделе «Лимиты».

Ключ — только для сервера. Запросы из браузера не разрешены (CORS выключен).

Магазин и права ключа

GET/shopлюбой действующий ключ

Название, адрес, тариф и права ключа. Годится как проверка ключа. Нужен любой действующий ключ.

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

curl https://api.okeysait.ru/v1/shop \
  -H "Authorization: Bearer $OKEANO_KEY"
<?php
$ch = curl_init('https://api.okeysait.ru/v1/shop');
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/shop",
    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/shop", {
  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/shop");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + КлючОкеано);

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

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

func main() {
	req, err := http.NewRequest("GET", "https://api.okeysait.ru/v1/shop", 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
{
  "site": "myshop",
  "name": "Мой магазин",
  "host": "myshop.okeysait.ru",
  "url": "https://myshop.okeysait.ru",
  "currency": "RUB",
  "plan": "free",
  "limits": {
    "requests_per_minute": 60
  },
  "key": {
    "name": "Склад",
    "scopes": [
      "products:read",
      "products:write"
    ]
  },
  "scopes": [
    "products:read",
    "products:write"
  ],
  "products_count": 12,
  "products_limit": 50,
  "order_statuses": [
    {
      "id": 1,
      "name": "Новый"
    },
    {
      "id": 2,
      "name": "Принят"
    }
  ]
}

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

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