extract описывает словами, что нужно достать со страницы, а в ответ приходит готовый объект parsed. Вы не пишете селекторы: вёрстка у каждого сайта своя и меняется без предупреждения, а «Цена числом, без валюты» — то же самое и на маркетплейсе, и в блоге. Цена: +3 кредита к разметке, итого 4.
Ответ:

Что приходит

object | null
Заказанные поля с найденными значениями. Приходит всегда, если extract заказывали, — и null, если разбор не состоялся. Ключи те же, что вы задали, и в том же порядке.
string
Живёт в fetch_metadata. Почему разбор не состоялся, человеческим языком. Пустая строка — либо всё прошло как заказано, либо extract не заказывали.
Типы приходят настоящими, а не строками: число остаётся числом, «да/нет» — true или false. Поле, которого на странице не нашлось, приходит null — ключ не пропадает, чтобы разбор ответа не приходилось писать через проверку наличия ключа.

Как описывать поля

Имя поля — латиница, цифры и подчёркивание, начинается с буквы, до 64 символов. Это ключи в вашем коде, и они должны переживать переход в любой язык без экранирования. Описание — обычная фраза, а не шаблон. Чем точнее сказано про форму значения, тем ближе результат к тому, что вы ждёте: «Цена числом, без валюты» даёт 8990, а просто «Цена» может дать "8 990 ₽".
У GET extract передаётся строкой JSON — в адресе объекту взяться неоткуда. У POST это обычный объект. Клиентские библиотеки ходят POST, и заботиться об этом не приходится.

Чего разбор не гарантирует

Страницу читает языковая модель, а не набор правил. Это значит, что результат не воспроизводится с точностью разборщика: на нестандартной вёрстке поле может прийти пустым, а на двух похожих страницах одного сайта — разным по форме. Обещать здесь больше, чем есть, было бы нечестно. Если вам нужна ровно та величина ровно из того блока и каждый раз одинаково — берите подрезку блоками: селектор либо совпал, либо нет, и это видно по matched.
Не стройте на parsed расчёты, которые нельзя перепроверить. Разбор хорош там, где сайтов много и вёрстка у всех разная, — и плох там, где цена ошибки выше цены ручной проверки.

Неудача не оплачивается

Разбор не списывается, если он не состоялся: модель не ответила, вернула не JSON или не нашла ни одного из заказанных полей. Тогда в ответе parsed: null, в extract_note — что случилось, а в счёте остаётся только разметка:
Найденное частично — это результат, и он оплачивается полностью: три поля из пяти означают, что двух на странице не было, а работу модель проделала ту же.

Отказы

Ошибка в описании полей — 400 invalid_request: неправильное имя, слишком длинное описание, больше 25 полей, extract не объектом. Проверяется до списания и до похода в браузер, так что опечатка ничего не стоит. Если разбор на сервере не настроен вовсе, приходит 503 extract_unavailable — тоже до списания. Это не «попробуйте позже с другими параметрами», а «этой возможности здесь сейчас нет».

Дальше

Тонкая настройка разметки

Селекторы, когда нужен предсказуемый результат, а не догадка.

Надстройки Fetch

Что ещё можно добавить к разметке и сколько это стоит.

Кредиты и права

Весь прайс и как подключаются платные позиции.

Справочник

Все параметры /v1/fetch и коды ответов.