Тема

Помилки API — що означає кожен код і як це виправити

FastOG повертає машиночитні коди помилок, коли запит завершується невдачею — підписаний рендер OG-зображення або виклик однієї з адміністративних поверхонь у продукті. Кожна відповідь з помилкою містить:

  • error — застарілий короткий токен. Досі присутній у кожній невдачі, щоб старіший клієнт продовжував працювати.
  • code — той самий стабільний, задокументований код помилки (таблиця нижче), під назвою, яку використовує публічний API.
  • message — опис того, що пішло не так, одним реченням.
  • hint — короткий опис простою мовою того, що пішло не так і як це виправити.
  • docs_url — посилання на цю сторінку з якорем на розділ для цього коду.
  • request_id — зіставляє цю HTTP-невдачу з рядком у таблиці Render Logs на панелі керування (також повертається в заголовку відповіді X-Request-ID). Поверхня, якій нема чого зіставляти, відповідає null, але ключ присутній завжди.

Поверхні в продукті — адмінка Shopify, WooCommerce Studio, міст Wix і демо — відповідають тим самим конвертом для наведених нижче кодів, тож невдача означає те саме, де б ви з нею не зіткнулися. Поверхня модуля може зберігати HTTP-статус, який вона завжди повертала для коду (наприклад, render_failed відповідає 503 на експорті обкладинки та 502 на публічному API); код, повідомлення, підказка й посилання на документацію не змінюються.

Читання відповіді з помилкою

json
{
  "error": "invalid_signature",
  "code": "invalid_signature",
  "message": "The signature does not match.",
  "hint": "The signature did not match. Re-sign with your HMAC secret after every param change.",
  "request_id": "5f2a9c1e-..."
}

Якщо ви отримали відповідь, яку не розумієте, найшвидший шлях такий:

  1. Запишіть code.
  2. Перевірте свій конструктор URL — більшість збоїв спричинені помилками підписування, а не проблемами з акаунтом.
  3. Зіставте код нижче з точною причиною та виправленням.
  4. У панелі керування відкрийте Render Logs і відфільтруйте за тим самим error_code — кожен рядок показує запитані параметри, тож ви можете відтворити (і підтвердити, що request_id збігається).

Підписування та автентифікація

missing_signature

У вашому запиті відсутні параметри запиту key та/або s (підпис).

Виправлення: переконайтеся, що ваш URL містить і key=<api-key>, і s=<hmac-signature>. Скористайтеся SDK або покроковою інструкцією /docs/hmac-signature-guide, щоб його сформувати.

invalid_signature

Значення s не збігається з тим, що генерує ваш HMAC-секрет для цього URL.

Виправлення: підпис охоплює кожен параметр запиту, крім s, із відсортованими ключами. Зміна будь-якого параметра — зокрема зміна порядку, відмінності в URL-кодуванні або додавання пробілів — робить підпис недійсним. Підписуйте заново після кожної зміни. Переконайтеся, що ваш секрет — той самий, що був показаний під час створення API-ключа.

invalid_signature_format

Значення s не є 64-символьним шістнадцятковим рядком.

Виправлення: підпис має бути необробленим SHA-256 у шістнадцятковому форматі (нижній регістр a-f0-9). Якщо ви кодуєте у base64 або обрізаєте результат, використовуйте звичайний шістнадцятковий формат.

expired_timestamp

Надана вами мітка часу t старша за 5 хвилин.

Виправлення: генеруйте мітку часу заново щоразу, коли формуєте URL. Цей код стосується застарілого потоку з підписаним URL; поточний потік HMAC v2 не має мітки часу.

invalid_api_key

Переданий вами key не існує.

Виправлення: скопіюйте повний API-ключ із панелі керування — це публічний ідентифікатор, що починається з sk_. Він публічний і безпечний у URL; саме секрет (ніколи не в URL) доводить володіння.

missing_hmac_secret

Для API-ключа не налаштовано HMAC-секрет.

Виправлення: створіть новий API-ключ у панелі керування — HMAC-секрет генерується й показується один раз під час створення.


Параметр / вхід

invalid_image_url

Властивість із URL (image, brand_logo, logo, avatar, background_image, ...) не є публічним http(s) URL.

Виправлення: передайте публічно доступний для отримання https://... URL. Localhost, приватні IP-адреси та прості шляхи відхиляються, щоб запобігти підробці серверних запитів (SSRF).


Підписка

subscription_required (402)

Запит надійшов до Dynamic API, але ваш обліковий запис не має активного плану. Доступ до API надається лише за підпискою: план є умовою доступу, і він передбачає ту саму градацію покриття й можливостей, яку пропонують застосунки FastOG. Самі рендери не тарифікуються за обсягом — немає ні місячної квоти на рендери, ні оплати за перевищення.

