Формула ИИ для разработчиков Справочник API Каталог ошибок OpenAPI
Разделы

Карточки товаров

Методов в разделе: 6. Все методы

МетодПутьОписаниеОбластиСтатус
GET/cardsСписок карточекcards:readДоступно
POST/cardsСоздать карточкуcards:writeДоступно
GET/cards/{code}Получить карточкуcards:readДоступно
PATCH/cards/{code}Изменить карточкуcards:writeДоступно
DELETE/cards/{code}Удалить карточкуcards:writeДоступно
POST/conversations/{id}/cardsОтправить карточки в диалогconversations:writeДоступно ПДн
GET /cards Доступно

#Список карточек

Карточки товаров аккаунта в порядке sort, затем создания. ai_enabled=true|false — только доступные (или недоступные) ИИ-продажнику.

Области
cards:read
Предел частоты
чтение
Идемпотентность
не требуется
Успешный ответ
200 Страница карточек.

Параметры

ПолеТипОписание
limitinteger
необязательное
Где: query. Размер страницы, 1–100, по умолчанию 50.
cursorstring
необязательное
Где: query. Значение next_cursor из предыдущего ответа. Живёт 24 часа; при смене фильтров начинайте заново.
ai_enabledboolean
необязательное
Где: query. Фильтр по доступности ИИ-продажнику.

Тело ответа

ПолеТипОписание
dataarray<Card>
обязательное
next_cursorstring
обязательное, может быть null
Курсор следующей страницы; null — список закончился. Живёт 24 часа.

Примеры

Запрос
curl -X GET 'https://formula-cream.pro/api/public/v1/cards' \
  -H 'Authorization: Bearer '"$API_KEY"
Ответ 200
{
  "data": [
    {
      "id": "EXAMPLE_ID",
      "code": "string",
      "name": "string",
      "description": null,
      "image_url": null,
      "price_text": null,
      "badge": null,
      "page_url": null,
      "buttons": [
        null
      ],
      "ai_enabled": false,
      "sort": 0,
      "active": false,
      "created_at": "2026-10-11T09:00:00Z",
      "updated_at": "2026-10-11T09:00:00Z"
    }
  ],
  "next_cursor": "EXAMPLE_CURSOR"
}
Пример ошибки
{
  "type": "https://formula-cream.pro/developers/errors#scope_missing",
  "title": "Scope is missing",
  "status": 403,
  "code": "scope_missing",
  "detail": "EXAMPLE",
  "request_id": "req_EXAMPLE"
}

Примеры иллюстративны: ключ в них условный (EXAMPLE), значения полей выдуманы.

Возможные ошибки

invalid_api_key wrong_cell integration_inactive tenant_inactive ip_not_allowed feature_not_in_plan rate_limited wallet_suspended service_unavailable internal_error scope_missing validation_failed

POST /cards Доступно

#Создать карточку

Создаёт товар с карточкой. Код занят — validation_failed на /code. Адреса — только https:// или путь вашего сайта («/…»): javascript:, data:, http: и чужой путь хранилища отвергаются (validation_failed).

Области
cards:write
Предел частоты
запись
Идемпотентность
обязателен Idempotency-Key
Успешный ответ
201 Карточка.

Параметры

ПолеТипОписание
Idempotency-Keystring
обязательное
Где: header. Уникальная строка (обычно UUID v4), новая для каждой новой операции. Повтор с тем же ключом и телом даёт тот же результат.

Тело запроса Карточка.

ПолеТипОписание
codestring
обязательное
Код карточки, уникален в аккаунте: строчные латинские буквы, цифры, «_» и «-», до 40 знаков. ИИ-продажник ставит в ответ маркер [CARD:код].
namestring
обязательное
Название. До 120 знаков.
descriptionstring
необязательное, может быть null
Описание. До 500 знаков.
image_urlstring
необязательное, может быть null
Картинка: https:// или путь файла, загруженного в хранилище вашего аккаунта.
page_urlstring
необязательное, может быть null
Страница товара. Только https:// или путь вашего сайта, начинающийся с «/» (разворачивается по основному домену аккаунта).
badgestring
необязательное, может быть null
Плашка («Хит»). До 30 знаков.
price_textstring
необязательное, может быть null
Цена текстом. До 40 знаков.
buttonsarray<CardButton>
необязательное
До 3 кнопок. Пусто — одна кнопка «Подробнее» на page_url.
ai_enabledboolean
необязательное
Карточка доступна ИИ-продажнику: код, название и цена попадают в его каталог. Нужен код.
sortinteger
необязательное
Порядок в каталоге продажника и выборе оператора (по возрастанию).
activeboolean
необязательное
Товар активен; неактивную карточку нельзя отправить.

