Заказы

Заказы с сайта, витрины и API: список, создание без дублей, статусы и оплата.

В заказе — контакты покупателя. Это персональные данные: храните и передавайте их по закону 152-ФЗ.

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

  • Без дублей. Idempotency-Key длиннее 200 знаков обрезается до 200.
  • Своя корзина. Способы доставки и оплаты — из GET /checkout. При создании заказа передайте delivery_id и payment_method_id: доставка считается как в корзине магазина. Если оплата онлайн, отправьте покупателя на page_url из ответа.

Список заказов

GET/ordersправо orders: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.
statusв адресецелоеТолько заказы с этим номером статуса.
paidв адресестрока (0, 1, true, false)Только оплаченные (1, true) или неоплаченные (0, false).
orderв адресестрока (asc, desc)Порядок по номеру заказа: asc (по умолчанию, старые первыми) или desc (новые сверху). Курсор работает в обе стороны.

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

curl -G https://api.okeysait.ru/v1/orders \
  -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/orders?' . 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/orders",
    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/orders");
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/orders?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/orders?"+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": 518,
      "number": "518",
      "status": {
        "id": 1,
        "name": "Новый"
      },
      "paid": false,
      "paid_at": null,
      "delivery_id": 1,
      "payment_method_id": 2,
      "page_url": "https://my-shop.okeysait.ru/order/7d3f9a0c5b1e48a2b6c4e8f0a1d2c3b4",
      "customer": {
        "user_id": null,
        "name": "Анна Лесная",
        "email": "anna@example.com",
        "phone": "+79990001122",
        "address": "Москва, ул. Лесная, 1"
      },
      "comment": "Позвоните за час",
      "manager_note": "",
      "items": [
        {
          "product_id": 101,
          "variant_id": 77,
          "sku": "CANDLE-F",
          "name": "Свеча «Лес»",
          "price": "1290.00",
          "quantity": 2,
          "total": "2580.00"
        }
      ],
      "delivery_price": "0.00",
      "discount_percent": 0,
      "coupon_code": "",
      "total": "2580.00",
      "currency": "RUB",
      "created_at": "2026-10-30T09:31:07+00:00",
      "updated_at": "2026-10-30T09:31:07+00:00"
    }
  ],
  "next_cursor": null
}

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

Создать заказ

POST/ordersправо orders:write

Позиции — по variant_id или по sku. Нужно имя, телефон или почта покупателя.

Повтор без дублей. Передайте заголовок Idempotency-Key (до 200 символов, ключ помнится 24 часа). Повторный запрос с тем же ключом и тем же телом вернёт сохранённый ответ с заголовком Idempotent-Replayed: true и не создаст второй заказ. Тот же ключ с другим телом — 422 idempotency_mismatch; запрос, пока первый ещё выполняется, — 409 idempotency_conflict (повторите чуть позже). Ответ с ошибкой не запоминается: после исправления можно повторить с тем же ключом.

Оплата. paid: true создаёт заказ сразу оплаченным и списывает остатки. Если товара не хватает — 409 insufficient_stock, ничего не создано.

Доставка. С delivery_id доставка считается как в корзине магазина: платная, пока сумма товаров меньше free_from. Неизвестный или выключенный способ — 422 bad_delivery; способ оплаты, которого нет у выбранной доставки, — 422 bad_payment. Способы и цены — в GET /checkout; страница заказа с оплатой — page_url в ответе.

Строгий режим. strict: true — для собственной корзины: каждая позиция должна быть видна в каталоге, а её количество (с учётом повторов того же варианта) — не больше остатка (stock: null — без учёта, безлимит). Иначе 422 item_unavailable, а в error.details — все недоступные позиции с причиной hidden, out_of_stock или not_enough и числом available. Цена позиции из запроса (items[].price) в строгом режиме игнорируется — берётся из каталога. Без strict поведение прежнее.

Уведомления. По умолчанию владелец магазина получает обычное письмо и сообщение о новом заказе, покупатель не получает ничего. Управляйте объектом notify: {"admin": false, "customer": true}. Письмо покупателю уходит, только если указана его почта.