Виправлення: виберіть план Dynamic API у панелі керування та створіть ключ API. Відповідь містить top_up_url, що вказує на сторінку планів.


Сервіс рендерингу

store_blocked (403)

Рендеринг для магазину, пов'язаного з цим ключем, призупинено FastOG (наприклад, через зловживання або надмірне використання). Зображення, уже кешовані на периферії, можуть і далі віддаватися, доки не спливе їхній термін дії. Зверніться до підтримки, щоб вирішити це питання; жодні зміни в запиті не допоможуть.

render_unreachable

Не вдалося зв'язатися із сервісом рендерингу (коротке вікно перезапуску).

Виправлення: повторіть спробу за кілька секунд. Цю спробу рендерингу не зараховано.

render_failed

Сервіс рендерингу повернув помилку на ваш запит.

Виправлення: перевірте властивості шаблону — задовгі/некоректні значення, непідтримувані поля або недоступне зовнішнє зображення. Відповідь містить відповідний status. Рендеринг не зараховано.


Поверхні адміністратора магазину

Ці коди відповідають з адміністративної панелі Shopify та WooCommerce Studio — вбудованих редакторів, у яких працює продавець, а не з підписаного API. Кілька з них спільні з публічним API (invalid_image_url, render_failed, invalid_signature); для них зберігається запис, задокументований вище.