Тело ответа

ПолеТипОписание
idstring
обязательное
Идентификатор товара.
codestring
обязательное
Код карточки, уникален в аккаунте: строчные латинские буквы, цифры, «_» и «-», до 40 знаков. ИИ-продажник ставит в ответ маркер [CARD:код].
namestring
обязательное
Название. До 120 знаков.
descriptionstring
обязательное, может быть null
Описание. До 500 знаков.
image_urlstring
обязательное, может быть null
Картинка: https:// или путь файла, загруженного в хранилище вашего аккаунта.
price_textstring
обязательное, может быть null
Цена текстом; не задана — из цены и валюты товара; null — цены нет.
badgestring
обязательное, может быть null
Плашка («Хит»). До 30 знаков.
page_urlstring
обязательное, может быть null
Страница товара. Только https:// или путь вашего сайта, начинающийся с «/» (разворачивается по основному домену аккаунта).
buttonsarray<CardButton>
обязательное
До 3 кнопок. Пусто — одна кнопка «Подробнее» на page_url.
ai_enabledboolean
обязательное
Карточка доступна ИИ-продажнику: код, название и цена попадают в его каталог. Нужен код.
sortinteger
обязательное
Порядок в каталоге продажника и выборе оператора (по возрастанию).
activeboolean
обязательное
Товар активен; неактивную карточку нельзя отправить.
created_atstring
обязательное
ISO 8601 UTC.
updated_atstring
обязательное
ISO 8601 UTC.

Примеры

Запрос
curl -X POST 'https://formula-cream.pro/api/public/v1/cards' \
  -H 'Authorization: Bearer '"$API_KEY" \
  -H 'Idempotency-Key: '"$(uuidgen)" \
  -H 'Content-Type: application/json' \
  -d '{
  "code": "string",
  "name": "string",
  "description": "string",
  "image_url": "https://example.com/hooks/sapport",
  "page_url": "https://example.com/hooks/sapport",
  "badge": "string",
  "price_text": "string",
  "buttons": [
    {
      "label": "string",
      "url": "https://example.com/hooks/sapport"
    }
  ],
  "ai_enabled": false,
  "sort": 0,
  "active": false
}'
Ответ 201
{
  "id": "EXAMPLE_ID",
  "code": "string",
  "name": "string",
  "description": "string",
  "image_url": "https://example.com/hooks/sapport",
  "price_text": "string",
  "badge": "string",
  "page_url": "https://example.com/hooks/sapport",
  "buttons": [
    {
      "label": "string",
      "url": "https://example.com/hooks/sapport"
    }
  ],
  "ai_enabled": false,
  "sort": 0,
  "active": false,
  "created_at": "2026-10-11T09:00:00Z",
  "updated_at": "2026-10-11T09:00:00Z"
}
Пример ошибки
{
  "type": "https://formula-cream.pro/developers/errors#scope_missing",
  "title": "Scope is missing",
  "status": 403,
  "code": "scope_missing",
  "detail": "EXAMPLE",
  "request_id": "req_EXAMPLE"
}

Примеры иллюстративны: ключ в них условный (EXAMPLE), значения полей выдуманы.

Возможные ошибки

invalid_api_key wrong_cell integration_inactive tenant_inactive ip_not_allowed feature_not_in_plan rate_limited wallet_suspended service_unavailable internal_error scope_missing bad_request validation_failed payload_too_large idempotency_key_required idempotency_conflict operation_in_progress

GET /cards/{code} Доступно

#Получить карточку

Карточка по коду. Чужая или несуществующая — not_found.

Области
cards:read
Предел частоты
чтение
Идемпотентность
не требуется
Успешный ответ
200 Карточка.