Параметры

ПараметрГдеТипОписание
Idempotency-KeyзаголовокстрокаУникальная строка на каждый заказ (например, номер заказа во внешней системе). Значимы первые 200 символов.

Тело запроса

ПолеТипОписание
customer обязательнообъектНужно хотя бы одно из полей name, phone, email.
customer.nameстрока
customer.phoneстрока
customer.emailстрока
customer.addressстрока
items обязательномассив: объект
items[].variant_idцелое
items[].skuстрока
items[].quantityцелое
items[].priceстрока или числоЦена позиции, если она отличается от цены в каталоге.
commentстрока
stricttrue / falseСтрогий режим: только видимые товары с достаточным остатком, цены из каталога (items[].price игнорируется). Иначе 422 item_unavailable.
delivery_idцелоеНомер способа доставки из панели.
payment_method_idцелоеНомер способа оплаты из панели.
paidtrue / falseСоздать заказ сразу оплаченным. Нужен остаток; иначе 409 insufficient_stock.
notifyобъектКого уведомить о заказе.
notify.admintrue / falseПисьмо и сообщение владельцу магазина, как о заказе с сайта.
notify.customertrue / falseПисьмо покупателю (если указана его почта).

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

curl -X POST https://api.okeysait.ru/v1/orders \
  -H "Authorization: Bearer $OKEANO_KEY" \
  -H "Idempotency-Key: crm-order-81234" \
  -H "Content-Type: application/json" \
  -d '{
    "customer": {
      "name": "Анна Лесная",
      "phone": "+79990001122",
      "email": "anna@example.com",
      "address": "Москва, ул. Лесная, 1"
    },
    "items": [
      {
        "sku": "CANDLE-F",
        "quantity": 2
      }
    ],
    "comment": "Позвоните за час",
    "paid": false,
    "notify": {
      "admin": true,
      "customer": false
    }
  }'