Код HTTP Що це означає і що робити
invalid_shop 422 Не вдалося визначити магазин Shopify. Перезавантажте застосунок FastOG з адмінпанелі Shopify, щоб вбудований запит знову містив магазин, потім повторіть спробу.
invalid_shop_or_page 422 Магазин або тип сторінки невідомий. Відкрийте застосунок FastOG з адмінпанелі Shopify і виберіть тип сторінки обкладинки в редакторі.
invalid_store 422 Не вдалося визначити магазин WooCommerce. Знову відкрийте Studio з адмінпанелі WordPress, щоб токен магазину було передано повторно, потім повторіть спробу.
invalid_store_or_page 422 Магазин або тип сторінки невідомий. Знову відкрийте Studio з адмінпанелі WordPress і виберіть тип сторінки обкладинки, який пропонує редактор.
missing_api_key 422 У магазину немає ключа підпису. Завершіть встановлення плагіна з адмінпанелі WordPress, щоб FastOG міг видати магазину його ключ підпису.
store_ownership_unverified 403 Не вдалося перевірити сайт WordPress. Він має бути доступний через публічний HTTPS із увімкненим REST API.
community_is_free 422 План Community безкоштовний. Це безкоштовний план за замовчуванням, і його не можна придбати; виберіть платний тариф для оновлення.
not_installed 404 FastOG не встановлено для цього магазину. Встановіть застосунок FastOG із Shopify App Store для цього магазину, потім відкрийте його знову.
oauth_required 409 Магазину потрібно знову авторизувати FastOG. Повторно запустіть встановлення FastOG через OAuth з адмінпанелі Shopify; збережений дозвіл було відкликано або його області доступу змінилися.
reconnect_required 409 Потрібно повторно встановити з'єднання з Shopify. Скористайтеся кнопкою Reconnect у застосунку FastOG, щоб було видано новий токен доступу.
token_rejected 409 Shopify видав токен доступу, а потім відхилив його. Повторіть перепідключення один раз; якщо Shopify і далі його відхиляє, перевстановіть застосунок.
unauthorized 401 Запит не містить дійсної сесії для цієї поверхні. Перезавантажте застосунок FastOG з адмінпанелі платформи, щоб було додано новий токен сесії, потім повторіть спробу.
shop_not_found 404 Магазину більше не існує в FastOG. Перевстановіть FastOG з адмінпанелі Shopify, щоб відтворити запис магазину.
invalid_product 422 Посилання на продукт недійсне. Перезавантажте сторінку продукту й знову відкрийте FastOG; надісланий ідентифікатор продукту був відсутній або не числовий.
invalid_product_cover 422 Дані обкладинки продукту мають неправильний формат. Перезавантажте редактор і збережіть знову; props, style і signals мають бути кожен об'єктом.
product_not_found 404 Не вдалося прочитати продукт із магазину. Перевірте, що продукт досі існує й опублікований, потім перезавантажте редактор.
product_customization_not_on_plan 403 Налаштування обкладинки для окремих продуктів недоступне на цьому плані. Оновіть план або натомість відредагуйте спільну обкладинку продуктів.
no_product_handles 422 Не знайдено продуктів для оновлення. Опублікуйте принаймні один продукт із публічним handle, потім знову спробуйте оновити попередній перегляд поширення.
invalid_style 422 Блок стилів непридатний до використання. Перезавантажте редактор і знову виберіть кольори та шрифти; одне значення не вдалося нормалізувати.
invalid_template 422 Запитаного шаблону немає в каталозі цієї платформи. Виберіть один із макетів, які пропонує редактор.
invalid_preset 422 Назва пресета не належить до тих, які пропонує ця платформа. Виберіть пресет на екрані налаштування.
invalid_set 422 Дані набору обкладинок відсутні або мають неправильний формат. Перезавантажте екран налаштування і знову виберіть набір.
preset_not_applyable 422 Пресет не можна застосувати до кожного типу сторінки. Виберіть інший пресет; цьому бракує обкладинки принаймні для одного типу сторінки.
template_not_available 422 Шаблону немає в каталозі для рендерингу. Виберіть макет, який пропонує засіб вибору.
template_not_available_on_shopify 422 Шаблон недоступний для магазинів Shopify. Виберіть макет, який пропонує редактор Shopify.
template_not_available_on_woocommerce 422 Шаблон недоступний для магазинів WooCommerce. Виберіть макет, який пропонує Studio.
template_unavailable 422 Шаблон недоступний для цього магазину. Виберіть макет, який пропонує редактор; він вилучений, невідомий або перевищує те, що магазин може відобразити.
template_not_on_plan 403 Шаблон потребує вищого плану. Змініть план або виберіть макет, який покриває поточний план. Відповідь називає план у requires.
template_requires_higher_plan 403 Шаблон потребує вищого плану. Відповідь називає план у requires.
no_rule 404 Для цього типу сторінки ще немає правила обкладинки. Спершу збережіть обкладинку для цього типу сторінки в редакторі.
cover_not_configured 404 Обкладинку продукту ще не збережено. Збережіть обкладинку продукту, перш ніж завантажувати її або ділитися нею.
schedule_only_product 422 Планування кампанії існує лише для обкладинок продуктів. Видаліть дату повернення або перенесіть кампанію на обкладинку продукту.
not_dismissible 422 Це оголошення не можна відхилити. Перезавантажте сторінку; його вже вилучено або воно належить іншому магазину.
unsupported_locale 422 Ця мова інтерфейсу не входить до комплекту цього застосунку. Виберіть одну з мов, які відповідь перелічує в supported.
no_setup_sets 422 Не вдалося зібрати жодного кураторського набору обкладинок. Повторіть спробу на екрані налаштування; якщо він і далі порожній, зверніться до підтримки.
export_unavailable 403 Завантаження недоступні на цьому плані. Оновіть до Pro або вище, щоб завантажувати файли обкладинок.
cancellation_failed 502 Скасування підписки було відхилено. Повторіть спробу за мить; якщо це й далі не вдається, скасуйте на сторінці оплати Shopify або зверніться до підтримки.
logo_override_on_plan 403 Заміна логотипу недоступна на цьому плані. Оновіть план або очистіть заміну логотипу.
invalid_logo 422 Файл логотипу не є прийнятним зображенням. Завантажте PNG, JPEG або WebP у межах обмеження розміру, показаного в редакторі.
invalid_brand_image 422 Референсне зображення бренду непридатне до використання. Завантажте підтримуване зображення в межах обмеження розміру або очистіть референс і збережіть знову.
brand_image_too_large 422 Референсне зображення бренду завелике. Зменште файл і завантажте його знову.
brand_colors_too_many 422 Передано більше ніж три кольори бренду. Надішліть щонайбільше три шістнадцяткові кольори.
upload_failed 500 Не вдалося зберегти завантажений файл. Повторіть спробу; якщо це й далі не вдається, зверніться до підтримки — сховище ресурсів не повернуло публічний URL.
attachment_upload_failed 500 Не вдалося зберегти вкладення звернення до підтримки. Надішліть повідомлення без вкладення, потім надішліть файл електронною поштою до підтримки.
invalid_webhook 401 Підпис вебхука магазину не пройшов перевірку. Перевірте, що секрет вебхука в налаштуваннях FastOG у WordPress збігається з тим, який видав FastOG.
not_found 404 Цієї кінцевої точки більше не існує. Знову відкрийте Studio з адмінпанелі WordPress.
meta_refresh_unavailable 503 Оновлення попереднього перегляду поширення не налаштоване. Натомість повторно поділіться посиланням із Facebook.
theme_write_disabled 409 Редагування теми не ввімкнено для цього застосунку. Використовуйте вбудовування застосунку в тему замість виправлення файлів теми.
scope_required 403 FastOG бракує дозволу Shopify. Схваліть запитані області доступу за допомогою consent_url у відповіді, потім повторіть виправлення.

Міст Wix

Міст Wix підписується застосунком Wix, а не сесією продавця, тому його помилки адресовані розробнику застосунку. Кожна відповідь усе одно містить code і request_id; ідентифікатор запиту мосту — це той, що з підписаного конверта.

