{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","docs_url":"https://expri-server.ru/dev","base_url":"https://api.expri.space/api/public/v1","domain_migration":{"status":"deprecated","enabled":true,"from_host":"expri-server.ru","to_host":"api.expri.space","from_origin":"https://expri-server.ru","to_origin":"https://api.expri.space","from_base_url":"https://expri-server.ru/api/public/v1","to_base_url":"https://api.expri.space/api/public/v1","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow","retired_http_status":410,"message":"Публичное API переносится с expri-server.ru на api.expri.space. Старые адреса отключаются 13.10.2026 в 23:59:59 МСК. Пути методов и ключи доступа сохраняются."},"lifecycle":{"statuses":["active","deprecated","retired"],"retired_status":410,"sunset_time":"00:00 Europe/Moscow","headers":["Deprecation","Sunset","Link"]},"auth":{"header":"X-Public-Api-Key: sorld_core_live_...","alternative":"Authorization: Bearer sorld_core_live_...","token_lifecycle":"Полный токен показывается один раз при выпуске. Токен ограничен организацией и scopes.","new_scopes":"Ранее выданные токены не получают новые разрешения автоматически. Выпустите токен с нужным набором scopes."},"transport":{"methods":["GET","OPTIONS"],"options_status":204,"content_type":"application/json","cors":"*"},"pagination":{"resources":["orders","print-queues","stock","ink","products","production-plan","stock-movements","supplies","supply-items","ink-measurements","marketplaces/wb/prices","marketplaces/wb/stocks","marketplaces/wb/orders","marketplaces/wb/sales","marketplaces/wb/spp","marketplaces/wb/spp-groups","marketplaces/wb/funnel","marketplaces/wb/ads","marketplaces/ozon/products","marketplaces/ozon/stocks","marketplaces/ozon/analytics","marketplaces/ozon/postings","marketplaces/ozon/posting-items","marketplaces/ozon/finance"],"limit_default":100,"limit_max":250,"request_cursor":"cursor","response_cursor":"next_cursor","filter_policy":"Сохраняйте фильтры между страницами.","snapshot_consistency":false},"period":{"default":"Текущий месяц сервера.","priority":"Полная пара date_from/date_to имеет приоритет над month/segment.","inclusive":true,"segments":{"first":"1–15","second":"16–последний день","all":"Весь месяц"}},"collection_period":{"resources":"Методы с date_from/date_to в parameters.","default":"Вся сохранённая история.","format":"YYYY-MM-DD","requires_pair":true,"inclusive":true,"month_segment_supported":false},"errors":{"401":["public_api_key_required","public_api_key_invalid","tenant_inactive","public_api_scope_denied:scope"],"405":["method_not_allowed"],"410":["method_retired","api_address_retired"],"422":["invalid_limit","invalid_cursor","invalid_updated_since","invalid_warehouse","invalid_active","invalid_date_from","invalid_date_to","invalid_date_range","invalid_<filter>"],"500":["storage_failed"]},"additional_services":{"ozon":{"base_url":"https://api.expri.space/api/public/v1/ozon","docs_url":"https://api.expri.space/api/public/v1/ozon/docs","auth":"Authorization: Bearer <shop key ozs2.… or Core connection code ozs1.…>","note":"Отдельный API цен и СПП. Доступ определяется ключом магазина; обычный Public API-токен не принимается."}},"scopes":{"summary":"Сводка по tenant и базовым метрикам","analytics":"Аналитика по печати, часам и начислениям","employees":"Сотрудники и роли","materials":"Материалы и складские остатки","archive":"Архив печати и событий","schedule":"Общий график сотрудников","defects":"Карточки брака","bugs":"Баг-репорты","payroll":"Расчёт выплат","orders":"Производственные заказы и статусы","print_queues":"Очереди печати и состав рулонов","stock":"Остатки готовой продукции по внутренним складам","ink":"Расход чернил по SKU","products":"Каталог продукции","production_plan":"План производства FBO","stock_movements":"Движения готовой продукции","supplies":"Поставки FBO и их состав","ink_history":"История измерений чернил","wb_prices":"WB: цены продавца","wb_stocks":"WB: остатки по складам","wb_orders":"WB: заказы","wb_sales":"WB: продажи и возвраты","wb_spp":"История СПП WB по товарам и распределение по группам","wb_analytics":"WB: воронка продаж","wb_ads":"WB: рекламная аналитика","ozon_products":"Ozon: каталог и цены продавца","ozon_stocks":"Ozon: остатки по складам","ozon_analytics":"Ozon: аналитика по дням","ozon_postings":"Ozon: отправления","ozon_finance":"Ozon: финансовые операции"},"endpoints":[{"method":"GET","path":"/api/public/v1/ping","scope":null,"title":"Проверка публичного токена","description":"Проверяет токен, организацию и разрешения доступа.","note":"Не требует отдельного scope. last_used_at содержит значение, прочитанное до обновления отметки текущим запросом.","params":[],"parameters":[],"example":"https://api.expri.space/api/public/v1/ping","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/ping'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/ping\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/ping\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/ping');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"token.scopes","desc":"Разрешения, доступные именно этому токену."},{"name":"tenant.id","desc":"Организация определяется токеном; передавать tenant_id для Public API не требуется."},{"name":"generated_at","desc":"Время формирования ответа сервера."}],"responses":{"200":{"title":"Успешно · пример данных","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации","status":"active"},"token":{"name":"Интеграция","prefix":"sorld_core_live_example...","scopes":["summary","analytics"],"last_used_at":"2026-10-12 16:42:49"}}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_key_invalid"}},"405":{"title":"Неверный HTTP-метод","body":{"ok":false,"error":"method_not_allowed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/ping","replacement_url":"https://api.expri.space/api/public/v1/ping","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/summary","scope":"summary","title":"Сводка организации","description":"Возвращает количество сотрудников, материалы, расходники и накопленные события.","note":"Сводка показывает текущее состояние; archive_events_total и attendance_events_total — количество сохранённых событий, без фильтра по периоду.","params":[],"parameters":[],"example":"https://api.expri.space/api/public/v1/summary","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/summary'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/summary\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/summary\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/summary');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"summary.employees_total","desc":"Количество записей сотрудников."},{"name":"summary.materials_length_m","desc":"Суммарный остаток материалов, м."},{"name":"summary.inks_total / boxes_total / supplies_total","desc":"Суммарные количества расходников."},{"name":"summary.archive_events_total / attendance_events_total","desc":"Количество событий в соответствующих журналах."}],"responses":{"200":{"title":"Успешно · пример данных","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"summary":{"employees_total":1,"materials_total":1,"materials_length_m":25.3,"inks_total":4,"boxes_total":20,"supplies_total":10,"archive_events_total":80,"attendance_events_total":20}}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_key_invalid"}},"405":{"title":"Неверный HTTP-метод","body":{"ok":false,"error":"method_not_allowed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/summary","replacement_url":"https://api.expri.space/api/public/v1/summary","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/analytics","scope":"analytics","title":"Производственная аналитика","description":"Возвращает площадь печати, плановые часы, начисления по сотрудникам и остатки материалов.","note":"Площадь рассчитывается по производственному архиву; scheduled_hours — часы по графику. stock отражает текущие остатки, а не состояние склада на конец выбранного периода.","params":["date_from","date_to","month","segment"],"parameters":[{"name":"date_from","desc":"Начало периода, YYYY-MM-DD. Работает вместе с date_to."},{"name":"date_to","desc":"Конец периода, YYYY-MM-DD. Обе даты включены в выборку."},{"name":"month","desc":"Месяц YYYY-MM; по умолчанию текущий месяц сервера."},{"name":"segment","desc":"all — весь месяц; first — 1–15; second — 16–последний день. По умолчанию all."}],"example":"https://api.expri.space/api/public/v1/analytics?month=2026-10&segment=all","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/analytics?month=2026-10&segment=all'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/analytics?month=2026-10&segment=all\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/analytics?month=2026-10&segment=all\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/analytics?month=2026-10&segment=all');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"period","desc":"Фактически выбранные границы периода, month и segment."},{"name":"summary","desc":"Площадь, число дней печати, пиковый день, часы и выплаты."},{"name":"print_area_by_day","desc":"Объект: дата → площадь, м²."},{"name":"hours_by_employee","desc":"Объект: имя сотрудника → часы по графику."},{"name":"payroll_by_employee","desc":"Объект: имя → часы, ставка, начисления, корректировки и статус выплаты. При совпадающих именах ключи могут совпасть; для учёта по emp_id используйте payroll."},{"name":"stock","desc":"Текущая складская сводка."}],"responses":{"200":{"title":"Успешно · пример данных","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"period":{"month":"2026-10","segment":"all","date_from":"2026-10-01","date_to":"2026-10-31"},"summary":{"print_area_total_m2":120.5,"print_days_count":1,"peak_day":"2026-10-01","peak_day_area_m2":120.5,"scheduled_hours_total":120,"payroll_total":36500,"average_pay_per_hour":304.17},"print_area_by_day":{"2026-10-01":120.5},"hours_by_employee":{"Сотрудник":120},"payroll_by_employee":{"Сотрудник":{"scheduled_hours":120,"gross_amount":36000,"adjustments_amount":500,"net_amount":36500,"current_rate":300,"payout_status":"unpaid"}},"stock":{"materials_count":1,"materials_length_m":25.3,"inks_total":4,"boxes_total":20,"supplies_total":10,"wall_map_count":2}}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_key_invalid"}},"405":{"title":"Неверный HTTP-метод","body":{"ok":false,"error":"method_not_allowed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/analytics","replacement_url":"https://api.expri.space/api/public/v1/analytics","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/employees","scope":"employees","title":"Сотрудники","description":"Возвращает сотрудников, роли, RFID и порядок отображения.","note":"Список содержит все записи, которые возвращает справочник сотрудников организации.","params":[],"parameters":[],"example":"https://api.expri.space/api/public/v1/employees","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/employees'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/employees\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/employees\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/employees');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"employees[].emp_id","desc":"Идентификатор сотрудника для фильтров и связей."},{"name":"employees[].name / role","desc":"Имя и роль."},{"name":"employees[].rfid_uid","desc":"RFID-идентификатор из справочника."},{"name":"employees[].sort_order / updated_at","desc":"Порядок и время обновления записи."}],"responses":{"200":{"title":"Успешно · пример данных","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"employees":[{"emp_id":"emp_example","name":"Сотрудник","role":"Печать","rfid_uid":"EXAMPLE","sort_order":10,"updated_at":"2026-10-12 16:42:49"}]}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_key_invalid"}},"405":{"title":"Неверный HTTP-метод","body":{"ok":false,"error":"method_not_allowed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/employees","replacement_url":"https://api.expri.space/api/public/v1/employees","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/materials","scope":"materials","title":"Материалы и расходники","description":"Возвращает рулоны материалов и агрегированные остатки чернил, коробок и расходников.","note":"materials содержит материалы поштучно; остальные виды расходников представлены суммарными количествами в overview.","params":[],"parameters":[],"example":"https://api.expri.space/api/public/v1/materials","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/materials'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/materials\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/materials\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/materials');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"overview","desc":"Количество материалов, длина, чернила, коробки, расходники и число QR-привязок wall_map_count."},{"name":"materials[].material_id / mat_type","desc":"Идентификатор и тип материала."},{"name":"materials[].length_m / cell_qr","desc":"Остаток в метрах и QR ячейки."},{"name":"materials[].created_at / updated_at","desc":"Время создания и обновления."}],"responses":{"200":{"title":"Успешно · пример данных","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"overview":{"materials_count":1,"materials_length_m":25.3,"inks_total":4,"boxes_total":20,"supplies_total":10,"wall_map_count":2},"materials":[{"material_id":"mat_example","mat_type":"Обои","length_m":25.3,"cell_qr":"CELL_EXAMPLE","created_at":"2026-10-12 16:42:49","updated_at":"2026-10-12 16:42:49"}]}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_key_invalid"}},"405":{"title":"Неверный HTTP-метод","body":{"ok":false,"error":"method_not_allowed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/materials","replacement_url":"https://api.expri.space/api/public/v1/materials","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/schedule","scope":"schedule","title":"График и фактические отметки","description":"Возвращает график за месяц: строки сотрудников и дни с планом, примечаниями и фактом.","note":"schedule.rows — массив, а ключи days — номера дней месяца. worked означает наличие отметки прихода или ухода; это не отдельный расчёт оплаченных часов.","params":["month"],"parameters":[{"name":"month","desc":"Месяц YYYY-MM. По умолчанию текущий месяц сервера."}],"example":"https://api.expri.space/api/public/v1/schedule?month=2026-10","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/schedule?month=2026-10'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/schedule?month=2026-10\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/schedule?month=2026-10\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/schedule?month=2026-10');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"schedule.days_in_month","desc":"Количество дней в месяце."},{"name":"schedule.rows[].employee","desc":"Запись сотрудника из справочника."},{"name":"schedule.rows[].days","desc":"Объект: номер дня → сведения о смене. Пример показывает один день; в ответе присутствуют все дни месяца."},{"name":"days.N.value / note / staff_note","desc":"План смены и примечания."},{"name":"days.N.worked / fact","desc":"Признак фактической отметки и её данные."}],"responses":{"200":{"title":"Успешно · пример данных","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"month":"2026-10","schedule":{"days_in_month":31,"rows":[{"employee":{"emp_id":"emp_example","name":"Сотрудник","role":"Печать","rfid_uid":"EXAMPLE","sort_order":10,"updated_at":"2026-10-12 16:42:49"},"days":{"1":{"value":"09:00-21:00","note":"","staff_note":"","worked":false,"fact":[]}}}]}}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_key_invalid"}},"405":{"title":"Неверный HTTP-метод","body":{"ok":false,"error":"method_not_allowed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/schedule","replacement_url":"https://api.expri.space/api/public/v1/schedule","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/archive","scope":"archive","title":"Архив производственных событий","description":"Возвращает события с фильтром по периоду и сотруднику.","note":"По умолчанию до 100 событий, максимум 250. offset и cursor не поддерживаются; для объёмных выгрузок делите период. event_type и payload зависят от вида события.","params":["date_from","date_to","month","segment","emp_id","limit"],"parameters":[{"name":"date_from","desc":"Начало периода, YYYY-MM-DD. Работает вместе с date_to."},{"name":"date_to","desc":"Конец периода, YYYY-MM-DD. Обе даты включены в выборку."},{"name":"month","desc":"Месяц YYYY-MM; по умолчанию текущий месяц сервера."},{"name":"segment","desc":"all — весь месяц; first — 1–15; second — 16–последний день. По умолчанию all."},{"name":"emp_id","desc":"Необязательный идентификатор сотрудника."},{"name":"limit","desc":"По умолчанию 100, максимум 250. Значения меньше 1 заменяются на 100."}],"example":"https://api.expri.space/api/public/v1/archive?month=2026-10&segment=all&limit=100","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/archive?month=2026-10&segment=all&limit=100'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/archive?month=2026-10&segment=all&limit=100\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/archive?month=2026-10&segment=all&limit=100\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/archive?month=2026-10&segment=all&limit=100');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"archive[].ts / date_key","desc":"Время события и нормализованная дата."},{"name":"archive[].emp_id / employee_name","desc":"Сотрудник, связанный с событием."},{"name":"archive[].event_type / area_m2","desc":"Тип события и площадь, если она присутствует."},{"name":"archive[].payload","desc":"Нормализованные данные исходного события."}],"responses":{"200":{"title":"Успешно · пример данных","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"period":{"date_from":"2026-10-01","date_to":"2026-10-31"},"archive":[{"ts":"2026-10-12 16:42:49","date_key":"2026-10-01","emp_id":"emp_example","employee_name":"Сотрудник","event_type":"print","area_m2":12.4,"payload":{"type":"print","emp_id":"emp_example","area_m2":12.4}}]}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_key_invalid"}},"405":{"title":"Неверный HTTP-метод","body":{"ok":false,"error":"method_not_allowed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/archive","replacement_url":"https://api.expri.space/api/public/v1/archive","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/defects","scope":"defects","title":"Карточки брака","description":"Производственный брак за период с фильтром по статусу.","note":"Выборка ограничена limit; сводка считается по возвращённым карточкам, после фильтра и ограничения. Статус сравнивается без учёта регистра. Пагинация offset/cursor не поддерживается.","params":["date_from","date_to","month","segment","status","limit"],"parameters":[{"name":"date_from","desc":"Начало периода, YYYY-MM-DD. Работает вместе с date_to."},{"name":"date_to","desc":"Конец периода, YYYY-MM-DD. Обе даты включены в выборку."},{"name":"month","desc":"Месяц YYYY-MM; по умолчанию текущий месяц сервера."},{"name":"segment","desc":"all — весь месяц; first — 1–15; second — 16–последний день. По умолчанию all."},{"name":"status","desc":"Необязательное точное значение статуса, без учёта регистра."},{"name":"limit","desc":"По умолчанию 100, максимум 250."}],"example":"https://api.expri.space/api/public/v1/defects?month=2026-10&segment=all&limit=100","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/defects?month=2026-10&segment=all&limit=100'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/defects?month=2026-10&segment=all&limit=100\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/defects?month=2026-10&segment=all&limit=100\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/defects?month=2026-10&segment=all&limit=100');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"defects[]","desc":"Карточки с ключом, статусом, датой, описанием и данными автора; содержимое зависит от карточки."},{"name":"summary.count","desc":"Количество карточек в возвращённой выборке."},{"name":"summary.photos","desc":"Количество фото или вложений в этой выборке."},{"name":"summary.status_counts","desc":"Количество карточек по статусам; для пустой выборки пустой массив."}],"responses":{"200":{"title":"Успешно · пример данных","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"period":{"month":"2026-10","segment":"all","date_from":"2026-10-01","date_to":"2026-10-31"},"summary":{"count":0,"photos":0,"today_count":0,"status_counts":[]},"defects":[]}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_key_invalid"}},"405":{"title":"Неверный HTTP-метод","body":{"ok":false,"error":"method_not_allowed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/defects","replacement_url":"https://api.expri.space/api/public/v1/defects","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/bugs","scope":"bugs","title":"Сообщения об ошибках","description":"Сообщения об ошибках за период с фильтром по статусу.","note":"Выборка ограничена limit; сводка считается по возвращённым карточкам, после фильтра и ограничения. Статус сравнивается без учёта регистра. Пагинация offset/cursor не поддерживается.","params":["date_from","date_to","month","segment","status","limit"],"parameters":[{"name":"date_from","desc":"Начало периода, YYYY-MM-DD. Работает вместе с date_to."},{"name":"date_to","desc":"Конец периода, YYYY-MM-DD. Обе даты включены в выборку."},{"name":"month","desc":"Месяц YYYY-MM; по умолчанию текущий месяц сервера."},{"name":"segment","desc":"all — весь месяц; first — 1–15; second — 16–последний день. По умолчанию all."},{"name":"status","desc":"Необязательное точное значение статуса, без учёта регистра."},{"name":"limit","desc":"По умолчанию 100, максимум 250."}],"example":"https://api.expri.space/api/public/v1/bugs?month=2026-10&segment=all&limit=100","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/bugs?month=2026-10&segment=all&limit=100'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/bugs?month=2026-10&segment=all&limit=100\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/bugs?month=2026-10&segment=all&limit=100\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/bugs?month=2026-10&segment=all&limit=100');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"bugs[]","desc":"Карточки с ключом, статусом, датой, описанием и данными автора; содержимое зависит от карточки."},{"name":"summary.count","desc":"Количество карточек в возвращённой выборке."},{"name":"summary.attachments","desc":"Количество фото или вложений в этой выборке."},{"name":"summary.status_counts","desc":"Количество карточек по статусам; для пустой выборки пустой массив."}],"responses":{"200":{"title":"Успешно · пример данных","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"period":{"month":"2026-10","segment":"all","date_from":"2026-10-01","date_to":"2026-10-31"},"summary":{"count":0,"attachments":0,"new_count":0,"status_counts":[]},"bugs":[]}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_key_invalid"}},"405":{"title":"Неверный HTTP-метод","body":{"ok":false,"error":"method_not_allowed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/bugs","replacement_url":"https://api.expri.space/api/public/v1/bugs","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/payroll","scope":"payroll","title":"Расчёт выплат","description":"Возвращает расчёт выплат по сотрудникам, часам, ставкам и корректировкам.","note":"Метод только читает расчёт. scheduled_hours — план по графику; net_amount — итог с корректировками. Связывайте строки по emp_id, а не по имени.","params":["date_from","date_to","month","segment"],"parameters":[{"name":"date_from","desc":"Начало периода, YYYY-MM-DD. Работает вместе с date_to."},{"name":"date_to","desc":"Конец периода, YYYY-MM-DD. Обе даты включены в выборку."},{"name":"month","desc":"Месяц YYYY-MM; по умолчанию текущий месяц сервера."},{"name":"segment","desc":"all — весь месяц; first — 1–15; second — 16–последний день. По умолчанию all."}],"example":"https://api.expri.space/api/public/v1/payroll?month=2026-10&segment=all","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/payroll?month=2026-10&segment=all'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/payroll?month=2026-10&segment=all\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/payroll?month=2026-10&segment=all\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/payroll?month=2026-10&segment=all');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"payroll[].emp_id / name / role","desc":"Сотрудник."},{"name":"scheduled_days / scheduled_hours / penalty_hours / required_hours","desc":"Плановые дни и часы, штрафные и требуемые часы."},{"name":"current_rate","desc":"Ставка расчёта."},{"name":"gross_amount / adjustments_amount / net_amount","desc":"Начисления, корректировки и итоговая сумма."},{"name":"payout_status","desc":"Статус выплаты."},{"name":"summary","desc":"Суммы scheduled_hours, required_hours, gross_amount, adjustments_amount и net_amount."}],"responses":{"200":{"title":"Успешно · пример данных","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"period":{"month":"2026-10","segment":"all","date_from":"2026-10-01","date_to":"2026-10-31"},"summary":{"scheduled_hours":120,"required_hours":120,"gross_amount":36000,"adjustments_amount":500,"net_amount":36500},"payroll":[{"emp_id":"emp_example","name":"Сотрудник","role":"Печать","scheduled_days":10,"scheduled_hours":120,"penalty_hours":0,"required_hours":120,"current_rate":300,"gross_amount":36000,"adjustments_amount":500,"net_amount":36500,"payout_status":"unpaid"}]}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_key_invalid"}},"405":{"title":"Неверный HTTP-метод","body":{"ok":false,"error":"method_not_allowed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/payroll","replacement_url":"https://api.expri.space/api/public/v1/payroll","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/orders","scope":"orders","title":"Производственные заказы","description":"Заказы Core, количество, статусы и производственные идентификаторы.","note":"Источник — сохранённые записи Core, без обращения к API маркетплейсов. Фильтры совпадают со значениями полей записи. По умолчанию включает все source_type, в том числе ручные и складские записи. Сортировка: updated_at и order_key по убыванию. Изменения во время обхода могут переместить запись; для синхронизации используйте updated_since с перекрытием и объединяйте по order_key.","params":["marketplace","source_type","status","sku","updated_since","limit","cursor"],"parameters":[{"name":"marketplace","desc":"Точное значение marketplace, например WB или OZON."},{"name":"source_type","desc":"Точный тип исходной записи Core."},{"name":"status","desc":"Точный текущий статус Core."},{"name":"sku","desc":"Точный SKU."},{"name":"updated_since","desc":"Изменения с указанного времени включительно, ISO 8601 с часовым поясом, например 2026-10-01T00:00:00+05:00."},{"name":"limit","desc":"Размер страницы: 1–250, по умолчанию 100."},{"name":"cursor","desc":"next_cursor предыдущего ответа. Фильтры должны совпадать; limit можно изменить."}],"example":"https://api.expri.space/api/public/v1/orders?limit=100","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/orders?limit=100'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/orders?limit=100\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/orders?limit=100\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/orders?limit=100');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"orders[].order_key","desc":"Стабильный ключ записи внутри Core."},{"name":"marketplace / source_type / sku / title","desc":"Маркетплейс, тип, SKU и название."},{"name":"order_no / external_order_id / posting_number","desc":"Идентификаторы исходного заказа."},{"name":"status / qty","desc":"Статус Core и количество."},{"name":"production_code / production_date / production_printer","desc":"Код изделия, дата производства и ключ принтера; могут быть пустыми."},{"name":"warehouse_target / created_at / updated_at","desc":"Целевой склад и время записи."},{"name":"count / limit","desc":"Количество записей на этой странице и запрошенный размер страницы."},{"name":"has_more / next_cursor","desc":"Если has_more=true, передайте next_cursor в следующий запрос; на последней странице next_cursor=null."}],"responses":{"200":{"title":"Успешно · пример данных","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"count":1,"limit":100,"has_more":false,"next_cursor":null,"orders":[{"order_key":"order_example","marketplace":"OZON","source_type":"wallpaper","sku":"EXAMPLE_312х270","title":"Пример изделия","order_no":"example","external_order_id":"example","posting_number":"example","status":"печатается","qty":1,"production_code":"P26EXAMPLE","production_date":"20261012","production_printer":"sakura","warehouse_target":"","created_at":"2026-10-12 16:42:49","updated_at":"2026-10-12 16:42:49"}]}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_key_invalid"}},"405":{"title":"Неверный HTTP-метод","body":{"ok":false,"error":"method_not_allowed"}},"422":{"title":"Некорректный параметр","body":{"ok":false,"error":"invalid_cursor"}},"500":{"title":"Ошибка чтения данных","body":{"ok":false,"error":"storage_failed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/orders","replacement_url":"https://api.expri.space/api/public/v1/orders","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/print-queues","scope":"print_queues","title":"Очереди печати","description":"Принтеры, рулоны и состав заданий в очередях Core.","note":"Метод только читает очередь. Он не выдаёт задание агенту и не запускает печать. Сортировка jobs: created_at и id по убыванию. Включает прямые задания и ещё не выданные артефакты; archived=true для completed/superseded. Состояние обработки агентом не заменяет подтверждение фактической печати.","params":["printer","state","limit","cursor"],"parameters":[{"name":"printer","desc":"Необязательный ключ зарегистрированного принтера, например sakura."},{"name":"state","desc":"Точное состояние: pending, received, processing, completed, failed, uncertain, superseded."},{"name":"limit","desc":"Размер страницы: 1–250, по умолчанию 100."},{"name":"cursor","desc":"next_cursor предыдущего ответа. Фильтры должны совпадать; limit можно изменить."}],"example":"https://api.expri.space/api/public/v1/print-queues?limit=100","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/print-queues?limit=100'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/print-queues?limit=100\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/print-queues?limit=100\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/print-queues?limit=100');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"printers[]","desc":"Ключ, название и цвет доступных принтеров; архивные принтеры исключены."},{"name":"jobs[].id / roll_id / printer","desc":"Ключ задания, номер рулона и принтер. До прямой выдачи id может иметь префикс artifact:."},{"name":"jobs[].state / archived","desc":"Состояние доставки/обработки и принадлежность к архиву."},{"name":"jobs[].layouts[]","desc":"article, code, strips, marketplace, source — состав рулона."},{"name":"jobs[].content_error","desc":"Описание отсутствующего состава; пустая строка при успешном разборе."},{"name":"count / limit","desc":"Количество записей на этой странице и запрошенный размер страницы."},{"name":"has_more / next_cursor","desc":"Если has_more=true, передайте next_cursor в следующий запрос; на последней странице next_cursor=null."}],"responses":{"200":{"title":"Успешно · пример данных","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"count":1,"limit":100,"has_more":false,"next_cursor":null,"printers":[{"printer":"sakura","name":"Sakura","color":"#5865f2"}],"jobs":[{"id":"dispatch_example","roll_id":"roll_example","printer":"sakura","state":"pending","archived":false,"created_at":"2026-10-12 16:42:49","updated_at":"2026-10-12 16:42:49","layouts":[{"article":"EXAMPLE_312х270","code":"P26EXAMPLE","strips":"1-3","marketplace":"OZON","source":"order"}],"content_error":""}]}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_key_invalid"}},"405":{"title":"Неверный HTTP-метод","body":{"ok":false,"error":"method_not_allowed"}},"422":{"title":"Некорректный параметр","body":{"ok":false,"error":"invalid_cursor"}},"500":{"title":"Ошибка чтения данных","body":{"ok":false,"error":"storage_failed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/print-queues","replacement_url":"https://api.expri.space/api/public/v1/print-queues","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/stock","scope":"stock","title":"Остатки готовой продукции","description":"Количество изделий по внутренним складам Core и количество в производстве.","note":"Источник — внутренний учёт движений и заказов Core. Это не остатки FBO на складах маркетплейсов. Учитывает Склад, Склад WB и Склад OZON; картины объединяются на локальном Складе. Отрицательные остатки сохраняются. Нулевые строки без производства не возвращаются. Сортировка: warehouse и sku по возрастанию. updated_at — последняя отметка учёта, а generated_at — время чтения.","params":["warehouse","sku","limit","cursor"],"parameters":[{"name":"warehouse","desc":"Склад, Склад WB или Склад OZON. Без фильтра — все три склада."},{"name":"sku","desc":"Точный SKU."},{"name":"limit","desc":"Размер страницы: 1–250, по умолчанию 100."},{"name":"cursor","desc":"next_cursor предыдущего ответа. Фильтры должны совпадать; limit можно изменить."}],"example":"https://api.expri.space/api/public/v1/stock?limit=100","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/stock?limit=100'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/stock?limit=100\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/stock?limit=100\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/stock?limit=100');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"stock[].warehouse / sku","desc":"Склад и SKU; составляют ключ строки."},{"name":"qty","desc":"Учтённый остаток изделий, шт."},{"name":"in_production_qty","desc":"Количество в производстве, учтённое складским расчётом Core."},{"name":"updated_at","desc":"Время последнего изменения, использованного в расчёте."},{"name":"count / limit","desc":"Количество записей на этой странице и запрошенный размер страницы."},{"name":"has_more / next_cursor","desc":"Если has_more=true, передайте next_cursor в следующий запрос; на последней странице next_cursor=null."}],"responses":{"200":{"title":"Успешно · пример данных","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"count":1,"limit":100,"has_more":false,"next_cursor":null,"stock":[{"warehouse":"Склад OZON","sku":"EXAMPLE_312х270","qty":10,"in_production_qty":3,"updated_at":"2026-10-12 16:42:49"}]}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_key_invalid"}},"405":{"title":"Неверный HTTP-метод","body":{"ok":false,"error":"method_not_allowed"}},"422":{"title":"Некорректный параметр","body":{"ok":false,"error":"invalid_cursor"}},"500":{"title":"Ошибка чтения данных","body":{"ok":false,"error":"storage_failed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/stock","replacement_url":"https://api.expri.space/api/public/v1/stock","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/ink","scope":"ink","title":"Расход чернил по SKU","description":"Актуальный расход CMYK, площадь и расход на квадратный метр из справочника Core.","note":"Источник — сохранённый расход SKU: замеры, импорт или ручной учёт. Новые измерения запрос не выполняет. Сортировка: updated_at и внутренний ключ SKU по убыванию. Для синхронизации используйте updated_since с перекрытием и объединяйте строки по sku. Метод возвращает текущее значение; историю отдельных измерений не выдаёт.","params":["sku","category","active","updated_since","limit","cursor"],"parameters":[{"name":"sku","desc":"Точный SKU."},{"name":"category","desc":"Точная категория: wallpaper, picture или poster."},{"name":"active","desc":"1 — активные SKU (по умолчанию); 0 — неактивные; all — все."},{"name":"updated_since","desc":"Изменения с указанного времени включительно, ISO 8601 с часовым поясом, например 2026-10-01T00:00:00+05:00."},{"name":"limit","desc":"Размер страницы: 1–250, по умолчанию 100."},{"name":"cursor","desc":"next_cursor предыдущего ответа. Фильтры должны совпадать; limit можно изменить."}],"example":"https://api.expri.space/api/public/v1/ink?limit=100","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/ink?limit=100'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/ink?limit=100\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/ink?limit=100\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/ink?limit=100');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"ink[].sku / category / source / ink_mode","desc":"SKU, категория и источник сохранённого расхода."},{"name":"width_cm / height_cm / area_m2","desc":"Размеры в сантиметрах и площадь в м²."},{"name":"ink_c_ml / ink_m_ml / ink_y_ml / ink_k_ml / ink_total_ml","desc":"CMYK и полный расход в мл."},{"name":"ink_ml_m2","desc":"Расход в мл/м²."},{"name":"strip_count / box_size / media_name / passes","desc":"Полосы, короб, материал и число проходов."},{"name":"review_status / active / last_measured_at / updated_at","desc":"Статус проверки, активность и временные отметки."},{"name":"count / limit","desc":"Количество записей на этой странице и запрошенный размер страницы."},{"name":"has_more / next_cursor","desc":"Если has_more=true, передайте next_cursor в следующий запрос; на последней странице next_cursor=null."}],"responses":{"200":{"title":"Успешно · пример данных","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"count":1,"limit":100,"has_more":false,"next_cursor":null,"ink":[{"sku":"EXAMPLE_416х270","category":"wallpaper","source":"measurement","ink_mode":"measurement","width_cm":416,"height_cm":270,"area_m2":11.232,"strip_count":4,"box_size":"4,16","ink_c_ml":1.2,"ink_m_ml":1.3,"ink_y_ml":1.1,"ink_k_ml":0.9,"ink_total_ml":4.5,"ink_ml_m2":0.400641,"media_name":"Пример материала","passes":4,"review_status":"ok","active":true,"last_measured_at":"2026-10-12 16:42:49","updated_at":"2026-10-12 16:42:49"}]}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_key_invalid"}},"405":{"title":"Неверный HTTP-метод","body":{"ok":false,"error":"method_not_allowed"}},"422":{"title":"Некорректный параметр","body":{"ok":false,"error":"invalid_cursor"}},"500":{"title":"Ошибка чтения данных","body":{"ok":false,"error":"storage_failed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/ink","replacement_url":"https://api.expri.space/api/public/v1/ink","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/products","scope":"products","title":"Каталог продукции","description":"Каталог продукции. Постраничная выгрузка для внешней интеграции.","note":"Каталог производственных товаров Core. Размеры в миллиметрах; ml_per_unit — сохранённая норма, а не отдельное измерение чернил. По умолчанию active=1; active=all включает архивные позиции. Возвращаются только сохранённые данные организации токена. generated_at — время ответа. По умолчанию выдаются все сохранённые записи постранично, начиная с последних по updated_at, product_key. Между страницами состояние может измениться.","params":["limit","cursor","marketplace","source_type","sku","active","updated_since"],"parameters":[{"name":"limit","desc":"Размер страницы: 1–250; по умолчанию 100."},{"name":"cursor","desc":"next_cursor предыдущего ответа. Сохраняйте фильтры; курсор привязан к методу и организации."},{"name":"marketplace","desc":"Точное совпадение. Маркетплейс позиции в Core."},{"name":"source_type","desc":"Точное совпадение. Категория или тип продукции в источнике."},{"name":"sku","desc":"Точное совпадение. Артикул в Core; в методах Ozon — SKU Ozon. Не смешивайте с offer_id."},{"name":"active","desc":"0 или 1; по умолчанию 1. all включает неактивные позиции."},{"name":"updated_since","desc":"ISO 8601 с часовым поясом. Фильтр по updated_at включительно; допускает повторные записи при синхронизации."}],"example":"https://api.expri.space/api/public/v1/products?limit=100","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/products?limit=100'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/products?limit=100\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/products?limit=100\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/products?limit=100');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"available","desc":"false: модуль ещё не создал таблицу данных; коллекция пустая. true: таблица существует; пустой результат возможен при отсутствии подходящих записей."},{"name":"data_source","desc":"Источник сохранённых данных: core. Запрос не запускает синхронизацию источника."},{"name":"count / limit / has_more / next_cursor","desc":"Количество записей страницы, её лимит, наличие продолжения и курсор. Последняя страница: next_cursor=null."},{"name":"products[].product_key","desc":"Ключ записи для сопоставления и объединения выгрузок. Тип: text. NULL источника сохраняется как null."},{"name":"products[].source_type","desc":"Категория или тип продукции в источнике. Тип: text. NULL источника сохраняется как null."},{"name":"products[].marketplace","desc":"Маркетплейс позиции в Core. Тип: text. NULL источника сохраняется как null."},{"name":"products[].sku","desc":"Артикул в Core; в методах Ozon — SKU Ozon. Не смешивайте с offer_id. Тип: text. NULL источника сохраняется как null."},{"name":"products[].title","desc":"Название товара в источнике. Тип: text. NULL источника сохраняется как null."},{"name":"products[].article_mp","desc":"Артикул продавца в соответствующем источнике. Тип: text. NULL источника сохраняется как null."},{"name":"products[].width_mm","desc":"Размер продукции в миллиметрах. Тип: int. NULL источника сохраняется как null."},{"name":"products[].height_mm","desc":"Размер продукции в миллиметрах. Тип: int. NULL источника сохраняется как null."},{"name":"products[].strips","desc":"Количество полос. Тип: int. NULL источника сохраняется как null."},{"name":"products[].ml_per_unit","desc":"Сохранённая норма расхода чернил на единицу, мл. Тип: int. NULL источника сохраняется как null."},{"name":"products[].priority","desc":"Сохранённый приоритет обработки. Тип: int. NULL источника сохраняется как null."},{"name":"products[].active","desc":"Признак активной позиции, boolean. Тип: bool. NULL источника сохраняется как null."},{"name":"products[].created_at","desc":"Время создания записи в источнике. Тип: text. NULL источника сохраняется как null."},{"name":"products[].updated_at","desc":"Время последнего сохранённого обновления записи. Тип: text. NULL источника сохраняется как null."}],"responses":{"200":{"title":"Успешно · пример структуры","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"data_source":"core","available":true,"count":1,"limit":100,"has_more":false,"next_cursor":null,"products":[{"product_key":"Пример","source_type":"Пример","marketplace":"OZON","sku":"SKU-001","title":"Пример","article_mp":"SKU-001","width_mm":1,"height_mm":1,"strips":1,"ml_per_unit":1,"priority":1,"active":true,"created_at":"2026-10-12 16:42:49","updated_at":"2026-10-12 16:42:49"}]}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_scope_denied:products"}},"422":{"title":"Некорректные параметры","body":{"ok":false,"error":"invalid_cursor"}},"500":{"title":"Ошибка чтения данных","body":{"ok":false,"error":"storage_failed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/products","replacement_url":"https://api.expri.space/api/public/v1/products","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/production-plan","scope":"production_plan","title":"План производства FBO","description":"План производства FBO. Постраничная выгрузка для внешней интеграции.","note":"Сохранённый план FBO. Метод не запускает пересчёт потребности и не создаёт задания на печать. Возвращаются только сохранённые данные организации токена. generated_at — время ответа. По умолчанию выдаются все сохранённые записи постранично, начиная с последних по updated_at, plan_key. Между страницами состояние может измениться.","params":["limit","cursor","marketplace","sku","updated_since"],"parameters":[{"name":"limit","desc":"Размер страницы: 1–250; по умолчанию 100."},{"name":"cursor","desc":"next_cursor предыдущего ответа. Сохраняйте фильтры; курсор привязан к методу и организации."},{"name":"marketplace","desc":"Точное совпадение. Маркетплейс позиции в Core."},{"name":"sku","desc":"Точное совпадение. Артикул в Core; в методах Ozon — SKU Ozon. Не смешивайте с offer_id."},{"name":"updated_since","desc":"ISO 8601 с часовым поясом. Фильтр по updated_at включительно; допускает повторные записи при синхронизации."}],"example":"https://api.expri.space/api/public/v1/production-plan?limit=100","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/production-plan?limit=100'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/production-plan?limit=100\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/production-plan?limit=100\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/production-plan?limit=100');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"available","desc":"false: модуль ещё не создал таблицу данных; коллекция пустая. true: таблица существует; пустой результат возможен при отсутствии подходящих записей."},{"name":"data_source","desc":"Источник сохранённых данных: core. Запрос не запускает синхронизацию источника."},{"name":"count / limit / has_more / next_cursor","desc":"Количество записей страницы, её лимит, наличие продолжения и курсор. Последняя страница: next_cursor=null."},{"name":"production_plan[].plan_key","desc":"Ключ записи для сопоставления и объединения выгрузок. Тип: text. NULL источника сохраняется как null."},{"name":"production_plan[].marketplace","desc":"Маркетплейс позиции в Core. Тип: text. NULL источника сохраняется как null."},{"name":"production_plan[].sku","desc":"Артикул в Core; в методах Ozon — SKU Ozon. Не смешивайте с offer_id. Тип: text. NULL источника сохраняется как null."},{"name":"production_plan[].product_key","desc":"Ключ записи для сопоставления и объединения выгрузок. Тип: text. NULL источника сохраняется как null."},{"name":"production_plan[].print_priority","desc":"Сохранённый приоритет обработки. Тип: int. NULL источника сохраняется как null."},{"name":"production_plan[].need_print","desc":"Количество в сохранённом плане производства. Тип: int. NULL источника сохраняется как null."},{"name":"production_plan[].remaining_qty","desc":"Количество в сохранённом плане производства. Тип: int. NULL источника сохраняется как null."},{"name":"production_plan[].in_production_m2","desc":"Площадь продукции в производстве, м². Тип: float. NULL источника сохраняется как null."},{"name":"production_plan[].not_printed_m2","desc":"Оставшаяся непечатанная площадь, м². Тип: float. NULL источника сохраняется как null."},{"name":"production_plan[].not_printed_qty","desc":"Количество в сохранённом плане производства. Тип: int. NULL источника сохраняется как null."},{"name":"production_plan[].updated_at","desc":"Время последнего сохранённого обновления записи. Тип: text. NULL источника сохраняется как null."}],"responses":{"200":{"title":"Успешно · пример структуры","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"data_source":"core","available":true,"count":1,"limit":100,"has_more":false,"next_cursor":null,"production_plan":[{"plan_key":"Пример","marketplace":"OZON","sku":"SKU-001","product_key":"Пример","print_priority":1,"need_print":1,"remaining_qty":1,"in_production_m2":12.5,"not_printed_m2":12.5,"not_printed_qty":1,"updated_at":"2026-10-12 16:42:49"}]}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_scope_denied:production_plan"}},"422":{"title":"Некорректные параметры","body":{"ok":false,"error":"invalid_cursor"}},"500":{"title":"Ошибка чтения данных","body":{"ok":false,"error":"storage_failed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/production-plan","replacement_url":"https://api.expri.space/api/public/v1/production-plan","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/stock-movements","scope":"stock_movements","title":"Движения готовой продукции","description":"Движения готовой продукции. Постраничная выгрузка для внешней интеграции.","note":"qty возвращается в исходном виде; направление движения определяется kind. Не суммируйте qty без учёта типа движения. Возвращаются только сохранённые данные организации токена. generated_at — время ответа. По умолчанию выдаются все сохранённые записи постранично, начиная с последних по ts, id. Между страницами состояние может измениться.","params":["limit","cursor","marketplace","warehouse","sku","kind","date_from","date_to","updated_since"],"parameters":[{"name":"limit","desc":"Размер страницы: 1–250; по умолчанию 100."},{"name":"cursor","desc":"next_cursor предыдущего ответа. Сохраняйте фильтры; курсор привязан к методу и организации."},{"name":"marketplace","desc":"Точное совпадение. Маркетплейс позиции в Core."},{"name":"warehouse","desc":"Точное совпадение. Название склада источника."},{"name":"sku","desc":"Точное совпадение. Артикул в Core; в методах Ozon — SKU Ozon. Не смешивайте с offer_id."},{"name":"kind","desc":"Точное совпадение. Тип движения; определяет приход или расход."},{"name":"date_from","desc":"Начало периода YYYY-MM-DD включительно по полю ts. Задаётся вместе с date_to. Без пары дат — вся сохранённая история."},{"name":"date_to","desc":"Конец периода YYYY-MM-DD включительно. Даты должны существовать; date_from ≤ date_to. month/segment здесь не используются."},{"name":"updated_since","desc":"ISO 8601 с часовым поясом. Фильтр по updated_at включительно; допускает повторные записи при синхронизации."}],"example":"https://api.expri.space/api/public/v1/stock-movements?limit=100","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/stock-movements?limit=100'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/stock-movements?limit=100\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/stock-movements?limit=100\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/stock-movements?limit=100');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"available","desc":"false: модуль ещё не создал таблицу данных; коллекция пустая. true: таблица существует; пустой результат возможен при отсутствии подходящих записей."},{"name":"data_source","desc":"Источник сохранённых данных: core. Запрос не запускает синхронизацию источника."},{"name":"count / limit / has_more / next_cursor","desc":"Количество записей страницы, её лимит, наличие продолжения и курсор. Последняя страница: next_cursor=null."},{"name":"stock_movements[].id","desc":"Числовой идентификатор записи в Core. Тип: int. NULL источника сохраняется как null."},{"name":"stock_movements[].ts","desc":"Время складского движения. Тип: text. NULL источника сохраняется как null."},{"name":"stock_movements[].kind","desc":"Тип движения; определяет приход или расход. Тип: text. NULL источника сохраняется как null."},{"name":"stock_movements[].marketplace","desc":"Маркетплейс позиции в Core. Тип: text. NULL источника сохраняется как null."},{"name":"stock_movements[].warehouse","desc":"Название склада источника. Тип: text. NULL источника сохраняется как null."},{"name":"stock_movements[].sku","desc":"Артикул в Core; в методах Ozon — SKU Ozon. Не смешивайте с offer_id. Тип: text. NULL источника сохраняется как null."},{"name":"stock_movements[].qty","desc":"Количество в исходной записи; направление движения задаётся kind. Тип: int. NULL источника сохраняется как null."},{"name":"stock_movements[].area_m2","desc":"Площадь в квадратных метрах. Тип: float. NULL источника сохраняется как null."},{"name":"stock_movements[].order_key","desc":"Связанный ключ производственного заказа, если задан. Тип: text. NULL источника сохраняется как null."},{"name":"stock_movements[].updated_at","desc":"Время последнего сохранённого обновления записи. Тип: text. NULL источника сохраняется как null."}],"responses":{"200":{"title":"Успешно · пример структуры","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"data_source":"core","available":true,"count":1,"limit":100,"has_more":false,"next_cursor":null,"stock_movements":[{"id":1,"ts":"2026-10-12 16:42:49","kind":"приход","marketplace":"OZON","warehouse":"Пример","sku":"SKU-001","qty":10,"area_m2":12.5,"order_key":"Пример","updated_at":"2026-10-12 16:42:49"}]}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_scope_denied:stock_movements"}},"422":{"title":"Некорректные параметры","body":{"ok":false,"error":"invalid_cursor"}},"500":{"title":"Ошибка чтения данных","body":{"ok":false,"error":"storage_failed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/stock-movements","replacement_url":"https://api.expri.space/api/public/v1/stock-movements","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/supplies","scope":"supplies","title":"Поставки FBO","description":"Поставки FBO. Постраничная выгрузка для внешней интеграции.","note":"Поставки, заведённые в Core. Состав доступен в supply-items по supply_key. Возвращаются только сохранённые данные организации токена. generated_at — время ответа. По умолчанию выдаются все сохранённые записи постранично, начиная с последних по updated_at, supply_key. Между страницами состояние может измениться.","params":["limit","cursor","marketplace","status","supply_key","date_from","date_to","updated_since"],"parameters":[{"name":"limit","desc":"Размер страницы: 1–250; по умолчанию 100."},{"name":"cursor","desc":"next_cursor предыдущего ответа. Сохраняйте фильтры; курсор привязан к методу и организации."},{"name":"marketplace","desc":"Точное совпадение. Маркетплейс позиции в Core."},{"name":"status","desc":"Точное совпадение. Статус или подстатус в сохранённом источнике."},{"name":"supply_key","desc":"Точное совпадение. Ключ записи для сопоставления и объединения выгрузок."},{"name":"date_from","desc":"Начало периода YYYY-MM-DD включительно по полю created_at. Задаётся вместе с date_to. Без пары дат — вся сохранённая история."},{"name":"date_to","desc":"Конец периода YYYY-MM-DD включительно. Даты должны существовать; date_from ≤ date_to. month/segment здесь не используются."},{"name":"updated_since","desc":"ISO 8601 с часовым поясом. Фильтр по updated_at включительно; допускает повторные записи при синхронизации."}],"example":"https://api.expri.space/api/public/v1/supplies?limit=100","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/supplies?limit=100'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/supplies?limit=100\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/supplies?limit=100\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/supplies?limit=100');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"available","desc":"false: модуль ещё не создал таблицу данных; коллекция пустая. true: таблица существует; пустой результат возможен при отсутствии подходящих записей."},{"name":"data_source","desc":"Источник сохранённых данных: core. Запрос не запускает синхронизацию источника."},{"name":"count / limit / has_more / next_cursor","desc":"Количество записей страницы, её лимит, наличие продолжения и курсор. Последняя страница: next_cursor=null."},{"name":"supplies[].supply_key","desc":"Ключ записи для сопоставления и объединения выгрузок. Тип: text. NULL источника сохраняется как null."},{"name":"supplies[].marketplace","desc":"Маркетплейс позиции в Core. Тип: text. NULL источника сохраняется как null."},{"name":"supplies[].supply_no","desc":"Номер поставки в Core. Тип: text. NULL источника сохраняется как null."},{"name":"supplies[].status","desc":"Статус или подстатус в сохранённом источнике. Тип: text. NULL источника сохраняется как null."},{"name":"supplies[].shipped_at","desc":"Время отправки поставки, если отмечено. Тип: text. NULL источника сохраняется как null."},{"name":"supplies[].accepted_at","desc":"Время приёмки поставки, если отмечено. Тип: text. NULL источника сохраняется как null."},{"name":"supplies[].created_at","desc":"Время создания записи в источнике. Тип: text. NULL источника сохраняется как null."},{"name":"supplies[].updated_at","desc":"Время последнего сохранённого обновления записи. Тип: text. NULL источника сохраняется как null."}],"responses":{"200":{"title":"Успешно · пример структуры","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"data_source":"core","available":true,"count":1,"limit":100,"has_more":false,"next_cursor":null,"supplies":[{"supply_key":"Пример","marketplace":"OZON","supply_no":"Пример","status":"draft","shipped_at":"","accepted_at":"","created_at":"2026-10-12 16:42:49","updated_at":"2026-10-12 16:42:49"}]}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_scope_denied:supplies"}},"422":{"title":"Некорректные параметры","body":{"ok":false,"error":"invalid_cursor"}},"500":{"title":"Ошибка чтения данных","body":{"ok":false,"error":"storage_failed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/supplies","replacement_url":"https://api.expri.space/api/public/v1/supplies","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/supply-items","scope":"supplies","title":"Состав поставок FBO","description":"Состав поставок FBO. Постраничная выгрузка для внешней интеграции.","note":"Строки поставок Core. qty — заявлено, accepted_qty — принято, transit_qty — в пути. Все поставки можно выгрузить постранично; supply_key ограничивает выборку одной поставкой. Возвращаются только сохранённые данные организации токена. generated_at — время ответа. По умолчанию выдаются все сохранённые записи постранично, начиная с последних по updated_at, id. Между страницами состояние может измениться.","params":["limit","cursor","supply_key","marketplace","warehouse","sku","updated_since"],"parameters":[{"name":"limit","desc":"Размер страницы: 1–250; по умолчанию 100."},{"name":"cursor","desc":"next_cursor предыдущего ответа. Сохраняйте фильтры; курсор привязан к методу и организации."},{"name":"supply_key","desc":"Точное совпадение. Ключ записи для сопоставления и объединения выгрузок."},{"name":"marketplace","desc":"Точное совпадение. Маркетплейс позиции в Core."},{"name":"warehouse","desc":"Точное совпадение. Название склада источника."},{"name":"sku","desc":"Точное совпадение. Артикул в Core; в методах Ozon — SKU Ozon. Не смешивайте с offer_id."},{"name":"updated_since","desc":"ISO 8601 с часовым поясом. Фильтр по updated_at включительно; допускает повторные записи при синхронизации."}],"example":"https://api.expri.space/api/public/v1/supply-items?limit=100","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/supply-items?limit=100'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/supply-items?limit=100\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/supply-items?limit=100\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/supply-items?limit=100');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"available","desc":"false: модуль ещё не создал таблицу данных; коллекция пустая. true: таблица существует; пустой результат возможен при отсутствии подходящих записей."},{"name":"data_source","desc":"Источник сохранённых данных: core. Запрос не запускает синхронизацию источника."},{"name":"count / limit / has_more / next_cursor","desc":"Количество записей страницы, её лимит, наличие продолжения и курсор. Последняя страница: next_cursor=null."},{"name":"supply_items[].id","desc":"Числовой идентификатор записи в Core. Тип: int. NULL источника сохраняется как null."},{"name":"supply_items[].supply_key","desc":"Ключ записи для сопоставления и объединения выгрузок. Тип: text. NULL источника сохраняется как null."},{"name":"supply_items[].marketplace","desc":"Маркетплейс позиции в Core. Тип: text. NULL источника сохраняется как null."},{"name":"supply_items[].warehouse","desc":"Название склада источника. Тип: text. NULL источника сохраняется как null."},{"name":"supply_items[].sku","desc":"Артикул в Core; в методах Ozon — SKU Ozon. Не смешивайте с offer_id. Тип: text. NULL источника сохраняется как null."},{"name":"supply_items[].qty","desc":"Заявленное количество в строке поставки Core. Тип: int."},{"name":"supply_items[].accepted_qty","desc":"Количество, отмеченное принятым в поставке Core. Тип: int. NULL источника сохраняется как null."},{"name":"supply_items[].transit_qty","desc":"Количество, отмеченное в пути в поставке Core. Тип: int. NULL источника сохраняется как null."},{"name":"supply_items[].created_at","desc":"Время создания записи в источнике. Тип: text. NULL источника сохраняется как null."},{"name":"supply_items[].updated_at","desc":"Время последнего сохранённого обновления записи. Тип: text. NULL источника сохраняется как null."}],"responses":{"200":{"title":"Успешно · пример структуры","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"data_source":"core","available":true,"count":1,"limit":100,"has_more":false,"next_cursor":null,"supply_items":[{"id":1,"supply_key":"Пример","marketplace":"OZON","warehouse":"Пример","sku":"SKU-001","qty":10,"accepted_qty":1,"transit_qty":1,"created_at":"2026-10-12 16:42:49","updated_at":"2026-10-12 16:42:49"}]}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_scope_denied:supplies"}},"422":{"title":"Некорректные параметры","body":{"ok":false,"error":"invalid_cursor"}},"500":{"title":"Ошибка чтения данных","body":{"ok":false,"error":"storage_failed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/supply-items","replacement_url":"https://api.expri.space/api/public/v1/supply-items","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/ink-measurements","scope":"ink_history","title":"История измерений чернил","description":"История измерений чернил. Постраничная выгрузка для внешней интеграции.","note":"Отдельные сохранённые измерения, включая предыдущие значения. Актуальный расход по SKU доступен в ink. Локальные пути, подписи устройств и комментарии операторов не передаются. Возвращаются только сохранённые данные организации токена. generated_at — время ответа. По умолчанию выдаются все сохранённые записи постранично, начиная с последних по measured_at, id. Между страницами состояние может измениться.","params":["limit","cursor","sku","category","source","date_from","date_to"],"parameters":[{"name":"limit","desc":"Размер страницы: 1–250; по умолчанию 100."},{"name":"cursor","desc":"next_cursor предыдущего ответа. Сохраняйте фильтры; курсор привязан к методу и организации."},{"name":"sku","desc":"Точное совпадение. Артикул в Core; в методах Ozon — SKU Ozon. Не смешивайте с offer_id."},{"name":"category","desc":"Точное совпадение. Категория или тип продукции в источнике."},{"name":"source","desc":"Точное совпадение. Источник появления записи или измерения."},{"name":"date_from","desc":"Начало периода YYYY-MM-DD включительно по полю measured_at. Задаётся вместе с date_to. Без пары дат — вся сохранённая история."},{"name":"date_to","desc":"Конец периода YYYY-MM-DD включительно. Даты должны существовать; date_from ≤ date_to. month/segment здесь не используются."}],"example":"https://api.expri.space/api/public/v1/ink-measurements?limit=100","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/ink-measurements?limit=100'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/ink-measurements?limit=100\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/ink-measurements?limit=100\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/ink-measurements?limit=100');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"available","desc":"false: модуль ещё не создал таблицу данных; коллекция пустая. true: таблица существует; пустой результат возможен при отсутствии подходящих записей."},{"name":"data_source","desc":"Источник сохранённых данных: core. Запрос не запускает синхронизацию источника."},{"name":"count / limit / has_more / next_cursor","desc":"Количество записей страницы, её лимит, наличие продолжения и курсор. Последняя страница: next_cursor=null."},{"name":"ink_measurements[].id","desc":"Числовой идентификатор записи в Core. Тип: int. NULL источника сохраняется как null."},{"name":"ink_measurements[].event_id","desc":"Уникальный идентификатор измерения чернил. Тип: text. NULL источника сохраняется как null."},{"name":"ink_measurements[].sku","desc":"Артикул в Core; в методах Ozon — SKU Ozon. Не смешивайте с offer_id. Тип: text. NULL источника сохраняется как null."},{"name":"ink_measurements[].category","desc":"Категория или тип продукции в источнике. Тип: text. NULL источника сохраняется как null."},{"name":"ink_measurements[].source","desc":"Источник появления записи или измерения. Тип: text. NULL источника сохраняется как null."},{"name":"ink_measurements[].measured_at","desc":"Время измерения чернил. Тип: text. NULL источника сохраняется как null."},{"name":"ink_measurements[].ink_c_ml","desc":"Расход соответствующего канала CMYK, мл. Тип: float. NULL источника сохраняется как null."},{"name":"ink_measurements[].ink_m_ml","desc":"Расход соответствующего канала CMYK, мл. Тип: float. NULL источника сохраняется как null."},{"name":"ink_measurements[].ink_y_ml","desc":"Расход соответствующего канала CMYK, мл. Тип: float. NULL источника сохраняется как null."},{"name":"ink_measurements[].ink_k_ml","desc":"Расход соответствующего канала CMYK, мл. Тип: float. NULL источника сохраняется как null."},{"name":"ink_measurements[].ink_total_ml","desc":"Общий расход чернил, мл. Тип: float. NULL источника сохраняется как null."},{"name":"ink_measurements[].ink_ml_m2","desc":"Расход чернил на квадратный метр, мл/м². Тип: float. NULL источника сохраняется как null."},{"name":"ink_measurements[].width_cm","desc":"Размер измеренного макета в сантиметрах. Тип: float. NULL источника сохраняется как null."},{"name":"ink_measurements[].height_cm","desc":"Размер измеренного макета в сантиметрах. Тип: float. NULL источника сохраняется как null."},{"name":"ink_measurements[].area_m2","desc":"Площадь в квадратных метрах. Тип: float. NULL источника сохраняется как null."},{"name":"ink_measurements[].strip_count","desc":"Количество полос. Тип: int. NULL источника сохраняется как null."},{"name":"ink_measurements[].box_size","desc":"Сохранённое обозначение размера продукции. Тип: text. NULL источника сохраняется как null."},{"name":"ink_measurements[].media_name","desc":"Название материала печати. Тип: text. NULL источника сохраняется как null."},{"name":"ink_measurements[].passes","desc":"Количество проходов печати. Тип: int. NULL источника сохраняется как null."},{"name":"ink_measurements[].created_at","desc":"Время создания записи в источнике. Тип: text. NULL источника сохраняется как null."}],"responses":{"200":{"title":"Успешно · пример структуры","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"data_source":"core","available":true,"count":1,"limit":100,"has_more":false,"next_cursor":null,"ink_measurements":[{"id":1,"event_id":"Пример","sku":"SKU-001","category":"Пример","source":"Пример","measured_at":"2026-10-12 16:42:49","ink_c_ml":12.5,"ink_m_ml":12.5,"ink_y_ml":12.5,"ink_k_ml":12.5,"ink_total_ml":12.5,"ink_ml_m2":12.5,"width_cm":12.5,"height_cm":12.5,"area_m2":12.5,"strip_count":1,"box_size":"Пример","media_name":"Пример","passes":1,"created_at":"2026-10-12 16:42:49"}]}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_scope_denied:ink_history"}},"422":{"title":"Некорректные параметры","body":{"ok":false,"error":"invalid_cursor"}},"500":{"title":"Ошибка чтения данных","body":{"ok":false,"error":"storage_failed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/ink-measurements","replacement_url":"https://api.expri.space/api/public/v1/ink-measurements","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/marketplaces/wb/prices","scope":"wb_prices","title":"WB: цены продавца","description":"WB: цены продавца. Постраничная выгрузка для внешней интеграции.","note":"Сохранённые цены продавца и скидки по размерам. discounted_price и club_discounted_price не означают цену витрины после СПП; цена карточки и СПП доступны отдельно, если собраны. Возвращаются только сохранённые данные организации токена. generated_at — время ответа. По умолчанию выдаются все сохранённые записи постранично, начиная с последних по snapshot_at, row_key. Между страницами состояние может измениться.","params":["limit","cursor","nm_id","vendor_code","size_id","updated_since"],"parameters":[{"name":"limit","desc":"Размер страницы: 1–250; по умолчанию 100."},{"name":"cursor","desc":"next_cursor предыдущего ответа. Сохраняйте фильтры; курсор привязан к методу и организации."},{"name":"nm_id","desc":"Точное совпадение. Числовой артикул товара WB."},{"name":"vendor_code","desc":"Точное совпадение. Артикул продавца в соответствующем источнике."},{"name":"size_id","desc":"Точное совпадение. Идентификатор размера WB."},{"name":"updated_since","desc":"ISO 8601 с часовым поясом. Фильтр по snapshot_at включительно; допускает повторные записи при синхронизации."}],"example":"https://api.expri.space/api/public/v1/marketplaces/wb/prices?limit=100","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/marketplaces/wb/prices?limit=100'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/marketplaces/wb/prices?limit=100\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/marketplaces/wb/prices?limit=100\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/marketplaces/wb/prices?limit=100');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"available","desc":"false: модуль ещё не создал таблицу данных; коллекция пустая. true: таблица существует; пустой результат возможен при отсутствии подходящих записей."},{"name":"data_source","desc":"Источник сохранённых данных: wb. Запрос не запускает синхронизацию источника."},{"name":"count / limit / has_more / next_cursor","desc":"Количество записей страницы, её лимит, наличие продолжения и курсор. Последняя страница: next_cursor=null."},{"name":"prices[].row_key","desc":"Ключ записи для сопоставления и объединения выгрузок. Тип: text. NULL источника сохраняется как null."},{"name":"prices[].snapshot_at","desc":"Время сохранения снимка источника; не время текущего запроса. Тип: text. NULL источника сохраняется как null."},{"name":"prices[].nm_id","desc":"Числовой артикул товара WB. Тип: int. NULL источника сохраняется как null."},{"name":"prices[].vendor_code","desc":"Артикул продавца в соответствующем источнике. Тип: text. NULL источника сохраняется как null."},{"name":"prices[].size_id","desc":"Идентификатор размера WB. Тип: int. NULL источника сохраняется как null."},{"name":"prices[].tech_size_name","desc":"Название размера WB. Тип: text. NULL источника сохраняется как null."},{"name":"prices[].price","desc":"Цена из соответствующего источника; смысл указан в описании метода. Тип: float. NULL источника сохраняется как null."},{"name":"prices[].discounted_price","desc":"Цена продавца WB после скидки продавца; без гарантии совпадения с витриной. Тип: float. NULL источника сохраняется как null."},{"name":"prices[].discount","desc":"Скидка продавца WB, проценты. Тип: float. NULL источника сохраняется как null."},{"name":"prices[].club_discount","desc":"Скидка WB Клуба, проценты. Тип: float. NULL источника сохраняется как null."},{"name":"prices[].club_discounted_price","desc":"Цена WB с клубной скидкой из сохранённого отчёта цен. Тип: float. NULL источника сохраняется как null."},{"name":"prices[].currency","desc":"Валюта денежного показателя в источнике. Тип: text. NULL источника сохраняется как null."}],"responses":{"200":{"title":"Успешно · пример структуры","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"data_source":"wb","available":true,"count":1,"limit":100,"has_more":false,"next_cursor":null,"prices":[{"row_key":"Пример","snapshot_at":"2026-10-12 16:42:49","nm_id":1,"vendor_code":"SKU-001","size_id":1,"tech_size_name":"Пример","price":12.5,"discounted_price":12.5,"discount":12.5,"club_discount":12.5,"club_discounted_price":12.5,"currency":"RUB"}]}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_scope_denied:wb_prices"}},"422":{"title":"Некорректные параметры","body":{"ok":false,"error":"invalid_cursor"}},"500":{"title":"Ошибка чтения данных","body":{"ok":false,"error":"storage_failed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/marketplaces/wb/prices","replacement_url":"https://api.expri.space/api/public/v1/marketplaces/wb/prices","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/marketplaces/wb/stocks","scope":"wb_stocks","title":"WB: остатки по складам","description":"WB: остатки по складам. Постраничная выгрузка для внешней интеграции.","note":"Сохранённые остатки WB по складам и размерам. Это отдельный источник от внутренних складов Core. При отсутствии детализации по складам ответ может быть пустым; данные не подменяются суммарными остатками. Возвращаются только сохранённые данные организации токена. generated_at — время ответа. По умолчанию выдаются все сохранённые записи постранично, начиная с последних по snapshot_at, row_key. Между страницами состояние может измениться.","params":["limit","cursor","nm_id","warehouse_id","supplier_article","updated_since"],"parameters":[{"name":"limit","desc":"Размер страницы: 1–250; по умолчанию 100."},{"name":"cursor","desc":"next_cursor предыдущего ответа. Сохраняйте фильтры; курсор привязан к методу и организации."},{"name":"nm_id","desc":"Точное совпадение. Числовой артикул товара WB."},{"name":"warehouse_id","desc":"Точное совпадение. Идентификатор склада; WB — число, Ozon — строка."},{"name":"supplier_article","desc":"Точное совпадение. Артикул продавца в соответствующем источнике."},{"name":"updated_since","desc":"ISO 8601 с часовым поясом. Фильтр по snapshot_at включительно; допускает повторные записи при синхронизации."}],"example":"https://api.expri.space/api/public/v1/marketplaces/wb/stocks?limit=100","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/marketplaces/wb/stocks?limit=100'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/marketplaces/wb/stocks?limit=100\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/marketplaces/wb/stocks?limit=100\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/marketplaces/wb/stocks?limit=100');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"available","desc":"false: модуль ещё не создал таблицу данных; коллекция пустая. true: таблица существует; пустой результат возможен при отсутствии подходящих записей."},{"name":"data_source","desc":"Источник сохранённых данных: wb. Запрос не запускает синхронизацию источника."},{"name":"count / limit / has_more / next_cursor","desc":"Количество записей страницы, её лимит, наличие продолжения и курсор. Последняя страница: next_cursor=null."},{"name":"stocks[].row_key","desc":"Ключ записи для сопоставления и объединения выгрузок. Тип: text. NULL источника сохраняется как null."},{"name":"stocks[].snapshot_at","desc":"Время сохранения снимка источника; не время текущего запроса. Тип: text. NULL источника сохраняется как null."},{"name":"stocks[].warehouse_id","desc":"Идентификатор склада; WB — число, Ozon — строка. Тип: int. NULL источника сохраняется как null."},{"name":"stocks[].warehouse_name","desc":"Название склада источника. Тип: text. NULL источника сохраняется как null."},{"name":"stocks[].region_name","desc":"Регион склада WB. Тип: text. NULL источника сохраняется как null."},{"name":"stocks[].chrt_id","desc":"Идентификатор размера WB. Тип: int. NULL источника сохраняется как null."},{"name":"stocks[].nm_id","desc":"Числовой артикул товара WB. Тип: int. NULL источника сохраняется как null."},{"name":"stocks[].barcode","desc":"Штрихкод позиции. Тип: text. NULL источника сохраняется как null."},{"name":"stocks[].supplier_article","desc":"Артикул продавца в соответствующем источнике. Тип: text. NULL источника сохраняется как null."},{"name":"stocks[].quantity","desc":"Количество в исходном отчёте. Тип: int. NULL источника сохраняется как null."},{"name":"stocks[].in_way_to_client","desc":"Количество WB в пути к покупателям. Тип: int. NULL источника сохраняется как null."},{"name":"stocks[].in_way_from_client","desc":"Количество WB в пути от покупателей. Тип: int. NULL источника сохраняется как null."},{"name":"stocks[].quantity_full","desc":"Полное количество из отчёта WB; передаётся без пересчёта. Тип: int. NULL источника сохраняется как null."}],"responses":{"200":{"title":"Успешно · пример структуры","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"data_source":"wb","available":true,"count":1,"limit":100,"has_more":false,"next_cursor":null,"stocks":[{"row_key":"Пример","snapshot_at":"2026-10-12 16:42:49","warehouse_id":1,"warehouse_name":"Пример","region_name":"Пример","chrt_id":1,"nm_id":1,"barcode":"Пример","supplier_article":"SKU-001","quantity":1,"in_way_to_client":1,"in_way_from_client":1,"quantity_full":1}]}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_scope_denied:wb_stocks"}},"422":{"title":"Некорректные параметры","body":{"ok":false,"error":"invalid_cursor"}},"500":{"title":"Ошибка чтения данных","body":{"ok":false,"error":"storage_failed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/marketplaces/wb/stocks","replacement_url":"https://api.expri.space/api/public/v1/marketplaces/wb/stocks","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/marketplaces/wb/orders","scope":"wb_orders","title":"WB: заказы","description":"WB: заказы. Постраничная выгрузка для внешней интеграции.","note":"Исходные заказы WB из сохранённой аналитики, включая отмены. Это не производственные op_orders. Поля сумм и spp передаются как сохранены в отчёте; свежий расчёт СПП по ним не выполняется. Возвращаются только сохранённые данные организации токена. generated_at — время ответа. По умолчанию выдаются все сохранённые записи постранично, начиная с последних по order_date, row_key. Между страницами состояние может измениться.","params":["limit","cursor","nm_id","supplier_article","is_cancel","date_from","date_to","updated_since"],"parameters":[{"name":"limit","desc":"Размер страницы: 1–250; по умолчанию 100."},{"name":"cursor","desc":"next_cursor предыдущего ответа. Сохраняйте фильтры; курсор привязан к методу и организации."},{"name":"nm_id","desc":"Точное совпадение. Числовой артикул товара WB."},{"name":"supplier_article","desc":"Точное совпадение. Артикул продавца в соответствующем источнике."},{"name":"is_cancel","desc":"Точное совпадение. Признак отменённого заказа WB, boolean. Передавайте 0 или 1."},{"name":"date_from","desc":"Начало периода YYYY-MM-DD включительно по полю order_date. Задаётся вместе с date_to. Без пары дат — вся сохранённая история."},{"name":"date_to","desc":"Конец периода YYYY-MM-DD включительно. Даты должны существовать; date_from ≤ date_to. month/segment здесь не используются."},{"name":"updated_since","desc":"ISO 8601 с часовым поясом. Фильтр по snapshot_at включительно; допускает повторные записи при синхронизации."}],"example":"https://api.expri.space/api/public/v1/marketplaces/wb/orders?limit=100","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/marketplaces/wb/orders?limit=100'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/marketplaces/wb/orders?limit=100\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/marketplaces/wb/orders?limit=100\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/marketplaces/wb/orders?limit=100');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"available","desc":"false: модуль ещё не создал таблицу данных; коллекция пустая. true: таблица существует; пустой результат возможен при отсутствии подходящих записей."},{"name":"data_source","desc":"Источник сохранённых данных: wb. Запрос не запускает синхронизацию источника."},{"name":"count / limit / has_more / next_cursor","desc":"Количество записей страницы, её лимит, наличие продолжения и курсор. Последняя страница: next_cursor=null."},{"name":"orders[].row_key","desc":"Ключ записи для сопоставления и объединения выгрузок. Тип: text. NULL источника сохраняется как null."},{"name":"orders[].snapshot_at","desc":"Время сохранения снимка источника; не время текущего запроса. Тип: text. NULL источника сохраняется как null."},{"name":"orders[].order_date","desc":"Дата и время заказа WB. Тип: text. NULL источника сохраняется как null."},{"name":"orders[].last_change_date","desc":"Время изменения операции WB по данным отчёта. Тип: text. NULL источника сохраняется как null."},{"name":"orders[].srid","desc":"Идентификатор заказа WB для связи заказов и продаж. Тип: text. NULL источника сохраняется как null."},{"name":"orders[].warehouse_name","desc":"Название склада источника. Тип: text. NULL источника сохраняется как null."},{"name":"orders[].warehouse_type","desc":"Тип склада или вида запаса в источнике. Тип: text. NULL источника сохраняется как null."},{"name":"orders[].supplier_article","desc":"Артикул продавца в соответствующем источнике. Тип: text. NULL источника сохраняется как null."},{"name":"orders[].nm_id","desc":"Числовой артикул товара WB. Тип: int. NULL источника сохраняется как null."},{"name":"orders[].barcode","desc":"Штрихкод позиции. Тип: text. NULL источника сохраняется как null."},{"name":"orders[].category","desc":"Категория или тип продукции в источнике. Тип: text. NULL источника сохраняется как null."},{"name":"orders[].subject","desc":"Категория или тип продукции в источнике. Тип: text. NULL источника сохраняется как null."},{"name":"orders[].brand","desc":"Бренд товара в источнике. Тип: text. NULL источника сохраняется как null."},{"name":"orders[].tech_size","desc":"Название размера WB. Тип: text. NULL источника сохраняется как null."},{"name":"orders[].income_id","desc":"Идентификатор поставки WB. Тип: int. NULL источника сохраняется как null."},{"name":"orders[].is_supply","desc":"Флаг источника WB, boolean. Тип: bool. NULL источника сохраняется как null."},{"name":"orders[].is_realization","desc":"Флаг источника WB, boolean. Тип: bool. NULL источника сохраняется как null."},{"name":"orders[].total_price","desc":"Сохранённая сумма total_price соответствующего отчёта. Тип: float. NULL источника сохраняется как null."},{"name":"orders[].discount_percent","desc":"Скидка из отчёта WB, проценты. Тип: float. NULL источника сохраняется как null."},{"name":"orders[].spp","desc":"СПП из записи заказа WB, проценты; не новый расчёт по карточке. Тип: float. NULL источника сохраняется как null."},{"name":"orders[].finished_price","desc":"Сохранённая конечная цена из отчёта WB. Тип: float. NULL источника сохраняется как null."},{"name":"orders[].price_with_disc","desc":"Сохранённая цена со скидкой из отчёта WB. Тип: float. NULL источника сохраняется как null."},{"name":"orders[].is_cancel","desc":"Признак отменённого заказа WB, boolean. Тип: bool. NULL источника сохраняется как null."},{"name":"orders[].cancel_date","desc":"Время отмены заказа WB, если есть. Тип: text. NULL источника сохраняется как null."}],"responses":{"200":{"title":"Успешно · пример структуры","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"data_source":"wb","available":true,"count":1,"limit":100,"has_more":false,"next_cursor":null,"orders":[{"row_key":"Пример","snapshot_at":"2026-10-12 16:42:49","order_date":"2026-10-12 16:42:49","last_change_date":"2026-10-12 16:42:49","srid":"Пример","warehouse_name":"Пример","warehouse_type":"Пример","supplier_article":"SKU-001","nm_id":1,"barcode":"Пример","category":"Пример","subject":"Пример","brand":"Пример","tech_size":"Пример","income_id":1,"is_supply":true,"is_realization":true,"total_price":12.5,"discount_percent":12.5,"spp":12.5,"finished_price":12.5,"price_with_disc":12.5,"is_cancel":false,"cancel_date":""}]}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_scope_denied:wb_orders"}},"422":{"title":"Некорректные параметры","body":{"ok":false,"error":"invalid_cursor"}},"500":{"title":"Ошибка чтения данных","body":{"ok":false,"error":"storage_failed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/marketplaces/wb/orders","replacement_url":"https://api.expri.space/api/public/v1/marketplaces/wb/orders","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/marketplaces/wb/sales","scope":"wb_sales","title":"WB: продажи и возвраты","description":"WB: продажи и возвраты. Постраничная выгрузка для внешней интеграции.","note":"Сохранённые продажи и возвраты WB. is_return обозначает возврат; денежные поля возвращаются со знаком источника. for_pay — сумма к перечислению из отчёта, а не цена покупателя. Возвращаются только сохранённые данные организации токена. generated_at — время ответа. По умолчанию выдаются все сохранённые записи постранично, начиная с последних по sale_date, row_key. Между страницами состояние может измениться.","params":["limit","cursor","nm_id","supplier_article","is_return","date_from","date_to","updated_since"],"parameters":[{"name":"limit","desc":"Размер страницы: 1–250; по умолчанию 100."},{"name":"cursor","desc":"next_cursor предыдущего ответа. Сохраняйте фильтры; курсор привязан к методу и организации."},{"name":"nm_id","desc":"Точное совпадение. Числовой артикул товара WB."},{"name":"supplier_article","desc":"Точное совпадение. Артикул продавца в соответствующем источнике."},{"name":"is_return","desc":"Точное совпадение. Признак возврата WB, boolean. Передавайте 0 или 1."},{"name":"date_from","desc":"Начало периода YYYY-MM-DD включительно по полю sale_date. Задаётся вместе с date_to. Без пары дат — вся сохранённая история."},{"name":"date_to","desc":"Конец периода YYYY-MM-DD включительно. Даты должны существовать; date_from ≤ date_to. month/segment здесь не используются."},{"name":"updated_since","desc":"ISO 8601 с часовым поясом. Фильтр по snapshot_at включительно; допускает повторные записи при синхронизации."}],"example":"https://api.expri.space/api/public/v1/marketplaces/wb/sales?limit=100","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/marketplaces/wb/sales?limit=100'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/marketplaces/wb/sales?limit=100\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/marketplaces/wb/sales?limit=100\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/marketplaces/wb/sales?limit=100');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"available","desc":"false: модуль ещё не создал таблицу данных; коллекция пустая. true: таблица существует; пустой результат возможен при отсутствии подходящих записей."},{"name":"data_source","desc":"Источник сохранённых данных: wb. Запрос не запускает синхронизацию источника."},{"name":"count / limit / has_more / next_cursor","desc":"Количество записей страницы, её лимит, наличие продолжения и курсор. Последняя страница: next_cursor=null."},{"name":"sales[].row_key","desc":"Ключ записи для сопоставления и объединения выгрузок. Тип: text. NULL источника сохраняется как null."},{"name":"sales[].snapshot_at","desc":"Время сохранения снимка источника; не время текущего запроса. Тип: text. NULL источника сохраняется как null."},{"name":"sales[].sale_date","desc":"Дата и время продажи или возврата WB. Тип: text. NULL источника сохраняется как null."},{"name":"sales[].last_change_date","desc":"Время изменения операции WB по данным отчёта. Тип: text. NULL источника сохраняется как null."},{"name":"sales[].sale_id","desc":"Идентификатор операции продажи WB. Тип: text. NULL источника сохраняется как null."},{"name":"sales[].srid","desc":"Идентификатор заказа WB для связи заказов и продаж. Тип: text. NULL источника сохраняется как null."},{"name":"sales[].g_number","desc":"Номер заказа WB по данным источника. Тип: text. NULL источника сохраняется как null."},{"name":"sales[].warehouse_name","desc":"Название склада источника. Тип: text. NULL источника сохраняется как null."},{"name":"sales[].supplier_article","desc":"Артикул продавца в соответствующем источнике. Тип: text. NULL источника сохраняется как null."},{"name":"sales[].nm_id","desc":"Числовой артикул товара WB. Тип: int. NULL источника сохраняется как null."},{"name":"sales[].barcode","desc":"Штрихкод позиции. Тип: text. NULL источника сохраняется как null."},{"name":"sales[].total_price","desc":"Сохранённая сумма total_price соответствующего отчёта. Тип: float. NULL источника сохраняется как null."},{"name":"sales[].finished_price","desc":"Сохранённая конечная цена из отчёта WB. Тип: float. NULL источника сохраняется как null."},{"name":"sales[].price_with_disc","desc":"Сохранённая цена со скидкой из отчёта WB. Тип: float. NULL источника сохраняется как null."},{"name":"sales[].for_pay","desc":"Сумма к перечислению из отчёта WB; не цена покупателя. Тип: float. NULL источника сохраняется как null."},{"name":"sales[].is_return","desc":"Признак возврата WB, boolean. Тип: bool. NULL источника сохраняется как null."}],"responses":{"200":{"title":"Успешно · пример структуры","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"data_source":"wb","available":true,"count":1,"limit":100,"has_more":false,"next_cursor":null,"sales":[{"row_key":"Пример","snapshot_at":"2026-10-12 16:42:49","sale_date":"2026-10-12 16:42:49","last_change_date":"2026-10-12 16:42:49","sale_id":"Пример","srid":"Пример","g_number":"Пример","warehouse_name":"Пример","supplier_article":"SKU-001","nm_id":1,"barcode":"Пример","total_price":12.5,"finished_price":12.5,"price_with_disc":12.5,"for_pay":12.5,"is_return":false}]}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_scope_denied:wb_sales"}},"422":{"title":"Некорректные параметры","body":{"ok":false,"error":"invalid_cursor"}},"500":{"title":"Ошибка чтения данных","body":{"ok":false,"error":"storage_failed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/marketplaces/wb/sales","replacement_url":"https://api.expri.space/api/public/v1/marketplaces/wb/sales","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/marketplaces/wb/spp","scope":"wb_spp","title":"WB: история СПП по товарам","description":"WB: история СПП по товарам. Постраничная выгрузка для внешней интеграции.","note":"Только сохранённые наблюдения СПП по конкретным товарам. null означает отсутствие значения. Если используется только групповая матрица, этот метод может быть пустым: групповые проценты не назначаются отдельным SKU. Возвращаются только сохранённые данные организации токена. generated_at — время ответа. По умолчанию выдаются все сохранённые записи постранично, начиная с последних по snapshot_date, nm_id. Между страницами состояние может измениться.","params":["limit","cursor","nm_id","vendor_code","product_group","date_from","date_to","updated_since"],"parameters":[{"name":"limit","desc":"Размер страницы: 1–250; по умолчанию 100."},{"name":"cursor","desc":"next_cursor предыдущего ответа. Сохраняйте фильтры; курсор привязан к методу и организации."},{"name":"nm_id","desc":"Точное совпадение. Числовой артикул товара WB."},{"name":"vendor_code","desc":"Точное совпадение. Артикул продавца в соответствующем источнике."},{"name":"product_group","desc":"Точное совпадение. Группа продукции в сохранённой аналитике СПП WB."},{"name":"date_from","desc":"Начало периода YYYY-MM-DD включительно по полю snapshot_date. Задаётся вместе с date_to. Без пары дат — вся сохранённая история."},{"name":"date_to","desc":"Конец периода YYYY-MM-DD включительно. Даты должны существовать; date_from ≤ date_to. month/segment здесь не используются."},{"name":"updated_since","desc":"ISO 8601 с часовым поясом. Фильтр по updated_at включительно; допускает повторные записи при синхронизации."}],"example":"https://api.expri.space/api/public/v1/marketplaces/wb/spp?limit=100","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/marketplaces/wb/spp?limit=100'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/marketplaces/wb/spp?limit=100\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/marketplaces/wb/spp?limit=100\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/marketplaces/wb/spp?limit=100');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"available","desc":"false: модуль ещё не создал таблицу данных; коллекция пустая. true: таблица существует; пустой результат возможен при отсутствии подходящих записей."},{"name":"data_source","desc":"Источник сохранённых данных: wb. Запрос не запускает синхронизацию источника."},{"name":"count / limit / has_more / next_cursor","desc":"Количество записей страницы, её лимит, наличие продолжения и курсор. Последняя страница: next_cursor=null."},{"name":"spp[].snapshot_date","desc":"Дата сохранённого снимка источника. Тип: text. NULL источника сохраняется как null."},{"name":"spp[].nm_id","desc":"Числовой артикул товара WB. Тип: int. NULL источника сохраняется как null."},{"name":"spp[].vendor_code","desc":"Артикул продавца в соответствующем источнике. Тип: text. NULL источника сохраняется как null."},{"name":"spp[].product_name","desc":"Название товара в источнике. Тип: text. NULL источника сохраняется как null."},{"name":"spp[].subject_name","desc":"Категория или тип продукции в источнике. Тип: text. NULL источника сохраняется как null."},{"name":"spp[].brand_name","desc":"Бренд товара в источнике. Тип: text. NULL источника сохраняется как null."},{"name":"spp[].product_group","desc":"Группа продукции в сохранённой аналитике СПП WB. Тип: text. NULL источника сохраняется как null."},{"name":"spp[].seller_price","desc":"Цена продавца WB до скидки в сохранённом наблюдении. Тип: float. NULL источника сохраняется как null."},{"name":"spp[].seller_discounted_price","desc":"Цена продавца WB после скидки в сохранённом наблюдении. Тип: float. NULL источника сохраняется как null."},{"name":"spp[].card_list_price","desc":"Цена карточки WB до скидки в сохранённом наблюдении. Тип: float. NULL источника сохраняется как null."},{"name":"spp[].card_price","desc":"Сохранённая цена покупателя с карточки WB; не текущая проверка. Тип: float. NULL источника сохраняется как null."},{"name":"spp[].explicit_spp","desc":"СПП, прочитанная из источника карточки WB, проценты; null при отсутствии. Тип: float. NULL источника сохраняется как null."},{"name":"spp[].computed_spp","desc":"Сохранённая расчётная СПП WB, проценты; null при отсутствии. Тип: float. NULL источника сохраняется как null."},{"name":"spp[].effective_spp","desc":"Сохранённое итоговое значение СПП WB, проценты; null при отсутствии. Тип: float. NULL источника сохраняется как null."},{"name":"spp[].diff_rub","desc":"Сохранённая разница цен продавца и покупателя, ₽. Тип: float. NULL источника сохраняется как null."},{"name":"spp[].updated_at","desc":"Время последнего сохранённого обновления записи. Тип: text. NULL источника сохраняется как null."}],"responses":{"200":{"title":"Успешно · пример структуры","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"data_source":"wb","available":true,"count":1,"limit":100,"has_more":false,"next_cursor":null,"spp":[{"snapshot_date":"2026-10-12","nm_id":1,"vendor_code":"SKU-001","product_name":"Пример","subject_name":"Пример","brand_name":"Пример","product_group":"Пример","seller_price":12.5,"seller_discounted_price":12.5,"card_list_price":12.5,"card_price":12.5,"explicit_spp":null,"computed_spp":null,"effective_spp":null,"diff_rub":12.5,"updated_at":"2026-10-12 16:42:49"}]}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_scope_denied:wb_spp"}},"422":{"title":"Некорректные параметры","body":{"ok":false,"error":"invalid_cursor"}},"500":{"title":"Ошибка чтения данных","body":{"ok":false,"error":"storage_failed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/marketplaces/wb/spp","replacement_url":"https://api.expri.space/api/public/v1/marketplaces/wb/spp","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/marketplaces/wb/spp-groups","scope":"wb_spp","title":"WB: распределение СПП по группам","description":"WB: распределение СПП по группам. Постраничная выгрузка для внешней интеграции.","note":"Сохранённая матрица из подключённого источника Google Sheets: количество карточек nm_count с данным процентом СПП в группе на дату. Это агрегат, не цена и не СПП конкретного артикула. Возвращаются только сохранённые данные организации токена. generated_at — время ответа. По умолчанию выдаются все сохранённые записи постранично, начиная с последних по snapshot_date, product_group, spp_percent. Между страницами состояние может измениться.","params":["limit","cursor","product_group","date_from","date_to","updated_since"],"parameters":[{"name":"limit","desc":"Размер страницы: 1–250; по умолчанию 100."},{"name":"cursor","desc":"next_cursor предыдущего ответа. Сохраняйте фильтры; курсор привязан к методу и организации."},{"name":"product_group","desc":"Точное совпадение. Группа продукции в сохранённой аналитике СПП WB."},{"name":"date_from","desc":"Начало периода YYYY-MM-DD включительно по полю snapshot_date. Задаётся вместе с date_to. Без пары дат — вся сохранённая история."},{"name":"date_to","desc":"Конец периода YYYY-MM-DD включительно. Даты должны существовать; date_from ≤ date_to. month/segment здесь не используются."},{"name":"updated_since","desc":"ISO 8601 с часовым поясом. Фильтр по updated_at включительно; допускает повторные записи при синхронизации."}],"example":"https://api.expri.space/api/public/v1/marketplaces/wb/spp-groups?limit=100","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/marketplaces/wb/spp-groups?limit=100'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/marketplaces/wb/spp-groups?limit=100\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/marketplaces/wb/spp-groups?limit=100\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/marketplaces/wb/spp-groups?limit=100');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"available","desc":"false: модуль ещё не создал таблицу данных; коллекция пустая. true: таблица существует; пустой результат возможен при отсутствии подходящих записей."},{"name":"data_source","desc":"Источник сохранённых данных: wb. Запрос не запускает синхронизацию источника."},{"name":"count / limit / has_more / next_cursor","desc":"Количество записей страницы, её лимит, наличие продолжения и курсор. Последняя страница: next_cursor=null."},{"name":"spp_groups[].snapshot_date","desc":"Дата сохранённого снимка источника. Тип: text. NULL источника сохраняется как null."},{"name":"spp_groups[].product_group","desc":"Группа продукции в сохранённой аналитике СПП WB. Тип: text. NULL источника сохраняется как null."},{"name":"spp_groups[].spp_percent","desc":"Процент СПП в групповом распределении WB. Тип: int. NULL источника сохраняется как null."},{"name":"spp_groups[].nm_count","desc":"Количество карточек WB в группе с данным процентом СПП. Тип: int. NULL источника сохраняется как null."},{"name":"spp_groups[].updated_at","desc":"Время последнего сохранённого обновления записи. Тип: text. NULL источника сохраняется как null."}],"responses":{"200":{"title":"Успешно · пример структуры","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"data_source":"wb","available":true,"count":1,"limit":100,"has_more":false,"next_cursor":null,"spp_groups":[{"snapshot_date":"2026-10-12","product_group":"Пример","spp_percent":1,"nm_count":1,"updated_at":"2026-10-12 16:42:49"}]}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_scope_denied:wb_spp"}},"422":{"title":"Некорректные параметры","body":{"ok":false,"error":"invalid_cursor"}},"500":{"title":"Ошибка чтения данных","body":{"ok":false,"error":"storage_failed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/marketplaces/wb/spp-groups","replacement_url":"https://api.expri.space/api/public/v1/marketplaces/wb/spp-groups","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/marketplaces/wb/funnel","scope":"wb_analytics","title":"WB: воронка продаж","description":"WB: воронка продаж. Постраничная выгрузка для внешней интеграции.","note":"Показатели за period_days дней, заканчивающихся датой снимка. date_from/date_to фильтруют даты снимков. Пересекающиеся периоды нельзя суммировать как независимые дни. Возвращаются только сохранённые данные организации токена. generated_at — время ответа. По умолчанию выдаются все сохранённые записи постранично, начиная с последних по snapshot_date, period_days, nm_id. Между страницами состояние может измениться.","params":["limit","cursor","nm_id","vendor_code","period_days","date_from","date_to"],"parameters":[{"name":"limit","desc":"Размер страницы: 1–250; по умолчанию 100."},{"name":"cursor","desc":"next_cursor предыдущего ответа. Сохраняйте фильтры; курсор привязан к методу и организации."},{"name":"nm_id","desc":"Точное совпадение. Числовой артикул товара WB."},{"name":"vendor_code","desc":"Точное совпадение. Артикул продавца в соответствующем источнике."},{"name":"period_days","desc":"Точное совпадение. Количество дней в периоде, к которому относятся показатели снимка."},{"name":"date_from","desc":"Начало периода YYYY-MM-DD включительно по полю snapshot_date. Задаётся вместе с date_to. Без пары дат — вся сохранённая история."},{"name":"date_to","desc":"Конец периода YYYY-MM-DD включительно. Даты должны существовать; date_from ≤ date_to. month/segment здесь не используются."}],"example":"https://api.expri.space/api/public/v1/marketplaces/wb/funnel?limit=100","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/marketplaces/wb/funnel?limit=100'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/marketplaces/wb/funnel?limit=100\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/marketplaces/wb/funnel?limit=100\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/marketplaces/wb/funnel?limit=100');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"available","desc":"false: модуль ещё не создал таблицу данных; коллекция пустая. true: таблица существует; пустой результат возможен при отсутствии подходящих записей."},{"name":"data_source","desc":"Источник сохранённых данных: wb. Запрос не запускает синхронизацию источника."},{"name":"count / limit / has_more / next_cursor","desc":"Количество записей страницы, её лимит, наличие продолжения и курсор. Последняя страница: next_cursor=null."},{"name":"funnel[].snapshot_date","desc":"Дата сохранённого снимка источника. Тип: text. NULL источника сохраняется как null."},{"name":"funnel[].period_days","desc":"Количество дней в периоде, к которому относятся показатели снимка. Тип: int. NULL источника сохраняется как null."},{"name":"funnel[].nm_id","desc":"Числовой артикул товара WB. Тип: int. NULL источника сохраняется как null."},{"name":"funnel[].title","desc":"Название товара в источнике. Тип: text. NULL источника сохраняется как null."},{"name":"funnel[].vendor_code","desc":"Артикул продавца в соответствующем источнике. Тип: text. NULL источника сохраняется как null."},{"name":"funnel[].brand_name","desc":"Бренд товара в источнике. Тип: text. NULL источника сохраняется как null."},{"name":"funnel[].subject_name","desc":"Категория или тип продукции в источнике. Тип: text. NULL источника сохраняется как null."},{"name":"funnel[].open_count","desc":"Количество открытий карточки за период источника. Тип: int. NULL источника сохраняется как null."},{"name":"funnel[].cart_count","desc":"Количество добавлений в корзину за период источника. Тип: int. NULL источника сохраняется как null."},{"name":"funnel[].order_count","desc":"Количество заказов за период источника. Тип: int. NULL источника сохраняется как null."},{"name":"funnel[].order_sum","desc":"Сумма заказов за период источника. Тип: float. NULL источника сохраняется как null."},{"name":"funnel[].buyout_count","desc":"Количество выкупов за период источника. Тип: int. NULL источника сохраняется как null."},{"name":"funnel[].buyout_sum","desc":"Сумма выкупов за период источника. Тип: float. NULL источника сохраняется как null."},{"name":"funnel[].cancel_count","desc":"Количество отмен за период источника. Тип: int. NULL источника сохраняется как null."},{"name":"funnel[].cancel_sum","desc":"Сумма отмен за период источника. Тип: float. NULL источника сохраняется как null."},{"name":"funnel[].avg_price","desc":"Средняя цена за период источника. Тип: float. NULL источника сохраняется как null."},{"name":"funnel[].avg_orders_count_per_day","desc":"Среднее количество заказов в день за период источника. Тип: float. NULL источника сохраняется как null."},{"name":"funnel[].share_order_percent","desc":"Доля заказов, проценты. Тип: float. NULL источника сохраняется как null."},{"name":"funnel[].add_to_wishlist","desc":"Количество добавлений в избранное. Тип: int. NULL источника сохраняется как null."},{"name":"funnel[].localization_percent","desc":"Процент локализации из отчёта WB. Тип: float. NULL источника сохраняется как null."},{"name":"funnel[].add_to_cart_percent","desc":"Конверсия в корзину из отчёта WB, проценты. Тип: float. NULL источника сохраняется как null."},{"name":"funnel[].cart_to_order_percent","desc":"Конверсия из корзины в заказ, проценты. Тип: float. NULL источника сохраняется как null."},{"name":"funnel[].buyout_percent","desc":"Доля выкупов, проценты. Тип: float. NULL источника сохраняется как null."},{"name":"funnel[].currency","desc":"Валюта денежного показателя в источнике. Тип: text. NULL источника сохраняется как null."}],"responses":{"200":{"title":"Успешно · пример структуры","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"data_source":"wb","available":true,"count":1,"limit":100,"has_more":false,"next_cursor":null,"funnel":[{"snapshot_date":"2026-10-12","period_days":1,"nm_id":1,"title":"Пример","vendor_code":"SKU-001","brand_name":"Пример","subject_name":"Пример","open_count":1,"cart_count":1,"order_count":1,"order_sum":12.5,"buyout_count":1,"buyout_sum":12.5,"cancel_count":1,"cancel_sum":12.5,"avg_price":12.5,"avg_orders_count_per_day":12.5,"share_order_percent":12.5,"add_to_wishlist":1,"localization_percent":12.5,"add_to_cart_percent":12.5,"cart_to_order_percent":12.5,"buyout_percent":12.5,"currency":"RUB"}]}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_scope_denied:wb_analytics"}},"422":{"title":"Некорректные параметры","body":{"ok":false,"error":"invalid_cursor"}},"500":{"title":"Ошибка чтения данных","body":{"ok":false,"error":"storage_failed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/marketplaces/wb/funnel","replacement_url":"https://api.expri.space/api/public/v1/marketplaces/wb/funnel","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/marketplaces/wb/ads","scope":"wb_ads","title":"WB: рекламная аналитика","description":"WB: рекламная аналитика. Постраничная выгрузка для внешней интеграции.","note":"Сохранённые снимки рекламной аналитики. date_from/date_to отбирают даты снимков; показатели могут относиться к окну сбора, а не одному дню. Суммируйте только непересекающиеся периоды источника. Возвращаются только сохранённые данные организации токена. generated_at — время ответа. По умолчанию выдаются все сохранённые записи постранично, начиная с последних по snapshot_date, advert_id. Между страницами состояние может измениться.","params":["limit","cursor","advert_id","advert_status","date_from","date_to"],"parameters":[{"name":"limit","desc":"Размер страницы: 1–250; по умолчанию 100."},{"name":"cursor","desc":"next_cursor предыдущего ответа. Сохраняйте фильтры; курсор привязан к методу и организации."},{"name":"advert_id","desc":"Точное совпадение. Идентификатор рекламной кампании WB."},{"name":"advert_status","desc":"Точное совпадение. Тип или статус рекламной кампании WB, код источника."},{"name":"date_from","desc":"Начало периода YYYY-MM-DD включительно по полю snapshot_date. Задаётся вместе с date_to. Без пары дат — вся сохранённая история."},{"name":"date_to","desc":"Конец периода YYYY-MM-DD включительно. Даты должны существовать; date_from ≤ date_to. month/segment здесь не используются."}],"example":"https://api.expri.space/api/public/v1/marketplaces/wb/ads?limit=100","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/marketplaces/wb/ads?limit=100'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/marketplaces/wb/ads?limit=100\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/marketplaces/wb/ads?limit=100\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/marketplaces/wb/ads?limit=100');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"available","desc":"false: модуль ещё не создал таблицу данных; коллекция пустая. true: таблица существует; пустой результат возможен при отсутствии подходящих записей."},{"name":"data_source","desc":"Источник сохранённых данных: wb. Запрос не запускает синхронизацию источника."},{"name":"count / limit / has_more / next_cursor","desc":"Количество записей страницы, её лимит, наличие продолжения и курсор. Последняя страница: next_cursor=null."},{"name":"ads[].snapshot_date","desc":"Дата сохранённого снимка источника. Тип: text. NULL источника сохраняется как null."},{"name":"ads[].advert_id","desc":"Идентификатор рекламной кампании WB. Тип: int. NULL источника сохраняется как null."},{"name":"ads[].advert_type","desc":"Тип или статус рекламной кампании WB, код источника. Тип: int. NULL источника сохраняется как null."},{"name":"ads[].advert_status","desc":"Тип или статус рекламной кампании WB, код источника. Тип: int. NULL источника сохраняется как null."},{"name":"ads[].campaign_name","desc":"Название рекламной кампании. Тип: text. NULL источника сохраняется как null."},{"name":"ads[].views","desc":"Количество показов или кликов за период источника. Тип: int. NULL источника сохраняется как null."},{"name":"ads[].clicks","desc":"Количество показов или кликов за период источника. Тип: int. NULL источника сохраняется как null."},{"name":"ads[].ctr","desc":"Кликабельность CTR, проценты. Тип: float. NULL источника сохраняется как null."},{"name":"ads[].cpc","desc":"Стоимость клика из отчёта рекламы. Тип: float. NULL источника сохраняется как null."},{"name":"ads[].cpm","desc":"Стоимость тысячи показов из отчёта рекламы. Тип: float. NULL источника сохраняется как null."},{"name":"ads[].orders_count","desc":"Количество заказов за период источника. Тип: int. NULL источника сохраняется как null."},{"name":"ads[].atbs","desc":"Добавления в корзину из отчёта рекламы. Тип: int. NULL источника сохраняется как null."},{"name":"ads[].canceled","desc":"Количество отмен за период источника. Тип: int. NULL источника сохраняется как null."},{"name":"ads[].sum_spent","desc":"Расход на рекламу за период источника. Тип: float. NULL источника сохраняется как null."},{"name":"ads[].sum_price","desc":"Сумма заказов из отчёта рекламы за период источника. Тип: float. NULL источника сохраняется как null."},{"name":"ads[].compare_to_date","desc":"Дата снимка, с которым рассчитаны изменения. Тип: text. NULL источника сохраняется как null."},{"name":"ads[].spend_delta","desc":"Сохранённое изменение соответствующего показателя относительно compare_to_date. Тип: float. NULL источника сохраняется как null."},{"name":"ads[].revenue_delta","desc":"Сохранённое изменение соответствующего показателя относительно compare_to_date. Тип: float. NULL источника сохраняется как null."},{"name":"ads[].clicks_delta","desc":"Сохранённое изменение соответствующего показателя относительно compare_to_date. Тип: int. NULL источника сохраняется как null."},{"name":"ads[].views_delta","desc":"Сохранённое изменение соответствующего показателя относительно compare_to_date. Тип: int. NULL источника сохраняется как null."},{"name":"ads[].orders_delta","desc":"Сохранённое изменение соответствующего показателя относительно compare_to_date. Тип: int. NULL источника сохраняется как null."}],"responses":{"200":{"title":"Успешно · пример структуры","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"data_source":"wb","available":true,"count":1,"limit":100,"has_more":false,"next_cursor":null,"ads":[{"snapshot_date":"2026-10-12","advert_id":1,"advert_type":1,"advert_status":1,"campaign_name":"Пример","views":1,"clicks":1,"ctr":12.5,"cpc":12.5,"cpm":12.5,"orders_count":1,"atbs":1,"canceled":1,"sum_spent":12.5,"sum_price":12.5,"compare_to_date":"2026-10-12","spend_delta":12.5,"revenue_delta":12.5,"clicks_delta":1,"views_delta":1,"orders_delta":1}]}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_scope_denied:wb_ads"}},"422":{"title":"Некорректные параметры","body":{"ok":false,"error":"invalid_cursor"}},"500":{"title":"Ошибка чтения данных","body":{"ok":false,"error":"storage_failed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/marketplaces/wb/ads","replacement_url":"https://api.expri.space/api/public/v1/marketplaces/wb/ads","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/marketplaces/ozon/products","scope":"ozon_products","title":"Ozon: каталог и цены продавца","description":"Ozon: каталог и цены продавца. Постраничная выгрузка для внешней интеграции.","note":"Каталог, сохранённый аналитикой Ozon из Seller API. marketing_seller_price — сохранённая цена продавца с акциями. marketing_price не подтверждает цену с Ozon Картой. Цены покупателя и СПП расширения доступны в отдельном сервисе /api/public/v1/ozon/prices с ключом магазина; этот метод их не заменяет. Возвращаются только сохранённые данные организации токена. generated_at — время ответа. По умолчанию выдаются все сохранённые записи постранично, начиная с последних по snapshot_at, product_id. Между страницами состояние может измениться.","params":["limit","cursor","product_id","offer_id","sku","status","updated_since"],"parameters":[{"name":"limit","desc":"Размер страницы: 1–250; по умолчанию 100."},{"name":"cursor","desc":"next_cursor предыдущего ответа. Сохраняйте фильтры; курсор привязан к методу и организации."},{"name":"product_id","desc":"Точное совпадение. Идентификатор товара Ozon, строка."},{"name":"offer_id","desc":"Точное совпадение. Артикул продавца в соответствующем источнике."},{"name":"sku","desc":"Точное совпадение. Артикул в Core; в методах Ozon — SKU Ozon. Не смешивайте с offer_id."},{"name":"status","desc":"Точное совпадение. Статус или подстатус в сохранённом источнике."},{"name":"updated_since","desc":"ISO 8601 с часовым поясом. Фильтр по snapshot_at включительно; допускает повторные записи при синхронизации."}],"example":"https://api.expri.space/api/public/v1/marketplaces/ozon/products?limit=100","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/marketplaces/ozon/products?limit=100'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/marketplaces/ozon/products?limit=100\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/marketplaces/ozon/products?limit=100\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/marketplaces/ozon/products?limit=100');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"available","desc":"false: модуль ещё не создал таблицу данных; коллекция пустая. true: таблица существует; пустой результат возможен при отсутствии подходящих записей."},{"name":"data_source","desc":"Источник сохранённых данных: ozon. Запрос не запускает синхронизацию источника."},{"name":"count / limit / has_more / next_cursor","desc":"Количество записей страницы, её лимит, наличие продолжения и курсор. Последняя страница: next_cursor=null."},{"name":"products[].product_id","desc":"Идентификатор товара Ozon, строка. Тип: text. NULL источника сохраняется как null."},{"name":"products[].snapshot_at","desc":"Время сохранения снимка источника; не время текущего запроса. Тип: text. NULL источника сохраняется как null."},{"name":"products[].offer_id","desc":"Артикул продавца в соответствующем источнике. Тип: text. NULL источника сохраняется как null."},{"name":"products[].sku","desc":"Артикул в Core; в методах Ozon — SKU Ozon. Не смешивайте с offer_id. Тип: text. NULL источника сохраняется как null."},{"name":"products[].name","desc":"Название товара в источнике. Тип: text. NULL источника сохраняется как null."},{"name":"products[].status","desc":"Статус или подстатус в сохранённом источнике. Тип: text. NULL источника сохраняется как null."},{"name":"products[].visibility","desc":"Сохранённая видимость товара Ozon. Тип: text. NULL источника сохраняется как null."},{"name":"products[].price","desc":"Цена из соответствующего источника; смысл указан в описании метода. Тип: float. NULL источника сохраняется как null."},{"name":"products[].old_price","desc":"Сохранённая старая цена Ozon. Тип: float. NULL источника сохраняется как null."},{"name":"products[].marketing_price","desc":"Поле маркетинговой цены Ozon; не подтверждённая цена с Ozon Картой. Тип: float. NULL источника сохраняется как null."},{"name":"products[].marketing_seller_price","desc":"Цена продавца Ozon с акциями из сохранённого Seller API. Тип: float. NULL источника сохраняется как null."},{"name":"products[].min_price","desc":"Сохранённая минимальная цена из каталога Ozon. Тип: float. NULL источника сохраняется как null."},{"name":"products[].currency","desc":"Валюта денежного показателя в источнике. Тип: text. NULL источника сохраняется как null."},{"name":"products[].barcode","desc":"Штрихкод позиции. Тип: text. NULL источника сохраняется как null."}],"responses":{"200":{"title":"Успешно · пример структуры","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"data_source":"ozon","available":true,"count":1,"limit":100,"has_more":false,"next_cursor":null,"products":[{"product_id":"100001","snapshot_at":"2026-10-12 16:42:49","offer_id":"SKU-001","sku":"1549432508","name":"Пример","status":"Пример статуса","visibility":"Пример","price":12.5,"old_price":12.5,"marketing_price":12.5,"marketing_seller_price":12.5,"min_price":12.5,"currency":"RUB","barcode":"Пример"}]}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_scope_denied:ozon_products"}},"422":{"title":"Некорректные параметры","body":{"ok":false,"error":"invalid_cursor"}},"500":{"title":"Ошибка чтения данных","body":{"ok":false,"error":"storage_failed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/marketplaces/ozon/products","replacement_url":"https://api.expri.space/api/public/v1/marketplaces/ozon/products","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/marketplaces/ozon/stocks","scope":"ozon_stocks","title":"Ozon: остатки по складам","description":"Ozon: остатки по складам. Постраничная выгрузка для внешней интеграции.","note":"Сохранённые остатки Ozon. present, promised и reserved возвращаются отдельными показателями источника; метод не вычисляет их сумму как доступный остаток. Возвращаются только сохранённые данные организации токена. generated_at — время ответа. По умолчанию выдаются все сохранённые записи постранично, начиная с последних по snapshot_at, row_key. Между страницами состояние может измениться.","params":["limit","cursor","product_id","offer_id","sku","warehouse_id","warehouse_type","stock_type","updated_since"],"parameters":[{"name":"limit","desc":"Размер страницы: 1–250; по умолчанию 100."},{"name":"cursor","desc":"next_cursor предыдущего ответа. Сохраняйте фильтры; курсор привязан к методу и организации."},{"name":"product_id","desc":"Точное совпадение. Идентификатор товара Ozon, строка."},{"name":"offer_id","desc":"Точное совпадение. Артикул продавца в соответствующем источнике."},{"name":"sku","desc":"Точное совпадение. Артикул в Core; в методах Ozon — SKU Ozon. Не смешивайте с offer_id."},{"name":"warehouse_id","desc":"Точное совпадение. Идентификатор склада; WB — число, Ozon — строка."},{"name":"warehouse_type","desc":"Точное совпадение. Тип склада или вида запаса в источнике."},{"name":"stock_type","desc":"Точное совпадение. Тип склада или вида запаса в источнике."},{"name":"updated_since","desc":"ISO 8601 с часовым поясом. Фильтр по snapshot_at включительно; допускает повторные записи при синхронизации."}],"example":"https://api.expri.space/api/public/v1/marketplaces/ozon/stocks?limit=100","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/marketplaces/ozon/stocks?limit=100'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/marketplaces/ozon/stocks?limit=100\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/marketplaces/ozon/stocks?limit=100\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/marketplaces/ozon/stocks?limit=100');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"available","desc":"false: модуль ещё не создал таблицу данных; коллекция пустая. true: таблица существует; пустой результат возможен при отсутствии подходящих записей."},{"name":"data_source","desc":"Источник сохранённых данных: ozon. Запрос не запускает синхронизацию источника."},{"name":"count / limit / has_more / next_cursor","desc":"Количество записей страницы, её лимит, наличие продолжения и курсор. Последняя страница: next_cursor=null."},{"name":"stocks[].row_key","desc":"Ключ записи для сопоставления и объединения выгрузок. Тип: text. NULL источника сохраняется как null."},{"name":"stocks[].snapshot_at","desc":"Время сохранения снимка источника; не время текущего запроса. Тип: text. NULL источника сохраняется как null."},{"name":"stocks[].product_id","desc":"Идентификатор товара Ozon, строка. Тип: text. NULL источника сохраняется как null."},{"name":"stocks[].offer_id","desc":"Артикул продавца в соответствующем источнике. Тип: text. NULL источника сохраняется как null."},{"name":"stocks[].sku","desc":"Артикул в Core; в методах Ozon — SKU Ozon. Не смешивайте с offer_id. Тип: text. NULL источника сохраняется как null."},{"name":"stocks[].warehouse_id","desc":"Идентификатор склада; WB — число, Ozon — строка. Тип: text. NULL источника сохраняется как null."},{"name":"stocks[].warehouse_name","desc":"Название склада источника. Тип: text. NULL источника сохраняется как null."},{"name":"stocks[].warehouse_type","desc":"Тип склада или вида запаса в источнике. Тип: text. NULL источника сохраняется как null."},{"name":"stocks[].stock_type","desc":"Тип склада или вида запаса в источнике. Тип: text. NULL источника сохраняется как null."},{"name":"stocks[].present","desc":"Сохранённый показатель остатка Ozon; значения не суммируются методом. Тип: int. NULL источника сохраняется как null."},{"name":"stocks[].promised","desc":"Сохранённый показатель остатка Ozon; значения не суммируются методом. Тип: int. NULL источника сохраняется как null."},{"name":"stocks[].reserved","desc":"Сохранённый показатель остатка Ozon; значения не суммируются методом. Тип: int. NULL источника сохраняется как null."}],"responses":{"200":{"title":"Успешно · пример структуры","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"data_source":"ozon","available":true,"count":1,"limit":100,"has_more":false,"next_cursor":null,"stocks":[{"row_key":"Пример","snapshot_at":"2026-10-12 16:42:49","product_id":"100001","offer_id":"SKU-001","sku":"1549432508","warehouse_id":"Пример","warehouse_name":"Пример","warehouse_type":"Пример","stock_type":"Пример","present":1,"promised":1,"reserved":1}]}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_scope_denied:ozon_stocks"}},"422":{"title":"Некорректные параметры","body":{"ok":false,"error":"invalid_cursor"}},"500":{"title":"Ошибка чтения данных","body":{"ok":false,"error":"storage_failed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/marketplaces/ozon/stocks","replacement_url":"https://api.expri.space/api/public/v1/marketplaces/ozon/stocks","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/marketplaces/ozon/analytics","scope":"ozon_analytics","title":"Ozon: аналитика по дням","description":"Ozon: аналитика по дням. Постраничная выгрузка для внешней интеграции.","note":"Сохранённые дневные показатели Ozon по SKU. date_from/date_to задают дни отчёта включительно; повторно импортированные дни заменяют прежние данные. Возвращаются только сохранённые данные организации токена. generated_at — время ответа. По умолчанию выдаются все сохранённые записи постранично, начиная с последних по day, sku. Между страницами состояние может измениться.","params":["limit","cursor","sku","offer_id","product_id","date_from","date_to","updated_since"],"parameters":[{"name":"limit","desc":"Размер страницы: 1–250; по умолчанию 100."},{"name":"cursor","desc":"next_cursor предыдущего ответа. Сохраняйте фильтры; курсор привязан к методу и организации."},{"name":"sku","desc":"Точное совпадение. Артикул в Core; в методах Ozon — SKU Ozon. Не смешивайте с offer_id."},{"name":"offer_id","desc":"Точное совпадение. Артикул продавца в соответствующем источнике."},{"name":"product_id","desc":"Точное совпадение. Идентификатор товара Ozon, строка."},{"name":"date_from","desc":"Начало периода YYYY-MM-DD включительно по полю day. Задаётся вместе с date_to. Без пары дат — вся сохранённая история."},{"name":"date_to","desc":"Конец периода YYYY-MM-DD включительно. Даты должны существовать; date_from ≤ date_to. month/segment здесь не используются."},{"name":"updated_since","desc":"ISO 8601 с часовым поясом. Фильтр по updated_at включительно; допускает повторные записи при синхронизации."}],"example":"https://api.expri.space/api/public/v1/marketplaces/ozon/analytics?limit=100","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/marketplaces/ozon/analytics?limit=100'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/marketplaces/ozon/analytics?limit=100\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/marketplaces/ozon/analytics?limit=100\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/marketplaces/ozon/analytics?limit=100');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"available","desc":"false: модуль ещё не создал таблицу данных; коллекция пустая. true: таблица существует; пустой результат возможен при отсутствии подходящих записей."},{"name":"data_source","desc":"Источник сохранённых данных: ozon. Запрос не запускает синхронизацию источника."},{"name":"count / limit / has_more / next_cursor","desc":"Количество записей страницы, её лимит, наличие продолжения и курсор. Последняя страница: next_cursor=null."},{"name":"analytics[].day","desc":"День отчёта Ozon, YYYY-MM-DD. Тип: text. NULL источника сохраняется как null."},{"name":"analytics[].sku","desc":"Артикул в Core; в методах Ozon — SKU Ozon. Не смешивайте с offer_id. Тип: text. NULL источника сохраняется как null."},{"name":"analytics[].offer_id","desc":"Артикул продавца в соответствующем источнике. Тип: text. NULL источника сохраняется как null."},{"name":"analytics[].product_id","desc":"Идентификатор товара Ozon, строка. Тип: text. NULL источника сохраняется как null."},{"name":"analytics[].product_name","desc":"Название товара в источнике. Тип: text. NULL источника сохраняется как null."},{"name":"analytics[].ordered_units","desc":"Количество заказанных единиц за день по данным Ozon. Тип: float. NULL источника сохраняется как null."},{"name":"analytics[].revenue","desc":"Выручка за день по данным аналитики Ozon. Тип: float. NULL источника сохраняется как null."},{"name":"analytics[].delivered_units","desc":"Количество доставленных единиц за день по данным Ozon. Тип: float. NULL источника сохраняется как null."},{"name":"analytics[].returns","desc":"Количество возвратов или отмен за день по данным Ozon. Тип: float. NULL источника сохраняется как null."},{"name":"analytics[].cancellations","desc":"Количество возвратов или отмен за день по данным Ozon. Тип: float. NULL источника сохраняется как null."},{"name":"analytics[].hits_view","desc":"Сохранённый показатель просмотра или корзины аналитики Ozon. Тип: float. NULL источника сохраняется как null."},{"name":"analytics[].hits_tocart","desc":"Сохранённый показатель просмотра или корзины аналитики Ozon. Тип: float. NULL источника сохраняется как null."},{"name":"analytics[].session_view","desc":"Сохранённый показатель просмотра или корзины аналитики Ozon. Тип: float. NULL источника сохраняется как null."},{"name":"analytics[].conv_tocart_percent","desc":"Конверсия в корзину по данным Ozon, проценты. Тип: float. NULL источника сохраняется как null."},{"name":"analytics[].updated_at","desc":"Время последнего сохранённого обновления записи. Тип: text. NULL источника сохраняется как null."}],"responses":{"200":{"title":"Успешно · пример структуры","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"data_source":"ozon","available":true,"count":1,"limit":100,"has_more":false,"next_cursor":null,"analytics":[{"day":"2026-10-12","sku":"1549432508","offer_id":"SKU-001","product_id":"100001","product_name":"Пример","ordered_units":12.5,"revenue":12.5,"delivered_units":12.5,"returns":12.5,"cancellations":12.5,"hits_view":12.5,"hits_tocart":12.5,"session_view":12.5,"conv_tocart_percent":12.5,"updated_at":"2026-10-12 16:42:49"}]}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_scope_denied:ozon_analytics"}},"422":{"title":"Некорректные параметры","body":{"ok":false,"error":"invalid_cursor"}},"500":{"title":"Ошибка чтения данных","body":{"ok":false,"error":"storage_failed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/marketplaces/ozon/analytics","replacement_url":"https://api.expri.space/api/public/v1/marketplaces/ozon/analytics","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/marketplaces/ozon/postings","scope":"ozon_postings","title":"Ozon: отправления","description":"Ozon: отправления. Постраничная выгрузка для внешней интеграции.","note":"Сохранённые отправления Ozon. scheme передаётся в форме источника (FBO/FBS). finance_ready — битовая маска наличия финансовых показателей: 1 — payout, 2 — commission, 4 — delivery_charge; 7 — все три. Если соответствующий бит отсутствует, значение может быть неполным. Маска означает наличие данных источника, а не окончательную сверку выплаты. Возвращаются только сохранённые данные организации токена. generated_at — время ответа. По умолчанию выдаются все сохранённые записи постранично, начиная с последних по created_at, posting_number. Между страницами состояние может измениться.","params":["limit","cursor","posting_number","scheme","status","date_from","date_to","updated_since"],"parameters":[{"name":"limit","desc":"Размер страницы: 1–250; по умолчанию 100."},{"name":"cursor","desc":"next_cursor предыдущего ответа. Сохраняйте фильтры; курсор привязан к методу и организации."},{"name":"posting_number","desc":"Точное совпадение. Номер отправления Ozon; связывает отправление, состав и операции."},{"name":"scheme","desc":"Точное совпадение. Схема отправления в формате источника, например FBO или FBS."},{"name":"status","desc":"Точное совпадение. Статус или подстатус в сохранённом источнике."},{"name":"date_from","desc":"Начало периода YYYY-MM-DD включительно по полю created_at. Задаётся вместе с date_to. Без пары дат — вся сохранённая история."},{"name":"date_to","desc":"Конец периода YYYY-MM-DD включительно. Даты должны существовать; date_from ≤ date_to. month/segment здесь не используются."},{"name":"updated_since","desc":"ISO 8601 с часовым поясом. Фильтр по snapshot_at включительно; допускает повторные записи при синхронизации."}],"example":"https://api.expri.space/api/public/v1/marketplaces/ozon/postings?limit=100","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/marketplaces/ozon/postings?limit=100'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/marketplaces/ozon/postings?limit=100\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/marketplaces/ozon/postings?limit=100\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/marketplaces/ozon/postings?limit=100');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"available","desc":"false: модуль ещё не создал таблицу данных; коллекция пустая. true: таблица существует; пустой результат возможен при отсутствии подходящих записей."},{"name":"data_source","desc":"Источник сохранённых данных: ozon. Запрос не запускает синхронизацию источника."},{"name":"count / limit / has_more / next_cursor","desc":"Количество записей страницы, её лимит, наличие продолжения и курсор. Последняя страница: next_cursor=null."},{"name":"postings[].posting_number","desc":"Номер отправления Ozon; связывает отправление, состав и операции. Тип: text. NULL источника сохраняется как null."},{"name":"postings[].scheme","desc":"Схема отправления в формате источника, например FBO или FBS. Тип: text. NULL источника сохраняется как null."},{"name":"postings[].snapshot_at","desc":"Время сохранения снимка источника; не время текущего запроса. Тип: text. NULL источника сохраняется как null."},{"name":"postings[].order_id","desc":"Идентификатор заказа Ozon, строка. Тип: text. NULL источника сохраняется как null."},{"name":"postings[].status","desc":"Статус или подстатус в сохранённом источнике. Тип: text. NULL источника сохраняется как null."},{"name":"postings[].substatus","desc":"Статус или подстатус в сохранённом источнике. Тип: text. NULL источника сохраняется как null."},{"name":"postings[].created_at","desc":"Время создания записи в источнике. Тип: text. NULL источника сохраняется как null."},{"name":"postings[].in_process_at","desc":"Время начала обработки отправления Ozon. Тип: text. NULL источника сохраняется как null."},{"name":"postings[].shipment_date","desc":"Сохранённое время отгрузки Ozon. Тип: text. NULL источника сохраняется как null."},{"name":"postings[].delivering_date","desc":"Сохранённое время передачи в доставку Ozon. Тип: text. NULL источника сохраняется как null."},{"name":"postings[].delivered_at","desc":"Сохранённое время доставки Ozon. Тип: text. NULL источника сохраняется как null."},{"name":"postings[].cancellation_at","desc":"Сохранённое время отмены Ozon. Тип: text. NULL источника сохраняется как null."},{"name":"postings[].warehouse_name","desc":"Название склада источника. Тип: text. NULL источника сохраняется как null."},{"name":"postings[].products_count","desc":"Количество товарных строк в отправлении. Тип: int. NULL источника сохраняется как null."},{"name":"postings[].units_count","desc":"Количество единиц товара в отправлении. Тип: int. NULL источника сохраняется как null."},{"name":"postings[].total_price","desc":"Сохранённая сумма total_price соответствующего отчёта. Тип: float. NULL источника сохраняется как null."},{"name":"postings[].payout","desc":"Сохранённая сумма выплаты; наличие показателя отмечено битом 1 в finance_ready. Тип: float. NULL источника сохраняется как null."},{"name":"postings[].commission","desc":"Сохранённая комиссия по отправлению. Тип: float. NULL источника сохраняется как null."},{"name":"postings[].delivery_charge","desc":"Сохранённая сумма доставки из соответствующего отчёта Ozon. Тип: float. NULL источника сохраняется как null."},{"name":"postings[].finance_ready","desc":"Битовая маска integer: 1 — payout, 2 — commission, 4 — delivery_charge. Комбинация 7 означает наличие всех трёх показателей. Это наличие сохранённых данных, а не окончательная сверка выплаты."}],"responses":{"200":{"title":"Успешно · пример структуры","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"data_source":"ozon","available":true,"count":1,"limit":100,"has_more":false,"next_cursor":null,"postings":[{"posting_number":"Пример","scheme":"FBO","snapshot_at":"2026-10-12 16:42:49","order_id":"100001","status":"Пример статуса","substatus":"Пример","created_at":"2026-10-12 16:42:49","in_process_at":"","shipment_date":"","delivering_date":"","delivered_at":"","cancellation_at":"","warehouse_name":"Пример","products_count":1,"units_count":1,"total_price":12.5,"payout":12.5,"commission":12.5,"delivery_charge":12.5,"finance_ready":7}]}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_scope_denied:ozon_postings"}},"422":{"title":"Некорректные параметры","body":{"ok":false,"error":"invalid_cursor"}},"500":{"title":"Ошибка чтения данных","body":{"ok":false,"error":"storage_failed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/marketplaces/ozon/postings","replacement_url":"https://api.expri.space/api/public/v1/marketplaces/ozon/postings","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/marketplaces/ozon/posting-items","scope":"ozon_postings","title":"Ozon: состав отправлений","description":"Ozon: состав отправлений. Постраничная выгрузка для внешней интеграции.","note":"Строки сохранённых отправлений. posting_number связывает строки с postings. price — цена позиции в отправлении; это не подтверждённая актуальная цена витрины с Ozon Картой. Для обновлений выгружайте состав заново: в источнике нет времени обновления строки. Возвращаются только сохранённые данные организации токена. generated_at — время ответа. По умолчанию выдаются все сохранённые записи постранично, начиная с последних по posting_number, row_key. Между страницами состояние может измениться.","params":["limit","cursor","posting_number","scheme","offer_id","sku"],"parameters":[{"name":"limit","desc":"Размер страницы: 1–250; по умолчанию 100."},{"name":"cursor","desc":"next_cursor предыдущего ответа. Сохраняйте фильтры; курсор привязан к методу и организации."},{"name":"posting_number","desc":"Точное совпадение. Номер отправления Ozon; связывает отправление, состав и операции."},{"name":"scheme","desc":"Точное совпадение. Схема отправления в формате источника, например FBO или FBS."},{"name":"offer_id","desc":"Точное совпадение. Артикул продавца в соответствующем источнике."},{"name":"sku","desc":"Точное совпадение. Артикул в Core; в методах Ozon — SKU Ozon. Не смешивайте с offer_id."}],"example":"https://api.expri.space/api/public/v1/marketplaces/ozon/posting-items?limit=100","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/marketplaces/ozon/posting-items?limit=100'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/marketplaces/ozon/posting-items?limit=100\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/marketplaces/ozon/posting-items?limit=100\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/marketplaces/ozon/posting-items?limit=100');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"available","desc":"false: модуль ещё не создал таблицу данных; коллекция пустая. true: таблица существует; пустой результат возможен при отсутствии подходящих записей."},{"name":"data_source","desc":"Источник сохранённых данных: ozon. Запрос не запускает синхронизацию источника."},{"name":"count / limit / has_more / next_cursor","desc":"Количество записей страницы, её лимит, наличие продолжения и курсор. Последняя страница: next_cursor=null."},{"name":"posting_items[].row_key","desc":"Ключ записи для сопоставления и объединения выгрузок. Тип: text. NULL источника сохраняется как null."},{"name":"posting_items[].posting_number","desc":"Номер отправления Ozon; связывает отправление, состав и операции. Тип: text. NULL источника сохраняется как null."},{"name":"posting_items[].scheme","desc":"Схема отправления в формате источника, например FBO или FBS. Тип: text. NULL источника сохраняется как null."},{"name":"posting_items[].offer_id","desc":"Артикул продавца в соответствующем источнике. Тип: text. NULL источника сохраняется как null."},{"name":"posting_items[].sku","desc":"Артикул в Core; в методах Ozon — SKU Ozon. Не смешивайте с offer_id. Тип: text. NULL источника сохраняется как null."},{"name":"posting_items[].product_id","desc":"Идентификатор товара Ozon, строка. Тип: text. NULL источника сохраняется как null."},{"name":"posting_items[].product_name","desc":"Название товара в источнике. Тип: text. NULL источника сохраняется как null."},{"name":"posting_items[].quantity","desc":"Количество в исходном отчёте. Тип: int. NULL источника сохраняется как null."},{"name":"posting_items[].price","desc":"Цена из соответствующего источника; смысл указан в описании метода. Тип: float. NULL источника сохраняется как null."},{"name":"posting_items[].currency","desc":"Валюта денежного показателя в источнике. Тип: text. NULL источника сохраняется как null."}],"responses":{"200":{"title":"Успешно · пример структуры","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"data_source":"ozon","available":true,"count":1,"limit":100,"has_more":false,"next_cursor":null,"posting_items":[{"row_key":"Пример","posting_number":"Пример","scheme":"FBO","offer_id":"SKU-001","sku":"1549432508","product_id":"100001","product_name":"Пример","quantity":1,"price":12.5,"currency":"RUB"}]}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_scope_denied:ozon_postings"}},"422":{"title":"Некорректные параметры","body":{"ok":false,"error":"invalid_cursor"}},"500":{"title":"Ошибка чтения данных","body":{"ok":false,"error":"storage_failed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/marketplaces/ozon/posting-items","replacement_url":"https://api.expri.space/api/public/v1/marketplaces/ozon/posting-items","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}},{"method":"GET","path":"/api/public/v1/marketplaces/ozon/finance","scope":"ozon_finance","title":"Ozon: финансовые операции","description":"Ozon: финансовые операции. Постраничная выгрузка для внешней интеграции.","note":"Сохранённые финансовые операции Ozon. Суммы сохраняют знак источника. Для доступа требуется отдельное финансовое разрешение ozon_finance. Коррекции ранее загруженных операций требуют повторной выгрузки периода. Возвращаются только сохранённые данные организации токена. generated_at — время ответа. По умолчанию выдаются все сохранённые записи постранично, начиная с последних по operation_date, operation_id. Между страницами состояние может измениться.","params":["limit","cursor","posting_number","scheme","operation_type","transaction_type","date_from","date_to"],"parameters":[{"name":"limit","desc":"Размер страницы: 1–250; по умолчанию 100."},{"name":"cursor","desc":"next_cursor предыдущего ответа. Сохраняйте фильтры; курсор привязан к методу и организации."},{"name":"posting_number","desc":"Точное совпадение. Номер отправления Ozon; связывает отправление, состав и операции."},{"name":"scheme","desc":"Точное совпадение. Схема отправления в формате источника, например FBO или FBS."},{"name":"operation_type","desc":"Точное совпадение. Тип или название финансовой операции в формате Ozon."},{"name":"transaction_type","desc":"Точное совпадение. Тип или название финансовой операции в формате Ozon."},{"name":"date_from","desc":"Начало периода YYYY-MM-DD включительно по полю operation_date. Задаётся вместе с date_to. Без пары дат — вся сохранённая история."},{"name":"date_to","desc":"Конец периода YYYY-MM-DD включительно. Даты должны существовать; date_from ≤ date_to. month/segment здесь не используются."}],"example":"https://api.expri.space/api/public/v1/marketplaces/ozon/finance?limit=100","examples":{"curl":"curl -H 'X-Public-Api-Key: sorld_core_live_your_token_here' 'https://api.expri.space/api/public/v1/marketplaces/ozon/finance?limit=100'","javascript":"const response = await fetch(\"https://api.expri.space/api/public/v1/marketplaces/ozon/finance?limit=100\", {\n  method: \"GET\",\n  headers: {\n    \"X-Public-Api-Key\": \"sorld_core_live_your_token_here\"\n}\n});\n\nconst data = await response.json();\nif (!response.ok || data.ok === false) throw new Error(JSON.stringify(data));\nconsole.log(data);","python":"import requests\n\nresponse = requests.request(\n    \"GET\",\n    \"https://api.expri.space/api/public/v1/marketplaces/ozon/finance?limit=100\",\n    headers={\"X-Public-Api-Key\":\"sorld_core_live_your_token_here\"},\n    timeout=30,\n)\nresponse.raise_for_status()\nprint(response.json())","php":"$ch = curl_init('https://api.expri.space/api/public/v1/marketplaces/ozon/finance?limit=100');\ncurl_setopt_array($ch, [\n    CURLOPT_CUSTOMREQUEST => 'GET',\n    CURLOPT_HTTPHEADER => ['X-Public-Api-Key: sorld_core_live_your_token_here'],\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$body = curl_exec($ch);\n$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\necho $status . PHP_EOL;\necho $body;"},"response_fields":[{"name":"available","desc":"false: модуль ещё не создал таблицу данных; коллекция пустая. true: таблица существует; пустой результат возможен при отсутствии подходящих записей."},{"name":"data_source","desc":"Источник сохранённых данных: ozon. Запрос не запускает синхронизацию источника."},{"name":"count / limit / has_more / next_cursor","desc":"Количество записей страницы, её лимит, наличие продолжения и курсор. Последняя страница: next_cursor=null."},{"name":"finance[].operation_id","desc":"Идентификатор финансовой операции Ozon, строка. Тип: text. NULL источника сохраняется как null."},{"name":"finance[].operation_date","desc":"Дата и время финансовой операции Ozon. Тип: text. NULL источника сохраняется как null."},{"name":"finance[].operation_type","desc":"Тип или название финансовой операции в формате Ozon. Тип: text. NULL источника сохраняется как null."},{"name":"finance[].operation_name","desc":"Тип или название финансовой операции в формате Ozon. Тип: text. NULL источника сохраняется как null."},{"name":"finance[].transaction_type","desc":"Тип или название финансовой операции в формате Ozon. Тип: text. NULL источника сохраняется как null."},{"name":"finance[].posting_number","desc":"Номер отправления Ozon; связывает отправление, состав и операции. Тип: text. NULL источника сохраняется как null."},{"name":"finance[].scheme","desc":"Схема отправления в формате источника, например FBO или FBS. Тип: text. NULL источника сохраняется как null."},{"name":"finance[].amount","desc":"Сумма финансовой операции со знаком источника. Тип: float. NULL источника сохраняется как null."},{"name":"finance[].accruals_for_sale","desc":"Начисления за продажу из операции Ozon. Тип: float. NULL источника сохраняется как null."},{"name":"finance[].sale_commission","desc":"Комиссия за продажу из операции Ozon, со знаком источника. Тип: float. NULL источника сохраняется как null."},{"name":"finance[].delivery_charge","desc":"Сохранённая сумма доставки из соответствующего отчёта Ozon. Тип: float. NULL источника сохраняется как null."},{"name":"finance[].return_delivery_charge","desc":"Сумма обратной доставки из операции Ozon. Тип: float. NULL источника сохраняется как null."},{"name":"finance[].services_total","desc":"Общая сумма услуг из сохранённой операции Ozon. Тип: float. NULL источника сохраняется как null."}],"responses":{"200":{"title":"Успешно · пример структуры","body":{"ok":true,"api_version":"v1","generated_at":"2026-10-12 16:42:49","tenant":{"id":"tn_example","name":"Пример организации"},"data_source":"ozon","available":true,"count":1,"limit":100,"has_more":false,"next_cursor":null,"finance":[{"operation_id":"100001","operation_date":"2026-10-12 16:42:49","operation_type":"Пример","operation_name":"Пример","transaction_type":"Пример","posting_number":"Пример","scheme":"FBO","amount":12.5,"accruals_for_sale":12.5,"sale_commission":12.5,"delivery_charge":12.5,"return_delivery_charge":12.5,"services_total":12.5}]}},"401":{"title":"Доступ отклонён","body":{"ok":false,"error":"public_api_scope_denied:ozon_finance"}},"422":{"title":"Некорректные параметры","body":{"ok":false,"error":"invalid_cursor"}},"500":{"title":"Ошибка чтения данных","body":{"ok":false,"error":"storage_failed"}}},"deprecated":false,"lifecycle":{"status":"active","deprecated":false,"deprecated_at":null,"sunset_at":null,"timezone":"Europe/Moscow","replacement":"","message":""},"legacy_address":{"status":"deprecated","deprecated":true,"url":"https://expri-server.ru/api/public/v1/marketplaces/ozon/finance","replacement_url":"https://api.expri.space/api/public/v1/marketplaces/ozon/finance","deprecated_at":"2026-10-12T00:00:00+03:00","sunset_at":"2026-10-13T23:59:59+03:00","timezone":"Europe/Moscow"}}]}