Помилки 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); код, повідомлення, підказка й посилання на документацію не змінюються.
Читання відповіді з помилкою
{
"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-..."
}
Якщо ви отримали відповідь, яку не розумієте, найшвидший шлях такий:
- Запишіть
code. - Перевірте свій конструктор URL — більшість збоїв спричинені помилками підписування, а не проблемами з акаунтом.
- Зіставте код нижче з точною причиною та виправленням.
- У панелі керування відкрийте 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, ...).