<?php
$ch = curl_init('https://api.okeysait.ru/v1/orders');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . getenv('OKEANO_KEY'),
        'Idempotency-Key: crm-order-81234',
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS     => json_encode([
        'customer' => [
            'name' => 'Анна Лесная',
            'phone' => '+79990001122',
            'email' => 'anna@example.com',
            'address' => 'Москва, ул. Лесная, 1',
        ],
        'items' => [
            ['sku' => 'CANDLE-F', 'quantity' => 2],
        ],
        'comment' => 'Позвоните за час',
        'paid' => false,
        'notify' => ['admin' => true, 'customer' => 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.post(
    "https://api.okeysait.ru/v1/orders",
    headers={"Authorization": f"Bearer {os.environ['OKEANO_KEY']}", "Idempotency-Key": "crm-order-81234"},
    json={
        "customer": {
            "name": "Анна Лесная",
            "phone": "+79990001122",
            "email": "anna@example.com",
            "address": "Москва, ул. Лесная, 1",
        },
        "items": [
            {"sku": "CANDLE-F", "quantity": 2},
        ],
        "comment": "Позвоните за час",
        "paid": False,
        "notify": {"admin": True, "customer": False},
    },
    timeout=30,
)
print(r.status_code)
print(r.text)
// Node.js 18+: файл .mjs (await на верхнем уровне)
const res = await fetch("https://api.okeysait.ru/v1/orders", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.OKEANO_KEY}`,
    "Idempotency-Key": "crm-order-81234",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    customer: {
      name: "Анна Лесная",
      phone: "+79990001122",
      email: "anna@example.com",
      address: "Москва, ул. Лесная, 1",
    },
    items: [
      { sku: "CANDLE-F", quantity: 2 },
    ],
    comment: "Позвоните за час",
    paid: false,
    notify: { admin: true, customer: false },
  }),
});
console.log(res.status);
console.log(await res.text());
// 1С:Предприятие 8.3
КлючОкеано = "oks_…"; // ключ из панели магазина; в рабочей базе храните его отдельно от кода
Соединение = Новый HTTPСоединение("api.okeysait.ru", 443, , , , 30, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/v1/orders");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + КлючОкеано);
Запрос.Заголовки.Вставить("Idempotency-Key", "crm-order-81234");
Запрос.Заголовки.Вставить("Content-Type", "application/json");

Данные = Новый Структура;
Покупатель = Новый Структура;
Покупатель.Вставить("name", "Анна Лесная");
Покупатель.Вставить("phone", "+79990001122");
Покупатель.Вставить("email", "anna@example.com");
Покупатель.Вставить("address", "Москва, ул. Лесная, 1");
Данные.Вставить("customer", Покупатель);
Позиции = Новый Массив;
Позиция = Новый Структура;
Позиция.Вставить("sku", "CANDLE-F");
Позиция.Вставить("quantity", 2);
Позиции.Добавить(Позиция);
Данные.Вставить("items", Позиции);
Данные.Вставить("comment", "Позвоните за час");
Данные.Вставить("paid", Ложь);
Уведомления = Новый Структура;
Уведомления.Вставить("admin", Истина);
Уведомления.Вставить("customer", Ложь);
Данные.Вставить("notify", Уведомления);

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

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

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

func main() {
	body := strings.NewReader(`{
  "customer": {
    "name": "Анна Лесная",
    "phone": "+79990001122",
    "email": "anna@example.com",
    "address": "Москва, ул. Лесная, 1"
  },
  "items": [
    {
      "sku": "CANDLE-F",
      "quantity": 2
    }
  ],
  "comment": "Позвоните за час",
  "paid": false,
  "notify": {
    "admin": true,
    "customer": false
  }
}`)
	req, err := http.NewRequest("POST", "https://api.okeysait.ru/v1/orders", body)
	if err != nil {
		panic(err)
	}
	req.Header.Set("Authorization", "Bearer "+os.Getenv("OKEANO_KEY"))
	req.Header.Set("Idempotency-Key", "crm-order-81234")
	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": 518,
  "number": "518",
  "status": {
    "id": 1,
    "name": "Новый"
  },
  "paid": false,
  "paid_at": null,
  "delivery_id": 1,
  "payment_method_id": 2,
  "page_url": "https://my-shop.okeysait.ru/order/7d3f9a0c5b1e48a2b6c4e8f0a1d2c3b4",
  "customer": {
    "user_id": null,
    "name": "Анна Лесная",
    "email": "anna@example.com",
    "phone": "+79990001122",
    "address": "Москва, ул. Лесная, 1"
  },
  "comment": "Позвоните за час",
  "manager_note": "",
  "items": [
    {
      "product_id": 101,
      "variant_id": 77,
      "sku": "CANDLE-F",
      "name": "Свеча «Лес»",
      "price": "1290.00",
      "quantity": 2,
      "total": "2580.00"
    }
  ],
  "delivery_price": "0.00",
  "discount_percent": 0,
  "coupon_code": "",
  "total": "2580.00",
  "currency": "RUB",
  "created_at": "2026-10-30T09:31:07+00:00",
  "updated_at": "2026-10-30T09:31:07+00:00"
}

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

Заказ

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

Параметры

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

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

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

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

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

func main() {
	req, err := http.NewRequest("GET", "https://api.okeysait.ru/v1/orders/518", 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": 518,
  "number": "518",
  "status": {
    "id": 1,
    "name": "Новый"
  },
  "paid": false,
  "paid_at": null,
  "delivery_id": 1,
  "payment_method_id": 2,
  "page_url": "https://my-shop.okeysait.ru/order/7d3f9a0c5b1e48a2b6c4e8f0a1d2c3b4",
  "customer": {
    "user_id": null,
    "name": "Анна Лесная",
    "email": "anna@example.com",
    "phone": "+79990001122",
    "address": "Москва, ул. Лесная, 1"
  },
  "comment": "Позвоните за час",
  "manager_note": "",
  "items": [
    {
      "product_id": 101,
      "variant_id": 77,
      "sku": "CANDLE-F",
      "name": "Свеча «Лес»",
      "price": "1290.00",
      "quantity": 2,
      "total": "2580.00"
    }
  ],
  "delivery_price": "0.00",
  "discount_percent": 0,
  "coupon_code": "",
  "total": "2580.00",
  "currency": "RUB",
  "created_at": "2026-10-30T09:31:07+00:00",
  "updated_at": "2026-10-30T09:31:07+00:00"
}

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

Изменить заказ

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

Можно сменить статус (status_id), отметить оплату (paid: true), записать заметку менеджера и комментарий.

Оплата закрывает заказ и списывает остатки, как оплата на сайте. Не хватает товара — 409 insufficient_stock, в заказе ничего не меняется. Снять отметку оплаты нельзя (paid: false — 422 unpay_not_supported). Повторная отметка уже оплаченного заказа ничего не делает. Номера статусов — в панели магазина, в разделе заказов; неизвестный номер — 422 bad_status.

Параметры

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

Тело запроса

ПолеТипОписание
status_idцелоеНомер статуса из панели.
paidtrue / falseТолько true. Снять оплату нельзя.
manager_noteстрока
commentстрока

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

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

Данные = Новый Структура;
Данные.Вставить("status_id", 2);
Данные.Вставить("manager_note", "Отправлено, трек 123456");

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

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

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

func main() {
	body := strings.NewReader(`{
  "status_id": 2,
  "manager_note": "Отправлено, трек 123456"
}`)
	req, err := http.NewRequest("PATCH", "https://api.okeysait.ru/v1/orders/518", 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": 518,
  "number": "518",
  "status": {
    "id": 1,
    "name": "Новый"
  },
  "paid": false,
  "paid_at": null,
  "delivery_id": 1,
  "payment_method_id": 2,
  "page_url": "https://my-shop.okeysait.ru/order/7d3f9a0c5b1e48a2b6c4e8f0a1d2c3b4",
  "customer": {
    "user_id": null,
    "name": "Анна Лесная",
    "email": "anna@example.com",
    "phone": "+79990001122",
    "address": "Москва, ул. Лесная, 1"
  },
  "comment": "Позвоните за час",
  "manager_note": "",
  "items": [
    {
      "product_id": 101,
      "variant_id": 77,
      "sku": "CANDLE-F",
      "name": "Свеча «Лес»",
      "price": "1290.00",
      "quantity": 2,
      "total": "2580.00"
    }
  ],
  "delivery_price": "0.00",
  "discount_percent": 0,
  "coupon_code": "",
  "total": "2580.00",
  "currency": "RUB",
  "created_at": "2026-10-30T09:31:07+00:00",
  "updated_at": "2026-10-30T09:31:07+00:00"
}

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

Способы доставки и оплаты

GET/checkoutправо orders:read

Включённые в магазине способы доставки и оплаты — для собственной корзины на вашем сайте. free_from — сумма товаров, начиная с которой доставка бесплатна: цена берётся, только пока сумма меньше free_from (0 — доставка всегда бесплатна, цена не берётся). payment_method_ids — какие включённые оплаты подходят к доставке; пустой список — подойдёт любая включённая оплата. online: true — оплата проходит на странице заказа (page_url), online: false — вне сайта (наличными, переводом).

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

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

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

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

func main() {
	req, err := http.NewRequest("GET", "https://api.okeysait.ru/v1/checkout", 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
{
  "deliveries": [
    {
      "id": 1,
      "name": "Курьер",
      "description": "По городу",
      "price": "300.00",
      "free_from": "5000.00",
      "separate_payment": false,
      "payment_method_ids": [
        1,
        2
      ]
    }
  ],
  "payment_methods": [
    {
      "id": 1,
      "name": "Наличными при получении",
      "description": "",
      "online": false
    },
    {
      "id": 2,
      "name": "Банковской картой",
      "description": "",
      "online": true
    }
  ],
  "currency": "RUB"
}

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

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