Код HTTP Що це означає і що робити
invalid_bridge_signature 401 Підпис мосту Wix не пройшов перевірку. Перестворіть запит із спільним секретом, точним шляхом і часовою міткою, що не старша за п'ять хвилин.
invalid_bridge_body 400 Тіло конверта мосту має неправильний формат. Надішліть body як об'єкт JSON і закодуйте кожне число всередині нього як рядок, щоб канонічний підпис збігався.
replayed_bridge_request 401 Цей запит мосту вже використано. Створюйте новий request_id для кожного виклику, що змінює дані.
wix_site_not_installed 403 FastOG не встановлено на цьому сайті Wix. Встановіть застосунок FastOG на сайті, а потім відкрийте його знову.
wix_site_not_provisioned 422 Сайт Wix ще не має облікових даних для підпису. Перевстановіть застосунок FastOG, щоб сайт було налаштовано з ключем API.
invalid_page_type 422 FastOG не підтримує цей тип сторінки на Wix. Надішліть один із типів сторінок, які пропонує Studio.
rule_not_found 404 Правила з таким id не існує. Оновіть список; правило було видалено або воно належить іншому сайту.
invalid_target_id 422 Ідентифікатор цілі Wix недійсний для цього типу сторінки. Надішліть id, який застосунок Wix надає для цього типу сторінки.
invalid_preview 422 Тіло запиту попереднього перегляду має неправильний формат. Перегляньте об'єкт details, щоб знайти поле з помилкою.
invalid_rule 422 Тіло запиту правила обкладинки має неправильний формат. Перегляньте об'єкт details; template є обов'язковим, а необов'язкові блоки мають бути об'єктами.
invalid_sync 422 Тіло запиту синхронізації має неправильний формат. Перегляньте об'єкт details; target_type і target_id мають збігатися.
invalid_regenerate_url 422 Відсутній URL для повторної генерації. Надішліть URL сторінки в url.
invalid_regenerate_host 422 URL не належить хосту FastOG. Надішліть URL обкладинки з fastog.com.
ai_presets_unsupported 422 Набори обкладинок, створені ШІ, більше не генеруються. Виберіть один із підібраних варіантів вигляду.
original_tags_required 422 Потрібні оригінальні теги метаданих. Надішліть original_tags (або current_tags), щоб видалення могло відновити метадані сайту.
invalid_restored 422 Тіло запиту відновлених ключів має неправильний формат. Надішліть restored як масив ключів метаданих.
invalid_seo_target 422 Тип цілі SEO невідомий. Використовуйте site, pattern або item у шляху.
invalid_seo_payload 422 Тіло запиту метаданих SEO має неправильний формат. Надішліть target_id, current_tags і fastog_url як абсолютний URL http(s).
sync_failed 500 Синхронізація метаданих із Wix не вдалася. Повторіть спробу; якщо вона й далі не вдається, перевірте, чи сайт доступний і чи застосунок усе ще встановлено.
invalid_tier 422 FastOG не продає цей план на Wix. Надішліть starter, pro або scale як tier.

Демонстраційна поверхня

Демо — це консоль продажів, доступна лише власнику, а не кінцева точка для продавців.

Код HTTP Що це означає і що робити
url_required 422 URL не надіслано. Вставте посилання на магазин або товар, перш ніж читати картку.
unreadable_url 422 Не вдалося прочитати цю сторінку. Перевірте, що посилання публічне й повне; сторінку за логіном прочитати неможливо.
no_api_key 422 Немає доступного API-ключа для підпису обкладинок. Створіть API-ключ (або введіть дійсний); відповідь містить посилання на сторінку API-ключів.
no_presets 500 Не налаштовано жодного пресета обкладинки. Налаштуйте принаймні один пресет на сервері.

Коди редакторів scoped-правил

Редактори scoped-правил (адмінка Shopify і WooCommerce Studio) самі перекладають ці токени мовою продавця, тому їхні відповіді містять error і code, але не містять hint — другий англомовний опис лише розійшовся б із локалізованим, який продавець насправді бачить:

scope_already_defined, scoped_rule_limit_reached, scoped_rules_not_on_plan, scope_value_required, scope_value_too_long, unknown_scope_type, base_rule_required, scoped_rules_product_only, cannot_delete_base_rule.


Усе ще не працює?

  • Відкрийте сторінку Render Logs у панелі керування — кожен результат (успіх і відхилення) наведено з його error_code, статусом HTTP і запитаними параметрами.
  • Запустіть php artisan og:diagnose на підписаному URL, щоб пройти весь конвеєр і побачити, на якому етапі виникає збій.
  • Перегляньте документацію в бічній панелі для фреймворку, який ви використовуєте (Next.js, Express, SvelteKit, ...).

Спробуйте безкоштовно — реєстрація не потрібна

Переглядайте та тестуйте динамічні OG-зображення за лічені секунди.

Відкрити безкоштовний тестер OG-зображень

A BeCaSimulations site