Параметры

ПолеТипОписание
codestring
обязательное
Где: path. Код карточки.

Тело ответа

ПолеТипОписание
idstring
обязательное
Идентификатор товара.
codestring
обязательное
Код карточки, уникален в аккаунте: строчные латинские буквы, цифры, «_» и «-», до 40 знаков. ИИ-продажник ставит в ответ маркер [CARD:код].
namestring
обязательное
Название. До 120 знаков.
descriptionstring
обязательное, может быть null
Описание. До 500 знаков.
image_urlstring
обязательное, может быть null
Картинка: https:// или путь файла, загруженного в хранилище вашего аккаунта.
price_textstring
обязательное, может быть null
Цена текстом; не задана — из цены и валюты товара; null — цены нет.
badgestring
обязательное, может быть null
Плашка («Хит»). До 30 знаков.
page_urlstring
обязательное, может быть null
Страница товара. Только https:// или путь вашего сайта, начинающийся с «/» (разворачивается по основному домену аккаунта).
buttonsarray<CardButton>
обязательное
До 3 кнопок. Пусто — одна кнопка «Подробнее» на page_url.
ai_enabledboolean
обязательное
Карточка доступна ИИ-продажнику: код, название и цена попадают в его каталог. Нужен код.
sortinteger
обязательное
Порядок в каталоге продажника и выборе оператора (по возрастанию).
activeboolean
обязательное
Товар активен; неактивную карточку нельзя отправить.
created_atstring
обязательное
ISO 8601 UTC.
updated_atstring
обязательное
ISO 8601 UTC.

Примеры

Запрос
curl -X GET 'https://formula-cream.pro/api/public/v1/cards/EXAMPLE_ID' \
  -H 'Authorization: Bearer '"$API_KEY"
Ответ 200
{
  "id": "EXAMPLE_ID",
  "code": "string",
  "name": "string",
  "description": "string",
  "image_url": "https://example.com/hooks/sapport",
  "price_text": "string",
  "badge": "string",
  "page_url": "https://example.com/hooks/sapport",
  "buttons": [
    {
      "label": "string",
      "url": "https://example.com/hooks/sapport"
    }
  ],
  "ai_enabled": false,
  "sort": 0,
  "active": false,
  "created_at": "2026-10-11T09:00:00Z",
  "updated_at": "2026-10-11T09:00:00Z"
}
Пример ошибки
{
  "type": "https://formula-cream.pro/developers/errors#scope_missing",
  "title": "Scope is missing",
  "status": 403,
  "code": "scope_missing",
  "detail": "EXAMPLE",
  "request_id": "req_EXAMPLE"
}

Примеры иллюстративны: ключ в них условный (EXAMPLE), значения полей выдуманы.

Возможные ошибки

invalid_api_key wrong_cell integration_inactive tenant_inactive ip_not_allowed feature_not_in_plan rate_limited wallet_suspended service_unavailable internal_error scope_missing not_found

PATCH /cards/{code} Доступно

#Изменить карточку

Меняет переданные поля; передайте хотя бы одно. Уже отправленные сообщения не меняются — в них копия карточки. Адреса — только https:// или путь вашего сайта («/…»): javascript:, data:, http: и чужой путь хранилища отвергаются (validation_failed).

Области
cards:write
Предел частоты
запись
Идемпотентность
не требуется
Успешный ответ
200 Карточка после правки.

Параметры

ПолеТипОписание
codestring
обязательное
Где: path. Код карточки.

Тело запроса Изменяемые поля.

ПолеТипОписание
codestring
необязательное
Код карточки, уникален в аккаунте: строчные латинские буквы, цифры, «_» и «-», до 40 знаков. ИИ-продажник ставит в ответ маркер [CARD:код].
namestring
необязательное
Название. До 120 знаков.
descriptionstring
необязательное, может быть null
Описание. До 500 знаков.
image_urlstring
необязательное, может быть null
Картинка: https:// или путь файла, загруженного в хранилище вашего аккаунта.
page_urlstring
необязательное, может быть null
Страница товара. Только https:// или путь вашего сайта, начинающийся с «/» (разворачивается по основному домену аккаунта).
badgestring
необязательное, может быть null
Плашка («Хит»). До 30 знаков.
price_textstring
необязательное, может быть null
Цена текстом. До 40 знаков.
buttonsarray<CardButton>
необязательное
До 3 кнопок. Пусто — одна кнопка «Подробнее» на page_url.
ai_enabledboolean
необязательное
Карточка доступна ИИ-продажнику: код, название и цена попадают в его каталог. Нужен код.
sortinteger
необязательное
Порядок в каталоге продажника и выборе оператора (по возрастанию).
activeboolean
необязательное
Товар активен; неактивную карточку нельзя отправить.

Тело ответа

ПолеТипОписание
idstring
обязательное
Идентификатор товара.
codestring
обязательное
Код карточки, уникален в аккаунте: строчные латинские буквы, цифры, «_» и «-», до 40 знаков. ИИ-продажник ставит в ответ маркер [CARD:код].
namestring
обязательное
Название. До 120 знаков.
descriptionstring
обязательное, может быть null
Описание. До 500 знаков.
image_urlstring
обязательное, может быть null
Картинка: https:// или путь файла, загруженного в хранилище вашего аккаунта.
price_textstring
обязательное, может быть null
Цена текстом; не задана — из цены и валюты товара; null — цены нет.
badgestring
обязательное, может быть null
Плашка («Хит»). До 30 знаков.
page_urlstring
обязательное, может быть null
Страница товара. Только https:// или путь вашего сайта, начинающийся с «/» (разворачивается по основному домену аккаунта).
buttonsarray<CardButton>
обязательное
До 3 кнопок. Пусто — одна кнопка «Подробнее» на page_url.
ai_enabledboolean
обязательное
Карточка доступна ИИ-продажнику: код, название и цена попадают в его каталог. Нужен код.
sortinteger
обязательное
Порядок в каталоге продажника и выборе оператора (по возрастанию).
activeboolean
обязательное
Товар активен; неактивную карточку нельзя отправить.
created_atstring
обязательное
ISO 8601 UTC.
updated_atstring
обязательное
ISO 8601 UTC.

Примеры

Запрос
curl -X PATCH 'https://formula-cream.pro/api/public/v1/cards/EXAMPLE_ID' \
  -H 'Authorization: Bearer '"$API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
  "code": "string",
  "name": "string",
  "description": "string",
  "image_url": "https://example.com/hooks/sapport",
  "page_url": "https://example.com/hooks/sapport",
  "badge": "string",
  "price_text": "string",
  "buttons": [
    {
      "label": "string",
      "url": "https://example.com/hooks/sapport"
    }
  ],
  "ai_enabled": false,
  "sort": 0,
  "active": false
}'
Ответ 200
{
  "id": "EXAMPLE_ID",
  "code": "string",
  "name": "string",
  "description": "string",
  "image_url": "https://example.com/hooks/sapport",
  "price_text": "string",
  "badge": "string",
  "page_url": "https://example.com/hooks/sapport",
  "buttons": [
    {
      "label": "string",
      "url": "https://example.com/hooks/sapport"
    }
  ],
  "ai_enabled": false,
  "sort": 0,
  "active": false,
  "created_at": "2026-10-11T09:00:00Z",
  "updated_at": "2026-10-11T09:00:00Z"
}
Пример ошибки
{
  "type": "https://formula-cream.pro/developers/errors#scope_missing",
  "title": "Scope is missing",
  "status": 403,
  "code": "scope_missing",
  "detail": "EXAMPLE",
  "request_id": "req_EXAMPLE"
}

Примеры иллюстративны: ключ в них условный (EXAMPLE), значения полей выдуманы.

Возможные ошибки

invalid_api_key wrong_cell integration_inactive tenant_inactive ip_not_allowed feature_not_in_plan rate_limited wallet_suspended service_unavailable internal_error scope_missing not_found bad_request validation_failed payload_too_large

DELETE /cards/{code} Доступно

#Удалить карточку

Снимает карточку с товара (код, картинка, кнопки, доступ продажнику); сам товар остаётся. Повтор — not_found.

Области
cards:write
Предел частоты
запись
Идемпотентность
не требуется
Успешный ответ
204 Карточка снята; тела нет.

Параметры

ПолеТипОписание
codestring
обязательное
Где: path. Код карточки.

Примеры

Запрос
curl -X DELETE 'https://formula-cream.pro/api/public/v1/cards/EXAMPLE_ID' \
  -H 'Authorization: Bearer '"$API_KEY"
Ответ 204
HTTP/1.1 204
Пример ошибки
{
  "type": "https://formula-cream.pro/developers/errors#scope_missing",
  "title": "Scope is missing",
  "status": 403,
  "code": "scope_missing",
  "detail": "EXAMPLE",
  "request_id": "req_EXAMPLE"
}

Примеры иллюстративны: ключ в них условный (EXAMPLE), значения полей выдуманы.

Возможные ошибки

invalid_api_key wrong_cell integration_inactive tenant_inactive ip_not_allowed feature_not_in_plan rate_limited wallet_suspended service_unavailable internal_error scope_missing not_found

POST /conversations/{id}/cards Доступно ПДн

#Отправить карточки в диалог

Сообщение оператора с карточками (копия на момент отправки, адреса развёрнуты). Канал интеграции получает событие message.created; виджет сайта показывает карточки; Telegram, VK и Max — своим форматом; прочие каналы — текстом. Неизвестный или неактивный код — validation_failed на /codes. Диалог другого арендатора, кабинета ученика или личного ящика — not_found. Повтор того же Idempotency-Key — то же сообщение.

Области
conversations:write
Предел частоты
запись
Идемпотентность
обязателен Idempotency-Key
Успешный ответ
201 Сообщение записано.

Параметры

ПолеТипОписание
idstring
обязательное
Где: path. Идентификатор диалога.
Idempotency-Keystring
обязательное
Где: header. Уникальная строка (обычно UUID v4), новая для каждой новой операции. Повтор с тем же ключом и телом даёт тот же результат.

Тело запроса Коды карточек и комментарий.

ПолеТипОписание
codesarray<string>
обязательное
Коды карточек, 1–3.
commentstring
необязательное, может быть null
Текст над карточками, до 1000 знаков.

Тело ответа

ПолеТипОписание
message_idstring
обязательное
Идентификатор сообщения с карточками.
conversation_idstring
обязательное
created_atstring
обязательное
ISO 8601 UTC.
cardsarray<MessageCard>
обязательное
deliverystring
обязательное
Как карточки доходят до клиента: metadata — виджет сайта и канал интеграции (событие message.created); native — Telegram, VK, Max своим форматом; text — строками «название — цена — ссылка».
Значения: metadata native text
statusstring
обязательное
Состояние доставки в канал.
Значения: sent delivered failed

Примеры

Запрос
curl -X POST 'https://formula-cream.pro/api/public/v1/conversations/EXAMPLE_ID/cards' \
  -H 'Authorization: Bearer '"$API_KEY" \
  -H 'Idempotency-Key: '"$(uuidgen)" \
  -H 'Content-Type: application/json' \
  -d '{
  "codes": [
    "string"
  ],
  "comment": "string"
}'
Ответ 201
{
  "message_id": "EXAMPLE_ID",
  "conversation_id": "EXAMPLE_ID",
  "created_at": "2026-10-11T09:00:00Z",
  "cards": [
    {
      "code": "string",
      "name": "string",
      "description": null,
      "image_url": null,
      "price_text": null,
      "badge": null,
      "page_url": null,
      "buttons": [
        null
      ]
    }
  ],
  "delivery": "metadata",
  "status": "sent"
}
Пример ошибки
{
  "type": "https://formula-cream.pro/developers/errors#scope_missing",
  "title": "Scope is missing",
  "status": 403,
  "code": "scope_missing",
  "detail": "EXAMPLE",
  "request_id": "req_EXAMPLE"
}

Примеры иллюстративны: ключ в них условный (EXAMPLE), значения полей выдуманы.

Возможные ошибки

invalid_api_key wrong_cell integration_inactive tenant_inactive ip_not_allowed feature_not_in_plan rate_limited wallet_suspended service_unavailable internal_error scope_missing pii_transfer_not_allowed not_found bad_request validation_failed payload_too_large idempotency_key_required idempotency_conflict operation_in_progress